# Documentation

Mathlib.GroupTheory.NoncommPiCoprod

# Canonical homomorphism from a finite family of monoids #

This file defines the construction of the canonical homomorphism from a family of monoids.

Given a family of morphisms ϕ i : N i →* M for each i : ι where elements in the images of different morphisms commute, we obtain a canonical morphism MonoidHom.noncommPiCoprod : (Π i, N i) →* M that coincides with ϕ

## Main theorems #

theorem AddSubgroup.eq_zero_of_noncommSum_eq_zero_of_independent {G : Type u_1} [] {ι : Type u_2} (s : ) (f : ιG) (comm : Set.Pairwise s fun a b => AddCommute (f a) (f b)) (K : ι) (hind : ) (hmem : ∀ (x : ι), x sf x K x) (heq1 : Finset.noncommSum s f comm = 0) (i : ι) :
i sf i = 0

Finset.noncommSum is “injective” in f if f maps into independent subgroups. This generalizes (one direction of) AddSubgroup.disjoint_iff_add_eq_zero.

theorem Subgroup.eq_one_of_noncommProd_eq_one_of_independent {G : Type u_1} [] {ι : Type u_2} (s : ) (f : ιG) (comm : Set.Pairwise s fun a b => Commute (f a) (f b)) (K : ι) (hind : ) (hmem : ∀ (x : ι), x sf x K x) (heq1 : Finset.noncommProd s f comm = 1) (i : ι) :
i sf i = 1

Finset.noncommProd is “injective” in f if f maps into independent subgroups. This generalizes (one direction of) Subgroup.disjoint_iff_mul_eq_one.

