@@ -3,9 +3,12 @@ Copyright (c) 2024 Bjørn Kjos-Hanssen. All rights reserved.
3
3
Released under Apache 2.0 license as described in the file LICENSE.
4
4
Authors: Bjørn Kjos-Hanssen, Oliver Nash
5
5
-/
6
- import Mathlib.LinearAlgebra.Projectivization.Basic
6
+ import Mathlib.Data.Matrix.Action
7
+ import Mathlib.LinearAlgebra.Matrix.GeneralLinearGroup.Defs
8
+ import Mathlib.LinearAlgebra.Projectivization.Action
7
9
import Mathlib.Topology.Compactification.OnePoint.Basic
8
10
11
+
9
12
/-!
10
13
# One-point compactification and projectivization
11
14
@@ -26,9 +29,35 @@ one-point extension, projectivization
26
29
-/
27
30
28
31
open scoped LinearAlgebra.Projectivization OnePoint
29
- open Projectivization
32
+
33
+ open Projectivization Matrix
34
+
35
+ section MatrixProdAction
36
+
37
+ variable {R n : Type *} [Semiring R] [Fintype n] [DecidableEq n]
38
+
39
+ instance : Module (Matrix (Fin 2 ) (Fin 2 ) R) (R × R) :=
40
+ (LinearEquiv.finTwoArrow R R).symm.toAddEquiv.module _
41
+
42
+ instance {S} [DistribSMul S R] [SMulCommClass R S R] :
43
+ SMulCommClass (Matrix (Fin 2 ) (Fin 2 ) R) S (R × R) :=
44
+ (LinearEquiv.finTwoArrow R R).symm.smulCommClass _ _
45
+
46
+ @[simp] lemma Matrix.fin_two_smul_prod (g : Matrix (Fin 2 ) (Fin 2 ) R) (v : R × R) :
47
+ g • v = (g 0 0 * v.1 + g 0 1 * v.2 , g 1 0 * v.1 + g 1 1 * v.2 ) := by
48
+ simp [Equiv.smul_def, smul_eq_mulVec, Matrix.mulVec_eq_sum]
49
+
50
+ @[simp] lemma Matrix.GeneralLinearGroup.fin_two_smul_prod {R : Type *} [CommRing R]
51
+ (g : GL (Fin 2 ) R) (v : R × R) :
52
+ g • v = (g 0 0 * v.1 + g 0 1 * v.2 , g 1 0 * v.1 + g 1 1 * v.2 ) := by
53
+ simp [Units.smul_def]
54
+
55
+ end MatrixProdAction
30
56
31
57
namespace OnePoint
58
+
59
+ section DivisionRing
60
+
32
61
variable (K : Type *) [DivisionRing K] [DecidableEq K]
33
62
34
63
/-- The one-point compactification of a division ring `K` is equivalent to
@@ -68,4 +97,36 @@ lemma equivProjectivization_symm_apply_mk (x y : K) (h : (x, y) ≠ 0) :
68
97
(equivProjectivization K).symm (mk K ⟨x, y⟩ h) = if y = 0 then ∞ else y⁻¹ * x := by
69
98
simp [equivProjectivization]
70
99
100
+ end DivisionRing
101
+
102
+ section Field
103
+
104
+ variable {K : Type *} [Field K] [DecidableEq K]
105
+
106
+ /-- For a field `K`, the group `GL(2, K)` acts on `OnePoint K`, via the canonical identification
107
+ with the `ℙ¹(K)` (which is given explicitly by Möbius transformations). -/
108
+ instance instGLAction : MulAction (GL (Fin 2 ) K) (OnePoint K) :=
109
+ (equivProjectivization K).mulAction (GL (Fin 2 ) K)
110
+
111
+ lemma smul_infty_def (g : GL (Fin 2 ) K) :
112
+ g • ∞ = (equivProjectivization K).symm (.mk K (g 0 0 , g 1 0 ) (fun h ↦ by
113
+ simpa [det_fin_two, Prod.mk_eq_zero.mp h] using g.det_ne_zero)) := by
114
+ simp [Equiv.smul_def, mulVec_eq_sum, Units.smul_def]
115
+
116
+ lemma smul_infty_eq_ite (g : GL (Fin 2 ) K) :
117
+ g • (∞ : OnePoint K) = if g 1 0 = 0 then ∞ else g 0 0 / g 1 0 := by
118
+ by_cases h : g 1 0 = 0 <;>
119
+ simp [h, div_eq_inv_mul, smul_infty_def]
120
+
121
+ lemma smul_infty_eq_iff (g : GL (Fin 2 ) K) :
122
+ g • (∞ : OnePoint K) = ∞ ↔ g 1 0 = 0 := by
123
+ simp [smul_infty_eq_ite]
124
+
125
+ lemma smul_some_eq_ite (g : GL (Fin 2 ) K) (k : K) :
126
+ g • (k : OnePoint K) =
127
+ if g 1 0 * k + g 1 1 = 0 then ∞ else (g 0 0 * k + g 0 1 ) / (g 1 0 * k + g 1 1 ) := by
128
+ simp [Equiv.smul_def, mulVec_eq_sum, div_eq_inv_mul, mul_comm, Units.smul_def]
129
+
130
+ end Field
131
+
71
132
end OnePoint
0 commit comments