Special Functions · Lean source

CoupledGermInverse.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)

CoupledGermInverse.lean161 lines

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

Skip source text

1 import CoupledUniqueness
2 import Mathlib.Analysis.Analytic.OfScalars
3 
4 /-! # Recovering labeled scale parameters from canonical analytic germs
5 
6 The coefficients use the ordinary odd series, not exponential generating series.
7 The comparison with Mathlib's formal multilinear series inserts zero even terms.
8 -/
9 
10 set_option autoImplicit false
11 set_option maxHeartbeats 1000000
12 
13 noncomputable section
14 
15 open Filter
16 open scoped Topology
17 
18 namespace Komorebi.SpecialFunctions.Coupled.Scales
19 
20 def denseOdd (c : ℕ → ℝ) (k : ℕ) : ℂ :=
21   if k % 2 = 1 then (c (k / 2) : ℂ) else 0
22 
23 theorem denseOdd_odd (c : ℕ → ℝ) (n : ℕ) :
24     denseOdd c (2 * n + 1) = (c n : ℂ) := by
25   have hm : (2 * n + 1) % 2 = 1 := by omega
26   have hd : (2 * n + 1) / 2 = n := by omega
27   simp [denseOdd, hm, hd]
28 
29 theorem denseOdd_even (c : ℕ → ℝ) (n : ℕ) :
30     denseOdd c (2 * n) = 0 := by
31   have hm : (2 * n) % 2 = 0 := by omega
32   simp [denseOdd, hm]
33 
34 theorem odd_hasSum_dense {c : ℕ → ℝ} {z w : ℂ}
35     (h : HasSum (fun n => (c n : ℂ) * z ^ (2 * n + 1)) w) :
36     HasSum (fun k => denseOdd c k * z ^ k) w := by
37   have hi : Function.Injective (fun n : ℕ => 2 * n + 1) := by
38     intro a b hab
39     change 2 * a + 1 = 2 * b + 1 at hab
40     omega
41   apply (hi.hasSum_iff (f := fun k => denseOdd c k * z ^ k) ?_).mp
42   · simpa only [Function.comp_def, denseOdd_odd] using h
43   · intro k hk
44     have hm : k % 2 ≠ 1 := by
45       intro hm
46       apply hk
47       refine ⟨k / 2, ?_⟩
48       change 2 * (k / 2) + 1 = k
49       omega
50     simp [denseOdd, hm]
51 
52 theorem odd_series_hasFPowerSeriesAt {c : ℕ → ℝ} {f : ℂ → ℂ}
53     (h : ∀ᶠ z in 𝓝 (0 : ℂ),
54       HasSum (fun n => (c n : ℂ) * z ^ (2 * n + 1)) (f z)) :
55     HasFPowerSeriesAt f (FormalMultilinearSeries.ofScalars ℂ (denseOdd c)) 0 := by
56   apply hasFPowerSeriesAt_iff.mpr
57   filter_upwards [h] with z hz
58   simpa only [FormalMultilinearSeries.coeff_ofScalars, zero_add, smul_eq_mul,
59     mul_comm] using odd_hasSum_dense hz
60 
61 theorem odd_coefficients_eq_of_germ_eq {c d : ℕ → ℝ} {f g : ℂ → ℂ}
62     (hc : ∀ᶠ z in 𝓝 (0 : ℂ),
63       HasSum (fun n => (c n : ℂ) * z ^ (2 * n + 1)) (f z))
64     (hd : ∀ᶠ z in 𝓝 (0 : ℂ),
65       HasSum (fun n => (d n : ℂ) * z ^ (2 * n + 1)) (g z))
66     (hfg : f =ᶠ[𝓝 0] g) : c = d := by
67   have hp := (odd_series_hasFPowerSeriesAt hc).eq_formalMultilinearSeries_of_eventually
68     (odd_series_hasFPowerSeriesAt hd) hfg
69   funext n
70   have hn := congrArg (fun p : FormalMultilinearSeries ℂ ℂ ℂ => p.coeff (2 * n + 1)) hp
71   simpa only [FormalMultilinearSeries.coeff_ofScalars, denseOdd_odd,
72     Complex.ofReal_inj] using hn
73 
74 theorem odd_series_Taylor_coefficients {c : ℕ → ℝ} {f : ℂ → ℂ}
75     {p : FormalMultilinearSeries ℂ ℂ ℂ} (hp : HasFPowerSeriesAt f p 0)
76     (hc : ∀ᶠ z in 𝓝 (0 : ℂ),
77       HasSum (fun n => (c n : ℂ) * z ^ (2 * n + 1)) (f z)) (k : ℕ) :
78     p.coeff k = denseOdd c k := by
79   have he := hp.eq_formalMultilinearSeries (odd_series_hasFPowerSeriesAt hc)
80   simpa only [FormalMultilinearSeries.coeff_ofScalars] using
81     congrArg (fun q : FormalMultilinearSeries ℂ ℂ ℂ => q.coeff k) he
82 
83 theorem coupled_hasFPowerSeriesAt (s : Scales) (hs : s.positive)
84     (hstrict : s.q < 1 ∧ s.r < 1 ∧ s.a < 1 ∧ s.b < 1) :
85     HasFPowerSeriesAt s.U
86       (FormalMultilinearSeries.ofScalars ℂ (denseOdd (fun n => (s.coefficients n).1))) 0 ∧
87     HasFPowerSeriesAt s.V
88       (FormalMultilinearSeries.ofScalars ℂ (denseOdd (fun n => (s.coefficients n).2))) 0 := by
89   exact ⟨odd_series_hasFPowerSeriesAt (Eventually.of_forall fun z =>
90       (s.coefficient_series_entire hs hstrict z).1.of_norm.hasSum),
91     odd_series_hasFPowerSeriesAt (Eventually.of_forall fun z =>
92       (s.coefficient_series_entire hs hstrict z).2.of_norm.hasSum)⟩
93 
94 theorem coefficients_eq_of_analytic_germs {s t : Scales}
95     (hs : s.positive) (ht : t.positive)
96     (hstricts : s.q < 1 ∧ s.r < 1 ∧ s.a < 1 ∧ s.b < 1)
97     (hstrictt : t.q < 1 ∧ t.r < 1 ∧ t.a < 1 ∧ t.b < 1)
98     (hU : s.U =ᶠ[𝓝 0] t.U) (hV : s.V =ᶠ[𝓝 0] t.V) :
99     s.coefficients = t.coefficients := by
100   have h1 := odd_coefficients_eq_of_germ_eq
101     (Eventually.of_forall fun z => (s.coefficient_series_entire hs hstricts z).1.of_norm.hasSum)
102     (Eventually.of_forall fun z => (t.coefficient_series_entire ht hstrictt z).1.of_norm.hasSum) hU
103   have h2 := odd_coefficients_eq_of_germ_eq
104     (Eventually.of_forall fun z => (s.coefficient_series_entire hs hstricts z).2.of_norm.hasSum)
105     (Eventually.of_forall fun z => (t.coefficient_series_entire ht hstrictt z).2.of_norm.hasSum) hV
106   funext n
107   exact Prod.ext (congrFun h1 n) (congrFun h2 n)
108 
109 theorem sameJet_of_analytic_germs {s t : Scales}
110     (hs : s.positive) (ht : t.positive)
111     (hstricts : s.q < 1 ∧ s.r < 1 ∧ s.a < 1 ∧ s.b < 1)
112     (hstrictt : t.q < 1 ∧ t.r < 1 ∧ t.a < 1 ∧ t.b < 1)
113     (hU : s.U =ᶠ[𝓝 0] t.U) (hV : s.V =ᶠ[𝓝 0] t.V) : s.sameJet t := by
114   apply sameJet_of_coefficients_eq
115   intro n _ _
116   exact congrFun (coefficients_eq_of_analytic_germs hs ht hstricts hstrictt hU hV) n
117 
118 /-- The guarded analytic-germ parameter-recovery implication of Theorem G.2. -/
119 theorem parameters_of_analytic_germs {s t : Scales}
120     (hs : s.positive) (ht : t.positive)
121     (hstricts : s.q < 1 ∧ s.r < 1 ∧ s.a < 1 ∧ s.b < 1)
122     (hstrictt : t.q < 1 ∧ t.r < 1 ∧ t.a < 1 ∧ t.b < 1)
123     (hD : s.defect ≠ 0)
124     (hU : s.U =ᶠ[𝓝 0] t.U) (hV : s.V =ᶠ[𝓝 0] t.V) : s = t :=
125   parameters_of_formal_pair_eq hs ht hD
126     (coefficients_eq_of_analytic_germs hs ht hstricts hstrictt hU hV)
127 
128 theorem parameters_of_entire_pair_eq {s t : Scales}
129     (hs : s.positive) (ht : t.positive)
130     (hstricts : s.q < 1 ∧ s.r < 1 ∧ s.a < 1 ∧ s.b < 1)
131     (hstrictt : t.q < 1 ∧ t.r < 1 ∧ t.a < 1 ∧ t.b < 1)
132     (hD : s.defect ≠ 0) (hU : s.U = t.U) (hV : s.V = t.V) : s = t :=
133   parameters_of_analytic_germs hs ht hstricts hstrictt hD
134     (Eventually.of_forall fun z => congrFun hU z)
135     (Eventually.of_forall fun z => congrFun hV z)
136 
137 theorem analytic_solution_Taylor_coefficients (s : Scales) (hs : s.positive)
138     (hstrict : s.q < 1 ∧ s.r < 1 ∧ s.a < 1 ∧ s.b < 1)
139     {f g : ℂ → ℂ} {p q : FormalMultilinearSeries ℂ ℂ ℂ}
140     (hp : HasFPowerSeriesAt f p 0) (hq : HasFPowerSeriesAt g q 0)
141     (hzero : f 0 = 0 ∧ g 0 = 0) (heq : s.GermEquations f g) (k : ℕ) :
142     p.coeff k = denseOdd (fun n => (s.coefficients n).1) k ∧
143     q.coeff k = denseOdd (fun n => (s.coefficients n).2) k := by
144   have hc := s.analytic_solution_hasSum hs hstrict hp.analyticAt hq.analyticAt hzero heq
145   exact ⟨odd_series_Taylor_coefficients hp (hc.mono fun _ hz => hz.1) k,
146     odd_series_Taylor_coefficients hq (hc.mono fun _ hz => hz.2) k⟩
147 
148 theorem parameters_of_shared_solution_germ {s t : Scales}
149     (hs : s.positive) (ht : t.positive)
150     (hstricts : s.q < 1 ∧ s.r < 1 ∧ s.a < 1 ∧ s.b < 1)
151     (hstrictt : t.q < 1 ∧ t.r < 1 ∧ t.a < 1 ∧ t.b < 1)
152     (hD : s.defect ≠ 0) {f g : ℂ → ℂ}
153     (hf : AnalyticAt ℂ f 0) (hg : AnalyticAt ℂ g 0)
154     (hzero : f 0 = 0 ∧ g 0 = 0)
155     (heqs : s.GermEquations f g) (heqt : t.GermEquations f g) : s = t := by
156   have hsc := s.analytic_solution_germ_eq hs hstricts hf hg hzero heqs
157   have htc := t.analytic_solution_germ_eq ht hstrictt hf hg hzero heqt
158   exact parameters_of_analytic_germs hs ht hstricts hstrictt hD
159     (hsc.1.symm.trans htc.1) (hsc.2.symm.trans htc.2)
160 
161 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: 92a0a2fa8fa33a9f6d602e73d8714c645d57b8bcee4d89205f87ad9dfb56bb2b

Original source on GitHub

Back to Special Functions