Skip to content

Commit 4fec1aa

Browse files
committed
feat: lemmas for the analytic part of the proof of the Gelfond–Schneider theorem (Part 4/5) (leanprover-community#35316)
Co-authored-by: mkaratarakis <mixkarat@gmail.com>
1 parent 781f3e6 commit 4fec1aa

1 file changed

Lines changed: 54 additions & 1 deletion

File tree

Mathlib/Analysis/Analytic/Order.lean

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ Authors: Vincent Beffara, Stefan Kebekus
66
module
77

88
public import Mathlib.Analysis.Analytic.IsolatedZeros
9-
public import Mathlib.Analysis.Calculus.Deriv.Mul
109
public import Mathlib.Analysis.Calculus.Deriv.Pow
1110
public import Mathlib.Analysis.Calculus.InverseFunctionTheorem.Analytic
1211
public import Mathlib.Analysis.Calculus.IteratedDeriv.Lemmas
@@ -418,6 +417,60 @@ lemma AnalyticAt.exists_eq_sum_add_pow_mul [CharZero 𝕜] [CompleteSpace E]
418417
· contrapose hz
419418
exact (pow_eq_zero_iff'.mp hz).1 ▸ mem_of_mem_nhds hU0
420419

420+
variable [CharZero 𝕜] [CompleteSpace E] {z₀ : 𝕜} {f : 𝕜 → E}
421+
(hf : AnalyticAt 𝕜 f z₀) (hzero : f z₀ = 0)
422+
423+
include hf hzero
424+
425+
/-- If an analytic function `f` vanishes at `z₀`, then the analytic order of its derivative
426+
at `z₀` is at least `n` if and only if the analytic order of `f` at `z₀` is at least `n + 1`. -/
427+
lemma analyticOrderAt_deriv_ge_iff {n : ℕ} :
428+
n ≤ analyticOrderAt (deriv f) z₀ ↔ n + 1 ≤ analyticOrderAt f z₀ := by
429+
rw [natCast_le_analyticOrderAt_iff_iteratedDeriv_eq_zero hf.deriv,
430+
← Nat.cast_add_one, natCast_le_analyticOrderAt_iff_iteratedDeriv_eq_zero hf]
431+
simp only [← iteratedDeriv_succ']
432+
refine ⟨fun h k hk ↦ ?_, fun h k hk ↦ h (k + 1) <| by lia⟩
433+
cases k with
434+
| zero => simpa
435+
| succ k => exact h k <| by lia
436+
437+
/-- The derivative of an analytic function `f` has infinite analytic order at a zero `z₀` if and
438+
only if `f` has infinite analytic order at `z₀`. -/
439+
lemma analyticOrderAt_deriv_eq_top_iff_of_eq_zero :
440+
analyticOrderAt (deriv f) z₀ = ⊤ ↔ analyticOrderAt f z₀ = ⊤ := by
441+
simp_rw [ENat.eq_top_iff_forall_ge, analyticOrderAt_deriv_ge_iff hf hzero]
442+
exact ⟨fun h m ↦ le_self_add.trans (h m), fun h m ↦ h (m + 1)⟩
443+
444+
/-- If an analytic function `f` vanishes at `z₀`, then its derivative has finite analytic order `n`
445+
at `z₀` if and only if `f` has analytic order `n + 1` at `z₀`. -/
446+
lemma analyticOrderAt_deriv_eq_iff {n : ℕ} :
447+
analyticOrderAt f z₀ = n + 1 ↔ analyticOrderAt (deriv f) z₀ = n := by
448+
have H {m : ℕ} {n : ℕ∞} : n = m ↔ m ≤ n ∧ ¬ m + 1 ≤ n := by
449+
cases n with | top => simp | coe _ => norm_cast; lia
450+
rw [← Nat.cast_add_one n, H, H, analyticOrderAt_deriv_ge_iff hf hzero, ← Nat.cast_add_one n,
451+
analyticOrderAt_deriv_ge_iff hf hzero]
452+
453+
omit hzero in
454+
/-- An analytic function `f` has finite analytic order `n` at `z₀` if and only if its first
455+
`n` iterated derivatives (including `f` itself) vanish at `z₀` and the `n`-th iterated derivative is
456+
non-zero. -/
457+
lemma analyticOrderAt_eq_nat_iff_iteratedDeriv_eq_zero {n : ℕ} :
458+
analyticOrderAt f z₀ = n ↔ (∀ k < n, iteratedDeriv k f z₀ = 0) ∧ iteratedDeriv n f z₀ ≠ 0 := by
459+
induction n generalizing f with
460+
| zero => simp [hf.analyticOrderAt_eq_zero]
461+
| succ n IH =>
462+
specialize IH hf.deriv
463+
simp_rw [← iteratedDeriv_succ'] at IH
464+
refine ⟨fun ho ↦ ?_, fun ⟨hz, hnz⟩ ↦ ?_⟩
465+
· have ⟨h_zero, h_nz⟩ := IH.mp (analyticOrderAt_deriv_of_pos hf ho)
466+
refine ⟨fun k hk ↦ ?_, h_nz⟩
467+
match k with
468+
| 0 => rw [iteratedDeriv_zero, ← hf.analyticOrderAt_ne_zero, ho, Nat.cast_add_one]
469+
exact Nat.cast_add_one_ne_zero _
470+
| k + 1 => exact h_zero k (by lia)
471+
· exact (analyticOrderAt_deriv_eq_iff hf <| by simpa using hz 0 (by lia)).mpr <|
472+
IH.mpr ⟨fun j _ ↦ hz (j + 1) (by lia), hnz⟩
473+
421474
end NormedSpace
422475

423476
/-!

0 commit comments

Comments
 (0)