Skip to content

Commit a8994de

Browse files
committed
formalized theorem 2.4 iii)
1 parent 6e95c4f commit a8994de

25 files changed

Lines changed: 223 additions & 3427 deletions

ClassificationOfSubgroups/Ch6_MaximalAbelianSubgroupClassEquation/S2_A_MaximalAbelianSubgroup.lean

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1070,7 +1070,7 @@ theorem A_eq_Q_join_Z_of_IsConj_s_or_neg_s {F : Type*} [Field F]
10701070
symm
10711071
rw [← nontrivial_iff_ne_bot]
10721072
exact nontrivial_Q_subgroupOf_G
1073-
have IsPGroup_Q_subgroupOf_G:=
1073+
have IsPGroup_Q_subgroupOf_G :=
10741074
@IsPGroup
10751075
G _ p hp'.out (Q.subgroupOf G) _ IsElementaryAbelian_Q_subgroupOf_G bot_lt_Q_subgroupOf_G
10761076
have exists_Sylow := @IsPGroup.exists_le_sylow p G _ (Q.subgroupOf G) IsPGroup_Q_subgroupOf_G
@@ -1799,6 +1799,10 @@ def monoidHom_normalizer_D_quot_D {F : Type*} [Field F] (A' G' : Subgroup SL(2,F
17991799
)
18001800

18011801

1802+
noncomputable def foob {F : Type*} [Field F] (A' G' : Subgroup SL(2,F)) :=
1803+
QuotientGroup.quotientInfEquivProdNormalQuotient (H := (((A'.normalizer ⊓ G')).subgroupOf ((D F).normalizer)))
1804+
(N := (D F).subgroupOf ((D F).normalizer))
1805+
18021806
noncomputable def A_subgroupOf_G_MonoidHom_ZMod_two {F : Type*} [Field F] (A' G' : Subgroup SL(2,F))
18031807
(A'_le_D : A' ≤ D F) (A'_le_G' : A' ≤ G') (two_lt_card_A' : 2 < Nat.card A')
18041808
(A'_eq_G'_inf_D : A' = G' ⊓ D F) :

ClassificationOfSubgroups/Ch6_MaximalAbelianSubgroupClassEquation/S2_B_MaximalAbelianSubgroup.lean

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,8 @@ theorem exists_IsCyclic_K_normalizer_eq_Q_join_K {F : Type*} [Field F] { p : ℕ
162162
(G : Subgroup SL(2,F))
163163
(Q : Sylow p G)
164164
(h : Q.toSubgroup ≠ ⊥) :
165-
∃ K : Subgroup G, IsCyclic K ∧ normalizer Q.toSubgroup = Q.toSubgroup ⊔ K := by sorry
165+
∃ K : Subgroup G, IsCyclic K ∧ normalizer Q.toSubgroup = Q.toSubgroup ⊔ K := by
166+
sorry
166167

167168
/-
168169
Theorem 2.3 (v b)If |K| > |Z|, then K ∈ M.

ClassificationOfSubgroups/Ch6_MaximalAbelianSubgroupClassEquation/S3_NoncenterClassEquation.lean

Lines changed: 174 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ open Matrix MatrixGroups Subgroup MulAut MaximalAbelianSubgroup Pointwise Specia
1919
def Subgroup.noncenter {G : Type*} [Group G] (H : Subgroup G) : Set G :=
2020
H.carrier \ center G
2121

22+
2223
theorem Subgroup.mem_noncenter {G : Type*} [Group G] {H : Subgroup G} {x : G} :
2324
x ∈ H.noncenter ↔ x ∈ H ∧ x ∉ center G := by
2425
simp [Subgroup.noncenter, Set.mem_diff, SetLike.mem_coe]
@@ -27,22 +28,22 @@ theorem Subgroup.mem_noncenter {G : Type*} [Group G] {H : Subgroup G} {x : G} :
2728
Definition. The set $\mathcal{C}(A) = Cl(A) = \{x A x^{-1} \; | \; x ∈ G \}$
2829
is called the conjugacy class of $A \in \mathcal{M}$.
2930
-/
30-
def ConjClassOfSet {F : Type*} [Field F] (G : Subgroup SL(2,F))
31-
(A : MaximalAbelianSubgroupsOf G) :=
31+
def ConjClassOf {F : Type*} [Field F] (G : Subgroup SL(2,F))
32+
(A : MaximalAbelianSubgroupsOf G) :=
3233
{ conj x • A.val | x ∈ G }
3334

3435
/- let M∗ be the set of all Aᵢ* and let Cᵢ* be the conjugacy class of Aᵢ* .-/
3536
def noncenter_MaximalAbelianSubgroupsOf {F : Type*} [Field F] (G : Subgroup SL(2,F)) :=
3637
{ noncenter (K : Subgroup SL(2,F)) | K ∈ MaximalAbelianSubgroupsOf G }
3738

38-
def noncenter_ConjClassOfSet {F : Type*} [Field F] (G : Subgroup SL(2,F))
39+
def noncenter_ConjClassOf {F : Type*} [Field F] (G : Subgroup SL(2,F))
3940
(A : noncenter_MaximalAbelianSubgroupsOf G) :=
4041
{ conj x • A.val | x ∈ G }
4142

4243

43-
noncomputable def card_noncenter_ConjClassOfSet {F : Type*} [Field F]
44+
noncomputable def card_noncenter_ConjClassOf {F : Type*} [Field F]
4445
(G : Subgroup SL(2,F)) : noncenter_MaximalAbelianSubgroupsOf G → ℕ :=
45-
fun A => Nat.card (noncenter_ConjClassOfSet G A)
46+
fun A => Nat.card (noncenter_ConjClassOf G A)
4647

4748
section noncenter_MaximalAbelianSubgroupsOf
4849

@@ -94,7 +95,8 @@ def union_conj_noncenter_MaximalAbelianSubgroupsOf {F : Type*} [Field F]
9495
noncenter_MaximalAbelianSubgroupsOf G → Set SL(2,F) :=
9596
fun A => ⋃ x ∈ G, conj x • A.val
9697

97-
lemma noncenter_C_eq_of_related {F : Type*} [Field F] (G : Subgroup SL(2,F)) [Finite G] :
98+
99+
lemma union_conj_noncenter_eq_of_related {F : Type*} [Field F] (G : Subgroup SL(2,F)) [Finite G] :
98100
(∀ (A B : (noncenter_MaximalAbelianSubgroupsOf G)),
99101
A ≈ B → union_conj_noncenter_MaximalAbelianSubgroupsOf G A =
100102
union_conj_noncenter_MaximalAbelianSubgroupsOf G B) := by
@@ -122,7 +124,8 @@ lemma noncenter_C_eq_of_related {F : Type*} [Field F] (G : Subgroup SL(2,F)) [Fi
122124
def lift_union_conj_noncenter_MaximalAbelianSubgroupsOf {F : Type*} [Field F]
123125
(G : Subgroup SL(2,F)) [Finite G] :=
124126
@Quotient.lift _ _ (s := lift_noncenter_MaximalAbelianSubgroupsOf G)
125-
(f := union_conj_noncenter_MaximalAbelianSubgroupsOf G) (noncenter_C_eq_of_related G)
127+
(f := union_conj_noncenter_MaximalAbelianSubgroupsOf G) (union_conj_noncenter_eq_of_related G)
128+
126129

127130

128131

@@ -237,7 +240,7 @@ noncomputable def lift_card_noncenter {F : Type*} [Field F] (G : Subgroup SL(2,F
237240

238241
def toConjClassOfSet {F : Type*} [Field F]
239242
(G : Subgroup SL(2,F)) [Finite G] : noncenter_MaximalAbelianSubgroupsOf G → Set (Set SL(2,F)) :=
240-
fun A => noncenter_ConjClassOfSet G A
243+
fun A => noncenter_ConjClassOf G A
241244

242245
lemma conj_noncenter_eq_noncenter_conj {F : Type*} [Field F] {G :Subgroup SL(2,F)}
243246
(A : MaximalAbelianSubgroupsOf G) (x : SL(2,F)) :
@@ -285,7 +288,7 @@ lemma toConjClassOfSet_eq_of_related_noncenter_subgroups {F : Type*} [Field F]
285288
A ≈ B → toConjClassOfSet G A = toConjClassOfSet G B) := by
286289
intro A B ArB
287290
obtain ⟨x, x_in_G, hx⟩ := ArB
288-
simp [toConjClassOfSet, noncenter_ConjClassOfSet]
291+
simp [toConjClassOfSet, noncenter_ConjClassOf]
289292
ext s
290293
constructor
291294
· rintro ⟨y, y_in_G, rfl⟩
@@ -299,7 +302,6 @@ lemma toConjClassOfSet_eq_of_related_noncenter_subgroups {F : Type*} [Field F]
299302
rw [MonoidHom.map_mul, MulAction.mul_smul, smul_left_cancel_iff]
300303
exact ⟨Subgroup.mul_mem G y_in_G x_in_G, rfl⟩
301304

302-
-- conj_noncenter_eq_noncenter_conj A x
303305

304306
def lift_ConjClassOfSet {F : Type*} [Field F] (G : Subgroup SL(2,F)) [Finite G] :=
305307
@Quotient.lift _ _ (s := lift_noncenter_MaximalAbelianSubgroupsOf G) (f := toConjClassOfSet G)
@@ -588,15 +590,21 @@ We compute the cardinality of the noncenter conjugacy class
588590
-/
589591
-- noncomputable def card_noncenter_C {F : Type*} [Field F] (G : Subgroup SL(2,F)) [Finite G] :
590592
-- noncenter_MaximalAbelianSubgroupsOf G → ℕ := fun A => Nat.card (noncenter_C G A)
591-
592593
/-
593594
We have the relation $|C(A^*)| = |A^*| |\mathcal{C}(A^*)|$
594595
-/
595596
lemma card_noncenter_C_eq_noncenter_MaximalAbelianSubgroup_mul_noncenter_ConjClassOfSet
596597
{F : Type*} [hF : Field F] (G : Subgroup SL(2,F)) [hG : Finite G]
597598
(A : noncenter_MaximalAbelianSubgroupsOf G) :
598599
Nat.card (union_conj_noncenter_MaximalAbelianSubgroupsOf G A) =
599-
Nat.card A * card_noncenter_ConjClassOfSet G A := by
600+
Nat.card A * card_noncenter_ConjClassOf G A := by
601+
dsimp [union_conj_noncenter_MaximalAbelianSubgroupsOf]
602+
have card_A_eq_card_conj_A (A : noncenter_MaximalAbelianSubgroupsOf G) (c : SL(2,F)) :
603+
Nat.card A.val = Nat.card (conj c • A.val :) := by simp
604+
-- rw [Set.Finite.ncard_biUnion]
605+
606+
607+
600608
sorry
601609

602610
#check Group.nat_card_center_add_sum_card_noncenter_eq_card
@@ -622,9 +630,7 @@ lemma card_noncenter_C_eq_noncenter_MaximalAbelianSubgroup_mul_noncenter_ConjCla
622630
-- rw [_root_.map_mul, ← smul_smul]
623631
-- exact z_in_conj_g_A
624632

625-
-- noncomputable def lift_card_noncenter_C {F : Type*} [Field F] (G : Subgroup SL(2,F)) [Finite G] :=
626-
-- @Quotient.lift _ _ (s := lift_noncenter_MaximalAbelianSubgroupsOf G)
627-
-- (f := card_noncenter_C G) (card_noncenter_C_eq_of_related G)
633+
628634

629635
#check Setoid.isPartition_classes
630636

@@ -639,7 +645,7 @@ We have the relation $|C_i^*| = |A_i^*| |\mathcal{C}_i^*|$
639645
lemma card_noncenter_C_eq_card_A_mul_card_noncenter_ConjClass {F : Type*} [Field F]
640646
(G : Subgroup SL(2,F)) [Finite G] (A : noncenter_MaximalAbelianSubgroupsOf G) :
641647
Nat.card (union_conj_noncenter_MaximalAbelianSubgroupsOf G A) =
642-
Nat.card A * card_noncenter_ConjClassOfSet G A := by
648+
Nat.card A * card_noncenter_ConjClassOf G A := by
643649
sorry
644650

645651
/- $G \setminus Z(\textrm{SL}_2(F)) = \bigcup_{A \in \mathcal{M}} (C A)^*$ -/
@@ -649,26 +655,172 @@ lemma subgroup_sdiff_center_eq_union_noncenter_C {F : Type*} [Field F] (G : Subg
649655

650656

651657

658+
def ConjClassOf_to_noncenter_ConjClassOf {F : Type*} [Field F] (G : Subgroup SL(2,F))
659+
(A : MaximalAbelianSubgroupsOf G) : (ConjClassOf G A) → (noncenter_ConjClassOf G (
660+
⟨noncenter A, noncenter_mem_noncenter_MaximalAbelianSubgroupsOf G A⟩)) :=
661+
fun conj_A => ⟨
662+
conj_A.val.noncenter,
663+
by
664+
obtain ⟨c, c_mem_G, conj_A_eq⟩ := conj_A.prop
665+
use c, c_mem_G
666+
rw [← conj_noncenter_eq_noncenter_conj, ← conj_A_eq]
667+
668+
669+
open Function
670+
671+
#check Set.image_union
672+
#check Set.union_diff_cancel
673+
674+
instance semiring {X : Type*} : Semiring (Set X) where
675+
add s t := Set.union s t
676+
add_assoc s t r := Set.union_assoc _ _ _
677+
zero := ⊥
678+
zero_add s := Set.empty_union _
679+
add_zero := Set.union_empty
680+
nsmul n s := sorry --⋃₀ i : Fin n, s
681+
add_comm := Set.union_comm
682+
mul s t := Set.inter s t
683+
left_distrib := Set.inter_union_distrib_left
684+
right_distrib := Set.union_inter_distrib_right
685+
zero_mul := Set.empty_inter
686+
mul_zero := Set.inter_empty
687+
mul_assoc := Set.inter_assoc
688+
one := ⊤
689+
one_mul := Set.univ_inter
690+
mul_one := Set.inter_univ
691+
nsmul_zero := sorry
692+
nsmul_succ := sorry
693+
694+
695+
lemma conj_subgroup_eq_conj_center_union_conj_noncenter {G : Type*} [Group G] (H : Subgroup G)
696+
(c : G) : (conj c • H : Set G)
697+
= (conj c • H.noncenter : Set G) ∪ (conj c • (center G ⊓ H) : Set G) := by
698+
unfold noncenter
699+
rw [← Set.image_smul, ← Set.image_smul, ← Set.image_smul, ← Set.image_union,
700+
Set.union_comm]
701+
congr
702+
rw [← Set.diff_self_inter, Set.inter_comm, show H.carrier = (H : Set G) by rfl]
703+
simp only [coe_inf]
704+
rw [Set.union_diff_cancel (Set.inter_subset_right)]
705+
706+
707+
lemma mem_coe_conj_iff_conj_coe {G : Type*} [Group G] (H : Subgroup G) (c x : G) :
708+
x ∈ conj c • H ↔ x ∈ (conj c • H : Set G) := by rfl
709+
710+
-- For Mathlib
711+
instance instNormalCenterInf {G : Type*} [Group G] {H : Subgroup G} : Normal (center G ⊓ H) := by
712+
sorry
713+
714+
-- For Mathlib
715+
lemma subset_of_union_eq_of_disjoint {G : Type*} (A B C : Set G) (hA : Disjoint A C)
716+
(h : A ∪ C = B ∪ C) : A ⊆ B := by
717+
intro a a_mem_A
718+
have a_mem_B_union_C : a ∈ B ∪ C := by
719+
rw [← h]
720+
exact Set.mem_union_left C a_mem_A
721+
suffices a ∉ C by
722+
rw [Set.mem_union] at a_mem_B_union_C
723+
grind
724+
have A_inter_C_eq_empty : A ∩ C = ∅ := Disjoint.inter_eq hA
725+
intro a_mem_C
726+
have contr : a ∈ (∅ : Set G) := by rw [← A_inter_C_eq_empty]; grind
727+
contradiction
728+
729+
730+
-- For Mathlib
731+
lemma eq_iff_union_eq_of_disjoint {G : Type*} (A B C: Set G) (hA : Disjoint A C)
732+
(hB : Disjoint B C) : A ∪ C = B ∪ C ↔ A = B := by
733+
constructor
734+
· intro h
735+
apply subset_antisymm
736+
· exact subset_of_union_eq_of_disjoint A B C hA h
737+
· exact subset_of_union_eq_of_disjoint B A C hB (id (Eq.symm h))
738+
· intro h
739+
rw [h]
740+
741+
-- it is not clear whether I should be defining `Subgroup.noncenter`
742+
-- or trying an alternative formalization
743+
-- argument is symmetric, surely there must be a tactic for such cases
744+
lemma conj_eq_conj_iff {G : Type*} [Group G] {c c' : G} (H : Subgroup G) :
745+
conj c • H.noncenter = conj c' • H.noncenter ↔ conj c • H = conj c' • H := by
746+
-- have := conj_subgroup_eq_conj_center_union_conj_noncenter H c
747+
suffices conj c • H.noncenter = conj c' • H.noncenter ↔ (conj c • H : Set G) = conj c' • H by
748+
simp [this]
749+
constructor <;> intro h <;> ext x
750+
· rw [mem_coe_conj_iff_conj_coe, mem_coe_conj_iff_conj_coe, h]
751+
· rw [← mem_coe_conj_iff_conj_coe, ← mem_coe_conj_iff_conj_coe, h]
752+
rw [conj_subgroup_eq_conj_center_union_conj_noncenter]
753+
have key₁ : conj c • (center G ⊓ H) = center G ⊓ H := Subgroup.Normal.conj_smul_eq_self c _
754+
norm_cast
755+
rw [key₁]
756+
push_cast
757+
rw [conj_subgroup_eq_conj_center_union_conj_noncenter]
758+
have key₂ : conj c' • (center G ⊓ H) = center G ⊓ H := Subgroup.Normal.conj_smul_eq_self c' _
759+
norm_cast
760+
rw [key₂]
761+
symm
762+
rw [eq_iff_union_eq_of_disjoint _ _]
763+
· rw [disjoint_comm, disjoint_iff, eq_bot_iff, ← key₁]
764+
intro x ⟨x_mem_center, x_mem_conj⟩
765+
simp [Subgroup.noncenter] at x_mem_conj
766+
push_cast at x_mem_center
767+
rw [Set.mem_smul_set_iff_inv_smul_mem] at x_mem_conj x_mem_center
768+
rw [Set.mem_diff] at x_mem_conj
769+
suffices (conj c)⁻¹ • x ∈ center G by
770+
absurd x_mem_conj.right
771+
exact this
772+
apply Set.inter_subset_left
773+
apply x_mem_center
774+
· sorry
775+
776+
777+
lemma Bijective_ConjClassOf_to_noncenter_ConjClassOf {F : Type*} [Field F] (G : Subgroup SL(2,F))
778+
(A : MaximalAbelianSubgroupsOf G) : Bijective (ConjClassOf_to_noncenter_ConjClassOf G A) := by
779+
refine ⟨?Injective, ?Surjective⟩
780+
· intro conj_A conj_B hAB
781+
obtain ⟨c, c_mem_G, conj_A_eq⟩ := conj_A.prop
782+
obtain ⟨c', c'_mem_G, conj_B_eq⟩ := conj_B.prop
783+
simp [ConjClassOf_to_noncenter_ConjClassOf] at hAB
784+
rw [← conj_A_eq, ← conj_B_eq, conj_noncenter_eq_noncenter_conj,
785+
conj_noncenter_eq_noncenter_conj] at hAB
786+
rw [conj_eq_conj_iff] at hAB
787+
apply Subtype.ext
788+
rw [← conj_A_eq, ← conj_B_eq, hAB]
789+
· intro ⟨A_noncenter, c, c_mem_G, conj_A_noncenter_eq⟩
790+
use ⟨conj c • A, by simp [ConjClassOf]; use c⟩
791+
simp [ConjClassOf_to_noncenter_ConjClassOf, ← conj_A_noncenter_eq]
792+
exact conj_noncenter_eq_noncenter_conj A c
793+
794+
795+
#check Function.Bijective
652796
/-
653797
Theorem 2.4 ii)
654798
$|\mathcal{C}_i| = |\mathcal{C}_i^*|$
655799
-/
656800
lemma card_noncenter_ConjClassOfSet_eq_card_ConjClassOfSet {F : Type*} [Field F] (G : Subgroup SL(2,F))
657801
(A : MaximalAbelianSubgroupsOf G) :
658-
Nat.card (ConjClassOfSet G A) =
659-
Nat.card (noncenter_ConjClassOfSet G (
802+
Nat.card (ConjClassOf G A) =
803+
Nat.card (noncenter_ConjClassOf G (
660804
⟨noncenter A, noncenter_mem_noncenter_MaximalAbelianSubgroupsOf G A⟩
661805
)) := by
662-
apply Nat.card_eq_of_bijective sorry
663-
sorry
806+
exact Nat.card_eq_of_bijective _ (Bijective_ConjClassOf_to_noncenter_ConjClassOf G A)
807+
664808

809+
noncomputable def conjClassOf_to_G {F : Type*} [Field F] (G : Subgroup SL(2,F))
810+
(A : MaximalAbelianSubgroupsOf G) : ConjClassOf G A → G :=
811+
fun ⟨_, h⟩ => ⟨h.choose, h.choose_spec.left⟩
812+
813+
def conjClassOf_to_quot_normalizer {F : Type*} [Field F] (G : Subgroup SL(2,F))
814+
(A : MaximalAbelianSubgroupsOf G) : ConjClassOf G A → G ⧸ ((A.val.subgroupOf G).normalizer) := sorry
665815
/-
666816
Theorem 2.4 iii)
667817
$|\mathcal{C}_i| = [G : N_G(A_i)]$
668818
-/
669-
lemma card_ConjClassOfSet_eq_index_normalizer {F : Type*} [Field F] (G : Subgroup SL(2,F))
819+
lemma card_ConjClassOf_eq_index_normalizer {F : Type*} [Field F] (G : Subgroup SL(2,F))
670820
(A : MaximalAbelianSubgroupsOf G) :
671-
Nat.card (ConjClassOfSet G A) = index (normalizer (A.val.subgroupOf G)) := by sorry
821+
Nat.card (ConjClassOf G A) = index (normalizer (A.val.subgroupOf G)) := by
822+
823+
sorry
672824

673825
noncomputable instance {F : Type*} [Field F] {G : Subgroup SL(2,F)} [Finite G] :
674826
Fintype (Quotient (lift_MaximalAbelianSubgroupsOf G)) := by infer_instance
@@ -681,8 +833,6 @@ the setNormalizer needs to be restricted to G
681833
-- @Quotient.lift _ _ (s := lift_noncenter_MaximalAbelianSubgroupsOf G)
682834
-- (fun (A_star : noncenter_MaximalAbelianSubgroupsOf G) => index (setNormalizer (A_star.val)))
683835

684-
685-
686836
/-
687837
Theorem 2.4 iv)
688838
$|G \setminus Z| = \sum_{[A] \in \mathfrak{M} / \sim } |[A*]| |[C(A)*]|$

0 commit comments

Comments
 (0)