Built with
doc-gen4 , running Lean4.
Bubbles (
) indicate interactive fragments: hover for details, tap to reveal contents.
Use
Ctrl+β Ctrl+β to navigate,
Ctrl+π±οΈ to focus.
On Mac, use
Cmd instead of
Ctrl .
/-
Copyright (c) 2021 Eric Wieser. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Eric Wieser
! This file was ported from Lean 3 source module group_theory.submonoid.center
! leanprover-community/mathlib commit 6cb77a8eaff0ddd100e87b1591c6d3ad319514ff
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathlib.GroupTheory.Submonoid.Operations
import Mathlib.GroupTheory.Subsemigroup.Center
/-!
# Centers of monoids
## Main definitions
* `Submonoid.center`: the center of a monoid
* `AddSubmonoid.center`: the center of an additive monoid
We provide `Subgroup.center`, `AddSubgroup.center`, `Subsemiring.center`, and `Subring.center` in
other files.
-/
namespace Submonoid
section
variable ( M : Type _ ) [ Monoid M ]
/-- The center of a monoid `M` is the set of elements that commute with everything in `M` -/
@[ to_additive
"The center of a monoid `M` is the set of elements that commute with everything in `M`"]
def center : Submonoid M where
carrier := Set.center : (M : Type ?u.297) β [inst : Mul M ] β Set M Set.center M
one_mem' := Set.one_mem_center M
mul_mem' := Set.mul_mem_center
#align submonoid.center Submonoid.center
#align add_submonoid.center AddSubmonoid.center
@[ to_additive ]
theorem coe_center : β( center M ) = Set.center : (M : Type ?u.585) β [inst : Mul M ] β Set M Set.center M :=
rfl : β {Ξ± : Sort ?u.881} {a : Ξ± }, a = a rfl
#align submonoid.coe_center Submonoid.coe_center
#align add_submonoid.coe_center AddSubmonoid.coe_center
@[ to_additive ( attr := simp ) AddSubmonoid.center_toAddSubsemigroup ]
theorem center_toSubsemigroup : ( center M ). toSubsemigroup = Subsemigroup.center M :=
rfl : β {Ξ± : Sort ?u.1133} {a : Ξ± }, a = a rfl
#align submonoid.center_to_subsemigroup Submonoid.center_toSubsemigroup
variable { M }
@[ to_additive ]
theorem mem_center_iff { z : M } : z β center M β β g , g * z = z * g :=
Iff.rfl
#align submonoid.mem_center_iff Submonoid.mem_center_iff
#align add_submonoid.mem_center_iff AddSubmonoid.mem_center_iff
@[ to_additive ]
instance decidableMemCenter ( a ) [ Decidable <| β b : M , b * a = a * b ] : Decidable ( a β center M ) :=
decidable_of_iff' _ mem_center_iff
#align submonoid.decidable_mem_center Submonoid.decidableMemCenter
#align add_submonoid.decidable_mem_center AddSubmonoid.decidableMemCenter
/-- The center of a monoid is commutative. -/
instance center.commMonoid : CommMonoid : Type ?u.2610 β Type ?u.2610 CommMonoid ( center M ) :=
{ ( center M ). toMonoid with
mul_comm := fun _ b => Subtype.ext : β {Ξ± : Sort ?u.2830} {p : Ξ± β Prop } {a1 a2 : { x // p x } }, βa1 = βa2 β a1 = a2 Subtype.ext <| b . prop _ }
/-- The center of a monoid acts commutatively on that monoid. -/
instance center.smulCommClass_left : SMulCommClass : (M : Type ?u.2979) β (N : Type ?u.2978) β (Ξ± : Type ?u.2977) β [inst : SMul M Ξ± ] β [inst : SMul N Ξ± ] β Prop SMulCommClass ( center M ) M M
where smul_comm m x y := ( Commute.left_comm : β {S : Type ?u.3989} [inst : Semigroup S ] {a b : S }, Commute a b β β (c : S ), a * (b * c ) = b * (a * c ) Commute.left_comm ( m . prop x ) y ). symm : β {Ξ± : Sort ?u.4117} {a b : Ξ± }, a = b β b = a symm
#align submonoid.center.smul_comm_class_left Submonoid.center.smulCommClass_left
/-- The center of a monoid acts commutatively on that monoid. -/
instance center.smulCommClass_right : SMulCommClass : (M : Type ?u.4168) β (N : Type ?u.4167) β (Ξ± : Type ?u.4166) β [inst : SMul M Ξ± ] β [inst : SMul N Ξ± ] β Prop SMulCommClass M ( center M ) M :=
SMulCommClass.symm _ _ _
#align submonoid.center.smul_comm_class_right Submonoid.center.smulCommClass_right
/-! Note that `smulCommClass (center M) (center M) M` is already implied by
`Submonoid.smulCommClass_right` -/
example : SMulCommClass : (M : Type ?u.5331) β (N : Type ?u.5330) β (Ξ± : Type ?u.5329) β [inst : SMul M Ξ± ] β [inst : SMul N Ξ± ] β Prop SMulCommClass ( center M ) ( center M ) M := by infer_instance
end
section
variable ( M : Type _ ) [ CommMonoid : Type ?u.6165 β Type ?u.6165 CommMonoid M ]
@[ simp ]
theorem center_eq_top : center M = β€ :=
SetLike.coe_injective ( Set.center_eq_univ M )
#align submonoid.center_eq_top Submonoid.center_eq_top
end
end Submonoid
-- Guard against import creep
assert_not_exists Finset