11import ClassificationOfSubgroups.Ch5_PropertiesOfSLOverAlgClosedField.S1_SpecialMatrices
22import Mathlib.Algebra.Category.Grp.Images
33import Mathlib.Analysis.Normed.Field.Lemmas
4+ import Mathlib.GroupTheory.PGroup
45import Mathlib.Order.CompletePartialOrder
5- import Mathlib.GroupTheory.Sylow
6-
7- set_option linter.style.longLine true
8- set_option maxHeartbeats 0
96
107open Matrix MatrixGroups Subgroup Pointwise SpecialMatrices
118
@@ -20,6 +17,7 @@ variable
2017namespace MatrixShapes
2118
2219def IsDiagonal (x : Matrix (Fin 2 ) (Fin 2 ) F) : Prop := x 0 1 = 0 ∧ x 1 0 = 0
20+ def IsAntiDiagonal (x : Matrix (Fin 2 ) (Fin 2 ) F) : Prop := x 0 0 = 0 ∧ x 1 1 = 0
2321def IsLowerTriangular (x : Matrix (Fin 2 ) (Fin 2 ) F) : Prop := x 0 1 = 0
2422def IsUpperTriangular (x : Matrix (Fin 2 ) (Fin 2 ) F) : Prop := x 1 0 = 0
2523
@@ -345,12 +343,6 @@ lemma D_join_S_eq_L (F : Type*) [Field F]: D F ⊔ S F = L F := by
345343 rfl
346344
347345
348-
349-
350-
351- -- second isomorphism theorem!!!!
352- #check QuotientGroup.quotientInfEquivProdNormalQuotient
353-
354346def D_subgroupOf_L_mulEquiv_D : (D F).subgroupOf (L F) ≃* D F := by
355347 refine subgroupOfEquivOfLe ?_
356348 rintro d ⟨δ, rfl⟩
@@ -383,87 +375,18 @@ lemma left_subgroupOf_join_right_subgroupOf_join_eq_join_subgroupOf_join {G : Ty
383375 rw [comap_sup_eq_of_le_range f hH hK]
384376 simp [f]
385377
386- lemma simplify₁ : ((D F).subgroupOf (D F ⊔ S F) ⊔ (S F).subgroupOf (D F ⊔ S F)) = ⊤ :=
387- left_subgroupOf_join_right_subgroupOf_join_eq_join_subgroupOf_join (D F) (S F)
388-
389- /- D and S have trivial interesection, so the following holds -/
390- lemma simplify₂ : ((S F).subgroupOf (D F ⊔ S F)).subgroupOf ((D F).subgroupOf (D F ⊔ S F)) = ⊥ := by
391- simp
392- rw [disjoint_iff, ← comap_subtype, ← comap_subtype, ← comap_inf, inf_comm, D_meet_S_eq_bot]
393- simp
394-
395- /- The second isomorphism theorem -/
396- noncomputable def D_join_S_quot_S_subgroupOf_D_join_S_mulEquiv_D_subgroupOf_D_join_S
397- (F : Type *) [Field F] :=
398- (QuotientGroup.quotientInfEquivProdNormalQuotient
399- (H := (D F).subgroupOf (D F ⊔ S F:)) (N := (S F).subgroupOf (D F ⊔ S F :))).symm
400-
401- #check D_join_S_quot_S_subgroupOf_D_join_S_mulEquiv_D_subgroupOf_D_join_S
402-
403- def LHS (F : Type *) [Field F] :=
404- @QuotientGroup.equivQuotientSubgroupOfOfEq
405-
406-
407-
408- #check QuotientGroup.quotientBot
409-
410- #check MulEquiv.trans
411-
412- #check QuotientGroup.equivQuotientSubgroupOfOfEq
413-
414- #check QuotientGroup.quotientMulEquivOfEq
415-
416- def RHS (F : Type *) [Field F] :=
417- @QuotientGroup.equivQuotientSubgroupOfOfEq ((D F).subgroupOf (D F ⊔ S F) :) _
418- (A' := ((S F).subgroupOf (D F ⊔ S F)).subgroupOf ((D F).subgroupOf (D F ⊔ S F)))
419- -- below were ⊤ : (D F).subgroupOf (D F ⊔ S F)
420- (A := ⊤)--((D F).subgroupOf (D F ⊔ S F)).subgroupOf ((D F).subgroupOf (D F ⊔ S F)))
421- (B' := ⊥)
422- (B := ⊤)--((D F).subgroupOf (D F ⊔ S F)).subgroupOf ((D F).subgroupOf (D F ⊔ S F)))
423- (hAN := normal_subgroupOf)
424- (hBN := normal_subgroupOf)
425- (h' := simplify₂)
426- (h := Eq.refl _)
427-
428- #check RHS
429-
430-
431- -- def RHS' (F : Type*) [Field F] :
432- -- ↥(⊤ : Subgroup ↥((D F).subgroupOf (D F ⊔ S F))) ⧸ (⊥ : Subgroup ((D F).subgroupOf (D F ⊔ S F))).subgroupOf (⊤ : Subgroup ↥((D F).subgroupOf (D F ⊔ S F)))
433- -- ≃*
434- -- ↥(⊤ : Subgroup ↥((D F).subgroupOf (D F ⊔ S F))) :=
435- -- @QuotientGroup.quotientBot (((D F).subgroupOf (D F ⊔ S F)) :) _
436-
437378-- Conclusion to reach is
438379instance : ((S F).subgroupOf (L F)).Normal := normal_S_subgroupOf_L
439380
440381noncomputable def L_quot_S_subgroupOf_L_mulEquiv_D_subgroupOf_L :=
441382 QuotientGroup.quotientInfEquivProdNormalQuotient
442383 (H := (L F).subgroupOf (L F)) (N := (S F).subgroupOf (L F :))
443384
444-
445- #check L_quot_S_subgroupOf_L_mulEquiv_D_subgroupOf_L
446-
447- -- lemma foo : ((S F).subgroupOf (L F)).subgroupOf ((L F).subgroupOf (L F)) = (S F).subgroupOf (L F) := by sorry
448-
449- #check D_join_S_quot_S_subgroupOf_D_join_S_mulEquiv_D_subgroupOf_D_join_S
450-
451- #check L_quot_S_subgroupOf_L_mulEquiv_D_subgroupOf_L
452-
453- #check ((S F).subgroupOf (L F)).subgroupOf ((L F).subgroupOf (L F) ⊔ (S F).subgroupOf (L F))
454-
455- --@QuotientGroup.Quotient.group (L F) _ ((S F).subgroupOf (L F)) (normal_S_subgroupOf_L)
456-
457385def D_join_S_monoidHom_D : (D F × S F :) →* D F where
458386 toFun d_s := d_s.1
459387 map_one' := by simp
460388 map_mul' := by simp
461389
462-
463-
464- #check QuotientGroup.quotientKerEquivRange
465-
466-
467390def DW (F : Type *) [Field F] : Subgroup SL(2 ,F) where
468391 carrier := { d δ | δ : Fˣ} ∪ { d δ * w | δ : Fˣ}
469392 mul_mem' := by
@@ -495,16 +418,14 @@ lemma D_leq_DW : D F ≤ DW F := by
495418 left
496419 apply exists_apply_eq_apply
497420
498-
499- lemma Dw_leq_DW : (D F : Set SL(2 ,F)) * ({w} : Set SL(2 ,F)) ⊆ (DW F : Set SL(2 ,F)) := by
421+ lemma Dw_leq_DW : (D F : Set SL(2 ,F)) * ({w} : Set SL(2 ,F)) ⊆ (DW F : Set SL(2 ,F)) := by
500422 rintro x ⟨d', hd', w, hw, rfl⟩
501423 obtain ⟨δ, rfl⟩ := hd'
502424 rw [DW, coe_set_mk]
503425 right
504426 use δ
505427 rw [Set.mem_singleton_iff] at hw
506428 rw [hw]
507-
508429section Center
509430
510431def Z (R : Type *) [CommRing R] : Subgroup SL(2 ,R) := closure {(-1 : SL(2 ,R))}
@@ -519,13 +440,11 @@ lemma get_entries (x : SL(2,F)) : ∃ α β γ δ,
519440
520441lemma neg_one_mem_Z : (-1 : SL(2 ,F)) ∈ Z F := by simp [Z]
521442
522-
523443lemma Odd.neg_one_zpow {α : Type *} [Group α] [HasDistribNeg α] {n : ℤ} (h : Odd n) :
524444 (-1 : α) ^ n = -1 := by
525445 rw [← neg_eq_iff_eq_neg, ← neg_one_mul, Commute.neg_one_left, mul_zpow_self]
526446 exact Even.neg_one_zpow <| Odd.add_one h
527447
528-
529448lemma closure_neg_one_eq : (closure {(-1 : SL(2 ,R))} : Set SL(2 ,R)) = {1 , -1 } := by
530449 ext x
531450 constructor
@@ -548,7 +467,6 @@ lemma closure_neg_one_eq : (closure {(-1 : SL(2,R))} : Set SL(2,R)) = {1, -1} :=
548467 · rw [SetLike.mem_coe]
549468 exact mem_closure_singleton_self (-1 )
550469
551-
552470@[simp]
553471lemma neg_one_neq_one_of_two_ne_zero [NeZero (2 : F)] : (1 : SL(2 ,F)) ≠ (-1 : SL(2 ,F)) := by
554472 intro h
@@ -566,14 +484,11 @@ lemma Field.one_eq_neg_one_of_two_eq_zero (two_eq_zero : (2 : F) = 0) : 1 = (-1
566484 rw [← one_add_one_eq_two, add_eq_zero_iff_neg_eq'] at two_eq_zero
567485 exact two_eq_zero.symm
568486
569-
570487lemma SpecialLinearGroup.neg_one_eq_one_of_two_eq_zero (two_eq_zero : (2 : F) = 0 ) :
571488 1 = (-1 : SL(2 ,F)) := by
572489 ext
573490 <;> simpa using Field.one_eq_neg_one_of_two_eq_zero two_eq_zero
574491
575-
576-
577492@[simp]
578493lemma set_Z_eq : (Z R : Set SL(2 ,R)) = {1 , -1 } := by
579494 dsimp [Z]
@@ -592,7 +507,7 @@ instance : Finite (Z F) := by
592507 simp only [mem_Z_iff]
593508 exact Finite.Set.finite_insert 1 {-1 }
594509
595- lemma center_SL2_eq_Z (R : Type *) [CommRing R] [NoZeroDivisors R]: center SL(2 ,R) = Z R := by
510+ lemma center_SL2_eq_Z (R : Type *) [CommRing R] [NoZeroDivisors R]: center SL(2 ,R) = Z R := by
596511 ext x
597512 constructor
598513 · intro hx
@@ -611,7 +526,6 @@ instance : Finite (center SL(2,F)) := by
611526 rw [center_SL2_eq_Z F]
612527 infer_instance
613528
614-
615529lemma card_Z_eq_two_of_two_ne_zero [NeZero (2 : F)]: Nat.card (Z F) = 2 := by
616530 rw [Nat.card_eq_two_iff]
617531 use 1 , ⟨-1 , neg_one_mem_Z⟩
@@ -696,10 +610,8 @@ instance IsCyclic_Z : IsCyclic (Z F) := by
696610
697611instance IsCommutative_Z : IsMulCommutative (Z F) := inferInstance
698612
699-
700613namespace IsPGroup
701614
702-
703615/- Lemma 2.1. If G is a finite group of order pm where p is prime and m > 0,
704616then p divides |Z(G)|.-/
705617lemma p_dvd_card_center {H : Type *} {p : ℕ} (hp: Nat.Prime p) [Group H] [Finite H] [Nontrivial H]
@@ -729,7 +641,6 @@ def SZ (F : Type*) [Field F] : Subgroup SL(2,F) where
729641 rintro x (⟨σ, rfl⟩ | ⟨σ, rfl⟩)
730642 repeat ' simp
731643
732-
733644def SZ' (F : Type *) [Field F] : Subgroup SL(2 ,F) where
734645 carrier := S F * Z F
735646 mul_mem' := by
@@ -801,7 +712,6 @@ lemma SZ_eq_SZ' {F : Type*} [Field F] : SZ' F = SZ F := by
801712 · simp
802713 · simp
803714
804-
805715lemma S_mul_Z_subset_SZ :
806716 ((S F) : Set SL(2 ,F)) * ((Z F) : Set SL(2 ,F)) ⊆ ((SZ F) : Set SL(2 ,F)) := by
807717 rintro x ⟨t', ht', z, hz, hσ, h⟩
@@ -818,28 +728,15 @@ lemma S_mul_Z_subset_SZ :
818728 right
819729 use σ
820730 simp
821-
822- -- ordering propositions so when proving it can be done more efficiently
823- #check Set.mem_mul
824-
825-
826731section CommutativeSubgroups
827732
828733lemma IsMulCommutative_iff {G : Type *} [Group G] {H : Subgroup G} :
829734 IsMulCommutative H ↔ ∀ x y : H, x * y = y * x := by
830735 constructor
831- · intro h x y
832- have := @mul_comm_of_mem_isMulCommutative G _ H h x y (by simp) (by simp)
833- exact SetLike.coe_eq_coe.mp this
834- · intro h
835- rw [← le_centralizer_iff_isMulCommutative]
836- intro y hy
837- rw [mem_centralizer_iff]
838- intro x hx
839- simp only [SetLike.mem_coe] at hx
840- specialize h ⟨x, hx⟩ ⟨y, hy⟩
841- simp only [MulMemClass.mk_mul_mk, Subtype.mk.injEq] at h
842- exact h
736+ . intro h x y
737+ exact mul_comm x y
738+ . intro h
739+ exact {is_comm := { comm := h }}
843740
844741instance IsMulCommutative_D : IsMulCommutative (D F) := by
845742 rw [IsMulCommutative_iff]
@@ -866,7 +763,6 @@ end CommutativeSubgroups
866763theorem val_eq_neg_one {a : Fˣ} : (a : F) = -1 ↔ a = (-1 : Fˣ) := by
867764 rw [Units.ext_iff, Units.coe_neg_one];
868765
869-
870766lemma ex_of_card_D_gt_two {D₀ : Subgroup SL(2 ,F) }(hD₀ : 2 < Nat.card D₀) (D₀_leq_D : D₀ ≤ D F) :
871767 ∃ δ : Fˣ, (δ : F) ≠ 1 ∧ (δ : F) ≠ -1 ∧ d δ ∈ D₀ := by
872768 by_contra! h
@@ -890,10 +786,8 @@ lemma ex_of_card_D_gt_two {D₀ : Subgroup SL(2,F) }(hD₀ : 2 < Nat.card D₀)
890786 le_trans (Subgroup.card_le_of_le D₀_le_Z) card_Z_le_two
891787 linarith
892788
893-
894789lemma mem_D_iff {x : SL(2 ,F)} : x ∈ D F ↔ ∃ δ : Fˣ, d δ = x := by rfl
895790
896-
897791lemma mem_D_w_iff {x : SL(2 ,F)} : x ∈ (D F : Set SL(2 ,F)) * {w} ↔ ∃ δ : Fˣ, d δ * w = x := by
898792 constructor
899793 · rintro ⟨d', ⟨δ, rfl⟩, w, ⟨rfl⟩, rfl⟩
@@ -927,7 +821,4 @@ lemma S_join_Z_eq_SZ : S F ⊔ Z F = SZ F := by
927821 simp
928822 apply Subgroup.subset_closure mem_Z_mul_T
929823
930-
931824end SpecialSubgroups
932-
933- #min_imports
0 commit comments