Special Functions · Lean source

CoupledGrowthTypes.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.

Local imports (1)

CoupledGrowthTypes.lean238 lines

Original source pathlean/CoupledGrowthTypes.lean
Skip declarations and read code

Skip source text

1 import CoupledUpperGrowth
2 import Mathlib.Topology.Order.LiminfLimsup
3 
4 /-! # Real types and the radial exponent for the canonical coupled pair -/
5 
6 set_option autoImplicit false
7 set_option maxHeartbeats 2000000
8 
9 noncomputable section
10 open Filter Set
11 open scoped Topology Matrix
12 
13 namespace Komorebi.SpecialFunctions.Coupled.Scales
14 
15 def realComponent (s : Scales) (i : Fin 2) (R : ℝ) : ℝ := ![s.UReal R, s.VReal R] i
16 def growthRatio (s : Scales) (hs : s.positive)
17     (hstrict : s.q < 1 ∧ s.r < 1 ∧ s.a < 1 ∧ s.b < 1) (i : Fin 2) (R : ℝ) : ℝ :=
18   Real.log (s.realComponent i R) / R ^ (s.characteristicExponent hs hstrict)
19 def lowerType (s : Scales) (hs : s.positive)
20     (hstrict : s.q < 1 ∧ s.r < 1 ∧ s.a < 1 ∧ s.b < 1) (i : Fin 2) : ℝ :=
21   Filter.liminf (s.growthRatio hs hstrict i) atTop
22 def upperType (s : Scales) (hs : s.positive)
23     (hstrict : s.q < 1 ∧ s.r < 1 ∧ s.a < 1 ∧ s.b < 1) (i : Fin 2) : ℝ :=
24   Filter.limsup (s.growthRatio hs hstrict i) atTop
25 def radialExponent (s : Scales) (i : Fin 2) (R : ℝ) : ℝ :=
26   Real.log (Real.log (s.realComponent i R)) / Real.log R
27 def radialOrder (s : Scales) (i : Fin 2) : ℝ := Filter.limsup (s.radialExponent i) atTop
28 
29 theorem realComponent_positive (s : Scales) (hs : s.positive)
30     (hstrict : s.q < 1 ∧ s.r < 1 ∧ s.a < 1 ∧ s.b < 1) (i : Fin 2)
31     {R : ℝ} (hR : 0 < R) : 0 < s.realComponent i R := by
32   have hh := s.real_axis_lower_linear hs hstrict hR.le
33   fin_cases i
34   · exact hR.trans_le hh.1
35   · exact hR.trans_le hh.2
36 
37 theorem canonical_growth_ratio_bounds (s : Scales) (hs : s.positive)
38     (hstrict : s.q < 1 ∧ s.r < 1 ∧ s.a < 1 ∧ s.b < 1) (i : Fin 2)
39     {R : ℝ} (hR : Real.exp 1 ≤ R) :
40     s.canonicalLowerCoefficient hs hstrict i ≤ s.growthRatio hs hstrict i R ∧
41     s.growthRatio hs hstrict i R ≤ s.canonicalUpperCoefficient hs hstrict i := by
42   have hh := s.canonical_two_sided_growth_ratio hs hstrict hR
43   fin_cases i
44   · exact hh.1
45   · exact hh.2
46 
47 theorem canonical_growth_ratio_eventually (s : Scales) (hs : s.positive)
48     (hstrict : s.q < 1 ∧ s.r < 1 ∧ s.a < 1 ∧ s.b < 1) (i : Fin 2) :
49     ∀ᶠ R in atTop, s.canonicalLowerCoefficient hs hstrict i ≤ s.growthRatio hs hstrict i R ∧
50       s.growthRatio hs hstrict i R ≤ s.canonicalUpperCoefficient hs hstrict i := by
51   filter_upwards [eventually_ge_atTop (Real.exp 1)] with R hR
52   exact s.canonical_growth_ratio_bounds hs hstrict i hR
53 
54 theorem canonical_growth_ratio_bounded (s : Scales) (hs : s.positive)
55     (hstrict : s.q < 1 ∧ s.r < 1 ∧ s.a < 1 ∧ s.b < 1) (i : Fin 2) :
56     atTop.IsBoundedUnder (· ≤ ·) (s.growthRatio hs hstrict i) ∧
57     atTop.IsBoundedUnder (· ≥ ·) (s.growthRatio hs hstrict i) := by
58   have hh := s.canonical_growth_ratio_eventually hs hstrict i
59   exact ⟨⟨s.canonicalUpperCoefficient hs hstrict i, hh.mono (fun _ h => h.2)⟩,
60     ⟨s.canonicalLowerCoefficient hs hstrict i, hh.mono (fun _ h => h.1)⟩⟩
61 
62 theorem real_type_sandwich {f : ℝ → ℝ} {lo hi : ℝ}
63     (hh : ∀ᶠ R in atTop, lo ≤ f R ∧ f R ≤ hi) :
64     lo ≤ Filter.liminf f atTop ∧ Filter.liminf f atTop ≤ Filter.limsup f atTop ∧
65       Filter.limsup f atTop ≤ hi := by
66   have hlo := hh.mono (fun _ h => h.1)
67   have hhi := hh.mono (fun _ h => h.2)
68   have hbA : atTop.IsBoundedUnder (· ≤ ·) f := ⟨hi, hhi⟩
69   have hbB : atTop.IsBoundedUnder (· ≥ ·) f := ⟨lo, hlo⟩
70   exact ⟨le_liminf_of_le hbA.isCoboundedUnder_ge hlo,
71     liminf_le_limsup hbA hbB, limsup_le_of_le hbB.isCoboundedUnder_le hhi⟩
72 
73 theorem canonical_type_bounds (s : Scales) (hs : s.positive)
74     (hstrict : s.q < 1 ∧ s.r < 1 ∧ s.a < 1 ∧ s.b < 1) (i : Fin 2) :
75     s.canonicalLowerCoefficient hs hstrict i ≤ s.lowerType hs hstrict i ∧
76     s.lowerType hs hstrict i ≤ s.upperType hs hstrict i ∧
77     s.upperType hs hstrict i ≤ s.canonicalUpperCoefficient hs hstrict i :=
78   real_type_sandwich (s.canonical_growth_ratio_eventually hs hstrict i)
79 
80 theorem canonical_types_positive (s : Scales) (hs : s.positive)
81     (hstrict : s.q < 1 ∧ s.r < 1 ∧ s.a < 1 ∧ s.b < 1) (i : Fin 2) :
82     0 < s.lowerType hs hstrict i ∧ 0 < s.upperType hs hstrict i := by
83   have hh := s.canonical_type_bounds hs hstrict i
84   have hl := (s.canonicalLowerCoefficient_positive hs hstrict i).trans_le hh.1
85   exact ⟨hl, hl.trans_le hh.2.1⟩
86 
87 theorem loglog_ratio_sandwich {f : ℝ → ℝ} {ρ lo hi R : ℝ}
88     (hlo : 0 < lo) (hhi : 0 < hi) (hR : 1 < R)
89     (hh : lo ≤ Real.log (f R) / R ^ ρ ∧ Real.log (f R) / R ^ ρ ≤ hi) :
90     ρ + Real.log lo / Real.log R ≤ Real.log (Real.log (f R)) / Real.log R ∧
91       Real.log (Real.log (f R)) / Real.log R ≤ ρ + Real.log hi / Real.log R := by
92   have hR0 : 0 < R := by linarith only [hR]
93   have hp := Real.rpow_pos_of_pos hR0 ρ
94   have hlogR := Real.log_pos hR
95   have hL := (le_div_iff₀ hp).mp hh.1
96   have hU := (div_le_iff₀ hp).mp hh.2
97   have hlogF := (mul_pos hlo hp).trans_le hL
98   have hLL := Real.log_le_log (mul_pos hlo hp) hL
99   have hUU := Real.log_le_log hlogF hU
100   rw [Real.log_mul (ne_of_gt hlo) (ne_of_gt hp), Real.log_rpow hR0] at hLL
101   rw [Real.log_mul (ne_of_gt hhi) (ne_of_gt hp), Real.log_rpow hR0] at hUU
102   constructor
103   · simpa only [add_div, mul_div_cancel_right₀ _ (ne_of_gt hlogR), add_comm] using
104       div_le_div_of_nonneg_right hLL hlogR.le
105   · simpa only [add_div, mul_div_cancel_right₀ _ (ne_of_gt hlogR), add_comm] using
106       div_le_div_of_nonneg_right hUU hlogR.le
107 
108 theorem tendsto_loglog_of_ratio_bounds {f : ℝ → ℝ} {ρ lo hi : ℝ}
109     (hlo : 0 < lo) (hhi : 0 < hi)
110     (hh : ∀ᶠ R in atTop, lo ≤ Real.log (f R) / R ^ ρ ∧
111       Real.log (f R) / R ^ ρ ≤ hi) :
112     Tendsto (fun R => Real.log (Real.log (f R)) / Real.log R) atTop (𝓝 ρ) := by
113   have hc (c : ℝ) : Tendsto (fun R : ℝ => ρ + Real.log c / Real.log R) atTop (𝓝 ρ) := by
114     simpa only [add_zero] using
115       (tendsto_const_nhds (x := ρ)).add (Real.tendsto_log_atTop.const_div_atTop (Real.log c))
116   have hb : ∀ᶠ R in atTop,
117       ρ + Real.log lo / Real.log R ≤ Real.log (Real.log (f R)) / Real.log R ∧
118       Real.log (Real.log (f R)) / Real.log R ≤ ρ + Real.log hi / Real.log R := by
119     filter_upwards [hh, eventually_gt_atTop (1 : ℝ)] with R hR hR1
120     exact loglog_ratio_sandwich hlo hhi hR1 hR
121   exact tendsto_of_tendsto_of_tendsto_of_le_of_le' (hc lo) (hc hi)
122     (hb.mono (fun _ h => h.1)) (hb.mono (fun _ h => h.2))
123 
124 theorem canonical_radial_exponent_limit (s : Scales) (hs : s.positive)
125     (hstrict : s.q < 1 ∧ s.r < 1 ∧ s.a < 1 ∧ s.b < 1) (i : Fin 2) :
126     Tendsto (s.radialExponent i) atTop (𝓝 (s.characteristicExponent hs hstrict)) :=
127   tendsto_loglog_of_ratio_bounds (s.canonicalLowerCoefficient_positive hs hstrict i)
128     (s.canonicalUpperCoefficient_positive hs hstrict i)
129     (s.canonical_growth_ratio_eventually hs hstrict i)
130 
131 theorem canonical_radial_order (s : Scales) (hs : s.positive)
132     (hstrict : s.q < 1 ∧ s.r < 1 ∧ s.a < 1 ∧ s.b < 1) (i : Fin 2) :
133     s.radialOrder i = s.characteristicExponent hs hstrict :=
134   (s.canonical_radial_exponent_limit hs hstrict i).limsup_eq
135 
136 def complexComponent (s : Scales) (i : Fin 2) (z : ℂ) : ℂ := ![s.U z, s.V z] i
137 
138 theorem component_spherical_maximum (s : Scales) (hs : s.positive)
139     (hstrict : s.q < 1 ∧ s.r < 1 ∧ s.a < 1 ∧ s.b < 1) (i : Fin 2)
140     {R : ℝ} (hR : 0 ≤ R) :
141     IsGreatest ((fun z => ‖s.complexComponent i z‖) '' Metric.sphere (0 : ℂ) R)
142       (s.realComponent i R) := by
143   have hh := s.maximum_modulus_real_axis hs hstrict hR
144   fin_cases i
145   · exact hh.1
146   · exact hh.2
147 
148 theorem component_real_norm (s : Scales) (hs : s.positive)
149     (hstrict : s.q < 1 ∧ s.r < 1 ∧ s.a < 1 ∧ s.b < 1) (i : Fin 2)
150     {R : ℝ} (hR : 0 ≤ R) : ‖s.complexComponent i (R : ℂ)‖ = s.realComponent i R := by
151   have hh := s.real_axis_norm hs hstrict hR
152   fin_cases i
153   · exact hh.1
154   · exact hh.2
155 
156 theorem norm_growth_ratio_eventually_eq (s : Scales) (hs : s.positive)
157     (hstrict : s.q < 1 ∧ s.r < 1 ∧ s.a < 1 ∧ s.b < 1) (i : Fin 2) :
158     (fun R : ℝ => Real.log ‖s.complexComponent i (R : ℂ)‖ /
159       R ^ (s.characteristicExponent hs hstrict)) =ᶠ[atTop] s.growthRatio hs hstrict i := by
160   filter_upwards [eventually_ge_atTop (0 : ℝ)] with R hR
161   rw [s.component_real_norm hs hstrict i hR]
162   rfl
163 
164 theorem norm_type_identification (s : Scales) (hs : s.positive)
165     (hstrict : s.q < 1 ∧ s.r < 1 ∧ s.a < 1 ∧ s.b < 1) (i : Fin 2) :
166     Filter.liminf (fun R : ℝ => Real.log ‖s.complexComponent i (R : ℂ)‖ /
167       R ^ (s.characteristicExponent hs hstrict)) atTop = s.lowerType hs hstrict i ∧
168     Filter.limsup (fun R : ℝ => Real.log ‖s.complexComponent i (R : ℂ)‖ /
169       R ^ (s.characteristicExponent hs hstrict)) atTop = s.upperType hs hstrict i := by
170   have hh := s.norm_growth_ratio_eventually_eq hs hstrict i
171   exact ⟨Filter.liminf_congr hh, Filter.limsup_congr hh⟩
172 
173 theorem canonical_norm_radial_limit (s : Scales) (hs : s.positive)
174     (hstrict : s.q < 1 ∧ s.r < 1 ∧ s.a < 1 ∧ s.b < 1) (i : Fin 2) :
175     Tendsto (fun R : ℝ => Real.log (Real.log ‖s.complexComponent i (R : ℂ)‖) / Real.log R)
176       atTop (𝓝 (s.characteristicExponent hs hstrict)) := by
177   apply (s.canonical_radial_exponent_limit hs hstrict i).congr'
178   filter_upwards [eventually_ge_atTop (0 : ℝ)] with R hR
179   rw [s.component_real_norm hs hstrict i hR]
180   rfl
181 
182 def maximumModulus (s : Scales) (i : Fin 2) (R : ℝ) : ℝ :=
183   sSup ((fun z => ‖s.complexComponent i z‖) '' Metric.sphere (0 : ℂ) R)
184 
185 theorem maximumModulus_eq (s : Scales) (hs : s.positive)
186     (hstrict : s.q < 1 ∧ s.r < 1 ∧ s.a < 1 ∧ s.b < 1) (i : Fin 2)
187     {R : ℝ} (hR : 0 ≤ R) : s.maximumModulus i R = s.realComponent i R := by
188   have hh := s.component_spherical_maximum hs hstrict i hR
189   exact hh.isLUB.csSup_eq ⟨_, hh.1⟩
190 
191 theorem maximum_growth_ratio_eventually_eq (s : Scales) (hs : s.positive)
192     (hstrict : s.q < 1 ∧ s.r < 1 ∧ s.a < 1 ∧ s.b < 1) (i : Fin 2) :
193     (fun R : ℝ => Real.log (s.maximumModulus i R) /
194       R ^ (s.characteristicExponent hs hstrict)) =ᶠ[atTop] s.growthRatio hs hstrict i := by
195   filter_upwards [eventually_ge_atTop (0 : ℝ)] with R hR
196   rw [s.maximumModulus_eq hs hstrict i hR]
197   rfl
198 
199 theorem maximum_type_identification (s : Scales) (hs : s.positive)
200     (hstrict : s.q < 1 ∧ s.r < 1 ∧ s.a < 1 ∧ s.b < 1) (i : Fin 2) :
201     Filter.liminf (fun R : ℝ => Real.log (s.maximumModulus i R) /
202       R ^ (s.characteristicExponent hs hstrict)) atTop = s.lowerType hs hstrict i ∧
203     Filter.limsup (fun R : ℝ => Real.log (s.maximumModulus i R) /
204       R ^ (s.characteristicExponent hs hstrict)) atTop = s.upperType hs hstrict i := by
205   have hh := s.maximum_growth_ratio_eventually_eq hs hstrict i
206   exact ⟨Filter.liminf_congr hh, Filter.limsup_congr hh⟩
207 
208 theorem canonical_maximum_type_bounds (s : Scales) (hs : s.positive)
209     (hstrict : s.q < 1 ∧ s.r < 1 ∧ s.a < 1 ∧ s.b < 1) (i : Fin 2) :
210     s.canonicalLowerCoefficient hs hstrict i ≤
211       Filter.liminf (fun R : ℝ => Real.log (s.maximumModulus i R) /
212         R ^ (s.characteristicExponent hs hstrict)) atTop ∧
213     Filter.liminf (fun R : ℝ => Real.log (s.maximumModulus i R) /
214       R ^ (s.characteristicExponent hs hstrict)) atTop ≤
215       Filter.limsup (fun R : ℝ => Real.log (s.maximumModulus i R) /
216         R ^ (s.characteristicExponent hs hstrict)) atTop ∧
217     Filter.limsup (fun R : ℝ => Real.log (s.maximumModulus i R) /
218       R ^ (s.characteristicExponent hs hstrict)) atTop ≤ s.canonicalUpperCoefficient hs hstrict i := by
219   have hh := s.maximum_type_identification hs hstrict i
220   rw [hh.1, hh.2]
221   exact s.canonical_type_bounds hs hstrict i
222 
223 theorem canonical_maximum_radial_limit (s : Scales) (hs : s.positive)
224     (hstrict : s.q < 1 ∧ s.r < 1 ∧ s.a < 1 ∧ s.b < 1) (i : Fin 2) :
225     Tendsto (fun R : ℝ => Real.log (Real.log (s.maximumModulus i R)) / Real.log R)
226       atTop (𝓝 (s.characteristicExponent hs hstrict)) := by
227   apply (s.canonical_radial_exponent_limit hs hstrict i).congr'
228   filter_upwards [eventually_ge_atTop (0 : ℝ)] with R hR
229   rw [s.maximumModulus_eq hs hstrict i hR]
230   rfl
231 
232 theorem canonical_maximum_order (s : Scales) (hs : s.positive)
233     (hstrict : s.q < 1 ∧ s.r < 1 ∧ s.a < 1 ∧ s.b < 1) (i : Fin 2) :
234     Filter.limsup (fun R : ℝ => Real.log (Real.log (s.maximumModulus i R)) / Real.log R)
235       atTop = s.characteristicExponent hs hstrict :=
236   (s.canonical_maximum_radial_limit hs hstrict i).limsup_eq
237 
238 end Komorebi.SpecialFunctions.Coupled.Scales

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: 1363c216cfd64706fce14bc8fece963f3313ecc3b4e393a7486c89b09b313c7a

Original source on GitHub

Back to Special Functions