# 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 definitions #

• MonoidHom.noncommPiCoprod : (Π i, N i) →* M is the main homomorphism
• Subgroup.noncommPiCoprod : (Π i, H i) →* G is the specialization to H i : Subgroup G and the subgroup embedding.

## Main theorems #

• MonoidHom.noncommPiCoprod coincides with ϕ i when restricted to N i
• MonoidHom.noncommPiCoprod_mrange: The range of MonoidHom.noncommPiCoprod is ⨆ (i : ι), (ϕ i).mrange
• MonoidHom.noncommPiCoprod_range: The range of MonoidHom.noncommPiCoprod is ⨆ (i : ι), (ϕ i).range
• Subgroup.noncommPiCoprod_range: The range of Subgroup.noncommPiCoprod is ⨆ (i : ι), H i.
• MonoidHom.injective_noncommPiCoprod_of_independent: in the case of groups, pi_hom.hom is injective if the ϕ are injective and the ranges of the ϕ are independent.
• MonoidHom.independent_range_of_coprime_order: If the N i have coprime orders, then the ranges of the ϕ are independent.
• Subgroup.independent_of_coprime_order: If commuting normal subgroups H i have coprime orders, they are independent.
theorem AddSubgroup.eq_zero_of_noncommSum_eq_zero_of_independent {G : Type u_1} [] {ι : Type u_2} (s : ) (f : ιG) (comm : (s).Pairwise fun (a b : ι) => AddCommute (f a) (f b)) (K : ι) (hind : ) (hmem : xs, f x K x) (heq1 : s.noncommSum 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 : (s).Pairwise fun (a b : ι) => Commute (f a) (f b)) (K : ι) (hind : ) (hmem : xs, f x K x) (heq1 : s.noncommProd 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.univ.noncommSum (fun (i : ι) => (ϕ i) (0 i)) = 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) :
{ toFun := fun (f : (i : ι) → N i) => Finset.univ.noncommSum (fun (i : ι) => (ϕ i) (f i)) , map_zero' := }.toFun (f + g) = { toFun := fun (f : (i : ι) → N i) => Finset.univ.noncommSum (fun (i : ι) => (ϕ i) (f i)) , map_zero' := }.toFun f + { toFun := fun (f : (i : ι) → N i) => Finset.univ.noncommSum (fun (i : ι) => (ϕ i) (f i)) , map_zero' := }.toFun 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.univjFinset.univ, i 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.

Equations
• = { toFun := fun (f : (i : ι) → N i) => Finset.univ.noncommSum (fun (i : ι) => (ϕ i) (f i)) , map_zero' := , map_add' := }
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.

Equations
• = { toFun := fun (f : (i : ι) → N i) => Finset.univ.noncommProd (fun (i : ι) => (ϕ i) (f i)) , map_one' := , map_mul' := }
Instances For
@[simp]
theorem AddMonoidHom.noncommPiCoprod_single {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 : ι) (y : N i) :
() () = (ϕ i) y
@[simp]
theorem MonoidHom.noncommPiCoprod_mulSingle {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 : ι) (y : N i) :
() () = (ϕ i) y
theorem AddMonoidHom.noncommPiCoprodEquiv.proof_3 {M : Type u_1} [] {ι : Type u_2} [] [] {N : ιType u_3} [(i : ι) → AddMonoid (N i)] (ϕ : { ϕ : (i : ι) → N i →+ M // Pairwise fun (i j : ι) => ∀ (x : N i) (y : N j), AddCommute ((ϕ i) x) ((ϕ j) y) }) :
(fun (f : ((i : ι) → N i) →+ M) => fun (i : ι) => f.comp (), ) ((fun (ϕ : { ϕ : (i : ι) → N i →+ M // Pairwise fun (i j : ι) => ∀ (x : N i) (y : N j), AddCommute ((ϕ i) x) ((ϕ j) y) }) => ) ϕ) = ϕ
def AddMonoidHom.noncommPiCoprodEquiv {M : Type u_1} [] {ι : Type u_2} [] [] {N : ιType u_3} [(i : ι) → AddMonoid (N i)] :
{ ϕ : (i : ι) → N i →+ M // Pairwise fun (i j : ι) => ∀ (x : N i) (y : N j), AddCommute ((ϕ i) x) ((ϕ j) y) } (((i : ι) → N i) →+ M)

The universal property of AddMonoidHom.noncommPiCoprod

Equations
• One or more equations did not get rendered due to their size.
Instances For
theorem AddMonoidHom.noncommPiCoprodEquiv.proof_1 {M : Type u_2} [] {ι : Type u_1} {N : ιType u_3} [(i : ι) → AddMonoid (N i)] (ϕ : { ϕ : (i : ι) → N i →+ M // 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_4 {M : Type u_1} [] {ι : Type u_2} [] [] {N : ιType u_3} [(i : ι) → AddMonoid (N i)] (f : ((i : ι) → N i) →+ M) :
(fun (ϕ : { ϕ : (i : ι) → N i →+ M // Pairwise fun (i j : ι) => ∀ (x : N i) (y : N j), AddCommute ((ϕ i) x) ((ϕ j) y) }) => ) ((fun (f : ((i : ι) → N i) →+ M) => fun (i : ι) => f.comp (), ) f) = f
theorem AddMonoidHom.noncommPiCoprodEquiv.proof_2 {M : Type u_2} [] {ι : Type u_1} [] {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} [] [] {N : ιType u_3} [(i : ι) → Monoid (N i)] :
{ ϕ : (i : ι) → N i →* M // 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

Equations
• One or more equations did not get rendered due to their size.
Instances For
theorem AddMonoidHom.noncommPiCoprod_mrange {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 : ι), AddMonoidHom.mrange (ϕ i)
theorem MonoidHom.noncommPiCoprod_mrange {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 : ι), MonoidHom.mrange (ϕ i)
theorem AddMonoidHom.noncommPiCoprod_range {G : Type u_1} [] {ι : Type u_2} [hfin : ] {H : ιType u_3} [(i : ι) → AddGroup (H i)] (ϕ : (i : ι) → H i →+ G) {hcomm : Pairwise fun (i j : ι) => ∀ (x : H i) (y : H j), AddCommute ((ϕ i) x) ((ϕ j) y)} :
().range = ⨆ (i : ι), (ϕ i).range
theorem MonoidHom.noncommPiCoprod_range {G : Type u_1} [] {ι : Type u_2} [hfin : ] {H : ιType u_3} [(i : ι) → Group (H i)] (ϕ : (i : ι) → H i →* G) {hcomm : Pairwise fun (i j : ι) => ∀ (x : H i) (y : H j), Commute ((ϕ i) x) ((ϕ j) y)} :
().range = ⨆ (i : ι), (ϕ i).range
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 : Pairwise fun (i j : ι) => ∀ (x : H i) (y : H j), AddCommute ((ϕ i) x) ((ϕ j) y)} (hind : CompleteLattice.Independent fun (i : ι) => (ϕ i).range) (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 : Pairwise fun (i j : ι) => ∀ (x : H i) (y : H j), Commute ((ϕ i) x) ((ϕ j) y)} (hind : CompleteLattice.Independent fun (i : ι) => (ϕ i).range) (hinj : ∀ (i : ι), Function.Injective (ϕ i)) :
theorem AddMonoidHom.independent_range_of_coprime_order {G : Type u_1} [] {ι : Type u_2} {H : ιType u_3} [(i : ι) → AddGroup (H i)] (ϕ : (i : ι) → H i →+ G) (hcomm : Pairwise fun (i j : ι) => ∀ (x : H i) (y : H j), AddCommute ((ϕ i) x) ((ϕ j) y)) [] [(i : ι) → Fintype (H i)] (hcoprime : Pairwise fun (i j : ι) => (Fintype.card (H i)).Coprime (Fintype.card (H j))) :
CompleteLattice.Independent fun (i : ι) => (ϕ i).range
theorem MonoidHom.independent_range_of_coprime_order {G : Type u_1} [] {ι : Type u_2} {H : ιType u_3} [(i : ι) → Group (H i)] (ϕ : (i : ι) → H i →* G) (hcomm : Pairwise fun (i j : ι) => ∀ (x : H i) (y : H j), Commute ((ϕ i) x) ((ϕ j) y)) [] [(i : ι) → Fintype (H i)] (hcoprime : Pairwise fun (i j : ι) => (Fintype.card (H i)).Coprime (Fintype.card (H j))) :
CompleteLattice.Independent fun (i : ι) => (ϕ i).range
theorem AddSubgroup.addCommute_subtype_of_addCommute {G : Type u_1} [] {ι : Type u_2} {H : ι} (hcomm : Pairwise fun (i j : ι) => ∀ (x y : G), x H iy H j) (i : ι) (j : ι) (hne : i j) (x : (H i)) (y : (H j)) :
AddCommute ((H i).subtype x) ((H j).subtype y)
theorem Subgroup.commute_subtype_of_commute {G : Type u_1} [] {ι : Type u_2} {H : ι} (hcomm : Pairwise fun (i j : ι) => ∀ (x y : G), x H iy H jCommute x y) (i : ι) (j : ι) (hne : i j) (x : (H i)) (y : (H j)) :
Commute ((H i).subtype x) ((H j).subtype y)
theorem AddSubgroup.noncommPiCoprod.proof_1 {G : Type u_2} [] {ι : Type u_1} {H : ι} (hcomm : Pairwise fun (i j : ι) => ∀ (x y : G), x H iy H j) (i : ι) (j : ι) (hne : i j) (x : (H i)) (y : (H j)) :
AddCommute ((H i).subtype x) ((H j).subtype y)
def AddSubgroup.noncommPiCoprod {G : Type u_1} [] {ι : Type u_2} [hfin : ] {H : ι} (hcomm : Pairwise fun (i j : ι) => ∀ (x y : G), x H iy H j) :
((i : ι) → (H i)) →+ G

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

Equations
Instances For
def Subgroup.noncommPiCoprod {G : Type u_1} [] {ι : Type u_2} [hfin : ] {H : ι} (hcomm : Pairwise fun (i j : ι) => ∀ (x y : G), x H iy H jCommute x y) :
((i : ι) → (H i)) →* G

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

Equations
Instances For
@[simp]
theorem AddSubgroup.noncommPiCoprod_single {G : Type u_1} [] {ι : Type u_2} [hdec : ] [hfin : ] {H : ι} {hcomm : Pairwise fun (i j : ι) => ∀ (x y : G), x H iy H j} (i : ι) (y : (H i)) :
() () = y
@[simp]
theorem Subgroup.noncommPiCoprod_mulSingle {G : Type u_1} [] {ι : Type u_2} [hdec : ] [hfin : ] {H : ι} {hcomm : Pairwise fun (i j : ι) => ∀ (x y : G), x H iy H jCommute x y} (i : ι) (y : (H i)) :
() () = y
theorem AddSubgroup.noncommPiCoprod_range {G : Type u_1} [] {ι : Type u_2} [hfin : ] {H : ι} {hcomm : Pairwise fun (i j : ι) => ∀ (x y : G), x H iy H j} :
().range = ⨆ (i : ι), H i
theorem Subgroup.noncommPiCoprod_range {G : Type u_1} [] {ι : Type u_2} [hfin : ] {H : ι} {hcomm : Pairwise fun (i j : ι) => ∀ (x y : G), x H iy H jCommute x y} :
().range = ⨆ (i : ι), H i
theorem AddSubgroup.injective_noncommPiCoprod_of_independent {G : Type u_1} [] {ι : Type u_2} [hfin : ] {H : ι} {hcomm : Pairwise fun (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 : Pairwise fun (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} {H : ι} (hcomm : Pairwise fun (i j : ι) => ∀ (x y : G), x H iy H j) [] [(i : ι) → Fintype (H i)] (hcoprime : Pairwise fun (i j : ι) => (Fintype.card (H i)).Coprime (Fintype.card (H j))) :
theorem Subgroup.independent_of_coprime_order {G : Type u_1} [] {ι : Type u_2} {H : ι} (hcomm : Pairwise fun (i j : ι) => ∀ (x y : G), x H iy H jCommute x y) [] [(i : ι) → Fintype (H i)] (hcoprime : Pairwise fun (i j : ι) => (Fintype.card (H i)).Coprime (Fintype.card (H j))) :