theorem AddMonoidHom.noncommPiCoprod.proof_2 {M : Type u_1} [] {ι : Type u_2} [] {N : ιType u_3} [(i : ι) → AddMonoid (N i)] (ϕ : (i : ι) → N i →+ M) (hcomm : Pairwise fun i j => ∀ (x : N i) (y : N j), AddCommute (↑(ϕ i) x) (↑(ϕ j) y)) :
(Finset.noncommSum Finset.univ (fun i => ↑(ϕ i) (OfNat.ofNat ((i : ι) → N i) 0 Zero.toOfNat0 i)) fun i x j x h => hcomm i j h (OfNat.ofNat ((i : ι) → N i) 0 Zero.toOfNat0 i) (OfNat.ofNat ((i : ι) → N i) 0 Zero.toOfNat0 j)) = 0
theorem AddMonoidHom.noncommPiCoprod.proof_3 {M : Type u_1} [] {ι : Type u_2} [] {N : ιType u_3} [(i : ι) → AddMonoid (N i)] (ϕ : (i : ι) → N i →+ M) (hcomm : Pairwise fun i j => ∀ (x : N i) (y : N j), AddCommute (↑(ϕ i) x) (↑(ϕ j) y)) (f : (i : ι) → N i) (g : (i : ι) → N i) :
ZeroHom.toFun { toFun := fun f => Finset.noncommSum Finset.univ (fun i => ↑(ϕ i) (f i)) fun i x j x h => hcomm i j h (f i) (f j), map_zero' := (_ : (Finset.noncommSum Finset.univ (fun i => ↑(ϕ i) (OfNat.ofNat ((i : ι) → N i) 0 Zero.toOfNat0 i)) fun i x j x h => hcomm i j h (OfNat.ofNat ((i : ι) → N i) 0 Zero.toOfNat0 i) (OfNat.ofNat ((i : ι) → N i) 0 Zero.toOfNat0 j)) = 0) } (f + g) = ZeroHom.toFun { toFun := fun f => Finset.noncommSum Finset.univ (fun i => ↑(ϕ i) (f i)) fun i x j x h => hcomm i j h (f i) (f j), map_zero' := (_ : (Finset.noncommSum Finset.univ (fun i => ↑(ϕ i) (OfNat.ofNat ((i : ι) → N i) 0 Zero.toOfNat0 i)) fun i x j x h => hcomm i j h (OfNat.ofNat ((i : ι) → N i) 0 Zero.toOfNat0 i) (OfNat.ofNat ((i : ι) → N i) 0 Zero.toOfNat0 j)) = 0) } f + ZeroHom.toFun { toFun := fun f => Finset.noncommSum Finset.univ (fun i => ↑(ϕ i) (f i)) fun i x j x h => hcomm i j h (f i) (f j), map_zero' := (_ : (Finset.noncommSum Finset.univ (fun i => ↑(ϕ i) (OfNat.ofNat ((i : ι) → N i) 0 Zero.toOfNat0 i)) fun i x j x h => hcomm i j h (OfNat.ofNat ((i : ι) → N i) 0 Zero.toOfNat0 i) (OfNat.ofNat ((i : ι) → N i) 0 Zero.toOfNat0 j)) = 0) } g
theorem AddMonoidHom.noncommPiCoprod.proof_1 {M : Type u_2} [] {ι : Type u_1} [] {N : ιType u_3} [(i : ι) → AddMonoid (N i)] (ϕ : (i : ι) → N i →+ M) (hcomm : Pairwise fun i j => ∀ (x : N i) (y : N j), AddCommute (↑(ϕ i) x) (↑(ϕ j) y)) (f : (i : ι) → N i) (i : ι) :
i Finset.univ∀ (j : ι), j Finset.univi jAddCommute (↑(ϕ i) (f i)) (↑(ϕ j) (f j))
def AddMonoidHom.noncommPiCoprod {M : Type u_1} [] {ι : Type u_2} [] {N : ιType u_3} [(i : ι) → AddMonoid (N i)] (ϕ : (i : ι) → N i →+ M) (hcomm : Pairwise fun i j => ∀ (x : N i) (y : N j), AddCommute (↑(ϕ i) x) (↑(ϕ j) y)) :
((i : ι) → N i) →+ M

The canonical homomorphism from a family of additive monoids. See also LinearMap.lsum for a linear version without the commutativity assumption.

Instances For
def MonoidHom.noncommPiCoprod {M : Type u_1} [] {ι : Type u_2} [] {N : ιType u_3} [(i : ι) → Monoid (N i)] (ϕ : (i : ι) → N i →* M) (hcomm : Pairwise fun i j => ∀ (x : N i) (y : N j), Commute (↑(ϕ i) x) (↑(ϕ j) y)) :
((i : ι) → N i) →* M

The canonical homomorphism from a family of monoids.

Instances For
@[simp]
theorem AddMonoidHom.noncommPiCoprod_single {M : Type u_1} [] {ι : Type u_2} [hdec : ] [] {N : ιType u_3} [(i : ι) → AddMonoid (N i)] (ϕ : (i : ι) → N i →+ M) {hcomm : Pairwise fun i j => ∀ (x : N i) (y : N j), AddCommute (↑(ϕ i) x) (↑(ϕ j) y)} (i : ι) (y : N i) :
↑() () = ↑(ϕ i) y
@[simp]
theorem MonoidHom.noncommPiCoprod_mulSingle {M : Type u_1} [] {ι : Type u_2} [hdec : ] [] {N : ιType u_3} [(i : ι) → Monoid (N i)] (ϕ : (i : ι) → N i →* M) {hcomm : Pairwise fun i j => ∀ (x : N i) (y : N j), Commute (↑(ϕ i) x) (↑(ϕ j) y)} (i : ι) (y : N i) :
↑() () = ↑(ϕ i) y
def AddMonoidHom.noncommPiCoprodEquiv {M : Type u_1} [] {ι : Type u_2} [hdec : ] [] {N : ιType u_3} [(i : ι) → AddMonoid (N i)] :
{ ϕ // Pairwise fun i j => ∀ (x : N i) (y : N j), AddCommute (↑(ϕ i) x) (↑(ϕ j) y) } (((i : ι) → N i) →+ M)

Instances For
theorem AddMonoidHom.noncommPiCoprodEquiv.proof_4 {M : Type u_1} [] {ι : Type u_2} [hdec : ] [] {N : ιType u_3} [(i : ι) → AddMonoid (N i)] (f : ((i : ι) → N i) →+ M) :
(fun ϕ => AddMonoidHom.noncommPiCoprod ϕ (_ : Pairwise fun i j => ∀ (x : N i) (y : N j), AddCommute (↑(ϕ i) x) (↑(ϕ j) y))) ((fun f => { val := fun i => , property := (_ : ∀ (i j : ι), i j∀ (x : N i) (y : N j), AddCommute (f ()) (f ())) }) f) = f
theorem AddMonoidHom.noncommPiCoprodEquiv.proof_3 {M : Type u_1} [] {ι : Type u_2} [hdec : ] [] {N : ιType u_3} [(i : ι) → AddMonoid (N i)] (ϕ : { ϕ // Pairwise fun i j => ∀ (x : N i) (y : N j), AddCommute (↑(ϕ i) x) (↑(ϕ j) y) }) :
(fun f => { val := fun i => , property := (_ : ∀ (i j : ι), i j∀ (x : N i) (y : N j), AddCommute (f ()) (f ())) }) ((fun ϕ => AddMonoidHom.noncommPiCoprod ϕ (_ : Pairwise fun i j => ∀ (x : N i) (y : N j), AddCommute (↑(ϕ i) x) (↑(ϕ j) y))) ϕ) = ϕ
theorem AddMonoidHom.noncommPiCoprodEquiv.proof_1 {M : Type u_2} [] {ι : Type u_1} {N : ιType u_3} [(i : ι) → AddMonoid (N i)] (ϕ : { ϕ // Pairwise fun i j => ∀ (x : N i) (y : N j), AddCommute (↑(ϕ i) x) (↑(ϕ j) y) }) :
Pairwise fun i j => ∀ (x : N i) (y : N j), AddCommute (↑(ϕ i) x) (↑(ϕ j) y)
theorem AddMonoidHom.noncommPiCoprodEquiv.proof_2 {M : Type u_2} [] {ι : Type u_1} [hdec : ] {N : ιType u_3} [(i : ι) → AddMonoid (N i)] (f : ((i : ι) → N i) →+ M) (i : ι) (j : ι) (hij : i j) (x : N i) (y : N j) :
def MonoidHom.noncommPiCoprodEquiv {M : Type u_1} [] {ι : Type u_2} [hdec : ] [] {N : ιType u_3} [(i : ι) → Monoid (N i)] :
{ ϕ // Pairwise fun i j => ∀ (x : N i) (y : N j), Commute (↑(ϕ i) x) (↑(ϕ j) y) } (((i : ι) → N i) →* M)

The universal property of MonoidHom.noncommPiCoprod

Instances For
theorem AddMonoidHom.noncommPiCoprod_mrange {M : Type u_1} [] {ι : Type u_2} [hdec : ] [] {N : ιType u_3} [(i : ι) → AddMonoid (N i)] (ϕ : (i : ι) → N i →+ M) {hcomm : Pairwise fun i j => ∀ (x : N i) (y : N j), AddCommute (↑(ϕ i) x) (↑(ϕ j) y)} :
= ⨆ (i : ι), AddMonoidHom.mrange (ϕ i)
theorem MonoidHom.noncommPiCoprod_mrange {M : Type u_1} [] {ι : Type u_2} [hdec : ] [] {N : ιType u_3} [(i : ι) → Monoid (N i)] (ϕ : (i : ι) → N i →* M) {hcomm : Pairwise fun i j => ∀ (x : N i) (y : N j), Commute (↑(ϕ i) x) (↑(ϕ j) y)} :
= ⨆ (i : ι), MonoidHom.mrange (ϕ i)
theorem AddMonoidHom.noncommPiCoprod_range {G : Type u_1} [] {ι : Type u_2} [hdec : ] [hfin : ] {H : ιType u_3} [(i : ι) → AddGroup (H i)] (ϕ : (i : ι) → H i →+ G) {hcomm : ∀ (i j : ι), i j∀ (x : H i) (y : H j), AddCommute (↑(ϕ i) x) (↑(ϕ j) y)} :
= ⨆ (i : ι), AddMonoidHom.range (ϕ i)
theorem MonoidHom.noncommPiCoprod_range {G : Type u_1} [] {ι : Type u_2} [hdec : ] [hfin : ] {H : ιType u_3} [(i : ι) → Group (H i)] (ϕ : (i : ι) → H i →* G) {hcomm : ∀ (i j : ι), i j∀ (x : H i) (y : H j), Commute (↑(ϕ i) x) (↑(ϕ j) y)} :
MonoidHom.range () = ⨆ (i : ι), MonoidHom.range (ϕ i)
theorem AddMonoidHom.injective_noncommPiCoprod_of_independent {G : Type u_1} [] {ι : Type u_2} [hfin : ] {H : ιType u_3} [(i : ι) → AddGroup (H i)] (ϕ : (i : ι) → H i →+ G) {hcomm : ∀ (i j : ι), i j∀ (x : H i) (y : H j), AddCommute (↑(ϕ i) x) (↑(ϕ j) y)} (hind : CompleteLattice.Independent fun i => AddMonoidHom.range (ϕ i)) (hinj : ∀ (i : ι), Function.Injective ↑(ϕ i)) :
theorem MonoidHom.injective_noncommPiCoprod_of_independent {G : Type u_1} [] {ι : Type u_2} [hfin : ] {H : ιType u_3} [(i : ι) → Group (H i)] (ϕ : (i : ι) → H i →* G) {hcomm : ∀ (i j : ι), i j∀ (x : H i) (y : H j), Commute (↑(ϕ i) x) (↑(ϕ j) y)} (hind : CompleteLattice.Independent fun i => MonoidHom.range (ϕ i)) (hinj : ∀ (i : ι), Function.Injective ↑(ϕ i)) :
theorem AddMonoidHom.independent_range_of_coprime_order {G : Type u_1} [] {ι : Type u_2} [hdec : ] {H : ιType u_3} [(i : ι) → AddGroup (H i)] (ϕ : (i : ι) → H i →+ G) (hcomm : ∀ (i j : ι), i j∀ (x : H i) (y : H j), AddCommute (↑(ϕ i) x) (↑(ϕ j) y)) [] [(i : ι) → Fintype (H i)] (hcoprime : ∀ (i j : ι), i jNat.Coprime (Fintype.card (H i)) (Fintype.card (H j))) :
theorem MonoidHom.independent_range_of_coprime_order {G : Type u_1} [] {ι : Type u_2} [hdec : ] {H : ιType u_3} [(i : ι) → Group (H i)] (ϕ : (i : ι) → H i →* G) (hcomm : ∀ (i j : ι), i j∀ (x : H i) (y : H j), Commute (↑(ϕ i) x) (↑(ϕ j) y)) [] [(i : ι) → Fintype (H i)] (hcoprime : ∀ (i j : ι), i jNat.Coprime (Fintype.card (H i)) (Fintype.card (H j))) :
theorem AddSubgroup.commute_subtype_of_commute {G : Type u_1} [] {ι : Type u_2} {H : ι} (hcomm : ∀ (i j : ι), i j∀ (x y : G), x H iy H j) (i : ι) (j : ι) (hne : i j) (x : { x // x H i }) (y : { x // x H j }) :
theorem Subgroup.commute_subtype_of_commute {G : Type u_1} [] {ι : Type u_2} {H : ι} (hcomm : ∀ (i j : ι), i j∀ (x y : G), x H iy H jCommute x y) (i : ι) (j : ι) (hne : i j) (x : { x // x H i }) (y : { x // x H j }) :
Commute (↑(Subgroup.subtype (H i)) x) (↑(Subgroup.subtype (H j)) y)
def AddSubgroup.noncommPiCoprod {G : Type u_1} [] {ι : Type u_2} [hfin : ] {H : ι} (hcomm : ∀ (i j : ι), i j∀ (x y : G), x H iy H j) :
((i : ι) → { x // x H i }) →+ G

The canonical homomorphism from a family of additive subgroups where elements from different subgroups commute

Instances For
theorem AddSubgroup.noncommPiCoprod.proof_1 {G : Type u_2} [] {ι : Type u_1} {H : ι} (hcomm : ∀ (i j : ι), i j∀ (x y : G), x H iy H j) (i : ι) (j : ι) (hne : i j) (x : { x // x H i }) (y : { x // x H j }) :
def Subgroup.noncommPiCoprod {G : Type u_1} [] {ι : Type u_2} [hfin : ] {H : ι} (hcomm : ∀ (i j : ι), i j∀ (x y : G), x H iy H jCommute x y) :
((i : ι) → { x // x H i }) →* G

The canonical homomorphism from a family of subgroups where elements from different subgroups commute

Instances For
@[simp]
theorem AddSubgroup.noncommPiCoprod_single {G : Type u_1} [] {ι : Type u_2} [hdec : ] [hfin : ] {H : ι} {hcomm : ∀ (i j : ι), i j∀ (x y : G), x H iy H j} (i : ι) (y : { x // x H i }) :
↑() () = y
@[simp]
theorem Subgroup.noncommPiCoprod_mulSingle {G : Type u_1} [] {ι : Type u_2} [hdec : ] [hfin : ] {H : ι} {hcomm : ∀ (i j : ι), i j∀ (x y : G), x H iy H jCommute x y} (i : ι) (y : { x // x H i }) :
↑() () = y
theorem AddSubgroup.noncommPiCoprod_range {G : Type u_1} [] {ι : Type u_2} [hdec : ] [hfin : ] {H : ι} {hcomm : ∀ (i j : ι), i j∀ (x y : G), x H iy H j} :
= ⨆ (i : ι), H i
theorem Subgroup.noncommPiCoprod_range {G : Type u_1} [] {ι : Type u_2} [hdec : ] [hfin : ] {H : ι} {hcomm : ∀ (i j : ι), i j∀ (x y : G), x H iy H jCommute x y} :
= ⨆ (i : ι), H i
theorem AddSubgroup.injective_noncommPiCoprod_of_independent {G : Type u_1} [] {ι : Type u_2} [hfin : ] {H : ι} {hcomm : ∀ (i j : ι), i j∀ (x y : G), x H iy H j} (hind : ) :
theorem Subgroup.injective_noncommPiCoprod_of_independent {G : Type u_1} [] {ι : Type u_2} [hfin : ] {H : ι} {hcomm : ∀ (i j : ι), i j∀ (x y : G), x H iy H jCommute x y} (hind : ) :
theorem AddSubgroup.independent_of_coprime_order {G : Type u_1} [] {ι : Type u_2} [hdec : ] {H : ι} (hcomm : ∀ (i j : ι), i j∀ (x y : G), x H iy H j) [] [(i : ι) → Fintype { x // x H i }] (hcoprime : ∀ (i j : ι), i jNat.Coprime (Fintype.card { x // x H i }) (Fintype.card { x // x H j })) :
theorem Subgroup.independent_of_coprime_order {G : Type u_1} [] {ι : Type u_2} [hdec : ] {H : ι} (hcomm : ∀ (i j : ι), i j∀ (x y : G), x H iy H jCommute x y) [] [(i : ι) → Fintype { x // x H i }] (hcoprime : ∀ (i j : ι), i jNat.Coprime (Fintype.card { x // x H i }) (Fintype.card { x // x H j })) :