Skip to content

Commit 658f8de

Browse files
committed
project clean up
- move common options to lakefile.toml instead of at the top of each file. Turning on noimplit vars caused some fixes in Ch7. - simplify a few proofs in Ch5 - remove #min_imports and #eval and #check. AFAIU these should only be used during development and not checked in. - pasted the most current output of #min_imports. - removed some lemmas that felt no longer needed. - some whitespace clean up.
1 parent d8668df commit 658f8de

11 files changed

Lines changed: 41 additions & 203 deletions

File tree

ClassificationOfSubgroups/Ch4_PGLIsoPSLOverAlgClosedField/ProjectiveGeneralLinearGroup.lean

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import Mathlib.FieldTheory.IsAlgClosed.Basic
22
import Mathlib.LinearAlgebra.Matrix.GeneralLinearGroup.Defs
33

4-
set_option linter.style.longLine true
5-
set_option autoImplicit false
64
set_option maxHeartbeats 0
75

86
universe u v w

ClassificationOfSubgroups/Ch5_PropertiesOfSLOverAlgClosedField/S1_SpecialMatrices.lean

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,5 +182,3 @@ lemma neg_d_mul_w (δ : Fˣ) : -(d δ * w) = d (-δ) * w := by rw [← neg_mul,
182182
end Interactions
183183

184184
end SpecialMatrices
185-
186-
#min_imports

ClassificationOfSubgroups/Ch5_PropertiesOfSLOverAlgClosedField/S2_SpecialSubgroups.lean

Lines changed: 8 additions & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
import ClassificationOfSubgroups.Ch5_PropertiesOfSLOverAlgClosedField.S1_SpecialMatrices
22
import Mathlib.Algebra.Category.Grp.Images
33
import Mathlib.Analysis.Normed.Field.Lemmas
4+
import Mathlib.GroupTheory.PGroup
45
import Mathlib.Order.CompletePartialOrder
5-
import Mathlib.GroupTheory.Sylow
6-
7-
set_option linter.style.longLine true
8-
set_option maxHeartbeats 0
96

107
open Matrix MatrixGroups Subgroup Pointwise SpecialMatrices
118

@@ -20,6 +17,7 @@ variable
2017
namespace MatrixShapes
2118

2219
def 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
2321
def IsLowerTriangular (x : Matrix (Fin 2) (Fin 2) F) : Prop := x 0 1 = 0
2422
def 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-
354346
def 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
438379
instance : ((S F).subgroupOf (L F)).Normal := normal_S_subgroupOf_L
439380

440381
noncomputable 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-
457385
def 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-
467390
def 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-
508429
section Center
509430

510431
def 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

520441
lemma neg_one_mem_Z : (-1 : SL(2,F)) ∈ Z F := by simp [Z]
521442

522-
523443
lemma 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-
529448
lemma 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]
553471
lemma 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-
570487
lemma 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]
578493
lemma 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-
615529
lemma 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

697611
instance IsCommutative_Z : IsMulCommutative (Z F) := inferInstance
698612

699-
700613
namespace IsPGroup
701614

702-
703615
/- Lemma 2.1. If G is a finite group of order pm where p is prime and m > 0,
704616
then p divides |Z(G)|.-/
705617
lemma 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-
733644
def 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-
805715
lemma 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-
826731
section CommutativeSubgroups
827732

828733
lemma 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

844741
instance IsMulCommutative_D : IsMulCommutative (D F) := by
845742
rw [IsMulCommutative_iff]
@@ -866,7 +763,6 @@ end CommutativeSubgroups
866763
theorem val_eq_neg_one {a : Fˣ} : (a : F) = -1 ↔ a = (-1 : Fˣ) := by
867764
rw [Units.ext_iff, Units.coe_neg_one];
868765

869-
870766
lemma 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-
894789
lemma mem_D_iff {x : SL(2,F)} : x ∈ D F ↔ ∃ δ : Fˣ, d δ = x := by rfl
895790

896-
897791
lemma 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-
931824
end SpecialSubgroups
932-
933-
#min_imports

ClassificationOfSubgroups/Ch5_PropertiesOfSLOverAlgClosedField/S3_JordanNormalFormOfSL.lean

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
import ClassificationOfSubgroups.Ch5_PropertiesOfSLOverAlgClosedField.S2_SpecialSubgroups
2-
import Mathlib
3-
4-
set_option autoImplicit false
5-
set_option linter.style.longLine true
2+
import Mathlib.Algebra.GroupWithZero.Conj
3+
import Mathlib.FieldTheory.IsAlgClosed.Basic
4+
import Mathlib.LinearAlgebra.Matrix.GeneralLinearGroup.Defs
5+
import Mathlib.RingTheory.Artinian.Instances
6+
import Mathlib.RingTheory.FiniteLength
7+
import Mathlib.RingTheory.PicardGroup
8+
import Mathlib.RingTheory.SimpleRing.Principal
69

