group_theory.schur_zassenhaus
⟷
Mathlib.GroupTheory.SchurZassenhaus
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -245,21 +245,21 @@ private theorem step2 (K : Subgroup G) [K.Normal] (hK : K ≤ N) : K = ⊥ ∨ K
· rw [← comap_top (QuotientGroup.mk' K)]
intro hH'
rw [comap_injective this hH', is_complement'_top_right, map_eq_bot_iff,
- QuotientGroup.ker_mk'] at hH
+ QuotientGroup.ker_mk'] at hH
· exact h4.2 (le_antisymm hK hH)
/-- Do not use this lemma: It is made obsolete by `exists_right_complement'_of_coprime` -/
private theorem step3 (K : Subgroup N) [(K.map N.Subtype).Normal] : K = ⊥ ∨ K = ⊤ :=
by
have key := step2 h1 h2 h3 (K.map N.subtype) K.map_subtype_le
- rw [← map_bot N.subtype] at key
+ rw [← map_bot N.subtype] at key
conv at key =>
congr
skip
rhs
rw [← N.subtype_range, N.subtype.range_eq_map]
have inj := map_injective N.subtype_injective
- rwa [inj.eq_iff, inj.eq_iff] at key
+ rwa [inj.eq_iff, inj.eq_iff] at key
/-- Do not use this lemma: It is made obsolete by `exists_right_complement'_of_coprime` -/
private theorem step4 : (Fintype.card N).minFac.Prime :=
@@ -306,7 +306,7 @@ private theorem exists_right_complement'_of_coprime_aux' [Fintype G] (hG : Finty
rintro n ih G _ _ rfl N _ hN
refine' not_forall_not.mp fun h3 => _
haveI := schur_zassenhaus_induction.step7 hN (fun G' _ _ hG' => by apply ih _ hG'; rfl) h3
- rw [← Nat.card_eq_fintype_card] at hN
+ rw [← Nat.card_eq_fintype_card] at hN
exact not_exists_of_forall_not h3 (exists_right_complement'_of_coprime_aux hN)
#print Subgroup.exists_right_complement'_of_coprime_of_fintype /-
@@ -327,11 +327,11 @@ theorem exists_right_complement'_of_coprime {N : Subgroup G} [N.Normal]
(hN : Nat.Coprime (Nat.card N) N.index) : ∃ H : Subgroup G, IsComplement' N H :=
by
by_cases hN1 : Nat.card N = 0
- · rw [hN1, Nat.coprime_zero_left, index_eq_one] at hN
+ · rw [hN1, Nat.coprime_zero_left, index_eq_one] at hN
rw [hN]
exact ⟨⊥, is_complement'_top_bot⟩
by_cases hN2 : N.index = 0
- · rw [hN2, Nat.coprime_zero_right] at hN
+ · rw [hN2, Nat.coprime_zero_right] at hN
haveI := (cardinal.to_nat_eq_one_iff_unique.mp hN).1
rw [N.eq_bot_of_subsingleton]
exact ⟨⊤, is_complement'_bot_top⟩
@@ -341,7 +341,7 @@ theorem exists_right_complement'_of_coprime {N : Subgroup G} [N.Normal]
haveI :=
(cardinal.lt_aleph_0_iff_fintype.mp
(lt_of_not_ge (mt Cardinal.toNat_apply_of_aleph0_le hN3))).some
- rw [Nat.card_eq_fintype_card] at hN
+ rw [Nat.card_eq_fintype_card] at hN
exact exists_right_complement'_of_coprime_of_fintype hN
#align subgroup.exists_right_complement'_of_coprime Subgroup.exists_right_complement'_of_coprime
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,8 +3,8 @@ Copyright (c) 2021 Thomas Browning. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Thomas Browning
-/
-import Mathbin.GroupTheory.Sylow
-import Mathbin.GroupTheory.Transfer
+import GroupTheory.Sylow
+import GroupTheory.Transfer
#align_import group_theory.schur_zassenhaus from "leanprover-community/mathlib"@"6b31d1eebd64eab86d5bd9936bfaada6ca8b5842"
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -109,7 +109,7 @@ theorem smul_diff' (h : H) :
-/
#print Subgroup.eq_one_of_smul_eq_one /-
-theorem eq_one_of_smul_eq_one (hH : Nat.coprime (Nat.card H) H.index) (α : H.QuotientDiff) (h : H) :
+theorem eq_one_of_smul_eq_one (hH : Nat.Coprime (Nat.card H) H.index) (α : H.QuotientDiff) (h : H) :
h • α = α → h = 1 :=
Quotient.inductionOn' α fun α hα =>
(powCoprime hH).Injective <|
@@ -121,7 +121,7 @@ theorem eq_one_of_smul_eq_one (hH : Nat.coprime (Nat.card H) H.index) (α : H.Qu
-/
#print Subgroup.exists_smul_eq /-
-theorem exists_smul_eq (hH : Nat.coprime (Nat.card H) H.index) (α β : H.QuotientDiff) :
+theorem exists_smul_eq (hH : Nat.Coprime (Nat.card H) H.index) (α β : H.QuotientDiff) :
∃ h : H, h • α = β :=
Quotient.inductionOn' α
(Quotient.inductionOn' β fun β α =>
@@ -136,13 +136,13 @@ theorem exists_smul_eq (hH : Nat.coprime (Nat.card H) H.index) (α β : H.Quotie
#print Subgroup.isComplement'_stabilizer_of_coprime /-
theorem isComplement'_stabilizer_of_coprime {α : H.QuotientDiff}
- (hH : Nat.coprime (Nat.card H) H.index) : IsComplement' H (stabilizer G α) :=
+ (hH : Nat.Coprime (Nat.card H) H.index) : IsComplement' H (stabilizer G α) :=
isComplement'_stabilizer α (eq_one_of_smul_eq_one hH α) fun g => exists_smul_eq hH (g • α) α
#align subgroup.is_complement'_stabilizer_of_coprime Subgroup.isComplement'_stabilizer_of_coprime
-/
/-- Do not use this lemma: It is made obsolete by `exists_right_complement'_of_coprime` -/
-private theorem exists_right_complement'_of_coprime_aux (hH : Nat.coprime (Nat.card H) H.index) :
+private theorem exists_right_complement'_of_coprime_aux (hH : Nat.Coprime (Nat.card H) H.index) :
∃ K : Subgroup G, IsComplement' H K :=
instNonempty.elim fun α => ⟨stabilizer G α, isComplement'_stabilizer_of_coprime hH⟩
@@ -162,11 +162,11 @@ The proof is by contradiction. We assume that `G` is a minimal counterexample to
variable {G : Type u} [Group G] [Fintype G] {N : Subgroup G} [Normal N]
- (h1 : Nat.coprime (Fintype.card N) N.index)
+ (h1 : Nat.Coprime (Fintype.card N) N.index)
(h2 :
∀ (G' : Type u) [Group G'] [Fintype G'],
∀ (hG'3 : Fintype.card G' < Fintype.card G) {N' : Subgroup G'} [N'.Normal]
- (hN : Nat.coprime (Fintype.card N') N'.index), ∃ H' : Subgroup G', is_complement' N' H')
+ (hN : Nat.Coprime (Fintype.card N') N'.index), ∃ H' : Subgroup G', is_complement' N' H')
(h3 : ∀ H : Subgroup G, ¬IsComplement' N H)
/-! We will arrive at a contradiction via the following steps:
@@ -199,7 +199,7 @@ private theorem step1 (K : Subgroup G) (hK : K ⊔ N = ⊤) : K = ⊤ :=
by
rw [← K.index_mul_card]
exact lt_mul_of_one_lt_left Fintype.card_pos (one_lt_index_of_ne_top h3)
- have h6 : Nat.coprime (Fintype.card (N.comap K.subtype)) (N.comap K.subtype).index :=
+ have h6 : Nat.Coprime (Fintype.card (N.comap K.subtype)) (N.comap K.subtype).index :=
by
rw [h4]
exact h1.coprime_dvd_left (card_comap_dvd_of_injective N K.subtype Subtype.coe_injective)
@@ -211,7 +211,7 @@ private theorem step1 (K : Subgroup G) (hK : K ⊔ N = ⊤) : K = ⊤ :=
h4
have h7 : Fintype.card N * Fintype.card (H.map K.subtype) = Fintype.card G := by
rw [hH, ← N.index_mul_card, mul_comm]
- have h8 : (Fintype.card N).coprime (Fintype.card (H.map K.subtype)) := by rwa [hH]
+ have h8 : (Fintype.card N).Coprime (Fintype.card (H.map K.subtype)) := by rwa [hH]
exact ⟨H.map K.subtype, is_complement'_of_coprime h7 h8⟩
/-- Do not use this lemma: It is made obsolete by `exists_right_complement'_of_coprime` -/
@@ -227,7 +227,7 @@ private theorem step2 (K : Subgroup G) [K.Normal] (hK : K ≤ N) : K = ⊥ ∨ K
lt_mul_of_one_lt_right (Nat.pos_of_ne_zero index_ne_zero_of_finite)
(K.one_lt_card_iff_ne_bot.mpr h4.1)
have h6 :
- Nat.coprime (Fintype.card (N.map (QuotientGroup.mk' K))) (N.map (QuotientGroup.mk' K)).index :=
+ Nat.Coprime (Fintype.card (N.map (QuotientGroup.mk' K))) (N.map (QuotientGroup.mk' K)).index :=
by
have index_map := N.index_map_eq this (by rwa [QuotientGroup.ker_mk'])
have index_pos : 0 < N.index := Nat.pos_of_ne_zero index_ne_zero_of_finite
@@ -299,7 +299,7 @@ variable {n : ℕ} {G : Type u} [Group G]
/-- Do not use this lemma: It is made obsolete by `exists_right_complement'_of_coprime` -/
private theorem exists_right_complement'_of_coprime_aux' [Fintype G] (hG : Fintype.card G = n)
- {N : Subgroup G} [N.Normal] (hN : Nat.coprime (Fintype.card N) N.index) :
+ {N : Subgroup G} [N.Normal] (hN : Nat.Coprime (Fintype.card N) N.index) :
∃ H : Subgroup G, IsComplement' N H := by
revert G
apply Nat.strong_induction_on n
@@ -314,7 +314,7 @@ private theorem exists_right_complement'_of_coprime_aux' [Fintype G] (hG : Finty
If `H : subgroup G` is normal, and has order coprime to its index, then there exists a
subgroup `K` which is a (right) complement of `H`. -/
theorem exists_right_complement'_of_coprime_of_fintype [Fintype G] {N : Subgroup G} [N.Normal]
- (hN : Nat.coprime (Fintype.card N) N.index) : ∃ H : Subgroup G, IsComplement' N H :=
+ (hN : Nat.Coprime (Fintype.card N) N.index) : ∃ H : Subgroup G, IsComplement' N H :=
exists_right_complement'_of_coprime_aux' rfl hN
#align subgroup.exists_right_complement'_of_coprime_of_fintype Subgroup.exists_right_complement'_of_coprime_of_fintype
-/
@@ -324,7 +324,7 @@ theorem exists_right_complement'_of_coprime_of_fintype [Fintype G] {N : Subgroup
If `H : subgroup G` is normal, and has order coprime to its index, then there exists a
subgroup `K` which is a (right) complement of `H`. -/
theorem exists_right_complement'_of_coprime {N : Subgroup G} [N.Normal]
- (hN : Nat.coprime (Nat.card N) N.index) : ∃ H : Subgroup G, IsComplement' N H :=
+ (hN : Nat.Coprime (Nat.card N) N.index) : ∃ H : Subgroup G, IsComplement' N H :=
by
by_cases hN1 : Nat.card N = 0
· rw [hN1, Nat.coprime_zero_left, index_eq_one] at hN
@@ -351,7 +351,7 @@ theorem exists_right_complement'_of_coprime {N : Subgroup G} [N.Normal]
If `H : subgroup G` is normal, and has order coprime to its index, then there exists a
subgroup `K` which is a (left) complement of `H`. -/
theorem exists_left_complement'_of_coprime_of_fintype [Fintype G] {N : Subgroup G} [N.Normal]
- (hN : Nat.coprime (Fintype.card N) N.index) : ∃ H : Subgroup G, IsComplement' H N :=
+ (hN : Nat.Coprime (Fintype.card N) N.index) : ∃ H : Subgroup G, IsComplement' H N :=
Exists.imp (fun _ => IsComplement'.symm) (exists_right_complement'_of_coprime_of_fintype hN)
#align subgroup.exists_left_complement'_of_coprime_of_fintype Subgroup.exists_left_complement'_of_coprime_of_fintype
-/
@@ -361,7 +361,7 @@ theorem exists_left_complement'_of_coprime_of_fintype [Fintype G] {N : Subgroup
If `H : subgroup G` is normal, and has order coprime to its index, then there exists a
subgroup `K` which is a (left) complement of `H`. -/
theorem exists_left_complement'_of_coprime {N : Subgroup G} [N.Normal]
- (hN : Nat.coprime (Nat.card N) N.index) : ∃ H : Subgroup G, IsComplement' H N :=
+ (hN : Nat.Coprime (Nat.card N) N.index) : ∃ H : Subgroup G, IsComplement' H N :=
Exists.imp (fun _ => IsComplement'.symm) (exists_right_complement'_of_coprime hN)
#align subgroup.exists_left_complement'_of_coprime Subgroup.exists_left_complement'_of_coprime
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -87,7 +87,7 @@ instance : MulAction G H.QuotientDiff
(by
rwa [smul_diff_smul', coe_mk, coe_one, mul_eq_one_iff_eq_inv, mul_right_eq_self, ←
coe_one, ← Subtype.ext_iff])
- mul_smul g₁ g₂ q :=
+ hMul_smul g₁ g₂ q :=
Quotient.inductionOn' q fun T =>
congr_arg Quotient.mk'' (by rw [mul_inv_rev] <;> exact mul_smul (op g₁⁻¹) (op g₂⁻¹) T)
one_smul q :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,15 +2,12 @@
Copyright (c) 2021 Thomas Browning. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Thomas Browning
-
-! This file was ported from Lean 3 source module group_theory.schur_zassenhaus
-! leanprover-community/mathlib commit 6b31d1eebd64eab86d5bd9936bfaada6ca8b5842
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.GroupTheory.Sylow
import Mathbin.GroupTheory.Transfer
+#align_import group_theory.schur_zassenhaus from "leanprover-community/mathlib"@"6b31d1eebd64eab86d5bd9936bfaada6ca8b5842"
+
/-!
# The Schur-Zassenhaus Theorem
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -54,6 +54,7 @@ def QuotientDiff :=
instance : Inhabited H.QuotientDiff :=
Quotient.inhabited _
+#print Subgroup.smul_diff_smul' /-
theorem smul_diff_smul' [hH : Normal H] (g : Gᵐᵒᵖ) :
diff (MonoidHom.id H) (g • α) (g • β) =
⟨g.unop⁻¹ * (diff (MonoidHom.id H) α β : H) * g.unop,
@@ -77,6 +78,7 @@ theorem smul_diff_smul' [hH : Normal H] (g : Gᵐᵒᵖ) :
simp_rw [MonoidHom.id_apply, MonoidHom.coe_mk, coe_mk, smul_apply_eq_smul_apply_inv_smul,
smul_eq_mul_unop, mul_inv_rev, mul_assoc]
#align subgroup.smul_diff_smul' Subgroup.smul_diff_smul'
+-/
variable {H} [Normal H]
@@ -95,6 +97,7 @@ instance : MulAction G H.QuotientDiff
Quotient.inductionOn' q fun T =>
congr_arg Quotient.mk'' (by rw [inv_one] <;> apply one_smul Gᵐᵒᵖ T)
+#print Subgroup.smul_diff' /-
theorem smul_diff' (h : H) :
diff (MonoidHom.id H) α (op (h : G) • β) = diff (MonoidHom.id H) α β * h ^ H.index :=
by
@@ -106,7 +109,9 @@ theorem smul_diff' (h : H) :
Equiv.apply_eq_iff_eq, inv_smul_eq_iff]
exact self_eq_mul_right.mpr ((QuotientGroup.eq_one_iff _).mpr h.2)
#align subgroup.smul_diff' Subgroup.smul_diff'
+-/
+#print Subgroup.eq_one_of_smul_eq_one /-
theorem eq_one_of_smul_eq_one (hH : Nat.coprime (Nat.card H) H.index) (α : H.QuotientDiff) (h : H) :
h • α = α → h = 1 :=
Quotient.inductionOn' α fun α hα =>
@@ -116,7 +121,9 @@ theorem eq_one_of_smul_eq_one (hH : Nat.coprime (Nat.card H) H.index) (α : H.Qu
rw [← diff_inv, smul_diff', diff_self, one_mul, inv_pow, inv_inv]
_ = 1 ^ H.index := (Quotient.exact' hα).trans (one_pow H.index).symm
#align subgroup.eq_one_of_smul_eq_one Subgroup.eq_one_of_smul_eq_one
+-/
+#print Subgroup.exists_smul_eq /-
theorem exists_smul_eq (hH : Nat.coprime (Nat.card H) H.index) (α β : H.QuotientDiff) :
∃ h : H, h • α = β :=
Quotient.inductionOn' α
@@ -128,11 +135,14 @@ theorem exists_smul_eq (hH : Nat.coprime (Nat.card H) H.index) (α β : H.Quotie
((smul_diff' β α ((powCoprime hH).symm (diff (MonoidHom.id H) β α))⁻¹).trans
(by rw [inv_pow, ← powCoprime_apply hH, Equiv.apply_symm_apply, mul_inv_self])))⟩)
#align subgroup.exists_smul_eq Subgroup.exists_smul_eq
+-/
+#print Subgroup.isComplement'_stabilizer_of_coprime /-
theorem isComplement'_stabilizer_of_coprime {α : H.QuotientDiff}
(hH : Nat.coprime (Nat.card H) H.index) : IsComplement' H (stabilizer G α) :=
isComplement'_stabilizer α (eq_one_of_smul_eq_one hH α) fun g => exists_smul_eq hH (g • α) α
#align subgroup.is_complement'_stabilizer_of_coprime Subgroup.isComplement'_stabilizer_of_coprime
+-/
/-- Do not use this lemma: It is made obsolete by `exists_right_complement'_of_coprime` -/
private theorem exists_right_complement'_of_coprime_aux (hH : Nat.coprime (Nat.card H) H.index) :
@@ -162,8 +172,6 @@ variable {G : Type u} [Group G] [Fintype G] {N : Subgroup G} [Normal N]
(hN : Nat.coprime (Fintype.card N') N'.index), ∃ H' : Subgroup G', is_complement' N' H')
(h3 : ∀ H : Subgroup G, ¬IsComplement' N H)
-include h1 h2 h3
-
/-! We will arrive at a contradiction via the following steps:
* step 0: `N` (the normal Hall subgroup) is nontrivial.
* step 1: If `K` is a subgroup of `G` with `K ⊔ N = ⊤`, then `K = ⊤`.
@@ -275,6 +283,7 @@ private theorem step6 : IsPGroup (Fintype.card N).minFac N :=
normalizer_eq_top.mp (step1 h1 h2 h3 (P.1.map N.subtype).normalizer P.normalizer_sup_eq_top)
exact (step3 h1 h2 h3 P.1).resolve_left (step5 h1 h2 h3)
+#print Subgroup.SchurZassenhausInduction.step7 /-
/-- Do not use this lemma: It is made obsolete by `exists_right_complement'_of_coprime` -/
theorem step7 : IsCommutative N :=
by
@@ -285,6 +294,7 @@ theorem step7 : IsCommutative N :=
eq_top_iff.mp ((step3 h1 h2 h3 N.center).resolve_left (step6 h1 h2 h3).bot_lt_center.ne')
(mem_top h) g⟩⟩
#align subgroup.schur_zassenhaus_induction.step7 Subgroup.SchurZassenhausInduction.step7
+-/
end SchurZassenhausInduction
@@ -302,6 +312,7 @@ private theorem exists_right_complement'_of_coprime_aux' [Fintype G] (hG : Finty
rw [← Nat.card_eq_fintype_card] at hN
exact not_exists_of_forall_not h3 (exists_right_complement'_of_coprime_aux hN)
+#print Subgroup.exists_right_complement'_of_coprime_of_fintype /-
/-- **Schur-Zassenhaus** for normal subgroups:
If `H : subgroup G` is normal, and has order coprime to its index, then there exists a
subgroup `K` which is a (right) complement of `H`. -/
@@ -309,7 +320,9 @@ theorem exists_right_complement'_of_coprime_of_fintype [Fintype G] {N : Subgroup
(hN : Nat.coprime (Fintype.card N) N.index) : ∃ H : Subgroup G, IsComplement' N H :=
exists_right_complement'_of_coprime_aux' rfl hN
#align subgroup.exists_right_complement'_of_coprime_of_fintype Subgroup.exists_right_complement'_of_coprime_of_fintype
+-/
+#print Subgroup.exists_right_complement'_of_coprime /-
/-- **Schur-Zassenhaus** for normal subgroups:
If `H : subgroup G` is normal, and has order coprime to its index, then there exists a
subgroup `K` which is a (right) complement of `H`. -/
@@ -334,7 +347,9 @@ theorem exists_right_complement'_of_coprime {N : Subgroup G} [N.Normal]
rw [Nat.card_eq_fintype_card] at hN
exact exists_right_complement'_of_coprime_of_fintype hN
#align subgroup.exists_right_complement'_of_coprime Subgroup.exists_right_complement'_of_coprime
+-/
+#print Subgroup.exists_left_complement'_of_coprime_of_fintype /-
/-- **Schur-Zassenhaus** for normal subgroups:
If `H : subgroup G` is normal, and has order coprime to its index, then there exists a
subgroup `K` which is a (left) complement of `H`. -/
@@ -342,7 +357,9 @@ theorem exists_left_complement'_of_coprime_of_fintype [Fintype G] {N : Subgroup
(hN : Nat.coprime (Fintype.card N) N.index) : ∃ H : Subgroup G, IsComplement' H N :=
Exists.imp (fun _ => IsComplement'.symm) (exists_right_complement'_of_coprime_of_fintype hN)
#align subgroup.exists_left_complement'_of_coprime_of_fintype Subgroup.exists_left_complement'_of_coprime_of_fintype
+-/
+#print Subgroup.exists_left_complement'_of_coprime /-
/-- **Schur-Zassenhaus** for normal subgroups:
If `H : subgroup G` is normal, and has order coprime to its index, then there exists a
subgroup `K` which is a (left) complement of `H`. -/
@@ -350,6 +367,7 @@ theorem exists_left_complement'_of_coprime {N : Subgroup G} [N.Normal]
(hN : Nat.coprime (Nat.card N) N.index) : ∃ H : Subgroup G, IsComplement' H N :=
Exists.imp (fun _ => IsComplement'.symm) (exists_right_complement'_of_coprime hN)
#align subgroup.exists_left_complement'_of_coprime Subgroup.exists_left_complement'_of_coprime
+-/
end Subgroup
mathlib commit https://github.com/leanprover-community/mathlib/commit/a3e83f0fa4391c8740f7d773a7a9b74e311ae2a3
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Thomas Browning
! This file was ported from Lean 3 source module group_theory.schur_zassenhaus
-! leanprover-community/mathlib commit d57133e49cf06508700ef69030cd099917e0f0de
+! leanprover-community/mathlib commit 6b31d1eebd64eab86d5bd9936bfaada6ca8b5842
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -14,6 +14,9 @@ import Mathbin.GroupTheory.Transfer
/-!
# The Schur-Zassenhaus Theorem
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
In this file we prove the Schur-Zassenhaus theorem.
## Main results
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -112,7 +112,6 @@ theorem eq_one_of_smul_eq_one (hH : Nat.coprime (Nat.card H) H.index) (α : H.Qu
h ^ H.index = diff (MonoidHom.id H) (op ((h⁻¹ : H) : G) • α) α := by
rw [← diff_inv, smul_diff', diff_self, one_mul, inv_pow, inv_inv]
_ = 1 ^ H.index := (Quotient.exact' hα).trans (one_pow H.index).symm
-
#align subgroup.eq_one_of_smul_eq_one Subgroup.eq_one_of_smul_eq_one
theorem exists_smul_eq (hH : Nat.coprime (Nat.card H) H.index) (α β : H.QuotientDiff) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/31c24aa72e7b3e5ed97a8412470e904f82b81004
@@ -129,7 +129,7 @@ theorem exists_smul_eq (hH : Nat.coprime (Nat.card H) H.index) (α β : H.Quotie
theorem isComplement'_stabilizer_of_coprime {α : H.QuotientDiff}
(hH : Nat.coprime (Nat.card H) H.index) : IsComplement' H (stabilizer G α) :=
- IsComplement'_stabilizer α (eq_one_of_smul_eq_one hH α) fun g => exists_smul_eq hH (g • α) α
+ isComplement'_stabilizer α (eq_one_of_smul_eq_one hH α) fun g => exists_smul_eq hH (g • α) α
#align subgroup.is_complement'_stabilizer_of_coprime Subgroup.isComplement'_stabilizer_of_coprime
/-- Do not use this lemma: It is made obsolete by `exists_right_complement'_of_coprime` -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/58a272265b5e05f258161260dd2c5d247213cbd3
@@ -38,6 +38,7 @@ open MulOpposite MulAction Subgroup.leftTransversals MemLeftTransversals
variable {G : Type _} [Group G] (H : Subgroup G) [IsCommutative H] [FiniteIndex H]
(α β : leftTransversals (H : Set G))
+#print Subgroup.QuotientDiff /-
/-- The quotient of the transversals of an abelian normal `N` by the `diff` relation. -/
def QuotientDiff :=
Quotient
@@ -45,6 +46,7 @@ def QuotientDiff :=
⟨fun α => diff_self (MonoidHom.id H) α, fun α β h => by rw [← diff_inv, h, inv_one],
fun α β γ h h' => by rw [← diff_mul_diff, h, h', one_mul]⟩)
#align subgroup.quotient_diff Subgroup.QuotientDiff
+-/
instance : Inhabited H.QuotientDiff :=
Quotient.inhabited _
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -236,21 +236,21 @@ private theorem step2 (K : Subgroup G) [K.Normal] (hK : K ≤ N) : K = ⊥ ∨ K
· rw [← comap_top (QuotientGroup.mk' K)]
intro hH'
rw [comap_injective this hH', is_complement'_top_right, map_eq_bot_iff,
- QuotientGroup.ker_mk'] at hH
+ QuotientGroup.ker_mk'] at hH
· exact h4.2 (le_antisymm hK hH)
/-- Do not use this lemma: It is made obsolete by `exists_right_complement'_of_coprime` -/
private theorem step3 (K : Subgroup N) [(K.map N.Subtype).Normal] : K = ⊥ ∨ K = ⊤ :=
by
have key := step2 h1 h2 h3 (K.map N.subtype) K.map_subtype_le
- rw [← map_bot N.subtype] at key
+ rw [← map_bot N.subtype] at key
conv at key =>
congr
skip
rhs
rw [← N.subtype_range, N.subtype.range_eq_map]
have inj := map_injective N.subtype_injective
- rwa [inj.eq_iff, inj.eq_iff] at key
+ rwa [inj.eq_iff, inj.eq_iff] at key
/-- Do not use this lemma: It is made obsolete by `exists_right_complement'_of_coprime` -/
private theorem step4 : (Fintype.card N).minFac.Prime :=
@@ -295,7 +295,7 @@ private theorem exists_right_complement'_of_coprime_aux' [Fintype G] (hG : Finty
rintro n ih G _ _ rfl N _ hN
refine' not_forall_not.mp fun h3 => _
haveI := schur_zassenhaus_induction.step7 hN (fun G' _ _ hG' => by apply ih _ hG'; rfl) h3
- rw [← Nat.card_eq_fintype_card] at hN
+ rw [← Nat.card_eq_fintype_card] at hN
exact not_exists_of_forall_not h3 (exists_right_complement'_of_coprime_aux hN)
/-- **Schur-Zassenhaus** for normal subgroups:
@@ -313,11 +313,11 @@ theorem exists_right_complement'_of_coprime {N : Subgroup G} [N.Normal]
(hN : Nat.coprime (Nat.card N) N.index) : ∃ H : Subgroup G, IsComplement' N H :=
by
by_cases hN1 : Nat.card N = 0
- · rw [hN1, Nat.coprime_zero_left, index_eq_one] at hN
+ · rw [hN1, Nat.coprime_zero_left, index_eq_one] at hN
rw [hN]
exact ⟨⊥, is_complement'_top_bot⟩
by_cases hN2 : N.index = 0
- · rw [hN2, Nat.coprime_zero_right] at hN
+ · rw [hN2, Nat.coprime_zero_right] at hN
haveI := (cardinal.to_nat_eq_one_iff_unique.mp hN).1
rw [N.eq_bot_of_subsingleton]
exact ⟨⊤, is_complement'_bot_top⟩
@@ -327,7 +327,7 @@ theorem exists_right_complement'_of_coprime {N : Subgroup G} [N.Normal]
haveI :=
(cardinal.lt_aleph_0_iff_fintype.mp
(lt_of_not_ge (mt Cardinal.toNat_apply_of_aleph0_le hN3))).some
- rw [Nat.card_eq_fintype_card] at hN
+ rw [Nat.card_eq_fintype_card] at hN
exact exists_right_complement'_of_coprime_of_fintype hN
#align subgroup.exists_right_complement'_of_coprime Subgroup.exists_right_complement'_of_coprime
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -127,7 +127,7 @@ theorem exists_smul_eq (hH : Nat.coprime (Nat.card H) H.index) (α β : H.Quotie
theorem isComplement'_stabilizer_of_coprime {α : H.QuotientDiff}
(hH : Nat.coprime (Nat.card H) H.index) : IsComplement' H (stabilizer G α) :=
- isComplement'_stabilizer α (eq_one_of_smul_eq_one hH α) fun g => exists_smul_eq hH (g • α) α
+ IsComplement'_stabilizer α (eq_one_of_smul_eq_one hH α) fun g => exists_smul_eq hH (g • α) α
#align subgroup.is_complement'_stabilizer_of_coprime Subgroup.isComplement'_stabilizer_of_coprime
/-- Do not use this lemma: It is made obsolete by `exists_right_complement'_of_coprime` -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -27,7 +27,7 @@ In this file we prove the Schur-Zassenhaus theorem.
-/
-open BigOperators
+open scoped BigOperators
namespace Subgroup
@@ -137,7 +137,7 @@ private theorem exists_right_complement'_of_coprime_aux (hH : Nat.coprime (Nat.c
end SchurZassenhausAbelian
-open Classical
+open scoped Classical
universe u
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -294,12 +294,7 @@ private theorem exists_right_complement'_of_coprime_aux' [Fintype G] (hG : Finty
apply Nat.strong_induction_on n
rintro n ih G _ _ rfl N _ hN
refine' not_forall_not.mp fun h3 => _
- haveI :=
- schur_zassenhaus_induction.step7 hN
- (fun G' _ _ hG' => by
- apply ih _ hG'
- rfl)
- h3
+ haveI := schur_zassenhaus_induction.step7 hN (fun G' _ _ hG' => by apply ih _ hG'; rfl) h3
rw [← Nat.card_eq_fintype_card] at hN
exact not_exists_of_forall_not h3 (exists_right_complement'_of_coprime_aux hN)
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -134,7 +134,6 @@ theorem isComplement'_stabilizer_of_coprime {α : H.QuotientDiff}
private theorem exists_right_complement'_of_coprime_aux (hH : Nat.coprime (Nat.card H) H.index) :
∃ K : Subgroup G, IsComplement' H K :=
instNonempty.elim fun α => ⟨stabilizer G α, isComplement'_stabilizer_of_coprime hH⟩
-#align subgroup.exists_right_complement'_of_coprime_aux subgroup.exists_right_complement'_of_coprime_aux
end SchurZassenhausAbelian
@@ -178,7 +177,6 @@ include h1 h2 h3
private theorem step0 : N ≠ ⊥ := by
rintro rfl
exact h3 ⊤ is_complement'_bot_top
-#align subgroup.schur_zassenhaus_induction.step0 subgroup.schur_zassenhaus_induction.step0
/-- Do not use this lemma: It is made obsolete by `exists_right_complement'_of_coprime` -/
private theorem step1 (K : Subgroup G) (hK : K ⊔ N = ⊤) : K = ⊤ :=
@@ -206,7 +204,6 @@ private theorem step1 (K : Subgroup G) (hK : K ⊔ N = ⊤) : K = ⊤ :=
rw [hH, ← N.index_mul_card, mul_comm]
have h8 : (Fintype.card N).coprime (Fintype.card (H.map K.subtype)) := by rwa [hH]
exact ⟨H.map K.subtype, is_complement'_of_coprime h7 h8⟩
-#align subgroup.schur_zassenhaus_induction.step1 subgroup.schur_zassenhaus_induction.step1
/-- Do not use this lemma: It is made obsolete by `exists_right_complement'_of_coprime` -/
private theorem step2 (K : Subgroup G) [K.Normal] (hK : K ≤ N) : K = ⊥ ∨ K = N :=
@@ -241,7 +238,6 @@ private theorem step2 (K : Subgroup G) [K.Normal] (hK : K ≤ N) : K = ⊥ ∨ K
rw [comap_injective this hH', is_complement'_top_right, map_eq_bot_iff,
QuotientGroup.ker_mk'] at hH
· exact h4.2 (le_antisymm hK hH)
-#align subgroup.schur_zassenhaus_induction.step2 subgroup.schur_zassenhaus_induction.step2
/-- Do not use this lemma: It is made obsolete by `exists_right_complement'_of_coprime` -/
private theorem step3 (K : Subgroup N) [(K.map N.Subtype).Normal] : K = ⊥ ∨ K = ⊤ :=
@@ -255,18 +251,15 @@ private theorem step3 (K : Subgroup N) [(K.map N.Subtype).Normal] : K = ⊥ ∨
rw [← N.subtype_range, N.subtype.range_eq_map]
have inj := map_injective N.subtype_injective
rwa [inj.eq_iff, inj.eq_iff] at key
-#align subgroup.schur_zassenhaus_induction.step3 subgroup.schur_zassenhaus_induction.step3
/-- Do not use this lemma: It is made obsolete by `exists_right_complement'_of_coprime` -/
private theorem step4 : (Fintype.card N).minFac.Prime :=
Nat.minFac_prime (N.one_lt_card_iff_ne_bot.mpr (step0 h1 h2 h3)).ne'
-#align subgroup.schur_zassenhaus_induction.step4 subgroup.schur_zassenhaus_induction.step4
/-- Do not use this lemma: It is made obsolete by `exists_right_complement'_of_coprime` -/
private theorem step5 {P : Sylow (Fintype.card N).minFac N} : P.1 ≠ ⊥ :=
haveI : Fact (Fintype.card N).minFac.Prime := ⟨step4 h1 h2 h3⟩
P.ne_bot_of_dvd_card (Fintype.card N).minFac_dvd
-#align subgroup.schur_zassenhaus_induction.step5 subgroup.schur_zassenhaus_induction.step5
/-- Do not use this lemma: It is made obsolete by `exists_right_complement'_of_coprime` -/
private theorem step6 : IsPGroup (Fintype.card N).minFac N :=
@@ -277,7 +270,6 @@ private theorem step6 : IsPGroup (Fintype.card N).minFac N :=
haveI : (P.1.map N.subtype).Normal :=
normalizer_eq_top.mp (step1 h1 h2 h3 (P.1.map N.subtype).normalizer P.normalizer_sup_eq_top)
exact (step3 h1 h2 h3 P.1).resolve_left (step5 h1 h2 h3)
-#align subgroup.schur_zassenhaus_induction.step6 subgroup.schur_zassenhaus_induction.step6
/-- Do not use this lemma: It is made obsolete by `exists_right_complement'_of_coprime` -/
theorem step7 : IsCommutative N :=
@@ -310,7 +302,6 @@ private theorem exists_right_complement'_of_coprime_aux' [Fintype G] (hG : Finty
h3
rw [← Nat.card_eq_fintype_card] at hN
exact not_exists_of_forall_not h3 (exists_right_complement'_of_coprime_aux hN)
-#align subgroup.exists_right_complement'_of_coprime_aux' subgroup.exists_right_complement'_of_coprime_aux'
/-- **Schur-Zassenhaus** for normal subgroups:
If `H : subgroup G` is normal, and has order coprime to its index, then there exists a
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -122,7 +122,8 @@ theorem isComplement'_stabilizer_of_coprime {α : H.QuotientDiff}
/-- Do not use this lemma: It is made obsolete by `exists_right_complement'_of_coprime` -/
private theorem exists_right_complement'_of_coprime_aux (hH : Nat.Coprime (Nat.card H) H.index) :
∃ K : Subgroup G, IsComplement' H K :=
- instNonempty.elim fun α => ⟨stabilizer G α, isComplement'_stabilizer_of_coprime hH⟩
+ have ne : Nonempty (QuotientDiff H) := inferInstance
+ ne.elim fun α => ⟨stabilizer G α, isComplement'_stabilizer_of_coprime hH⟩
end SchurZassenhausAbelian
@@ -15,10 +15,10 @@ In this file we prove the Schur-Zassenhaus theorem.
## Main results
-- `exists_right_complement'_of_coprime` : The **Schur-Zassenhaus** theorem:
+- `exists_right_complement'_of_coprime`: The **Schur-Zassenhaus** theorem:
If `H : Subgroup G` is normal and has order coprime to its index,
then there exists a subgroup `K` which is a (right) complement of `H`.
-- `exists_left_complement'_of_coprime` : The **Schur-Zassenhaus** theorem:
+- `exists_left_complement'_of_coprime`: The **Schur-Zassenhaus** theorem:
If `H : Subgroup G` is normal and has order coprime to its index,
then there exists a subgroup `K` which is a (left) complement of `H`.
-/
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -44,7 +44,7 @@ def QuotientDiff :=
#align subgroup.quotient_diff Subgroup.QuotientDiff
instance : Inhabited H.QuotientDiff := by
- dsimp [QuotientDiff] -- porting note: Added `dsimp`
+ dsimp [QuotientDiff] -- Porting note: Added `dsimp`
infer_instance
theorem smul_diff_smul' [hH : Normal H] (g : Gᵐᵒᵖ) :
@@ -60,7 +60,7 @@ theorem smul_diff_smul' [hH : Normal H] (g : Gᵐᵒᵖ) :
map_mul' := fun h₁ h₂ => by
simp only [Subtype.ext_iff, coe_mk, coe_mul, mul_assoc, mul_inv_cancel_left] }
refine (Fintype.prod_equiv (MulAction.toPerm g).symm _ _ fun x ↦ ?_).trans (map_prod ϕ _ _).symm
- simp only [smul_apply_eq_smul_apply_inv_smul, smul_eq_mul_unop, mul_inv_rev, mul_assoc,
+ simp only [ϕ, smul_apply_eq_smul_apply_inv_smul, smul_eq_mul_unop, mul_inv_rev, mul_assoc,
MonoidHom.id_apply, toPerm_symm_apply, MonoidHom.coe_mk, OneHom.coe_mk]
#align subgroup.smul_diff_smul' Subgroup.smul_diff_smul'
Sub{group,monoid}.{op,unop}
(#9860)
In fact I only need the closure
lemma, but the others are easy enough.
This changes the opEquiv
s to be order isomorphisms rather than just Equiv
s.
@@ -86,8 +86,8 @@ theorem smul_diff' (h : H) :
rw [diff, diff, index_eq_card, ← Finset.card_univ, ← Finset.prod_const, ← Finset.prod_mul_distrib]
refine' Finset.prod_congr rfl fun q _ => _
simp_rw [Subtype.ext_iff, MonoidHom.id_apply, coe_mul, mul_assoc, mul_right_inj]
- rw [smul_apply_eq_smul_apply_inv_smul, smul_eq_mul_unop, unop_op, mul_left_inj, ← Subtype.ext_iff,
- Equiv.apply_eq_iff_eq, inv_smul_eq_iff]
+ rw [smul_apply_eq_smul_apply_inv_smul, smul_eq_mul_unop, MulOpposite.unop_op, mul_left_inj,
+ ← Subtype.ext_iff, Equiv.apply_eq_iff_eq, inv_smul_eq_iff]
exact self_eq_mul_right.mpr ((QuotientGroup.eq_one_iff _).mpr h.2)
#align subgroup.smul_diff' Subgroup.smul_diff'
Lemmas around this were a mess, throth in terms of names, statement and location. This PR standardises everything to be in Algebra.BigOperators.Basic
and changes the lemmas to take in InjOn
and SurjOn
assumptions where possible (and where impossible make sure the hypotheses are taken in the correct order) and moves the equality of functions hypothesis last.
Also add a few lemmas that help fix downstream uses by golfing.
From LeanAPAP and LeanCamCombi
@@ -59,14 +59,9 @@ theorem smul_diff_smul' [hH : Normal H] (g : Gᵐᵒᵖ) :
map_one' := by rw [Subtype.ext_iff, coe_mk, coe_one, mul_one, inv_mul_self]
map_mul' := fun h₁ h₂ => by
simp only [Subtype.ext_iff, coe_mk, coe_mul, mul_assoc, mul_inv_cancel_left] }
- refine'
- Eq.trans
- (Finset.prod_bij' (fun q _ => g⁻¹ • q) (fun q _ => Finset.mem_univ _)
- (fun q _ => Subtype.ext _) (fun q _ => g • q) (fun q _ => Finset.mem_univ _)
- (fun q _ => smul_inv_smul g q) fun q _ => inv_smul_smul g q)
- (map_prod ϕ _ _).symm
- simp only [MonoidHom.id_apply, MonoidHom.coe_mk, OneHom.coe_mk,
- smul_apply_eq_smul_apply_inv_smul, smul_eq_mul_unop, mul_inv_rev, mul_assoc]
+ refine (Fintype.prod_equiv (MulAction.toPerm g).symm _ _ fun x ↦ ?_).trans (map_prod ϕ _ _).symm
+ simp only [smul_apply_eq_smul_apply_inv_smul, smul_eq_mul_unop, mul_inv_rev, mul_assoc,
+ MonoidHom.id_apply, toPerm_symm_apply, MonoidHom.coe_mk, OneHom.coe_mk]
#align subgroup.smul_diff_smul' Subgroup.smul_diff_smul'
variable {H} [Normal H]
@@ -146,10 +146,9 @@ The proof is by contradiction. We assume that `G` is a minimal counterexample to
variable {G : Type u} [Group G] [Fintype G] {N : Subgroup G} [Normal N]
(h1 : Nat.Coprime (Fintype.card N) N.index)
- (h2 :
- ∀ (G' : Type u) [Group G'] [Fintype G'],
- ∀ (_ : Fintype.card G' < Fintype.card G) {N' : Subgroup G'} [N'.Normal]
- (_ : Nat.Coprime (Fintype.card N') N'.index), ∃ H' : Subgroup G', IsComplement' N' H')
+ (h2 : ∀ (G' : Type u) [Group G'] [Fintype G'],
+ Fintype.card G' < Fintype.card G → ∀ {N' : Subgroup G'} [N'.Normal],
+ Nat.Coprime (Fintype.card N') N'.index → ∃ H' : Subgroup G', IsComplement' N' H')
(h3 : ∀ H : Subgroup G, ¬IsComplement' N H)
/-! We will arrive at a contradiction via the following steps:
@@ -88,10 +88,10 @@ noncomputable instance : MulAction G H.QuotientDiff where
theorem smul_diff' (h : H) :
diff (MonoidHom.id H) α (op (h : G) • β) = diff (MonoidHom.id H) α β * h ^ H.index := by
letI := H.fintypeQuotientOfFiniteIndex
- rw [diff, diff, index_eq_card, ←Finset.card_univ, ←Finset.prod_const, ←Finset.prod_mul_distrib]
+ rw [diff, diff, index_eq_card, ← Finset.card_univ, ← Finset.prod_const, ← Finset.prod_mul_distrib]
refine' Finset.prod_congr rfl fun q _ => _
simp_rw [Subtype.ext_iff, MonoidHom.id_apply, coe_mul, mul_assoc, mul_right_inj]
- rw [smul_apply_eq_smul_apply_inv_smul, smul_eq_mul_unop, unop_op, mul_left_inj, ←Subtype.ext_iff,
+ rw [smul_apply_eq_smul_apply_inv_smul, smul_eq_mul_unop, unop_op, mul_left_inj, ← Subtype.ext_iff,
Equiv.apply_eq_iff_eq, inv_smul_eq_iff]
exact self_eq_mul_right.mpr ((QuotientGroup.eq_one_iff _).mpr h.2)
#align subgroup.smul_diff' Subgroup.smul_diff'
@@ -183,9 +183,9 @@ private theorem step1 (K : Subgroup G) (hK : K ⊔ N = ⊤) : K = ⊤ := by
exact h1.coprime_dvd_left (card_comap_dvd_of_injective N K.subtype Subtype.coe_injective)
obtain ⟨H, hH⟩ := h2 K h5 h6
replace hH : Fintype.card (H.map K.subtype) = N.index := by
- rw [←relindex_bot_left_eq_card, ←relindex_comap, MonoidHom.comap_bot, Subgroup.ker_subtype,
- relindex_bot_left, ←IsComplement'.index_eq_card (IsComplement'.symm hH), index_comap,
- subtype_range, ←relindex_sup_right, hK, relindex_top_right]
+ rw [← relindex_bot_left_eq_card, ← relindex_comap, MonoidHom.comap_bot, Subgroup.ker_subtype,
+ relindex_bot_left, ← IsComplement'.index_eq_card (IsComplement'.symm hH), index_comap,
+ subtype_range, ← relindex_sup_right, hK, relindex_top_right]
have h7 : Fintype.card N * Fintype.card (H.map K.subtype) = Fintype.card G := by
rw [hH, ← N.index_mul_card, mul_comm]
have h8 : (Fintype.card N).Coprime (Fintype.card (H.map K.subtype)) := by
@@ -304,7 +304,7 @@ theorem exists_right_complement'_of_coprime {N : Subgroup G} [N.Normal]
haveI := (Cardinal.lt_aleph0_iff_fintype.mp
(lt_of_not_ge (mt Cardinal.toNat_apply_of_aleph0_le hN3))).some
apply exists_right_complement'_of_coprime_of_fintype
- rwa [←Nat.card_eq_fintype_card]
+ rwa [← Nat.card_eq_fintype_card]
#align subgroup.exists_right_complement'_of_coprime Subgroup.exists_right_complement'_of_coprime
/-- **Schur-Zassenhaus** for normal subgroups:
For a sensible theory, we require that the centre of an algebra is closed under multiplication. The definition currently in Mathlib works for associative algebras, but not non-associative algebras. This PR uses the definition from Cabrera García and Rodríguez Palacios, which works for any multiplication (addition) and which coincides with the current definition in the associative case.
I did consider whether the centralizer should also be re-defined in terms of operator commutation, but this still results in a centralizer which is not closed under multiplication in the non-associative case. I have therefore retained the current definition, but changed centralizer_eq_top_iff_subset
and centralizer_univ
to only work in the associative case.
Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Christopher Hoskin <mans0954@users.noreply.github.com> Co-authored-by: Christopher Hoskin <christopher.hoskin@overleaf.com>
@@ -256,9 +256,8 @@ theorem step7 : IsCommutative N := by
haveI := N.bot_or_nontrivial.resolve_left (step0 h1 h3)
haveI : Fact (Fintype.card N).minFac.Prime := ⟨step4 h1 h3⟩
exact
- ⟨⟨fun g h =>
- eq_top_iff.mp ((step3 h1 h2 h3 (center N)).resolve_left (step6 h1 h2 h3).bot_lt_center.ne')
- (mem_top h) g⟩⟩
+ ⟨⟨fun g h => ((eq_top_iff.mp ((step3 h1 h2 h3 (center N)).resolve_left
+ (step6 h1 h2 h3).bot_lt_center.ne') (mem_top h)).comm g).symm⟩⟩
#align subgroup.schur_zassenhaus_induction.step7 Subgroup.SchurZassenhausInduction.step7
end SchurZassenhausInduction
@@ -97,7 +97,7 @@ theorem smul_diff' (h : H) :
#align subgroup.smul_diff' Subgroup.smul_diff'
theorem eq_one_of_smul_eq_one (hH : Nat.Coprime (Nat.card H) H.index) (α : H.QuotientDiff)
- (h : H) : h • α = α → h = 1 :=
+ (h : H) : h • α = α → h = 1 :=
Quotient.inductionOn' α fun α hα =>
(powCoprime hH).injective <|
calc
@@ -96,7 +96,7 @@ theorem smul_diff' (h : H) :
exact self_eq_mul_right.mpr ((QuotientGroup.eq_one_iff _).mpr h.2)
#align subgroup.smul_diff' Subgroup.smul_diff'
-theorem eq_one_of_smul_eq_one (hH : Nat.coprime (Nat.card H) H.index) (α : H.QuotientDiff)
+theorem eq_one_of_smul_eq_one (hH : Nat.Coprime (Nat.card H) H.index) (α : H.QuotientDiff)
(h : H) : h • α = α → h = 1 :=
Quotient.inductionOn' α fun α hα =>
(powCoprime hH).injective <|
@@ -107,7 +107,7 @@ theorem eq_one_of_smul_eq_one (hH : Nat.coprime (Nat.card H) H.index) (α : H.Qu
#align subgroup.eq_one_of_smul_eq_one Subgroup.eq_one_of_smul_eq_one
-theorem exists_smul_eq (hH : Nat.coprime (Nat.card H) H.index) (α β : H.QuotientDiff) :
+theorem exists_smul_eq (hH : Nat.Coprime (Nat.card H) H.index) (α β : H.QuotientDiff) :
∃ h : H, h • α = β :=
Quotient.inductionOn' α
(Quotient.inductionOn' β fun β α =>
@@ -120,12 +120,12 @@ theorem exists_smul_eq (hH : Nat.coprime (Nat.card H) H.index) (α β : H.Quotie
#align subgroup.exists_smul_eq Subgroup.exists_smul_eq
theorem isComplement'_stabilizer_of_coprime {α : H.QuotientDiff}
- (hH : Nat.coprime (Nat.card H) H.index) : IsComplement' H (stabilizer G α) :=
+ (hH : Nat.Coprime (Nat.card H) H.index) : IsComplement' H (stabilizer G α) :=
isComplement'_stabilizer α (eq_one_of_smul_eq_one hH α) fun g => exists_smul_eq hH (g • α) α
#align subgroup.is_complement'_stabilizer_of_coprime Subgroup.isComplement'_stabilizer_of_coprime
/-- Do not use this lemma: It is made obsolete by `exists_right_complement'_of_coprime` -/
-private theorem exists_right_complement'_of_coprime_aux (hH : Nat.coprime (Nat.card H) H.index) :
+private theorem exists_right_complement'_of_coprime_aux (hH : Nat.Coprime (Nat.card H) H.index) :
∃ K : Subgroup G, IsComplement' H K :=
instNonempty.elim fun α => ⟨stabilizer G α, isComplement'_stabilizer_of_coprime hH⟩
@@ -145,11 +145,11 @@ The proof is by contradiction. We assume that `G` is a minimal counterexample to
variable {G : Type u} [Group G] [Fintype G] {N : Subgroup G} [Normal N]
- (h1 : Nat.coprime (Fintype.card N) N.index)
+ (h1 : Nat.Coprime (Fintype.card N) N.index)
(h2 :
∀ (G' : Type u) [Group G'] [Fintype G'],
∀ (_ : Fintype.card G' < Fintype.card G) {N' : Subgroup G'} [N'.Normal]
- (_ : Nat.coprime (Fintype.card N') N'.index), ∃ H' : Subgroup G', IsComplement' N' H')
+ (_ : Nat.Coprime (Fintype.card N') N'.index), ∃ H' : Subgroup G', IsComplement' N' H')
(h3 : ∀ H : Subgroup G, ¬IsComplement' N H)
/-! We will arrive at a contradiction via the following steps:
@@ -178,7 +178,7 @@ private theorem step1 (K : Subgroup G) (hK : K ⊔ N = ⊤) : K = ⊤ := by
have h5 : Fintype.card K < Fintype.card G := by
rw [← K.index_mul_card]
exact lt_mul_of_one_lt_left Fintype.card_pos (one_lt_index_of_ne_top h3)
- have h6 : Nat.coprime (Fintype.card (N.comap K.subtype)) (N.comap K.subtype).index := by
+ have h6 : Nat.Coprime (Fintype.card (N.comap K.subtype)) (N.comap K.subtype).index := by
rw [h4]
exact h1.coprime_dvd_left (card_comap_dvd_of_injective N K.subtype Subtype.coe_injective)
obtain ⟨H, hH⟩ := h2 K h5 h6
@@ -188,7 +188,7 @@ private theorem step1 (K : Subgroup G) (hK : K ⊔ N = ⊤) : K = ⊤ := by
subtype_range, ←relindex_sup_right, hK, relindex_top_right]
have h7 : Fintype.card N * Fintype.card (H.map K.subtype) = Fintype.card G := by
rw [hH, ← N.index_mul_card, mul_comm]
- have h8 : (Fintype.card N).coprime (Fintype.card (H.map K.subtype)) := by
+ have h8 : (Fintype.card N).Coprime (Fintype.card (H.map K.subtype)) := by
rwa [hH]
exact ⟨H.map K.subtype, isComplement'_of_coprime h7 h8⟩
@@ -203,7 +203,7 @@ private theorem step2 (K : Subgroup G) [K.Normal] (hK : K ≤ N) : K = ⊥ ∨ K
lt_mul_of_one_lt_right (Nat.pos_of_ne_zero index_ne_zero_of_finite)
(K.one_lt_card_iff_ne_bot.mpr h4.1)
have h6 :
- (Fintype.card (N.map (QuotientGroup.mk' K))).coprime (N.map (QuotientGroup.mk' K)).index := by
+ (Fintype.card (N.map (QuotientGroup.mk' K))).Coprime (N.map (QuotientGroup.mk' K)).index := by
have index_map := N.index_map_eq this (by rwa [QuotientGroup.ker_mk'])
have index_pos : 0 < N.index := Nat.pos_of_ne_zero index_ne_zero_of_finite
rw [index_map]
@@ -267,7 +267,7 @@ variable {n : ℕ} {G : Type u} [Group G]
/-- Do not use this lemma: It is made obsolete by `exists_right_complement'_of_coprime` -/
private theorem exists_right_complement'_of_coprime_aux' [Fintype G] (hG : Fintype.card G = n)
- {N : Subgroup G} [N.Normal] (hN : Nat.coprime (Fintype.card N) N.index) :
+ {N : Subgroup G} [N.Normal] (hN : Nat.Coprime (Fintype.card N) N.index) :
∃ H : Subgroup G, IsComplement' N H := by
revert G
apply Nat.strongInductionOn n
@@ -281,7 +281,7 @@ private theorem exists_right_complement'_of_coprime_aux' [Fintype G] (hG : Finty
If `H : Subgroup G` is normal, and has order coprime to its index, then there exists a
subgroup `K` which is a (right) complement of `H`. -/
theorem exists_right_complement'_of_coprime_of_fintype [Fintype G] {N : Subgroup G} [N.Normal]
- (hN : Nat.coprime (Fintype.card N) N.index) : ∃ H : Subgroup G, IsComplement' N H :=
+ (hN : Nat.Coprime (Fintype.card N) N.index) : ∃ H : Subgroup G, IsComplement' N H :=
exists_right_complement'_of_coprime_aux' rfl hN
#align subgroup.exists_right_complement'_of_coprime_of_fintype Subgroup.exists_right_complement'_of_coprime_of_fintype
@@ -289,7 +289,7 @@ theorem exists_right_complement'_of_coprime_of_fintype [Fintype G] {N : Subgroup
If `H : Subgroup G` is normal, and has order coprime to its index, then there exists a
subgroup `K` which is a (right) complement of `H`. -/
theorem exists_right_complement'_of_coprime {N : Subgroup G} [N.Normal]
- (hN : Nat.coprime (Nat.card N) N.index) : ∃ H : Subgroup G, IsComplement' N H := by
+ (hN : Nat.Coprime (Nat.card N) N.index) : ∃ H : Subgroup G, IsComplement' N H := by
by_cases hN1 : Nat.card N = 0
· rw [hN1, Nat.coprime_zero_left, index_eq_one] at hN
rw [hN]
@@ -312,7 +312,7 @@ theorem exists_right_complement'_of_coprime {N : Subgroup G} [N.Normal]
If `H : Subgroup G` is normal, and has order coprime to its index, then there exists a
subgroup `K` which is a (left) complement of `H`. -/
theorem exists_left_complement'_of_coprime_of_fintype [Fintype G] {N : Subgroup G} [N.Normal]
- (hN : Nat.coprime (Fintype.card N) N.index) : ∃ H : Subgroup G, IsComplement' H N :=
+ (hN : Nat.Coprime (Fintype.card N) N.index) : ∃ H : Subgroup G, IsComplement' H N :=
Exists.imp (fun _ => IsComplement'.symm) (exists_right_complement'_of_coprime_of_fintype hN)
#align subgroup.exists_left_complement'_of_coprime_of_fintype Subgroup.exists_left_complement'_of_coprime_of_fintype
@@ -320,7 +320,7 @@ theorem exists_left_complement'_of_coprime_of_fintype [Fintype G] {N : Subgroup
If `H : Subgroup G` is normal, and has order coprime to its index, then there exists a
subgroup `K` which is a (left) complement of `H`. -/
theorem exists_left_complement'_of_coprime {N : Subgroup G} [N.Normal]
- (hN : Nat.coprime (Nat.card N) N.index) : ∃ H : Subgroup G, IsComplement' H N :=
+ (hN : Nat.Coprime (Nat.card N) N.index) : ∃ H : Subgroup G, IsComplement' H N :=
Exists.imp (fun _ => IsComplement'.symm) (exists_right_complement'_of_coprime hN)
#align subgroup.exists_left_complement'_of_coprime Subgroup.exists_left_complement'_of_coprime
@@ -96,7 +96,7 @@ theorem smul_diff' (h : H) :
exact self_eq_mul_right.mpr ((QuotientGroup.eq_one_iff _).mpr h.2)
#align subgroup.smul_diff' Subgroup.smul_diff'
-theorem eq_one_of_smul_eq_one (hH : Nat.Coprime (Nat.card H) H.index) (α : H.QuotientDiff)
+theorem eq_one_of_smul_eq_one (hH : Nat.coprime (Nat.card H) H.index) (α : H.QuotientDiff)
(h : H) : h • α = α → h = 1 :=
Quotient.inductionOn' α fun α hα =>
(powCoprime hH).injective <|
@@ -107,7 +107,7 @@ theorem eq_one_of_smul_eq_one (hH : Nat.Coprime (Nat.card H) H.index) (α : H.Qu
#align subgroup.eq_one_of_smul_eq_one Subgroup.eq_one_of_smul_eq_one
-theorem exists_smul_eq (hH : Nat.Coprime (Nat.card H) H.index) (α β : H.QuotientDiff) :
+theorem exists_smul_eq (hH : Nat.coprime (Nat.card H) H.index) (α β : H.QuotientDiff) :
∃ h : H, h • α = β :=
Quotient.inductionOn' α
(Quotient.inductionOn' β fun β α =>
@@ -120,12 +120,12 @@ theorem exists_smul_eq (hH : Nat.Coprime (Nat.card H) H.index) (α β : H.Quotie
#align subgroup.exists_smul_eq Subgroup.exists_smul_eq
theorem isComplement'_stabilizer_of_coprime {α : H.QuotientDiff}
- (hH : Nat.Coprime (Nat.card H) H.index) : IsComplement' H (stabilizer G α) :=
+ (hH : Nat.coprime (Nat.card H) H.index) : IsComplement' H (stabilizer G α) :=
isComplement'_stabilizer α (eq_one_of_smul_eq_one hH α) fun g => exists_smul_eq hH (g • α) α
#align subgroup.is_complement'_stabilizer_of_coprime Subgroup.isComplement'_stabilizer_of_coprime
/-- Do not use this lemma: It is made obsolete by `exists_right_complement'_of_coprime` -/
-private theorem exists_right_complement'_of_coprime_aux (hH : Nat.Coprime (Nat.card H) H.index) :
+private theorem exists_right_complement'_of_coprime_aux (hH : Nat.coprime (Nat.card H) H.index) :
∃ K : Subgroup G, IsComplement' H K :=
instNonempty.elim fun α => ⟨stabilizer G α, isComplement'_stabilizer_of_coprime hH⟩
@@ -145,11 +145,11 @@ The proof is by contradiction. We assume that `G` is a minimal counterexample to
variable {G : Type u} [Group G] [Fintype G] {N : Subgroup G} [Normal N]
- (h1 : Nat.Coprime (Fintype.card N) N.index)
+ (h1 : Nat.coprime (Fintype.card N) N.index)
(h2 :
∀ (G' : Type u) [Group G'] [Fintype G'],
∀ (_ : Fintype.card G' < Fintype.card G) {N' : Subgroup G'} [N'.Normal]
- (_ : Nat.Coprime (Fintype.card N') N'.index), ∃ H' : Subgroup G', IsComplement' N' H')
+ (_ : Nat.coprime (Fintype.card N') N'.index), ∃ H' : Subgroup G', IsComplement' N' H')
(h3 : ∀ H : Subgroup G, ¬IsComplement' N H)
/-! We will arrive at a contradiction via the following steps:
@@ -178,7 +178,7 @@ private theorem step1 (K : Subgroup G) (hK : K ⊔ N = ⊤) : K = ⊤ := by
have h5 : Fintype.card K < Fintype.card G := by
rw [← K.index_mul_card]
exact lt_mul_of_one_lt_left Fintype.card_pos (one_lt_index_of_ne_top h3)
- have h6 : Nat.Coprime (Fintype.card (N.comap K.subtype)) (N.comap K.subtype).index := by
+ have h6 : Nat.coprime (Fintype.card (N.comap K.subtype)) (N.comap K.subtype).index := by
rw [h4]
exact h1.coprime_dvd_left (card_comap_dvd_of_injective N K.subtype Subtype.coe_injective)
obtain ⟨H, hH⟩ := h2 K h5 h6
@@ -188,7 +188,7 @@ private theorem step1 (K : Subgroup G) (hK : K ⊔ N = ⊤) : K = ⊤ := by
subtype_range, ←relindex_sup_right, hK, relindex_top_right]
have h7 : Fintype.card N * Fintype.card (H.map K.subtype) = Fintype.card G := by
rw [hH, ← N.index_mul_card, mul_comm]
- have h8 : (Fintype.card N).Coprime (Fintype.card (H.map K.subtype)) := by
+ have h8 : (Fintype.card N).coprime (Fintype.card (H.map K.subtype)) := by
rwa [hH]
exact ⟨H.map K.subtype, isComplement'_of_coprime h7 h8⟩
@@ -203,7 +203,7 @@ private theorem step2 (K : Subgroup G) [K.Normal] (hK : K ≤ N) : K = ⊥ ∨ K
lt_mul_of_one_lt_right (Nat.pos_of_ne_zero index_ne_zero_of_finite)
(K.one_lt_card_iff_ne_bot.mpr h4.1)
have h6 :
- (Fintype.card (N.map (QuotientGroup.mk' K))).Coprime (N.map (QuotientGroup.mk' K)).index := by
+ (Fintype.card (N.map (QuotientGroup.mk' K))).coprime (N.map (QuotientGroup.mk' K)).index := by
have index_map := N.index_map_eq this (by rwa [QuotientGroup.ker_mk'])
have index_pos : 0 < N.index := Nat.pos_of_ne_zero index_ne_zero_of_finite
rw [index_map]
@@ -267,7 +267,7 @@ variable {n : ℕ} {G : Type u} [Group G]
/-- Do not use this lemma: It is made obsolete by `exists_right_complement'_of_coprime` -/
private theorem exists_right_complement'_of_coprime_aux' [Fintype G] (hG : Fintype.card G = n)
- {N : Subgroup G} [N.Normal] (hN : Nat.Coprime (Fintype.card N) N.index) :
+ {N : Subgroup G} [N.Normal] (hN : Nat.coprime (Fintype.card N) N.index) :
∃ H : Subgroup G, IsComplement' N H := by
revert G
apply Nat.strongInductionOn n
@@ -281,7 +281,7 @@ private theorem exists_right_complement'_of_coprime_aux' [Fintype G] (hG : Finty
If `H : Subgroup G` is normal, and has order coprime to its index, then there exists a
subgroup `K` which is a (right) complement of `H`. -/
theorem exists_right_complement'_of_coprime_of_fintype [Fintype G] {N : Subgroup G} [N.Normal]
- (hN : Nat.Coprime (Fintype.card N) N.index) : ∃ H : Subgroup G, IsComplement' N H :=
+ (hN : Nat.coprime (Fintype.card N) N.index) : ∃ H : Subgroup G, IsComplement' N H :=
exists_right_complement'_of_coprime_aux' rfl hN
#align subgroup.exists_right_complement'_of_coprime_of_fintype Subgroup.exists_right_complement'_of_coprime_of_fintype
@@ -289,7 +289,7 @@ theorem exists_right_complement'_of_coprime_of_fintype [Fintype G] {N : Subgroup
If `H : Subgroup G` is normal, and has order coprime to its index, then there exists a
subgroup `K` which is a (right) complement of `H`. -/
theorem exists_right_complement'_of_coprime {N : Subgroup G} [N.Normal]
- (hN : Nat.Coprime (Nat.card N) N.index) : ∃ H : Subgroup G, IsComplement' N H := by
+ (hN : Nat.coprime (Nat.card N) N.index) : ∃ H : Subgroup G, IsComplement' N H := by
by_cases hN1 : Nat.card N = 0
· rw [hN1, Nat.coprime_zero_left, index_eq_one] at hN
rw [hN]
@@ -312,7 +312,7 @@ theorem exists_right_complement'_of_coprime {N : Subgroup G} [N.Normal]
If `H : Subgroup G` is normal, and has order coprime to its index, then there exists a
subgroup `K` which is a (left) complement of `H`. -/
theorem exists_left_complement'_of_coprime_of_fintype [Fintype G] {N : Subgroup G} [N.Normal]
- (hN : Nat.Coprime (Fintype.card N) N.index) : ∃ H : Subgroup G, IsComplement' H N :=
+ (hN : Nat.coprime (Fintype.card N) N.index) : ∃ H : Subgroup G, IsComplement' H N :=
Exists.imp (fun _ => IsComplement'.symm) (exists_right_complement'_of_coprime_of_fintype hN)
#align subgroup.exists_left_complement'_of_coprime_of_fintype Subgroup.exists_left_complement'_of_coprime_of_fintype
@@ -320,7 +320,7 @@ theorem exists_left_complement'_of_coprime_of_fintype [Fintype G] {N : Subgroup
If `H : Subgroup G` is normal, and has order coprime to its index, then there exists a
subgroup `K` which is a (left) complement of `H`. -/
theorem exists_left_complement'_of_coprime {N : Subgroup G} [N.Normal]
- (hN : Nat.Coprime (Nat.card N) N.index) : ∃ H : Subgroup G, IsComplement' H N :=
+ (hN : Nat.coprime (Nat.card N) N.index) : ∃ H : Subgroup G, IsComplement' H N :=
Exists.imp (fun _ => IsComplement'.symm) (exists_right_complement'_of_coprime hN)
#align subgroup.exists_left_complement'_of_coprime Subgroup.exists_left_complement'_of_coprime
Some changes have already been review and delegated in #6910 and #7148.
The diff that needs looking at is https://github.com/leanprover-community/mathlib4/pull/7174/commits/64d6d07ee18163627c8f517eb31455411921c5ac
The std bump PR was insta-merged already!
Co-authored-by: leanprover-community-mathlib4-bot <leanprover-community-mathlib4-bot@users.noreply.github.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -96,7 +96,7 @@ theorem smul_diff' (h : H) :
exact self_eq_mul_right.mpr ((QuotientGroup.eq_one_iff _).mpr h.2)
#align subgroup.smul_diff' Subgroup.smul_diff'
-theorem eq_one_of_smul_eq_one (hH : Nat.coprime (Nat.card H) H.index) (α : H.QuotientDiff)
+theorem eq_one_of_smul_eq_one (hH : Nat.Coprime (Nat.card H) H.index) (α : H.QuotientDiff)
(h : H) : h • α = α → h = 1 :=
Quotient.inductionOn' α fun α hα =>
(powCoprime hH).injective <|
@@ -107,7 +107,7 @@ theorem eq_one_of_smul_eq_one (hH : Nat.coprime (Nat.card H) H.index) (α : H.Qu
#align subgroup.eq_one_of_smul_eq_one Subgroup.eq_one_of_smul_eq_one
-theorem exists_smul_eq (hH : Nat.coprime (Nat.card H) H.index) (α β : H.QuotientDiff) :
+theorem exists_smul_eq (hH : Nat.Coprime (Nat.card H) H.index) (α β : H.QuotientDiff) :
∃ h : H, h • α = β :=
Quotient.inductionOn' α
(Quotient.inductionOn' β fun β α =>
@@ -120,12 +120,12 @@ theorem exists_smul_eq (hH : Nat.coprime (Nat.card H) H.index) (α β : H.Quotie
#align subgroup.exists_smul_eq Subgroup.exists_smul_eq
theorem isComplement'_stabilizer_of_coprime {α : H.QuotientDiff}
- (hH : Nat.coprime (Nat.card H) H.index) : IsComplement' H (stabilizer G α) :=
+ (hH : Nat.Coprime (Nat.card H) H.index) : IsComplement' H (stabilizer G α) :=
isComplement'_stabilizer α (eq_one_of_smul_eq_one hH α) fun g => exists_smul_eq hH (g • α) α
#align subgroup.is_complement'_stabilizer_of_coprime Subgroup.isComplement'_stabilizer_of_coprime
/-- Do not use this lemma: It is made obsolete by `exists_right_complement'_of_coprime` -/
-private theorem exists_right_complement'_of_coprime_aux (hH : Nat.coprime (Nat.card H) H.index) :
+private theorem exists_right_complement'_of_coprime_aux (hH : Nat.Coprime (Nat.card H) H.index) :
∃ K : Subgroup G, IsComplement' H K :=
instNonempty.elim fun α => ⟨stabilizer G α, isComplement'_stabilizer_of_coprime hH⟩
@@ -145,11 +145,11 @@ The proof is by contradiction. We assume that `G` is a minimal counterexample to
variable {G : Type u} [Group G] [Fintype G] {N : Subgroup G} [Normal N]
- (h1 : Nat.coprime (Fintype.card N) N.index)
+ (h1 : Nat.Coprime (Fintype.card N) N.index)
(h2 :
∀ (G' : Type u) [Group G'] [Fintype G'],
∀ (_ : Fintype.card G' < Fintype.card G) {N' : Subgroup G'} [N'.Normal]
- (_ : Nat.coprime (Fintype.card N') N'.index), ∃ H' : Subgroup G', IsComplement' N' H')
+ (_ : Nat.Coprime (Fintype.card N') N'.index), ∃ H' : Subgroup G', IsComplement' N' H')
(h3 : ∀ H : Subgroup G, ¬IsComplement' N H)
/-! We will arrive at a contradiction via the following steps:
@@ -178,7 +178,7 @@ private theorem step1 (K : Subgroup G) (hK : K ⊔ N = ⊤) : K = ⊤ := by
have h5 : Fintype.card K < Fintype.card G := by
rw [← K.index_mul_card]
exact lt_mul_of_one_lt_left Fintype.card_pos (one_lt_index_of_ne_top h3)
- have h6 : Nat.coprime (Fintype.card (N.comap K.subtype)) (N.comap K.subtype).index := by
+ have h6 : Nat.Coprime (Fintype.card (N.comap K.subtype)) (N.comap K.subtype).index := by
rw [h4]
exact h1.coprime_dvd_left (card_comap_dvd_of_injective N K.subtype Subtype.coe_injective)
obtain ⟨H, hH⟩ := h2 K h5 h6
@@ -188,7 +188,7 @@ private theorem step1 (K : Subgroup G) (hK : K ⊔ N = ⊤) : K = ⊤ := by
subtype_range, ←relindex_sup_right, hK, relindex_top_right]
have h7 : Fintype.card N * Fintype.card (H.map K.subtype) = Fintype.card G := by
rw [hH, ← N.index_mul_card, mul_comm]
- have h8 : (Fintype.card N).coprime (Fintype.card (H.map K.subtype)) := by
+ have h8 : (Fintype.card N).Coprime (Fintype.card (H.map K.subtype)) := by
rwa [hH]
exact ⟨H.map K.subtype, isComplement'_of_coprime h7 h8⟩
@@ -203,7 +203,7 @@ private theorem step2 (K : Subgroup G) [K.Normal] (hK : K ≤ N) : K = ⊥ ∨ K
lt_mul_of_one_lt_right (Nat.pos_of_ne_zero index_ne_zero_of_finite)
(K.one_lt_card_iff_ne_bot.mpr h4.1)
have h6 :
- (Fintype.card (N.map (QuotientGroup.mk' K))).coprime (N.map (QuotientGroup.mk' K)).index := by
+ (Fintype.card (N.map (QuotientGroup.mk' K))).Coprime (N.map (QuotientGroup.mk' K)).index := by
have index_map := N.index_map_eq this (by rwa [QuotientGroup.ker_mk'])
have index_pos : 0 < N.index := Nat.pos_of_ne_zero index_ne_zero_of_finite
rw [index_map]
@@ -267,7 +267,7 @@ variable {n : ℕ} {G : Type u} [Group G]
/-- Do not use this lemma: It is made obsolete by `exists_right_complement'_of_coprime` -/
private theorem exists_right_complement'_of_coprime_aux' [Fintype G] (hG : Fintype.card G = n)
- {N : Subgroup G} [N.Normal] (hN : Nat.coprime (Fintype.card N) N.index) :
+ {N : Subgroup G} [N.Normal] (hN : Nat.Coprime (Fintype.card N) N.index) :
∃ H : Subgroup G, IsComplement' N H := by
revert G
apply Nat.strongInductionOn n
@@ -281,7 +281,7 @@ private theorem exists_right_complement'_of_coprime_aux' [Fintype G] (hG : Finty
If `H : Subgroup G` is normal, and has order coprime to its index, then there exists a
subgroup `K` which is a (right) complement of `H`. -/
theorem exists_right_complement'_of_coprime_of_fintype [Fintype G] {N : Subgroup G} [N.Normal]
- (hN : Nat.coprime (Fintype.card N) N.index) : ∃ H : Subgroup G, IsComplement' N H :=
+ (hN : Nat.Coprime (Fintype.card N) N.index) : ∃ H : Subgroup G, IsComplement' N H :=
exists_right_complement'_of_coprime_aux' rfl hN
#align subgroup.exists_right_complement'_of_coprime_of_fintype Subgroup.exists_right_complement'_of_coprime_of_fintype
@@ -289,7 +289,7 @@ theorem exists_right_complement'_of_coprime_of_fintype [Fintype G] {N : Subgroup
If `H : Subgroup G` is normal, and has order coprime to its index, then there exists a
subgroup `K` which is a (right) complement of `H`. -/
theorem exists_right_complement'_of_coprime {N : Subgroup G} [N.Normal]
- (hN : Nat.coprime (Nat.card N) N.index) : ∃ H : Subgroup G, IsComplement' N H := by
+ (hN : Nat.Coprime (Nat.card N) N.index) : ∃ H : Subgroup G, IsComplement' N H := by
by_cases hN1 : Nat.card N = 0
· rw [hN1, Nat.coprime_zero_left, index_eq_one] at hN
rw [hN]
@@ -312,7 +312,7 @@ theorem exists_right_complement'_of_coprime {N : Subgroup G} [N.Normal]
If `H : Subgroup G` is normal, and has order coprime to its index, then there exists a
subgroup `K` which is a (left) complement of `H`. -/
theorem exists_left_complement'_of_coprime_of_fintype [Fintype G] {N : Subgroup G} [N.Normal]
- (hN : Nat.coprime (Fintype.card N) N.index) : ∃ H : Subgroup G, IsComplement' H N :=
+ (hN : Nat.Coprime (Fintype.card N) N.index) : ∃ H : Subgroup G, IsComplement' H N :=
Exists.imp (fun _ => IsComplement'.symm) (exists_right_complement'_of_coprime_of_fintype hN)
#align subgroup.exists_left_complement'_of_coprime_of_fintype Subgroup.exists_left_complement'_of_coprime_of_fintype
@@ -320,7 +320,7 @@ theorem exists_left_complement'_of_coprime_of_fintype [Fintype G] {N : Subgroup
If `H : Subgroup G` is normal, and has order coprime to its index, then there exists a
subgroup `K` which is a (left) complement of `H`. -/
theorem exists_left_complement'_of_coprime {N : Subgroup G} [N.Normal]
- (hN : Nat.coprime (Nat.card N) N.index) : ∃ H : Subgroup G, IsComplement' H N :=
+ (hN : Nat.Coprime (Nat.card N) N.index) : ∃ H : Subgroup G, IsComplement' H N :=
Exists.imp (fun _ => IsComplement'.symm) (exists_right_complement'_of_coprime hN)
#align subgroup.exists_left_complement'_of_coprime Subgroup.exists_left_complement'_of_coprime
@@ -90,7 +90,7 @@ theorem smul_diff' (h : H) :
letI := H.fintypeQuotientOfFiniteIndex
rw [diff, diff, index_eq_card, ←Finset.card_univ, ←Finset.prod_const, ←Finset.prod_mul_distrib]
refine' Finset.prod_congr rfl fun q _ => _
- simp_rw [Subtype.ext_iff, MonoidHom.id_apply, coe_mul, coe_mk, mul_assoc, mul_right_inj]
+ simp_rw [Subtype.ext_iff, MonoidHom.id_apply, coe_mul, mul_assoc, mul_right_inj]
rw [smul_apply_eq_smul_apply_inv_smul, smul_eq_mul_unop, unop_op, mul_left_inj, ←Subtype.ext_iff,
Equiv.apply_eq_iff_eq, inv_smul_eq_iff]
exact self_eq_mul_right.mpr ((QuotientGroup.eq_one_iff _).mpr h.2)
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -32,7 +32,7 @@ section SchurZassenhausAbelian
open MulOpposite MulAction Subgroup.leftTransversals MemLeftTransversals
-variable {G : Type _} [Group G] (H : Subgroup G) [IsCommutative H] [FiniteIndex H]
+variable {G : Type*} [Group G] (H : Subgroup G) [IsCommutative H] [FiniteIndex H]
(α β : leftTransversals (H : Set G))
/-- The quotient of the transversals of an abelian normal `N` by the `diff` relation. -/
@@ -2,15 +2,12 @@
Copyright (c) 2021 Thomas Browning. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Thomas Browning
-
-! This file was ported from Lean 3 source module group_theory.schur_zassenhaus
-! leanprover-community/mathlib commit d57133e49cf06508700ef69030cd099917e0f0de
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.GroupTheory.Sylow
import Mathlib.GroupTheory.Transfer
+#align_import group_theory.schur_zassenhaus from "leanprover-community/mathlib"@"d57133e49cf06508700ef69030cd099917e0f0de"
+
/-!
# The Schur-Zassenhaus Theorem
@@ -21,7 +21,7 @@ In this file we prove the Schur-Zassenhaus theorem.
- `exists_right_complement'_of_coprime` : The **Schur-Zassenhaus** theorem:
If `H : Subgroup G` is normal and has order coprime to its index,
then there exists a subgroup `K` which is a (right) complement of `H`.
-- `exists_left_complement'_of_coprime` The **Schur-Zassenhaus** theorem:
+- `exists_left_complement'_of_coprime` : The **Schur-Zassenhaus** theorem:
If `H : Subgroup G` is normal and has order coprime to its index,
then there exists a subgroup `K` which is a (left) complement of `H`.
-/
@@ -286,8 +286,7 @@ private theorem exists_right_complement'_of_coprime_aux' [Fintype G] (hG : Finty
theorem exists_right_complement'_of_coprime_of_fintype [Fintype G] {N : Subgroup G} [N.Normal]
(hN : Nat.coprime (Fintype.card N) N.index) : ∃ H : Subgroup G, IsComplement' N H :=
exists_right_complement'_of_coprime_aux' rfl hN
-#align subgroup.exists_right_complement'_of_coprime_of_fintype
- Subgroup.exists_right_complement'_of_coprime_of_fintype
+#align subgroup.exists_right_complement'_of_coprime_of_fintype Subgroup.exists_right_complement'_of_coprime_of_fintype
/-- **Schur-Zassenhaus** for normal subgroups:
If `H : Subgroup G` is normal, and has order coprime to its index, then there exists a
@@ -318,8 +317,7 @@ theorem exists_right_complement'_of_coprime {N : Subgroup G} [N.Normal]
theorem exists_left_complement'_of_coprime_of_fintype [Fintype G] {N : Subgroup G} [N.Normal]
(hN : Nat.coprime (Fintype.card N) N.index) : ∃ H : Subgroup G, IsComplement' H N :=
Exists.imp (fun _ => IsComplement'.symm) (exists_right_complement'_of_coprime_of_fintype hN)
-#align subgroup.exists_left_complement'_of_coprime_of_fintype
- Subgroup.exists_left_complement'_of_coprime_of_fintype
+#align subgroup.exists_left_complement'_of_coprime_of_fintype Subgroup.exists_left_complement'_of_coprime_of_fintype
/-- **Schur-Zassenhaus** for normal subgroups:
If `H : Subgroup G` is normal, and has order coprime to its index, then there exists a
cleanupAnnotations
to push_neg (#5082)
Expr
s now have an mdata
field. It seems that this gets in the way of push_neg
, as reported on Zulip.
The above seems to fix the reported errors.
Co-authored-by: Ruben Van de Velde <65514131+Ruben-VandeVelde@users.noreply.github.com>
@@ -200,7 +200,6 @@ private theorem step2 (K : Subgroup G) [K.Normal] (hK : K ≤ N) : K = ⊥ ∨ K
have : Function.Surjective (QuotientGroup.mk' K) := Quotient.surjective_Quotient_mk''
have h4 := step1 h1 h2 h3
contrapose! h4
- rw [not_or] at h4 -- porting note: had to add `rw [not_or] at h4`
have h5 : Fintype.card (G ⧸ K) < Fintype.card G := by
rw [← index_eq_card, ← K.index_mul_card]
refine'
@@ -124,7 +124,7 @@ theorem exists_smul_eq (hH : Nat.coprime (Nat.card H) H.index) (α β : H.Quotie
theorem isComplement'_stabilizer_of_coprime {α : H.QuotientDiff}
(hH : Nat.coprime (Nat.card H) H.index) : IsComplement' H (stabilizer G α) :=
- IsComplement'_stabilizer α (eq_one_of_smul_eq_one hH α) fun g => exists_smul_eq hH (g • α) α
+ isComplement'_stabilizer α (eq_one_of_smul_eq_one hH α) fun g => exists_smul_eq hH (g • α) α
#align subgroup.is_complement'_stabilizer_of_coprime Subgroup.isComplement'_stabilizer_of_coprime
/-- Do not use this lemma: It is made obsolete by `exists_right_complement'_of_coprime` -/
@@ -170,7 +170,7 @@ variable {G : Type u} [Group G] [Fintype G] {N : Subgroup G} [Normal N]
/-- Do not use this lemma: It is made obsolete by `exists_right_complement'_of_coprime` -/
private theorem step0 : N ≠ ⊥ := by
rintro rfl
- exact h3 ⊤ IsComplement'_bot_top
+ exact h3 ⊤ isComplement'_bot_top
/-- Do not use this lemma: It is made obsolete by `exists_right_complement'_of_coprime` -/
private theorem step1 (K : Subgroup G) (hK : K ⊔ N = ⊤) : K = ⊤ := by
@@ -193,7 +193,7 @@ private theorem step1 (K : Subgroup G) (hK : K ⊔ N = ⊤) : K = ⊤ := by
rw [hH, ← N.index_mul_card, mul_comm]
have h8 : (Fintype.card N).coprime (Fintype.card (H.map K.subtype)) := by
rwa [hH]
- exact ⟨H.map K.subtype, IsComplement'_of_coprime h7 h8⟩
+ exact ⟨H.map K.subtype, isComplement'_of_coprime h7 h8⟩
/-- Do not use this lemma: It is made obsolete by `exists_right_complement'_of_coprime` -/
private theorem step2 (K : Subgroup G) [K.Normal] (hK : K ≤ N) : K = ⊥ ∨ K = N := by
@@ -222,7 +222,7 @@ private theorem step2 (K : Subgroup G) [K.Normal] (hK : K ≤ N) : K = ⊥ ∨ K
rwa [← key, comap_sup_eq, hH.symm.sup_eq_top, comap_top]
· rw [← comap_top (QuotientGroup.mk' K)]
intro hH'
- rw [comap_injective this hH', IsComplement'_top_right, map_eq_bot_iff,
+ rw [comap_injective this hH', isComplement'_top_right, map_eq_bot_iff,
QuotientGroup.ker_mk'] at hH
· exact h4.2 (le_antisymm hK hH)
@@ -298,12 +298,12 @@ theorem exists_right_complement'_of_coprime {N : Subgroup G} [N.Normal]
by_cases hN1 : Nat.card N = 0
· rw [hN1, Nat.coprime_zero_left, index_eq_one] at hN
rw [hN]
- exact ⟨⊥, IsComplement'_top_bot⟩
+ exact ⟨⊥, isComplement'_top_bot⟩
by_cases hN2 : N.index = 0
· rw [hN2, Nat.coprime_zero_right] at hN
haveI := (Cardinal.toNat_eq_one_iff_unique.mp hN).1
rw [N.eq_bot_of_subsingleton]
- exact ⟨⊤, IsComplement'_bot_top⟩
+ exact ⟨⊤, isComplement'_bot_top⟩
have hN3 : Nat.card G ≠ 0 := by
rw [← N.card_mul_index]
exact mul_ne_zero hN1 hN2
The unported dependencies are