Large Signal Model · Lean source
LorentzCylinder.lean
Declared contract recorded Coverage and evidence
The cited release explicitly reports completion of its registered formal contract, under its exact hypotheses.
This viewer reads the retained source; it does not run Lean or assign new claim mappings.
Local imports (2)
KomorebiLSM/LorentzCylinder.lean124 lines
Original source path
Lean/KomorebiLSM/LorentzCylinder.leanSkip declarations and read code
1 import KomorebiLSM.EllipsoidGeometry
2 import KomorebiLSM.BaseNormIntegration
3
4 /-! The Lorentz cylinder norm is the actual positive-decomposition base norm. -/
5 set_option autoImplicit false
6 namespace Komorebi.LSM.LorentzCylinder
7 open scoped BigOperators
8 variable {V : Type*} [NormedAddCommGroup V] [NormedSpace ℝ V]
9
10 abbrev State (V : Type*) := ℝ × V
11 abbrev cone : Set (State V) := OrientedEllipsoid.lorentz
12 noncomputable abbrev probabilityCone : BaseNorm.ProbabilityCone (State V) :=
13 OrientedEllipsoid.lorentzProbabilityCone
14
15 omit [NormedSpace ℝ V] in
16 @[simp] theorem mem_cone (z : State V) : z∈cone ↔ ‖z.2‖≤z.1 := Iff.rfl
17 @[simp] theorem mass_apply (z : State V) : probabilityCone.mass z=z.1 := rfl
18
19 omit [NormedSpace ℝ V] in
20 theorem max_le_cost {z u v : State V} (hu : u∈cone) (hv : v∈cone) (hz : z=u-v) :
21 max |z.1| ‖z.2‖≤u.1+v.1 := by
22 have hu0 : 0≤u.1 := (norm_nonneg _).trans hu
23 have hv0 : 0≤v.1 := (norm_nonneg _).trans hv
24 apply max_le
25 · rw [hz,Prod.fst_sub]
26 exact abs_sub_le_iff.mpr ⟨by linarith,by linarith⟩
27 · rw [hz,Prod.snd_sub]
28 exact (norm_sub_le _ _).trans (add_le_add hu hv)
29
30 theorem ray_mem {a : ℝ} (ha : 0≤a) {q : V} (hq : ‖q‖≤1) : (a,a • q)∈cone := by
31 change ‖a • q‖≤a
32 rw [norm_smul,Real.norm_eq_abs,abs_of_nonneg ha]
33 simpa using mul_le_mul_of_nonneg_left hq ha
34
35 /-- The infimum is attained by two actual opposite positive rays. -/
36 theorem exists_minimal_decomposition (z : State V) :
37 ∃ u∈cone,∃ v∈cone,z=u-v ∧ u.1+v.1=max |z.1| ‖z.2‖ := by
38 let M : ℝ := max |z.1| ‖z.2‖
39 have hM : 0≤M := (norm_nonneg z.2).trans (le_max_right _ _)
40 have htM : |z.1|≤M := le_max_left _ _
41 have hsM : ‖z.2‖≤M := le_max_right _ _
42 by_cases hzero : M=0
43 · rw [hzero] at htM hsM
44 have ht : z.1=0 := abs_eq_zero.mp (le_antisymm htM (abs_nonneg _))
45 have hs : z.2=0 := norm_eq_zero.mp (le_antisymm hsM (norm_nonneg _))
46 have hz : z=0 := Prod.ext ht hs
47 subst z
48 exact ⟨0,probabilityCone.zero_mem,0,probabilityCone.zero_mem,by simp,by simp⟩
49 · have hMp : 0<M := lt_of_le_of_ne hM (Ne.symm hzero)
50 let q : V := M⁻¹ • z.2
51 let a : ℝ := (M+z.1)/2
52 let b : ℝ := (M-z.1)/2
53 have ha : 0≤a := by dsimp [a]; linarith [neg_abs_le z.1]
54 have hb : 0≤b := by dsimp [b]; linarith [le_abs_self z.1]
55 have hab : a+b=M := by dsimp [a,b]; ring
56 have hd : a-b=z.1 := by dsimp [a,b]; ring
57 have hq : ‖q‖≤1 := by
58 change ‖(M⁻¹ : ℝ) • z.2‖≤1
59 rw [norm_smul,Real.norm_eq_abs,abs_of_nonneg (inv_nonneg.mpr hM)]
60 exact (inv_mul_le_iff₀ hMp).mpr (by simpa using hsM)
61 refine ⟨(a,a • q),ray_mem ha hq,(b,b • -q),ray_mem hb (by simpa using hq),?_,?_⟩
62 · apply Prod.ext
63 · exact hd.symm
64 · change z.2=a • q-b • -q
65 rw [smul_neg,sub_neg_eq_add,← add_smul,hab,smul_smul,mul_inv_cancel₀ hzero,one_smul]
66 · exact hab
67
68 /-- This equality derives the stated norm from the actual cone infimum. -/
69 theorem value_eq (z : State V) : probabilityCone.value z=max |z.1| ‖z.2‖ := by
70 apply le_antisymm
71 · obtain ⟨u,hu,v,hv,hz,hcost⟩ := exists_minimal_decomposition z
72 exact (probabilityCone.value_le_cost hu hv hz).trans_eq hcost
73 · apply probabilityCone.le_value
74 exact fun _ hu _ hv hz => max_le_cost hu hv hz
75
76 @[simp] theorem value_zero_mass (v : V) : probabilityCone.value (0,v)=‖v‖ := by
77 rw [value_eq,abs_zero,max_eq_right (norm_nonneg _)]
78
79 @[simp] theorem mem_base (z : State V) : z∈probabilityCone.base ↔ z.1=1 ∧ ‖z.2‖≤1 := by
80 change (‖z.2‖≤z.1 ∧ z.1=1) ↔ _
81 constructor
82 · rintro ⟨h,h1⟩
83 exact ⟨h1,h.trans_eq h1⟩
84 · rintro ⟨h1,h⟩
85 exact ⟨h.trans_eq h1.symm,h1⟩
86
87 /-- A mass-preserving atlas pulls back every actual cone axiom. -/
88 noncomputable def atlasCone {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E]
89 [FiniteDimensional ℝ E] (T : E ≃ₗ[ℝ] State V) : BaseNorm.ProbabilityCone E where
90 carrier := T ⁻¹' cone
91 zero_mem := by simp only [Set.mem_preimage,map_zero]; exact probabilityCone.zero_mem
92 add_mem := by
93 intro x y hx hy
94 change T (x+y)∈cone
95 rw [map_add]
96 exact probabilityCone.add_mem hx hy
97 smul_mem := by
98 intro a ha x hx
99 change T (a • x)∈cone
100 rw [map_smul]
101 exact probabilityCone.smul_mem ha hx
102 spans := by
103 apply top_unique
104 intro z _
105 obtain ⟨u,hu,v,hv,he⟩ := probabilityCone.exists_decomposition (T z)
106 change u∈cone at hu
107 change v∈cone at hv
108 have he' : z=T.symm u-T.symm v :=
109 (T.symm_apply_apply z).symm.trans ((congrArg T.symm he).trans (map_sub T.symm u v))
110 rw [he']
111 exact Submodule.sub_mem _
112 (Submodule.subset_span (show T.symm u∈T ⁻¹' cone from by simpa only [Set.mem_preimage,LinearEquiv.apply_symm_apply] using hu))
113 (Submodule.subset_span (show T.symm v∈T ⁻¹' cone from by simpa only [Set.mem_preimage,LinearEquiv.apply_symm_apply] using hv))
114 mass := probabilityCone.mass.comp T.toLinearMap
115 mass_pos := by
116 intro x hx hne
117 exact probabilityCone.mass_pos hx (by intro h; exact hne (T.injective (by simpa using h)))
118 closed := probabilityCone.closed.preimage T.toLinearMap.continuous_of_finiteDimensional
119
120 @[simp] theorem atlasCone_mass {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E]
121 [FiniteDimensional ℝ E] (T : E ≃ₗ[ℝ] State V) (z : E) :
122 (atlasCone T).mass z=(T z).1 := rfl
123
124 end Komorebi.LSM.LorentzCylinder
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: a8bcc6308c97e86e8008fad9a154daf91c802d1c47d57402bc6aeee43e9a947b