710
open Matrix MatrixGroups Subgroup Pointwise
811

@@ -69,7 +72,6 @@ lemma associated_of_dvd_mul_irreducibles {k : Type*} [Field k] {q p₁ p₂: k[X
6972
rw [q_eq, hk₁, hk₂, mul_assoc, ← mul_assoc k₁, mul_comm k₁, mul_assoc, ← mul_assoc,
7073
associated_mul_isUnit_right_iff (IsUnit.mul h₁ h₂)]
7174

72-
7375
lemma minpoly_eq_X_sub_C_implies_matrix_is_diagonal { n R : Type*} [Fintype n] [DecidableEq n]
7476
[ CommRing R ] [NoZeroDivisors R] {M : Matrix n n R} {a : R}
7577
(hM : minpoly R M = (X - C a)) : M = diagonal (fun _ ↦ a) := by
@@ -79,7 +81,6 @@ lemma minpoly_eq_X_sub_C_implies_matrix_is_diagonal { n R : Type*} [Fintype n] [
7981
-- This shows M is diagonal
8082
exact M_eq_diagonal
8183

82-
8384
/-
8485
The product of the top left entry and the bottom right entry equals one
8586
if the bottom left entry is zero.
@@ -107,7 +108,7 @@ A 2x2 matrix of the special linear group is diagonal, and can be written as `d
107108
if and only if the bottom left and top right entries are zero.
108109
-/
109110
lemma SpecialLinearGroup.fin_two_diagonal_iff (x : SL(2,F)) :
110-
x 0 1 = 0 ∧ x 1 0 = 0 ↔ ∃ δ : Fˣ, d δ = x := by
111+
IsDiagonal x.val ↔ ∃ δ : Fˣ, d δ = x := by
111112
constructor
112113
· rintro ⟨hβ, hγ⟩
113114
rcases get_entries x with ⟨α, β, γ, δ, hα, -, -, hδ, -⟩
@@ -128,7 +129,7 @@ A 2x2 matrix of the special linear group is antidiagonal, and can be written as
128129
`d δ * w` for some `δ ∈ Fˣ` if and only if the top left and bottom right entries are zero.
129130
-/
130131
lemma SpecialLinearGroup.fin_two_antidiagonal_iff (x : SL(2,F)) :
131-
x 0 0 = 0 ∧ x 1 1 = 0 ↔ ∃ δ : Fˣ, (d δ) * w = x := by
132+
IsAntiDiagonal x.val ↔ ∃ δ : Fˣ, (d δ) * w = x := by
132133
constructor
133134
· rintro ⟨hα, hδ⟩
134135
have det_eq_one : det (x : Matrix (Fin 2) (Fin 2) F) = 1 := by rw [SpecialLinearGroup.det_coe]
@@ -267,7 +268,7 @@ lemma det_eq_det_IsConj {n : ℕ} {M N : Matrix (Fin n) (Fin n) R} (h : IsConj N
267268
If the underlying matrices are the same then the matrices
268269
as subtypes of the special linear group are also the same
269270
-/
270-
lemma SpecialLinearGroup.eq_of {S L : SL(2,F) } (h : (S : Matrix (Fin 2) (Fin 2) F) = L) :
271+
lemma SpecialLinearGroup.eq_of {S L : SL(2,F)} (h : (S : Matrix (Fin 2) (Fin 2) F) = L) :
271272
S = L := by ext <;> simp [h]
272273

273274
lemma IsConj_coe {M N : Matrix (Fin 2) (Fin 2) F} (hM : det M = 1) (hN : det N = 1)
@@ -277,7 +278,6 @@ lemma IsConj_coe {M N : Matrix (Fin 2) (Fin 2) F} (hM : det M = 1) (hN : det N =
277278
apply SpecialLinearGroup.eq_of
278279
rw [SpecialLinearGroup.coe_mul, SpecialLinearGroup.coe_mul, hC]
279280

280-
281281
/-
282282
Lemma 1.5.
283283
Each element of SL(2,F) is conjugate to either
@@ -363,6 +363,3 @@ theorem SL2_IsConj_d_or_IsConj_s_or_IsConj_neg_s_of_AlgClosed [DecidableEq F] [I
363363
simp only [SpecialMatrices.d, IsUnit.unit_spec]
364364
-- conjugation is transitive
365365
apply IsConj.trans isConj₂.symm isConj₁.symm
366-
367-
368-
#min_imports

0 commit comments

Comments
 (0)