Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 307711e

Browse files
nomeataVierkantor
andcommitted
feat(group_theory/general_commutator): subgroup.pi commutes with the general_commutator (#11825)
Co-authored-by: Vierkantor <vierkantor@vierkantor.com>
1 parent b54f44f commit 307711e

File tree

2 files changed

+104
-0
lines changed

2 files changed

+104
-0
lines changed

src/group_theory/general_commutator.lean

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,3 +137,32 @@ begin
137137
simp [le_prod_iff, map_map, monoid_hom.fst_comp_inl, monoid_hom.snd_comp_inl,
138138
monoid_hom.fst_comp_inr, monoid_hom.snd_comp_inr ], }, }
139139
end
140+
141+
/-- The commutator of direct product is contained in the direct product of the commutators.
142+
143+
See `general_commutator_pi_pi_of_fintype` for equality given `fintype η`.
144+
-/
145+
lemma general_commutator_pi_pi_le {η : Type*} {Gs : η → Type*} [∀ i, group (Gs i)]
146+
(H K : Π i, subgroup (Gs i)) :
147+
⁅subgroup.pi set.univ H, subgroup.pi set.univ K⁆ ≤ subgroup.pi set.univ (λ i, ⁅H i, K i⁆) :=
148+
(general_commutator_le _ _ _).mpr $
149+
λ p hp q hq i hi, general_commutator_containment _ _ (hp i hi) (hq i hi)
150+
151+
/-- The commutator of a finite direct product is contained in the direct product of the commutators.
152+
-/
153+
lemma general_commutator_pi_pi_of_fintype {η : Type*} [fintype η] {Gs : η → Type*}
154+
[∀ i, group (Gs i)] (H K : Π i, subgroup (Gs i)) :
155+
⁅subgroup.pi set.univ H, subgroup.pi set.univ K⁆ = subgroup.pi set.univ (λ i, ⁅H i, K i⁆) :=
156+
begin
157+
classical,
158+
apply le_antisymm (general_commutator_pi_pi_le H K),
159+
{ rw pi_le_iff, intros i hi,
160+
rw map_general_commutator,
161+
apply general_commutator_mono;
162+
{ rw le_pi_iff,
163+
intros j hj,
164+
rintros _ ⟨_, ⟨x, hx, rfl⟩, rfl⟩,
165+
by_cases h : j = i,
166+
{ subst h, simpa using hx, },
167+
{ simp [h, one_mem] }, }, },
168+
end

src/group_theory/subgroup/basic.lean

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1154,6 +1154,81 @@ ext $ λ x, by simp [mem_pi]
11541154
(eq_bot_iff_forall _).mpr $ λ p hp,
11551155
by { simp only [mem_pi, mem_bot] at *, ext j, exact hp j trivial, }
11561156

1157+
@[to_additive]
1158+
lemma le_pi_iff {I : set η} {H : Π i, subgroup (f i)} {J : subgroup (Π i, f i)} :
1159+
J ≤ pi I H ↔ (∀ i : η , i ∈ I → map (pi.eval_monoid_hom f i) J ≤ H i) :=
1160+
begin
1161+
split,
1162+
{ intros h i hi, rintros _ ⟨x, hx, rfl⟩, exact (h hx) _ hi, },
1163+
{ intros h x hx i hi, refine h i hi ⟨_, hx, rfl⟩, }
1164+
end
1165+
1166+
@[simp]
1167+
lemma single_mem_pi [decidable_eq η] {I : set η} {H : Π i, subgroup (f i)}
1168+
(i : η) (x : f i) :
1169+
monoid_hom.single f i x ∈ pi I H ↔ (i ∈ I → x ∈ H i) :=
1170+
begin
1171+
split,
1172+
{ intros h hi, simpa using h i hi, },
1173+
{ intros h j hj,
1174+
by_cases heq : j = i,
1175+
{ subst heq, simpa using h hj, },
1176+
{ simp [heq, one_mem], }, }
1177+
end
1178+
1179+
lemma pi_mem_of_single_mem_aux [decidable_eq η] (I : finset η) {H : subgroup (Π i, f i) }
1180+
(x : Π i, f i) (h1 : ∀ i, i ∉ I → x i = 1) (h2 : ∀ i, i ∈ I → pi.mul_single i (x i) ∈ H ) :
1181+
x ∈ H :=
1182+
begin
1183+
induction I using finset.induction_on with i I hnmem ih generalizing x,
1184+
{ have : x = 1,
1185+
{ ext i, refine (h1 i (not_mem_empty i)), },
1186+
simp [this, one_mem], },
1187+
{ have : x = function.update x i 1 * pi.mul_single i (x i),
1188+
{ ext j,
1189+
by_cases heq : j = i,
1190+
{ subst heq, simp, },
1191+
{ simp [heq], }, },
1192+
rw this, clear this,
1193+
apply mul_mem,
1194+
{ apply ih; clear ih,
1195+
{ intros j hj,
1196+
by_cases heq : j = i,
1197+
{ subst heq, simp, },
1198+
{ simp [heq], apply h1 j, simpa [heq] using hj, } },
1199+
{ intros j hj,
1200+
have : j ≠ i, by { rintro rfl, contradiction },
1201+
simp [this],
1202+
exact h2 _ (finset.mem_insert_of_mem hj), }, },
1203+
{ apply h2, simp, } }
1204+
end
1205+
1206+
lemma pi_mem_of_single_mem [fintype η] [decidable_eq η] {H : subgroup (Π i, f i) } (x : Π i, f i)
1207+
(h : ∀ i, pi.mul_single i (x i) ∈ H) : x ∈ H :=
1208+
pi_mem_of_single_mem_aux finset.univ x (by simp) (λ i _, h i)
1209+
1210+
/-- For finite index types, the `subgroup.pi` is generated by the embeddings of the groups. -/
1211+
lemma pi_le_iff [decidable_eq η] [fintype η] {H : Π i, subgroup (f i)} {J : subgroup (Π i, f i)} :
1212+
pi univ H ≤ J ↔ (∀ i : η, map (monoid_hom.single f i) (H i) ≤ J) :=
1213+
begin
1214+
split,
1215+
{ rintros h i _ ⟨x, hx, rfl⟩, apply h, simpa using hx },
1216+
{ exact λ h x hx, pi_mem_of_single_mem x (λ i, h i (mem_map_of_mem _ (hx i trivial))), }
1217+
end
1218+
1219+
lemma pi_eq_bot_iff (H : Π i, subgroup (f i)) :
1220+
pi set.univ H = ⊥ ↔ ∀ i, H i = ⊥ :=
1221+
begin
1222+
classical,
1223+
simp only [eq_bot_iff_forall],
1224+
split,
1225+
{ intros h i x hx,
1226+
have : monoid_hom.single f i x = 1 :=
1227+
h (monoid_hom.single f i x) ((single_mem_pi i x).mpr (λ _, hx)),
1228+
simpa using congr_fun this i, },
1229+
{ exact λ h x hx, funext (λ i, h _ _ (hx i trivial)), },
1230+
end
1231+
11571232
end pi
11581233

11591234
/-- A subgroup is normal if whenever `n ∈ H`, then `g * n * g⁻¹ ∈ H` for every `g : G` -/

0 commit comments

Comments
 (0)