nevanlinna/Nevanlinna/holomorphic_JensenFormula.lean

173 lines
5.4 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import Nevanlinna.analyticOn_zeroSet
import Nevanlinna.harmonicAt_examples
import Nevanlinna.harmonicAt_meanValue
import Nevanlinna.specialFunctions_CircleIntegral_affine
theorem jensen_case_R_eq_one
(f : )
(h₁f : ∀ z ∈ Metric.closedBall (0 : ) 1, HolomorphicAt f z)
(h₂f : f 0 ≠ 0)
(S : Finset )
(a : S → )
(ha : ∀ s, a s ∈ Metric.ball 0 1)
(F : )
(h₁F : ∀ z ∈ Metric.closedBall (0 : ) 1, HolomorphicAt F z)
(h₂F : ∀ z ∈ Metric.closedBall (0 : ) 1, F z ≠ 0)
(h₃F : f = fun z ↦ (F z) * ∏ s : S, (z - a s)) :
Real.log ‖f 0‖ = -∑ s, Real.log (‖a s‖⁻¹) + (2 * Real.pi)⁻¹ * ∫ (x : ) in (0)..2 * Real.pi, Real.log ‖f (circleMap 0 1 x)‖ := by
have h₁U : IsPreconnected (Metric.closedBall (0 : ) 1) := by sorry
have h₂U : IsCompact (Metric.closedBall (0 : ) 1) := by sorry
have h₁f : AnalyticOn f (Metric.closedBall (0 : ) 1) := by sorry
have h₂f : ∃ u ∈ (Metric.closedBall (0 : ) 1), f u ≠ 0 := by sorry
let α := AnalyticOnCompact.eliminateZeros h₁U h₂U h₁f h₂f
obtain ⟨g, A, h'₁g, h₂g, h₃g⟩ := α
have h₁g : ∀ z ∈ Metric.closedBall 0 1, HolomorphicAt F z := by sorry
let logAbsF := fun w ↦ Real.log ‖F w‖
have t₀ : ∀ z ∈ Metric.closedBall 0 1, HarmonicAt logAbsF z := by
intro z hz
apply logabs_of_holomorphicAt_is_harmonic
apply h₁F z hz
exact h₂F z hz
have t₁ : (∫ (x : ) in (0)..2 * Real.pi, logAbsF (circleMap 0 1 x)) = 2 * Real.pi * logAbsF 0 := by
apply harmonic_meanValue₁ 1 Real.zero_lt_one t₀
have t₂ : ∀ s, f (a s) = 0 := by
intro s
rw [h₃F]
simp
right
apply Finset.prod_eq_zero_iff.2
use s
simp
let logAbsf := fun w ↦ Real.log ‖f w‖
have s₀ : ∀ z ∈ Metric.closedBall (0 : ) 1, f z ≠ 0 → logAbsf z = logAbsF z + ∑ s, Real.log ‖z - a s‖ := by
intro z h₁z h₂z
dsimp [logAbsf]
rw [h₃F]
simp_rw [Complex.abs.map_mul]
rw [Complex.abs_prod]
rw [Real.log_mul]
rw [Real.log_prod]
rfl
intro s hs
simp
by_contra ha'
rw [ha'] at h₂z
exact h₂z (t₂ s)
-- Complex.abs (F z) ≠ 0
simp
exact h₂F z h₁z
-- ∏ I : { x // x ∈ S }, Complex.abs (z - a I) ≠ 0
by_contra h'
obtain ⟨s, h's, h''⟩ := Finset.prod_eq_zero_iff.1 h'
simp at h''
rw [h''] at h₂z
let A := t₂ s
exact h₂z A
have s₁ : ∀ z ∈ Metric.closedBall (0 : ) 1, f z ≠ 0 → logAbsF z = logAbsf z - ∑ s, Real.log ‖z - a s‖ := by
intro z h₁z h₂z
rw [s₀ z h₁z]
simp
assumption
have : 0 ∈ Metric.closedBall (0 : ) 1 := by simp
rw [s₁ 0 this h₂f] at t₁
have h₀ {x : } : f (circleMap 0 1 x) ≠ 0 := by
rw [h₃F]
simp
constructor
· have : (circleMap 0 1 x) ∈ Metric.closedBall (0 : ) 1 := by simp
exact h₂F (circleMap 0 1 x) this
· by_contra h'
obtain ⟨s, _, h₂s⟩ := Finset.prod_eq_zero_iff.1 h'
have : circleMap 0 1 x = a s := by
rw [← sub_zero (circleMap 0 1 x)]
nth_rw 2 [← h₂s]
simp
let A := ha s
rw [← this] at A
simp at A
have {θ} : (circleMap 0 1 θ) ∈ Metric.closedBall (0 : ) 1 := by simp
simp_rw [s₁ (circleMap 0 1 _) this h₀] at t₁
rw [intervalIntegral.integral_sub] at t₁
rw [intervalIntegral.integral_finset_sum] at t₁
simp_rw [int₀ (ha _)] at t₁
simp at t₁
rw [t₁]
simp
have {w : } : Real.pi⁻¹ * 2⁻¹ * (2 * Real.pi * w) = w := by
ring_nf
simp [mul_inv_cancel₀ Real.pi_ne_zero]
rw [this]
simp
rfl
-- ∀ i ∈ Finset.univ, IntervalIntegrable (fun x => Real.log ‖circleMap 0 1 x - a i‖) MeasureTheory.volume 0 (2 * Real.pi)
intro i _
apply Continuous.intervalIntegrable
apply continuous_iff_continuousAt.2
intro x
have : (fun x => Real.log ‖circleMap 0 1 x - a i‖) = Real.log ∘ Complex.abs ∘ (fun x ↦ circleMap 0 1 x - a i) :=
rfl
rw [this]
apply ContinuousAt.comp
apply Real.continuousAt_log
simp
by_contra ha'
let A := ha i
rw [← ha'] at A
simp at A
apply ContinuousAt.comp
apply Complex.continuous_abs.continuousAt
fun_prop
-- IntervalIntegrable (fun x => logAbsf (circleMap 0 1 x)) MeasureTheory.volume 0 (2 * Real.pi)
apply Continuous.intervalIntegrable
apply continuous_iff_continuousAt.2
intro x
have : (fun x => logAbsf (circleMap 0 1 x)) = Real.log ∘ Complex.abs ∘ f ∘ (fun x ↦ circleMap 0 1 x) :=
rfl
rw [this]
apply ContinuousAt.comp
simp
exact h₀
apply ContinuousAt.comp
apply Complex.continuous_abs.continuousAt
apply ContinuousAt.comp
apply ContDiffAt.continuousAt (f := f) (𝕜 := ) (n := 1)
apply HolomorphicAt.contDiffAt
apply h₁f
simp
let A := continuous_circleMap 0 1
apply A.continuousAt
-- IntervalIntegrable (fun x => ∑ s : { x // x ∈ S }, Real.log ‖circleMap 0 1 x - a s‖) MeasureTheory.volume 0 (2 * Real.pi)
apply Continuous.intervalIntegrable
apply continuous_finset_sum
intro i _
apply continuous_iff_continuousAt.2
intro x
have : (fun x => Real.log ‖circleMap 0 1 x - a i‖) = Real.log ∘ Complex.abs ∘ (fun x ↦ circleMap 0 1 x - a i) :=
rfl
rw [this]
apply ContinuousAt.comp
apply Real.continuousAt_log
simp
by_contra ha'
let A := ha i
rw [← ha'] at A
simp at A
apply ContinuousAt.comp
apply Complex.continuous_abs.continuousAt
fun_prop