@@ -15,15 +15,15 @@ public import Mathlib.Topology.Compactification.OnePoint.Basic
1515# One-point compactification and projectivization
1616
1717We construct a set-theoretic equivalence between
18- `OnePoint K` and the projectivization `ℙ K (K × K)` for an arbitrary division ring `K`.
18+ `OnePoint K` and the projectivization `ℙ K (Fin 2 → K)` for an arbitrary division ring `K`.
1919
2020TODO: Add the extension of this equivalence to a homeomorphism in the case `K = ℝ`,
2121where `OnePoint ℝ` gets the topology of one-point compactification.
2222
2323
2424## Main definitions and results
2525
26- * `OnePoint.equivProjectivization` : the equivalence `OnePoint K ≃ ℙ K (K × K)`.
26+ * `OnePoint.equivProjectivization` : the equivalence `OnePoint K ≃ ℙ K (Fin 2 → K)`.
2727
2828 ## Tags
2929
@@ -40,20 +40,15 @@ section MatrixProdAction
4040
4141variable {R n : Type *} [Semiring R] [Fintype n] [DecidableEq n]
4242
43- instance : Module (Matrix (Fin 2 ) (Fin 2 ) R) (R × R) :=
44- (LinearEquiv.finTwoArrow R R).symm.toAddEquiv.module _
43+ @[simp] lemma Matrix.mulVec_fin_two (m : Matrix (Fin 2 ) (Fin 2 ) R) (v : Fin 2 → R) :
44+ m *ᵥ v = ![m 0 0 * v 0 + m 0 1 * v 1 , m 1 0 * v 0 + m 1 1 * v 1 ] := by
45+ ext i
46+ fin_cases i <;>
47+ simp [mulVec_eq_sum]
4548
46- instance {S} [DistribSMul S R] [SMulCommClass R S R] :
47- SMulCommClass (Matrix (Fin 2 ) (Fin 2 ) R) S (R × R) :=
48- (LinearEquiv.finTwoArrow R R).symm.smulCommClass _ _
49-
50- @[simp] lemma Matrix.fin_two_smul_prod (g : Matrix (Fin 2 ) (Fin 2 ) R) (v : R × R) :
51- g • v = (g 0 0 * v.1 + g 0 1 * v.2 , g 1 0 * v.1 + g 1 1 * v.2 ) := by
52- simp [Equiv.smul_def, smul_eq_mulVec, Matrix.mulVec_eq_sum]
53-
54- @[simp] lemma Matrix.GeneralLinearGroup.fin_two_smul_prod {R : Type *} [CommRing R]
55- (g : GL (Fin 2 ) R) (v : R × R) :
56- g • v = (g 0 0 * v.1 + g 0 1 * v.2 , g 1 0 * v.1 + g 1 1 * v.2 ) := by
49+ @[simp] lemma Matrix.GeneralLinearGroup.fin_two_smul {R : Type *} [CommRing R]
50+ (g : GL (Fin 2 ) R) (v : Fin 2 → R) :
51+ g • v = ![g 0 0 * v 0 + g 0 1 * v 1 , g 1 0 * v 0 + g 1 1 * v 1 ] := by
5752 simp [Units.smul_def]
5853
5954end MatrixProdAction
@@ -65,40 +60,39 @@ section DivisionRing
6560variable (K : Type *) [DivisionRing K] [DecidableEq K]
6661
6762/-- The one-point compactification of a division ring `K` is equivalent to
68- the projectivization `ℙ K (K × K)`. -/
69- def equivProjectivization :
70- OnePoint K ≃ ℙ K (K × K) where
71- toFun p := p.elim (mk K (1 , 0 ) (by simp)) (fun t ↦ mk K (t, 1 ) (by simp))
63+ the projectivization `ℙ K (Fin 2 → K)`. -/
64+ def equivProjectivization : OnePoint K ≃ ℙ K (Fin 2 → K) where
65+ toFun p := p.elim (mk K ![1 , 0 ] (by simp)) (fun t ↦ mk K ![t, 1 ] (by simp))
7266 invFun p := by
7367 refine Projectivization.lift
74- (fun u : {v : K × K // v ≠ 0 } ↦ if u.1 . 2 = 0 then ∞ else ((u.1 . 2 )⁻¹ * u.1 . 1 )) ?_ p
75- rintro ⟨-, hv⟩ ⟨⟨x, y⟩ , hw⟩ t rfl
68+ (fun u : {v : Fin 2 → K // v ≠ 0 } ↦ if u.1 1 = 0 then ∞ else ((u.1 1 )⁻¹ * u.1 0 )) ?_ p
69+ rintro ⟨-, hv⟩ ⟨w , hw⟩ t rfl
7670 have ht : t ≠ 0 := by rintro rfl; simp at hv
77- by_cases h₀ : y = 0 <;> simp [h₀, ht, mul_assoc]
71+ by_cases h₀ : w 1 = 0 <;> simp [h₀, ht, mul_assoc]
7872 left_inv p := by cases p <;> simp
7973 right_inv p := by
80- induction p using ind with | h p hp =>
81- obtain ⟨x, y⟩ := p
82- by_cases h₀ : y = 0 <;> simp only [mk_eq_mk_iff', h₀, Projectivization.lift_mk, if_true,
83- if_false, OnePoint.elim_infty, OnePoint.elim_some, Prod.smul_mk, Prod.mk.injEq, smul_eq_mul,
84- mul_zero, and_true]
85- · use x⁻¹
86- simp_all
87- · exact ⟨y ⁻¹, rfl, inv_mul_cancel₀ h₀⟩
74+ induction p using ind with | h w hw =>
75+ by_cases h₀ : w 1 = 0 <;> simp only [mk_eq_mk_iff', h₀, Projectivization.lift_mk, if_true,
76+ if_false, OnePoint.elim_infty, OnePoint.elim_some]
77+ · have : w 0 ≠ 0 := fun h ↦ hw <| funext <| by simp_all
78+ use (w 0 )⁻¹
79+ ext i
80+ fin_cases i <;> simp_all
81+ · exact ⟨(w 1 ) ⁻¹, funext <| by simp [ inv_mul_cancel₀ h₀] ⟩
8882
8983@[simp]
9084lemma equivProjectivization_apply_infinity :
91- equivProjectivization K ∞ = mk K ⟨ 1 , 0 ⟩ (by simp) :=
85+ equivProjectivization K ∞ = mk K ![ 1 , 0 ] (by simp) :=
9286 rfl
9387
9488@[simp]
9589lemma equivProjectivization_apply_coe (t : K) :
96- equivProjectivization K t = mk K ⟨ t, 1 ⟩ (by simp) :=
90+ equivProjectivization K t = mk K ![ t, 1 ] (by simp) :=
9791 rfl
9892
9993@[simp]
100- lemma equivProjectivization_symm_apply_mk (x y : K) (h : (x, y) ≠ 0 ) :
101- (equivProjectivization K).symm (mk K ⟨x, y⟩ h) = if y = 0 then ∞ else y ⁻¹ * x := by
94+ lemma equivProjectivization_symm_apply_mk (v : Fin 2 → K) (h : v ≠ 0 ) :
95+ (equivProjectivization K).symm (mk K v h) = if v 1 = 0 then ∞ else (v 1 ) ⁻¹ * v 0 := by
10296 simp [equivProjectivization]
10397
10498end DivisionRing
@@ -112,9 +106,14 @@ with the `ℙ¹(K)` (which is given explicitly by Möbius transformations). -/
112106instance instGLAction : MulAction (GL (Fin 2 ) K) (OnePoint K) :=
113107 (equivProjectivization K).mulAction (GL (Fin 2 ) K)
114108
109+ lemma equivProjectivization_smul {g : GL (Fin 2 ) K} (x : OnePoint K) :
110+ equivProjectivization K (g • x) = g • equivProjectivization K x := by
111+ rw [Equiv.smul_def, Equiv.apply_symm_apply]
112+
115113lemma smul_infty_def {g : GL (Fin 2 ) K} :
116- g • ∞ = (equivProjectivization K).symm (.mk K (g 0 0 , g 1 0 ) (fun h ↦ by
117- simpa [det_fin_two, Prod.mk_eq_zero.mp h] using g.det_ne_zero)) := by
114+ g • ∞ = (equivProjectivization K).symm (.mk K ![g 0 0 , g 1 0 ] (fun h ↦ by
115+ simpa [det_fin_two, show g 0 0 = 0 from congr_fun h 0 , show g 1 0 = 0 from congr_fun h 1 ]
116+ using g.det_ne_zero)) := by
118117 simp [Equiv.smul_def, mulVec_eq_sum, Units.smul_def]
119118
120119lemma smul_infty_eq_ite (g : GL (Fin 2 ) K) :
@@ -146,6 +145,13 @@ namespace Matrix.GeneralLinearGroup
146145
147146variable {K : Type *} [Field K] [DecidableEq K]
148147
148+ lemma smul_eq_self_iff {g : GL (Fin 2 ) K} {x : OnePoint K} :
149+ g • x = x ↔ ∃ a : K,
150+ (equivProjectivization K x).submodule ≤ Module.End.eigenspace (toLin g).val a := by
151+ set y := equivProjectivization K x
152+ rw [show g • x = x ↔ g • y = y by rw [← equivProjectivization_smul, (Equiv.injective _).eq_iff]]
153+ apply Projectivization.smul_eq_self_iff
154+
149155/-- The roots of `g.fixpointPolynomial` are the fixed points of `g ∈ GL(2, K)` acting on the finite
150156part of `OnePoint K`. -/
151157lemma fixpointPolynomial_aeval_eq_zero_iff {c : K} {g : GL (Fin 2 ) K} :
0 commit comments