Paper VII · Lean source

GlobalRangeBundle.lean

Inherited / related evidence Coverage and evidence

The edition relies on earlier or related formal evidence. That evidence is not a fresh full-edition replay.

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

GlobalRangeBundle.lean278 lines

Original source pathsource/complete/Paper_VII_Complete_v0.6.0_With_Visual_Appendix/original_snapshot/formalization/GlobalRangeBundle.lean
Skip declarations and read code

Skip source text

1 module
2 public import Mathlib.Geometry.Manifold.Algebra.Structures
3 public import Mathlib.Geometry.Manifold.VectorBundle.Basic
4 public import Mathlib.Analysis.Calculus.ContDiff.Operations
5 public import Mathlib.Analysis.Normed.Ring.Units
6 public import Mathlib.Tactic
7 /-! Author: Komorebi P. Paper VII, item 6.4.
8 Construct the range-bundle atlas from a smooth idempotent, not as a hypothesis.
9 The fibers are the actual fixed subspaces, with their subspace topologies.
10 -/
11 @[expose] public section
12 set_option autoImplicit false
13 set_option backward.isDefEq.respectTransparency false
14 set_option backward.isDefEq.respectTransparency.types false
15 set_option linter.unusedSectionVars false
16 open scoped Manifold ContDiff Topology
17 open Set Filter
18 noncomputable section
19 namespace KomorebiPaperVII.RangeBundle
20 
21 variable {F : Type*} [NormedAddCommGroup F] [NormedSpace ℝ F]
22 
23 /-- The actual fiber, written as the fixed subspace of an idempotent. -/
24 def fiber (p : F →L[ℝ] F) : Submodule ℝ F where
25   carrier := {v | p v = v}
26   zero_mem' := map_zero p
27   add_mem' := by intro u v hu hv; simp_all
28   smul_mem' := by intro c v hv; simp_all
29 
30 @[simp] theorem mem_fiber (p : F →L[ℝ] F) (v : F) : v ∈ fiber p ↔ p v = v := Iff.rfl
31 
32 /-- Projection from the ambient space to the actual fiber. -/
33 def project (p : F →L[ℝ] F) (hp : p*p=p) : F →L[ℝ] fiber p :=
34   p.codRestrict (fiber p) (fun v => congrArg (fun q : F →L[ℝ] F => q v) hp)
35 
36 @[simp] theorem project_coe (p : F →L[ℝ] F) (hp : p*p=p) (v : F) :
37     (project p hp v : F) = p v := rfl
38 
39 @[simp] theorem project_fiber (p : F →L[ℝ] F) (hp : p*p=p) (v : fiber p) :
40     project p hp (v : F) = v := Subtype.ext v.property
41 
42 /-- Canonical intertwiner between two nearby idempotents. -/
43 def transport (p q : F →L[ℝ] F) : F →L[ℝ] F := p*q+(1-p)*(1-q)
44 
45 theorem transport_self (p : F →L[ℝ] F) (hp : p*p=p) : transport p p=1 := by
46   unfold transport
47   noncomm_ring [hp]
48 
49 theorem transport_intertwines (p q : F →L[ℝ] F) (hp : p*p=p) (hq : q*q=q) :
50     p*transport p q=transport p q*q := by
51   unfold transport
52   have ha : p*(p*q)=p*q := by rw [← mul_assoc,hp]
53   have hb : p*(q*q)=p*q := by rw [hq]
54   noncomm_ring [hp,hq,ha,hb]
55 
56 theorem transport_inverse_intertwines (p q : F →L[ℝ] F) (hp : p*p=p) (hq : q*q=q)
57     (h : IsUnit (transport p q)) : q*Ring.inverse (transport p q)=Ring.inverse (transport p q)*p := by
58   calc
59     q*Ring.inverse (transport p q) =
60       Ring.inverse (transport p q)*(transport p q*q)*Ring.inverse (transport p q) := by
61         simp only [← mul_assoc, Ring.inverse_mul_cancel _ h, one_mul]
62     _ = Ring.inverse (transport p q)*(p*transport p q)*Ring.inverse (transport p q) := by
63       rw [transport_intertwines p q hp hq]
64     _ = Ring.inverse (transport p q)*p := by
65       simp only [mul_assoc, Ring.mul_inverse_cancel _ h, mul_one]
66 
67 variable {M : Type*} [TopologicalSpace M]
68 
69 /-- Each base point determines an open local trivialization domain. -/
70 def domain (P : M → F →L[ℝ] F) (a : M) : Set M :=
71   {x | IsUnit (transport (P x) (P a))}
72 
73 theorem mem_domain (P : M → F →L[ℝ] F) (hP : ∀ x, P x*P x=P x) (a : M) :
74     a ∈ domain P a := by simp [domain, transport_self _ (hP a)]
75 
76 theorem isOpen_domain [CompleteSpace F] (P : M → F →L[ℝ] F) (hP : Continuous P) (a : M) :
77     IsOpen (domain P a) :=
78   Units.isOpen.preimage ((hP.mul continuous_const).add
79     ((continuous_const.sub hP).mul continuous_const))
80 
81 /-- Fiber coordinates. The extra fixed projection makes this a total CLM. -/
82 def toCoord (P : M → F →L[ℝ] F) (hP : ∀ x, P x*P x=P x) (a x : M) :
83     F →L[ℝ] fiber (P a) :=
84   (project (P a) (hP a)).comp (Ring.inverse (transport (P x) (P a)))
85 
86 /-- Reconstruction from the coordinate fiber into the ambient space. -/
87 def fromCoord (P : M → F →L[ℝ] F) (a x : M) : fiber (P a) →L[ℝ] F :=
88   (transport (P x) (P a)).comp (fiber (P a)).subtypeL
89 
90 theorem fromCoord_range (P : M → F →L[ℝ] F) (hP : ∀ x, P x*P x=P x)
91     (a x : M) (v : fiber (P a)) : P x (fromCoord P a x v)=fromCoord P a x v := by
92   have ht := congrArg (fun q : F →L[ℝ] F => q (v : F))
93     (transport_intertwines (P x) (P a) (hP x) (hP a))
94   have hv : P a (v : F)=(v : F) := v.property
95   simpa [fromCoord, hv] using ht
96 
97 theorem toCoord_fromCoord (P : M → F →L[ℝ] F) (hP : ∀ x, P x*P x=P x)
98     (a x : M) (hx : x ∈ domain P a) (v : fiber (P a)) :
99     toCoord P hP a x (fromCoord P a x v)=v := by
100   apply Subtype.ext
101   change P a ((Ring.inverse (transport (P x) (P a)) * transport (P x) (P a)) (v : F)) = v
102   rw [Ring.inverse_mul_cancel _ hx]
103   exact v.property
104 
105 theorem fromCoord_toCoord (P : M → F →L[ℝ] F) (hP : ∀ x, P x*P x=P x)
106     (a x : M) (hx : x ∈ domain P a) (v : F) (hv : P x v=v) :
107     fromCoord P a x (toCoord P hP a x v)=v := by
108   have ht := congrArg (fun q : F →L[ℝ] F => q v)
109     (transport_inverse_intertwines (P x) (P a) (hP x) (hP a) hx)
110   change transport (P x) (P a) (P a (Ring.inverse (transport (P x) (P a)) v))=v
111   rw [show P a (Ring.inverse (transport (P x) (P a)) v)=
112     Ring.inverse (transport (P x) (P a)) v from by simpa [hv] using ht]
113   change (transport (P x) (P a)*Ring.inverse (transport (P x) (P a))) v=v
114   rw [Ring.mul_inverse_cancel _ hx]
115   rfl
116 
117 /-- The transition is an actual map between the two fixed coordinate fibers. -/
118 def transition (P : M → F →L[ℝ] F) (hP : ∀ x, P x*P x=P x) (a b x : M) :
119     fiber (P a) →L[ℝ] fiber (P b) := (toCoord P hP b x).comp (fromCoord P a x)
120 
121 theorem transition_self (P : M → F →L[ℝ] F) (hP : ∀ x, P x*P x=P x)
122     (a x : M) (hx : x ∈ domain P a) : transition P hP a a x=1 := by
123   apply ContinuousLinearMap.ext
124   intro v
125   exact toCoord_fromCoord P hP a x hx v
126 
127 theorem transition_cocycle (P : M → F →L[ℝ] F) (hP : ∀ x, P x*P x=P x)
128     (a b c x : M) (hb : x ∈ domain P b) :
129     (transition P hP b c x).comp (transition P hP a b x)=transition P hP a c x := by
130   apply ContinuousLinearMap.ext
131   intro v
132   change toCoord P hP c x (fromCoord P b x (toCoord P hP b x (fromCoord P a x v))) = _
133   rw [fromCoord_toCoord P hP b x hb _ (fromCoord_range P hP a x v)]
134   rfl
135 
136 variable {E H : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [TopologicalSpace H]
137   {I : ModelWithCorners ℝ E H} [ChartedSpace H M] [CompleteSpace F]
138 
139 theorem smooth_transport (P : M → F →L[ℝ] F)
140     (hP : ContMDiff I 𝓘(ℝ, F →L[ℝ] F) ∞ P) (a : M) :
141     ContMDiff I 𝓘(ℝ, F →L[ℝ] F) ∞ (fun x => transport (P x) (P a)) :=
142   (hP.clm_comp contMDiff_const).add ((contMDiff_const.sub hP).clm_comp contMDiff_const)
143 
144 theorem smooth_inverse_transport (P : M → F →L[ℝ] F)
145     (hP : ContMDiff I 𝓘(ℝ, F →L[ℝ] F) ∞ P) (a : M) :
146     ContMDiffOn I 𝓘(ℝ, F →L[ℝ] F) ∞
147       (fun x => Ring.inverse (transport (P x) (P a))) (domain P a) := by
148   intro x hx
149   have hi : ContDiffAt ℝ ∞ Ring.inverse (transport (P x) (P a)) := by
150     simpa only [IsUnit.unit_spec] using (contDiffAt_ringInverse ℝ hx.unit (n := ∞))
151   exact hi.comp_contMDiffWithinAt (f := fun y : M => transport (P y) (P a))
152     ((smooth_transport P hP a x).contMDiffWithinAt)
153 
154 theorem smooth_toCoord (P : M → F →L[ℝ] F) (hPP : ∀ x, P x*P x=P x)
155     (hP : ContMDiff I 𝓘(ℝ, F →L[ℝ] F) ∞ P) (a : M) :
156     ContMDiffOn I 𝓘(ℝ, F →L[ℝ] fiber (P a)) ∞ (toCoord P hPP a) (domain P a) :=
157   contMDiffOn_const.clm_comp (smooth_inverse_transport P hP a)
158 
159 theorem smooth_fromCoord (P : M → F →L[ℝ] F)
160     (hP : ContMDiff I 𝓘(ℝ, F →L[ℝ] F) ∞ P) (a : M) :
161     ContMDiff I 𝓘(ℝ, fiber (P a) →L[ℝ] F) ∞ (fromCoord P a) :=
162   (smooth_transport P hP a).clm_comp contMDiff_const
163 
164 theorem smooth_transition (P : M → F →L[ℝ] F) (hPP : ∀ x, P x*P x=P x)
165     (hP : ContMDiff I 𝓘(ℝ, F →L[ℝ] F) ∞ P) (a b : M) :
166     ContMDiffOn I 𝓘(ℝ, fiber (P a) →L[ℝ] fiber (P b)) ∞
167       (transition P hPP a b) (domain P a ∩ domain P b) :=
168   ((smooth_toCoord P hPP hP b).mono inter_subset_right).clm_comp
169     (smooth_fromCoord P hP a).contMDiffOn
170 
171 
172 /-- Actual global range space, with the topology induced from `M × F`. -/
173 abbrev Total (P : M → F →L[ℝ] F) := {z : M × F // P z.1 z.2=z.2}
174 
175 /-- Restriction of the actual total space to a trivialization domain. -/
176 abbrev LocalTotal (P : M → F →L[ℝ] F) (a : M) :=
177   {z : Total P // z.val.1 ∈ domain P a}
178 
179 /-- The explicitly constructed fiberwise linear local product homeomorphism. -/
180 def localProduct (P : M → F →L[ℝ] F) (hPP : ∀ x, P x*P x=P x)
181     (hP : ContMDiff I 𝓘(ℝ, F →L[ℝ] F) ∞ P) (a : M) :
182     LocalTotal P a ≃ₜ (domain P a × fiber (P a)) where
183   toFun z := (⟨z.val.val.1,z.property⟩,toCoord P hPP a z.val.val.1 z.val.val.2)
184   invFun y := ⟨⟨(y.1.val,fromCoord P a y.1.val y.2),
185     fromCoord_range P hPP a y.1.val y.2⟩,y.1.property⟩
186   left_inv := by
187     intro z
188     apply Subtype.ext
189     apply Subtype.ext
190     apply Prod.ext
191     · rfl
192     · exact fromCoord_toCoord P hPP a _ z.property _ z.val.property
193   right_inv := by
194     intro y
195     apply Prod.ext
196     · rfl
197     · exact toCoord_fromCoord P hPP a _ y.1.property y.2
198   continuous_toFun := by
199     have hx : Continuous (fun z : LocalTotal P a => z.val.val.1) := by fun_prop
200     have hv : Continuous (fun z : LocalTotal P a => z.val.val.2) := by fun_prop
201     have hc : Continuous (fun z : LocalTotal P a => toCoord P hPP a z.val.val.1) :=
202       (smooth_toCoord P hPP hP a).continuousOn.comp_continuous hx (fun z => z.property)
203     exact (hx.subtype_mk _).prodMk (hc.clm_apply hv)
204   continuous_invFun := by
205     have hx : Continuous (fun y : domain P a × fiber (P a) => y.1.val) := by fun_prop
206     have hv : Continuous (fun y : domain P a × fiber (P a) => y.2) := by fun_prop
207     have hc : Continuous (fun y : domain P a × fiber (P a) => fromCoord P a y.1.val) :=
208       (smooth_fromCoord P hP a).continuous.comp hx
209     exact ((hx.prodMk (hc.clm_apply hv)).subtype_mk _).subtype_mk _
210 
211 /-- The local homeomorphism does not change the base point. -/
212 theorem localProduct_base (P : M → F →L[ℝ] F) (hPP : ∀ x, P x*P x=P x)
213     (hP : ContMDiff I 𝓘(ℝ, F →L[ℝ] F) ∞ P) (a : M) (z : LocalTotal P a) :
214     (localProduct P hPP hP a z).1.val=z.val.val.1 := rfl
215 
216 /-- Reconstruction of local coordinates is exactly the transition map. -/
217 theorem localProduct_transition (P : M → F →L[ℝ] F) (hPP : ∀ x, P x*P x=P x)
218     (a b x : M) (v : fiber (P a)) :
219     toCoord P hPP b x (fromCoord P a x v)=transition P hPP a b x v := rfl
220 
221 /-- A local fiber equivalence, derived from the same transport. -/
222 def fiberEquiv (P : M → F →L[ℝ] F) (hPP : ∀ x, P x*P x=P x)
223     (a x : M) (hx : x ∈ domain P a) : fiber (P a) ≃L[ℝ] fiber (P x) where
224   toFun v := ⟨fromCoord P a x v, fromCoord_range P hPP a x v⟩
225   invFun v := toCoord P hPP a x v
226   left_inv := toCoord_fromCoord P hPP a x hx
227   right_inv := fun v => Subtype.ext (fromCoord_toCoord P hPP a x hx v v.property)
228   map_add' := by intros; apply Subtype.ext; exact map_add _ _ _
229   map_smul' := by intros; apply Subtype.ext; exact map_smul _ _ _
230   continuous_toFun := (fromCoord P a x).continuous.subtype_mk _
231   continuous_invFun := (toCoord P hPP a x).continuous.comp continuous_subtype_val
232 
233 /-- Local constancy of rank is a consequence, not an additional hypothesis. -/
234 theorem fiber_rank_locally_constant (P : M → F →L[ℝ] F) (hPP : ∀ x, P x*P x=P x)
235     (hP : ContMDiff I 𝓘(ℝ, F →L[ℝ] F) ∞ P) (a : M) :
236     ∀ᶠ x in 𝓝 a, Module.finrank ℝ (fiber (P x))=Module.finrank ℝ (fiber (P a)) := by
237   filter_upwards [(isOpen_domain P hP.continuous a).mem_nhds (mem_domain P hPP a)] with x hx
238   exact (fiberEquiv P hPP a x hx).toLinearEquiv.finrank_eq.symm
239 
240 /-- All local data come from `P`. This bundles the actual construction and its smooth cocycle. -/
241 theorem smooth_range_bundle_atlas (P : M → F →L[ℝ] F) (hPP : ∀ x, P x*P x=P x)
242     (hP : ContMDiff I 𝓘(ℝ, F →L[ℝ] F) ∞ P) :
243     (∀ a, IsOpen (domain P a) ∧ a ∈ domain P a) ∧
244     (∀ a, Nonempty (LocalTotal P a ≃ₜ (domain P a × fiber (P a)))) ∧
245     (∀ a b, ContMDiffOn I 𝓘(ℝ, fiber (P a) →L[ℝ] fiber (P b)) ∞
246       (transition P hPP a b) (domain P a ∩ domain P b)) ∧
247     (∀ a x, x ∈ domain P a → transition P hPP a a x=1) ∧
248     (∀ a b c x, x ∈ domain P a ∩ domain P b ∩ domain P c →
249       (transition P hPP b c x).comp (transition P hPP a b x)=transition P hPP a c x) := by
250   exact ⟨fun a => ⟨isOpen_domain P hP.continuous a,mem_domain P hPP a⟩,
251     fun a => ⟨localProduct P hPP hP a⟩,smooth_transition P hPP hP,
252     transition_self P hPP,fun a b c x hx => transition_cocycle P hPP a b c x hx.1.2⟩
253 
254 end KomorebiPaperVII.RangeBundle
255 
256 /-! Declaration-level dependency audit. -/
257 #print axioms KomorebiPaperVII.RangeBundle.mem_fiber
258 #print axioms KomorebiPaperVII.RangeBundle.project_coe
259 #print axioms KomorebiPaperVII.RangeBundle.project_fiber
260 #print axioms KomorebiPaperVII.RangeBundle.transport_self
261 #print axioms KomorebiPaperVII.RangeBundle.transport_intertwines
262 #print axioms KomorebiPaperVII.RangeBundle.transport_inverse_intertwines
263 #print axioms KomorebiPaperVII.RangeBundle.mem_domain
264 #print axioms KomorebiPaperVII.RangeBundle.isOpen_domain
265 #print axioms KomorebiPaperVII.RangeBundle.fromCoord_range
266 #print axioms KomorebiPaperVII.RangeBundle.toCoord_fromCoord
267 #print axioms KomorebiPaperVII.RangeBundle.fromCoord_toCoord
268 #print axioms KomorebiPaperVII.RangeBundle.transition_self
269 #print axioms KomorebiPaperVII.RangeBundle.transition_cocycle
270 #print axioms KomorebiPaperVII.RangeBundle.smooth_transport
271 #print axioms KomorebiPaperVII.RangeBundle.smooth_inverse_transport
272 #print axioms KomorebiPaperVII.RangeBundle.smooth_toCoord
273 #print axioms KomorebiPaperVII.RangeBundle.smooth_fromCoord
274 #print axioms KomorebiPaperVII.RangeBundle.smooth_transition
275 #print axioms KomorebiPaperVII.RangeBundle.localProduct_base
276 #print axioms KomorebiPaperVII.RangeBundle.localProduct_transition
277 #print axioms KomorebiPaperVII.RangeBundle.fiber_rank_locally_constant
278 #print axioms KomorebiPaperVII.RangeBundle.smooth_range_bundle_atlas

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: cbd9b611d6160a91a76332cad47d246f89cd82f02d38854089bf7f4eaa988b33

Original source on GitHub

Back to Paper VII: Quantum Seed Calculus