Paper XI · Lean source

FixedMoving.lean

Selected results recorded Coverage and evidence

Compiler/replay evidence is reported for a subset or bounded block. No whole-work coverage is implied.

This viewer reads the retained source; it does not run Lean or assign new claim mappings.

PaperXI/FixedMoving.lean198 lines

Original source pathformalization/PaperXI/FixedMoving.lean
Skip declarations and read code

Skip source text

1 import Mathlib.LinearAlgebra.BilinearForm.Orthogonal
2 import Mathlib.LinearAlgebra.FiniteDimensional.Lemmas
3 
4 /-! Actual fixed and moving subspaces, restricted symplectic forms and
5 the restricted moving automorphism. -/
6 set_option autoImplicit false
7 noncomputable section
8 namespace PaperXI.FixedMoving
9 
10 variable {F V : Type*} [Field F] [AddCommGroup V] [Module F V]
11 
12 /-- The actual fixed subspace of the given automorphism. -/
13 def fixed (g : V ≃ₗ[F] V) : Submodule F V := LinearMap.ker (g.toLinearMap - LinearMap.id)
14 
15 /-- The actual moving subspace, the image of `g - 1`. -/
16 def moving (g : V ≃ₗ[F] V) : Submodule F V := LinearMap.range (g.toLinearMap - LinearMap.id)
17 
18 @[simp] theorem mem_fixed (g : V ≃ₗ[F] V) (v : V) : v ∈ fixed g ↔ g v = v := by
19   simp [fixed, sub_eq_zero]
20 
21 theorem mem_moving (g : V ≃ₗ[F] V) (v : V) :
22     v ∈ moving g ↔ ∃ w : V, g w - w = v := Iff.rfl
23 
24 /-- A fixed vector is orthogonal to every actual moving vector. -/
25 theorem orthogonal (g : V ≃ₗ[F] V) (b : LinearMap.BilinForm F V)
26     (hg : ∀ x y, b (g x) (g y) = b x y)
27     {x y : V} (hx : x ∈ fixed g) (hy : y ∈ moving g) : b x y = 0 := by
28   obtain ⟨z, rfl⟩ := hy
29   have hfix : g x = x := (mem_fixed g x).mp hx
30   change b x (g z - z) = 0
31   rw [map_sub]
32   have h := hg x z
33   rw [hfix] at h
34   rw [h, sub_self]
35 
36 /-- Alternation gives orthogonality in the other order as well. -/
37 theorem orthogonal_reverse (g : V ≃ₗ[F] V) (b : LinearMap.BilinForm F V)
38     (hb : b.IsAlt) (hg : ∀ x y, b (g x) (g y) = b x y)
39     {x y : V} (hx : x ∈ moving g) (hy : y ∈ fixed g) : b x y = 0 := by
40   rw [← hb.neg_eq y x, orthogonal g b hg hy hx, neg_zero]
41 
42 /-- The actual form restricted to the fixed subspace. -/
43 def fixedForm (g : V ≃ₗ[F] V) (b : LinearMap.BilinForm F V) := b.restrict (fixed g)
44 
45 /-- The actual form restricted to the moving image. -/
46 def movingForm (g : V ≃ₗ[F] V) (b : LinearMap.BilinForm F V) := b.restrict (moving g)
47 
48 theorem fixedForm_alt (g : V ≃ₗ[F] V) (b : LinearMap.BilinForm F V) (hb : b.IsAlt) :
49     (fixedForm g b).IsAlt := fun x => hb x
50 
51 theorem movingForm_alt (g : V ≃ₗ[F] V) (b : LinearMap.BilinForm F V) (hb : b.IsAlt) :
52     (movingForm g b).IsAlt := fun x => hb x
53 
54 /-- Nondegeneracy transfers to either actual orthogonal direct summand. -/
55 theorem restrict_nondegenerate (b : LinearMap.BilinForm F V) (hb : b.Nondegenerate)
56     (P Q : Submodule F V) (hPQ : IsCompl P Q)
57     (ho : ∀ x ∈ P, ∀ y ∈ Q, b x y = 0)
58     (ho' : ∀ x ∈ Q, ∀ y ∈ P, b x y = 0) : (b.restrict P).Nondegenerate := by
59   constructor
60   · intro x hx
61     apply Subtype.ext
62     apply hb.1 x
63     intro v
64     obtain ⟨y, z, hy, hz, rfl⟩ := Submodule.codisjoint_iff_exists_add_eq.mp hPQ.codisjoint v
65     change b (x : V) (y + z) = 0
66     rw [map_add, ho x x.property z hz, add_zero]
67     exact hx ⟨y, hy⟩
68   · intro x hx
69     apply Subtype.ext
70     apply hb.2 x
71     intro v
72     obtain ⟨y, z, hy, hz, rfl⟩ := Submodule.codisjoint_iff_exists_add_eq.mp hPQ.codisjoint v
73     change b (y + z) (x : V) = 0
74     rw [map_add, LinearMap.add_apply, ho' z hz x x.property, add_zero]
75     exact hx ⟨y, hy⟩
76 
77 theorem movingForm_nondegenerate_of_isCompl (g : V ≃ₗ[F] V) (b : LinearMap.BilinForm F V)
78     (hb : b.IsAlt) (hbn : b.Nondegenerate) (hg : ∀ x y, b (g x) (g y) = b x y)
79     (hc : IsCompl (fixed g) (moving g)) : (movingForm g b).Nondegenerate :=
80   restrict_nondegenerate b hbn (moving g) (fixed g) hc.symm
81     (fun _ hx _ hy => orthogonal_reverse g b hb hg hx hy)
82     (fun _ hx _ hy => orthogonal g b hg hx hy)
83 
84 theorem fixedForm_nondegenerate_of_isCompl (g : V ≃ₗ[F] V) (b : LinearMap.BilinForm F V)
85     (hb : b.IsAlt) (hbn : b.Nondegenerate) (hg : ∀ x y, b (g x) (g y) = b x y)
86     (hc : IsCompl (fixed g) (moving g)) : (fixedForm g b).Nondegenerate :=
87   restrict_nondegenerate b hbn (fixed g) (moving g) hc
88     (fun _ hx _ hy => orthogonal g b hg hx hy)
89     (fun _ hx _ hy => orthogonal_reverse g b hb hg hx hy)
90 
91 theorem moving_stable (g : V ≃ₗ[F] V) {v : V} (hv : v ∈ moving g) : g v ∈ moving g := by
92   obtain ⟨w, rfl⟩ := hv
93   refine ⟨g w, ?_⟩
94   change g (g w) - g w = g (g w - w)
95   exact (map_sub g (g w) w).symm
96 
97 theorem moving_inverse_stable (g : V ≃ₗ[F] V) {v : V} (hv : v ∈ moving g) :
98     g.symm v ∈ moving g := by
99   obtain ⟨w, rfl⟩ := hv
100   refine ⟨g.symm w, ?_⟩
101   change g (g.symm w) - g.symm w = g.symm (g w - w)
102   simp
103 
104 /-- The actual restriction of `g` to its moving image, including its proved inverse. -/
105 def movingAction (g : V ≃ₗ[F] V) : moving g ≃ₗ[F] moving g where
106   toFun v := ⟨g v, moving_stable g v.property⟩
107   invFun v := ⟨g.symm v, moving_inverse_stable g v.property⟩
108   left_inv v := by apply Subtype.ext; exact g.symm_apply_apply v
109   right_inv v := by apply Subtype.ext; exact g.apply_symm_apply v
110   map_add' x y := by apply Subtype.ext; exact map_add g (x : V) (y : V)
111   map_smul' c x := by apply Subtype.ext; exact map_smul g c (x : V)
112 
113 @[simp] theorem movingAction_coe (g : V ≃ₗ[F] V) (v : moving g) :
114     (movingAction g v : V) = g v := rfl
115 
116 @[simp] theorem movingAction_symm_coe (g : V ≃ₗ[F] V) (v : moving g) :
117     ((movingAction g).symm v : V) = g.symm v := rfl
118 
119 theorem movingAction_preserves (g : V ≃ₗ[F] V) (b : LinearMap.BilinForm F V)
120     (hg : ∀ x y, b (g x) (g y) = b x y) (x y : moving g) :
121     movingForm g b (movingAction g x) (movingAction g y) = movingForm g b x y := hg x y
122 
123 /-- The actual restricted automorphism has no nonzero fixed vector in a direct decomposition. -/
124 theorem movingAction_fixedPointFree_of_isCompl (g : V ≃ₗ[F] V)
125     (hc : IsCompl (fixed g) (moving g)) (v : moving g) (hv : movingAction g v = v) : v = 0 := by
126   apply Subtype.ext
127   have hf : (v : V) ∈ fixed g := (mem_fixed g v).mpr (congrArg Subtype.val hv)
128   have hi : (v : V) ∈ fixed g ⊓ moving g := ⟨hf, v.property⟩
129   rw [hc.inf_eq_bot] at hi
130   exact hi
131 
132 /-- The restricted difference is injective by disjointness of the actual subspaces. -/
133 theorem moving_difference_injective (g : V ≃ₗ[F] V)
134     (hc : IsCompl (fixed g) (moving g)) :
135     Function.Injective ((movingAction g).toLinearMap - (LinearMap.id : Module.End F (moving g))) := by
136   apply LinearMap.ker_eq_bot.mp
137   apply bot_unique
138   intro v hv
139   change v = 0
140   apply movingAction_fixedPointFree_of_isCompl g hc v
141   change movingAction g v - v = 0 at hv
142   exact sub_eq_zero.mp hv
143 
144 /-- An actual linear equivalence for `g-1` on the moving image. -/
145 def movingDifferenceEquiv [FiniteDimensional F V] (g : V ≃ₗ[F] V)
146     (hc : IsCompl (fixed g) (moving g)) : moving g ≃ₗ[F] moving g :=
147   LinearEquiv.ofBijective ((movingAction g).toLinearMap - LinearMap.id)
148     ⟨moving_difference_injective g hc,
149       LinearMap.injective_iff_surjective.mp (moving_difference_injective g hc)⟩
150 
151 @[simp] theorem movingDifferenceEquiv_apply [FiniteDimensional F V]
152     (g : V ≃ₗ[F] V) (hc : IsCompl (fixed g) (moving g)) (v : moving g) :
153     movingDifferenceEquiv g hc v = movingAction g v - v := rfl
154 
155 section Transport
156 variable {V' : Type*} [AddCommGroup V'] [Module F V']
157 
158 /-- Conjugacy restricts to the actual moving images, with a constructed inverse. -/
159 def movingEquiv (g : V ≃ₗ[F] V) (g' : V' ≃ₗ[F] V') (e : V ≃ₗ[F] V')
160     (he : ∀ v, e (g v) = g' (e v)) : moving g ≃ₗ[F] moving g' where
161   toFun v := ⟨e v, by
162     obtain ⟨w, hw⟩ := v.property
163     refine ⟨e w, ?_⟩
164     change g' (e w) - e w = e v
165     rw [← he, ← map_sub]
166     exact congrArg e hw⟩
167   invFun v := ⟨e.symm v, by
168     obtain ⟨w, hw⟩ := v.property
169     refine ⟨e.symm w, ?_⟩
170     change g (e.symm w) - e.symm w = e.symm v
171     apply e.injective
172     rw [map_sub, he, e.apply_symm_apply, e.apply_symm_apply]
173     exact hw⟩
174   left_inv v := by apply Subtype.ext; exact e.symm_apply_apply v
175   right_inv v := by apply Subtype.ext; exact e.apply_symm_apply v
176   map_add' x y := by apply Subtype.ext; exact map_add e (x : V) (y : V)
177   map_smul' c x := by apply Subtype.ext; exact map_smul e c (x : V)
178 
179 @[simp] theorem movingEquiv_coe (g : V ≃ₗ[F] V) (g' : V' ≃ₗ[F] V') (e : V ≃ₗ[F] V')
180     (he : ∀ v, e (g v) = g' (e v)) (v : moving g) :
181     (movingEquiv g g' e he v : V') = e v := rfl
182 
183 /-- Restricted conjugacy intertwines the two actual restricted automorphisms. -/
184 theorem movingEquiv_intertwines (g : V ≃ₗ[F] V) (g' : V' ≃ₗ[F] V') (e : V ≃ₗ[F] V')
185     (he : ∀ v, e (g v) = g' (e v)) (v : moving g) :
186     movingEquiv g g' e he (movingAction g v) = movingAction g' (movingEquiv g g' e he v) := by
187   apply Subtype.ext
188   exact he v
189 
190 /-- An ambient symplectic conjugacy preserves the actual restricted moving forms. -/
191 theorem movingEquiv_preserves (g : V ≃ₗ[F] V) (g' : V' ≃ₗ[F] V') (e : V ≃ₗ[F] V')
192     (he : ∀ v, e (g v) = g' (e v)) (b : LinearMap.BilinForm F V)
193     (b' : LinearMap.BilinForm F V') (hb : ∀ x y, b' (e x) (e y) = b x y)
194     (x y : moving g) : movingForm g' b' (movingEquiv g g' e he x) (movingEquiv g g' e he y) =
195       movingForm g b x y := hb x y
196 
197 end Transport
198 end PaperXI.FixedMoving

Back to source controls

Original file and source record

This copy matches the recorded source file. Its publication here does not change the work’s review status.

SHA-256: c5159f03721e3f1446641781dcf303a90ea160dafb3eed4edac5906238153c67

Original source on GitHub

Back to Paper XI: Packets, Arithmetic Realization, and Conditional Comparison