Mathlib.Analysis.ArgumentPrincipleCircle
Complex-analysis infrastructure for the argument principle on positively oriented circles: multiplicity-weighted zero counts, logarithmic-derivative contour integrals, homotopy invariance, and Rouché comparison.
Basic 4 core · 1 supporting 4 to review This module provides the normalized logarithmic-derivative integral around a positively oriented complex circle, the associated multiplicity-weighted zero count in its open disk, and the local factorization behind their ★ normalizedLogDerivCircleIntegral_centeredMonomial
Circle argument-principle definitions and local residue
This module provides the normalized logarithmic-derivative integral around a positively oriented complex circle, the associated multiplicity-weighted zero count in its open disk, and the local factorization behind their relationship.
This quantity is the winding count obtained by integrating the logarithmic derivative of a complex-valued function around a positively oriented circle and scaling so that one enclosed simple zero contributes one.
Definition (Lean source)
This count adds the analytic multiplicity of every zero strictly inside a given open disk; outside finite-support settings it uses the standard totalized finite sum.
Definition (Lean source)
This set comprises exactly the zeros of a complex-valued function that lie strictly inside a given open disk.
Definition (Lean source)
For a positive radius R such that the point a lies strictly inside the open disk of radius R centered at c, the normalized logarithmic-derivative integral around that circle of the monomial z ↦ (z - a)^n equals n.
Formal statement
Proof (Lean source)
1 supporting declaration (lemmas, instances)
-
eventuallyEq_logDeriv_add_order_div_subtheorem — Near a finite-order zero of an analytic complex function, its logarithmic derivative is the zero multiplicity divided by displacement from the zero plus the logarithmic derivative of an analytic factor that does not vanish there.hypothesesconclusionProof (Lean source)
theorem eventuallyEq_logDeriv_add_order_div_sub {f : ℂ → ℂ} {a : ℂ} (hf : AnalyticAt ℂ f a) (hfinite : analyticOrderAt f a ≠ ⊤) : ∃ g : ℂ → ℂ, AnalyticAt ℂ g a ∧ g a ≠ 0 ∧ ∀ᶠ z in 𝓝[≠] a, logDeriv f z = (analyticOrderNatAt f a : ℂ) / (z - a) + logDeriv g z := by obtain ⟨g, hg, hga, hfg⟩ := hf.analyticOrderAt_ne_top.mp hfinite refine ⟨g, hg, hga, ?_⟩ have hg_ne : ∀ᶠ z in 𝓝 a, g z ≠ 0 := hg.continuousAt.eventually_ne hga filter_upwards [hfg.eventuallyEq_nhds.filter_mono inf_le_left, hg.eventually_analyticAt.filter_mono inf_le_left, hg_ne.filter_mono inf_le_left, self_mem_nhdsWithin] with z hz hgz hg_ne_z hza have hlogDeriv : logDeriv f z = logDeriv (fun w : ℂ ↦ (w - a) ^ analyticOrderNatAt f a * g w) z := by have hz' : f =ᶠ[𝓝 z] fun w : ℂ ↦ (w - a) ^ analyticOrderNatAt f a * g w := by simpa only [smul_eq_mul] using hz simp only [logDeriv_apply] rw [hz'.deriv_eq, hz'.self_of_nhds] rw [hlogDeriv, logDeriv_mul (f := fun w : ℂ ↦ (w - a) ^ analyticOrderNatAt f a) (g := g) z (pow_ne_zero (analyticOrderNatAt f a) (sub_ne_zero.mpr hza)) hg_ne_z (by fun_prop) hgz.differentiableAt, logDeriv_fun_pow (by fun_prop)] simp [logDeriv_apply, div_eq_mul_inv]
ArgumentPrinciple 1 core · 5 supporting 1 to review This module proves the circle argument principle: the normalized logarithmic-derivative integral equals the multiplicity-weighted number of zeros strictly inside the disk. ★ argumentPrinciple_circle
The argument principle for a positively oriented circle
This module proves the circle argument principle: the normalized logarithmic-derivative integral equals the multiplicity-weighted number of zeros strictly inside the disk. It also records its integrality and positivity consequences.
Argument principle for a circle. For a positive radius R, if the function f is complex-analytic on a neighborhood of the closed disk of radius R centered at c and f is nonzero on the boundary circle, then the normalized logarithmic-derivative integral of f around that circle equals the number of zeros of f strictly inside the disk, counted with analytic multiplicity.
Formal statement
Proof (Lean source)
5 supporting declarations (lemmas, instances)
-
finite_interiorZerostheorem — A complex function analytic on a neighborhood of a closed disk and nonzero on its boundary has only finitely many zeros strictly inside that disk.hypothesesf :ℂ → ℂc :ℂR :ℝhR :0 < Rhf :AnalyticOnNhd ℂ f (closedBall c R)hboundary :∀ z ∈ sphere c R, f z ≠ 0conclusion(interiorZeros f c R).FiniteProof (Lean source)
theorem finite_interiorZeros {f : ℂ → ℂ} {c : ℂ} {R : ℝ} (hR : 0 < R) (hf : AnalyticOnNhd ℂ f (closedBall c R)) (hboundary : ∀ z ∈ sphere c R, f z ≠ 0) : (interiorZeros f c R).Finite := by let w : ℂ := c + R have hwS : w ∈ sphere c R := by simp [w, abs_of_pos hR] have hwC : w ∈ closedBall c R := sphere_subset_closedBall hwS have hmw : meromorphicOrderAt f w ≠ ⊤ := by rw [(hf w hwC).meromorphicOrderAt_eq, (hf w hwC).analyticOrderAt_eq_zero.2 (hboundary w hwS)] simp have hfinite : ∀ z ∈ closedBall c R, meromorphicOrderAt f z ≠ ⊤ := fun z hz ↦ hf.meromorphicOn.meromorphicOrderAt_ne_top_of_isPreconnected (convex_closedBall c R).isPreconnected hwC hz hmw apply ((MeromorphicOn.divisor f (closedBall c R)).finiteSupport (isCompact_closedBall c R)).subset intro z hz rcases hz with ⟨hzball, hzf⟩ have hzC : z ∈ closedBall c R := ball_subset_closedBall hzball have hmzero : meromorphicOrderAt f z ≠ 0 := by rw [(hf z hzC).meromorphicOrderAt_eq] simpa using (hf z hzC).analyticOrderAt_ne_zero.2 hzf rw [Function.mem_support, MeromorphicOn.divisor_apply hf.meromorphicOn hzC] intro h rw [WithTop.untop₀_eq_zero] at h exact h.elim hmzero (hfinite z hzC) -
finiteSupport_orderWithinBalltheorem — Under disk analyticity and boundary nonvanishing, the function assigning each interior zero its analytic multiplicity and all other points zero has finite support.hypothesesf :ℂ → ℂc :ℂR :ℝhR :0 < Rhf :AnalyticOnNhd ℂ f (closedBall c R)hboundary :∀ z ∈ sphere c R, f z ≠ 0conclusionProof (Lean source)
theorem finiteSupport_orderWithinBall {f : ℂ → ℂ} {c : ℂ} {R : ℝ} (hR : 0 < R) (hf : AnalyticOnNhd ℂ f (closedBall c R)) (hboundary : ∀ z ∈ sphere c R, f z ≠ 0) : HasFiniteSupport (fun z : ℂ ↦ if z ∈ ball c R then analyticOrderNatAt f z else 0) := by apply (finite_interiorZeros hR hf hboundary).subset intro z hz rw [Function.mem_support] at hz by_cases hzb : z ∈ ball c R · exact ⟨hzb, apply_eq_zero_of_analyticOrderNatAt_ne_zero (by simpa [hzb] using hz)⟩ · simp [hzb] at hz -
normalizedLogDerivCircleIntegral_exists_nattheorem — The normalized logarithmic-derivative integral of a boundary-zero-free analytic function is a nonnegative whole number, viewed as a complex number.hypothesesf :ℂ → ℂc :ℂR :ℝhR :0 < Rhf :AnalyticOnNhd ℂ f (closedBall c R)hboundary :∀ z ∈ sphere c R, f z ≠ 0conclusion∃ n : ℕ, normalizedLogDerivCircleIntegral f c R = (n : ℂ)Proof (Lean source)
theorem normalizedLogDerivCircleIntegral_exists_nat {f : ℂ → ℂ} {c : ℂ} {R : ℝ} (hR : 0 < R) (hf : AnalyticOnNhd ℂ f (closedBall c R)) (hboundary : ∀ z ∈ sphere c R, f z ≠ 0) : ∃ n : ℕ, normalizedLogDerivCircleIntegral f c R = (n : ℂ) := by exact ⟨zeroMultiplicityCount f c R, argumentPrinciple_circle hR hf hboundary⟩ -
zeroMultiplicityCount_pos_of_exists_zerotheorem — A boundary-zero-free analytic function that vanishes somewhere strictly inside the disk has a strictly positive multiplicity-weighted interior zero count.hypothesesf :ℂ → ℂc :ℂR :ℝhR :0 < Rhf :AnalyticOnNhd ℂ f (closedBall c R)hboundary :∀ z ∈ sphere c R, f z ≠ 0hzero :∃ z ∈ ball c R, f z = 0conclusion0 < zeroMultiplicityCount f c RProof (Lean source)
theorem zeroMultiplicityCount_pos_of_exists_zero {f : ℂ → ℂ} {c : ℂ} {R : ℝ} (hR : 0 < R) (hf : AnalyticOnNhd ℂ f (closedBall c R)) (hboundary : ∀ z ∈ sphere c R, f z ≠ 0) (hzero : ∃ z ∈ ball c R, f z = 0) : 0 < zeroMultiplicityCount f c R := by classical rcases hzero with ⟨z, hzball, hzf⟩ let w : ℂ := c + R have hwS : w ∈ sphere c R := by simp [w, abs_of_pos hR] have hwC : w ∈ closedBall c R := sphere_subset_closedBall hwS have hmw : meromorphicOrderAt f w ≠ ⊤ := by rw [(hf w hwC).meromorphicOrderAt_eq, (hf w hwC).analyticOrderAt_eq_zero.2 (hboundary w hwS)] simp have hzC : z ∈ closedBall c R := ball_subset_closedBall hzball have hmfinite : meromorphicOrderAt f z ≠ ⊤ := hf.meromorphicOn.meromorphicOrderAt_ne_top_of_isPreconnected (convex_closedBall c R).isPreconnected hwC hzC hmw have hafinite : analyticOrderAt f z ≠ ⊤ := by rw [(hf z hzC).meromorphicOrderAt_eq] at hmfinite simpa using hmfinite have hzpos : 0 < analyticOrderNatAt f z := Nat.pos_of_ne_zero fun hz0 ↦ by have := (hf z hzC).analyticOrderAt_ne_zero.2 hzf apply this rw [← Nat.cast_analyticOrderNatAt hafinite, hz0] rfl unfold zeroMultiplicityCount apply finsum_pos · intro u positivity · exact ⟨z, by simpa [hzball]⟩ · exact finiteSupport_orderWithinBall hR hf hboundary -
normalizedLogDerivCircleIntegral_re_pos_of_exists_zerotheorem — A boundary-zero-free analytic function with an interior zero has normalized logarithmic-derivative integral with strictly positive real part.hypothesesf :ℂ → ℂc :ℂR :ℝhR :0 < Rhf :AnalyticOnNhd ℂ f (closedBall c R)hboundary :∀ z ∈ sphere c R, f z ≠ 0hzero :∃ z ∈ ball c R, f z = 0conclusion0 < (normalizedLogDerivCircleIntegral f c R).reProof (Lean source)
theorem normalizedLogDerivCircleIntegral_re_pos_of_exists_zero {f : ℂ → ℂ} {c : ℂ} {R : ℝ} (hR : 0 < R) (hf : AnalyticOnNhd ℂ f (closedBall c R)) (hboundary : ∀ z ∈ sphere c R, f z ≠ 0) (hzero : ∃ z ∈ ball c R, f z = 0) : 0 < (normalizedLogDerivCircleIntegral f c R).re := by rw [argumentPrinciple_circle hR hf hboundary] simpa using zeroMultiplicityCount_pos_of_exists_zero hR hf hboundary hzero
Homotopy 2 core · 3 supporting 2 to review This module proves that the normalized logarithmic-derivative count is unchanged along a boundary-zero-free straight-line homotopy, then derives Rouché's standard strict-boundary comparison theorem. ★ rouche_circle
Straight-line homotopy invariance and Rouché's theorem on a circle
This module proves that the normalized logarithmic-derivative count is unchanged along a boundary-zero-free straight-line homotopy, then derives Rouché's standard strict-boundary comparison theorem.
This is the straight-line interpolation between two complex-valued functions, indexed from the first endpoint at time zero to the second endpoint at time one.
Definition (Lean source)
Rouché's theorem for a circle. For a positive radius R, if both f and g are complex-analytic on a neighborhood of the closed disk of radius R centered at c and on the boundary circle the discrepancy ‖g z - f z‖ is everywhere strictly smaller than ‖f z‖, then f and g have the same multiplicity-weighted number of zeros strictly inside the disk.
Formal statement
Proof (Lean source)
3 supporting declarations (lemmas, instances)
-
normalizedLogDerivCircleIntegral_eq_of_straightLineHomotopytheorem — Two analytic complex functions have equal normalized logarithmic-derivative circle integrals when every function on their straight-line interpolation is nonzero on the boundary circle.hypothesesf g :ℂ → ℂc :ℂR :ℝhR :0 < Rhf :AnalyticOnNhd ℂ f (closedBall c R)hg :AnalyticOnNhd ℂ g (closedBall c R)hboundary :∀ t ∈ Icc (0 : ℝ) 1, ∀ z ∈ sphere c R, straightLineHomotopy f g t z ≠ 0conclusionProof (Lean source)
theorem normalizedLogDerivCircleIntegral_eq_of_straightLineHomotopy {f g : ℂ → ℂ} {c : ℂ} {R : ℝ} (hR : 0 < R) (hf : AnalyticOnNhd ℂ f (closedBall c R)) (hg : AnalyticOnNhd ℂ g (closedBall c R)) (hboundary : ∀ t ∈ Icc (0 : ℝ) 1, ∀ z ∈ sphere c R, straightLineHomotopy f g t z ≠ 0) : normalizedLogDerivCircleIntegral f c R = normalizedLogDerivCircleIntegral g c R := by let J : ℝ → ℂ := fun t ↦ (2 * (Real.pi : ℂ) * I)⁻¹ * ∫ θ in Icc 0 (2 * Real.pi), deriv (circleMap c R) θ * (((1 - (t : ℂ)) * deriv f (circleMap c R θ) + (t : ℂ) * deriv g (circleMap c R θ)) / straightLineHomotopy f g t (circleMap c R θ)) have hf_circle : Continuous (fun θ : ℝ ↦ f (circleMap c R θ)) := by simpa only [Function.comp_def] using hf.continuousOn.comp_continuous (continuous_circleMap c R) (fun θ ↦ circleMap_mem_closedBall c hR.le θ) have hg_circle : Continuous (fun θ : ℝ ↦ g (circleMap c R θ)) := by simpa only [Function.comp_def] using hg.continuousOn.comp_continuous (continuous_circleMap c R) (fun θ ↦ circleMap_mem_closedBall c hR.le θ) have hdf_circle : Continuous (fun θ : ℝ ↦ deriv f (circleMap c R θ)) := by simpa only [Function.comp_def] using hf.deriv.continuousOn.comp_continuous (continuous_circleMap c R) (fun θ ↦ circleMap_mem_closedBall c hR.le θ) have hdg_circle : Continuous (fun θ : ℝ ↦ deriv g (circleMap c R θ)) := by simpa only [Function.comp_def] using hg.deriv.continuousOn.comp_continuous (continuous_circleMap c R) (fun θ ↦ circleMap_mem_closedBall c hR.le θ) have hJ_restrict : Continuous (Set.restrict (Icc (0 : ℝ) 1) J) := by apply Continuous.const_mul apply continuous_parametric_integral_of_continuous · have ht : Continuous (fun a : {t : ℝ // t ∈ Icc 0 1} × ℝ ↦ (a.1.val : ℂ)) := Complex.continuous_ofReal.comp (continuous_subtype_val.comp continuous_fst) apply Continuous.mul · simp only [deriv_circleMap] fun_prop · apply Continuous.div · exact ((continuous_const.sub ht).mul (hdf_circle.comp continuous_snd)).add (ht.mul (hdg_circle.comp continuous_snd)) · have hcont : Continuous fun a : {t : ℝ // t ∈ Icc 0 1} × ℝ ↦ (1 - (a.1.val : ℂ)) * f (circleMap c R a.2) + (a.1.val : ℂ) * g (circleMap c R a.2) := ((continuous_const.sub ht).mul (hf_circle.comp continuous_snd)).add (ht.mul (hg_circle.comp continuous_snd)) simpa only [straightLineHomotopy] using hcont · rintro ⟨⟨t, ht⟩, θ⟩ exact hboundary t ht (circleMap c R θ) (circleMap_mem_sphere c hR.le θ) · exact isCompact_Icc have hJ_cont : ContinuousOn J (Icc (0 : ℝ) 1) := continuousOn_iff_continuous_restrict.mpr hJ_restrict have hderiv (t : ℝ) (z : ℂ) (hz : z ∈ sphere c R) : deriv (straightLineHomotopy f g t) z = (1 - (t : ℂ)) * deriv f z + (t : ℂ) * deriv g z := by have hzf : DifferentiableAt ℂ f z := (hf z (sphere_subset_closedBall hz)).differentiableAt have hzg : DifferentiableAt ℂ g z := (hg z (sphere_subset_closedBall hz)).differentiableAt rw [show straightLineHomotopy f g t = (fun w ↦ (1 - (t : ℂ)) * f w) + (fun w ↦ (t : ℂ) * g w) by rfl] rw [deriv_add (hzf.const_mul _) (hzg.const_mul _), deriv_const_mul _ hzf, deriv_const_mul _ hzg] have hJ_eq (t : ℝ) : J t = normalizedLogDerivCircleIntegral (straightLineHomotopy f g t) c R := by dsimp only [J] rw [normalizedLogDerivCircleIntegral, circleIntegral_def_Icc] congr 1 apply MeasureTheory.integral_congr_ae filter_upwards with θ simp only [smul_eq_mul, logDeriv_apply] rw [hderiv t (circleMap c R θ) (circleMap_mem_sphere c hR.le θ)] have hanalytic (t : ℝ) : AnalyticOnNhd ℂ (straightLineHomotopy f g t) (closedBall c R) := by exact (analyticOnNhd_const.mul hf).add (analyticOnNhd_const.mul hg) have hJ_nat (t : ℝ) (ht : t ∈ Icc (0 : ℝ) 1) : J t = (zeroMultiplicityCount (straightLineHomotopy f g t) c R : ℂ) := (hJ_eq t).trans (argumentPrinciple_circle hR (hanalytic t) (hboundary t ht)) have hf_boundary : ∀ z ∈ sphere c R, f z ≠ 0 := by intro z hz simpa [straightLineHomotopy] using hboundary 0 (by simp) z hz have hg_boundary : ∀ z ∈ sphere c R, g z ≠ 0 := by intro z hz simpa [straightLineHomotopy] using hboundary 1 (by simp) z hz let nf := zeroMultiplicityCount f c R let ng := zeroMultiplicityCount g c R have hJ0 : J 0 = (nf : ℂ) := by have h := hJ_nat 0 (by simp) have hH : straightLineHomotopy f g 0 = f := by funext z simp [straightLineHomotopy] rw [hH] at h simpa only [nf] using h have hJ1 : J 1 = (ng : ℂ) := by have h := hJ_nat 1 (by simp) have hH : straightLineHomotopy f g 1 = g := by funext z simp [straightLineHomotopy] rw [hH] at h simpa only [ng] using h have hK_cont : ContinuousOn (fun t ↦ (J t).re) (Icc (0 : ℝ) 1) := Complex.continuous_re.comp_continuousOn hJ_cont have hcounts : nf = ng := by by_contra hne rcases lt_or_gt_of_ne hne with hlt | hgt · have hy : (nf : ℝ) + 1 / 2 ∈ Icc ((J 0).re) ((J 1).re) := by rw [hJ0, hJ1] simp only [Complex.natCast_re] constructor · norm_num · have hgap : nf + 1 ≤ ng := Nat.add_one_le_iff.mpr hlt have hgap' : (nf + 1 : ℕ) ≤ (ng : ℝ) := by exact_mod_cast hgap push_cast at hgap' linarith obtain ⟨t, ht, heq⟩ := intermediate_value_Icc (show (0 : ℝ) ≤ 1 by norm_num) hK_cont hy have hnat := congrArg re (hJ_nat t ht) have hreal : (zeroMultiplicityCount (straightLineHomotopy f g t) c R : ℝ) = (nf : ℝ) + 1 / 2 := by simpa only [Complex.natCast_re] using hnat.symm.trans heq have hlo : nf < zeroMultiplicityCount (straightLineHomotopy f g t) c R := by exact_mod_cast (show (nf : ℝ) < (zeroMultiplicityCount (straightLineHomotopy f g t) c R : ℝ) by linarith) have hhi : zeroMultiplicityCount (straightLineHomotopy f g t) c R < nf + 1 := by exact_mod_cast (show (zeroMultiplicityCount (straightLineHomotopy f g t) c R : ℝ) < (nf + 1 : ℕ) by push_cast linarith) omega · have hy : (ng : ℝ) + 1 / 2 ∈ Icc ((J 1).re) ((J 0).re) := by rw [hJ0, hJ1] simp only [Complex.natCast_re] constructor · norm_num · have hgap : ng + 1 ≤ nf := Nat.add_one_le_iff.mpr hgt have hgap' : (ng + 1 : ℕ) ≤ (nf : ℝ) := by exact_mod_cast hgap push_cast at hgap' linarith obtain ⟨t, ht, heq⟩ := intermediate_value_Icc' (show (0 : ℝ) ≤ 1 by norm_num) hK_cont hy have hnat := congrArg re (hJ_nat t ht) have hreal : (zeroMultiplicityCount (straightLineHomotopy f g t) c R : ℝ) = (ng : ℝ) + 1 / 2 := by simpa only [Complex.natCast_re] using hnat.symm.trans heq have hlo : ng < zeroMultiplicityCount (straightLineHomotopy f g t) c R := by exact_mod_cast (show (ng : ℝ) < (zeroMultiplicityCount (straightLineHomotopy f g t) c R : ℝ) by linarith) have hhi : zeroMultiplicityCount (straightLineHomotopy f g t) c R < ng + 1 := by exact_mod_cast (show (zeroMultiplicityCount (straightLineHomotopy f g t) c R : ℝ) < (ng + 1 : ℕ) by push_cast linarith) omega calc normalizedLogDerivCircleIntegral f c R = (nf : ℂ) := by simpa [nf] using argumentPrinciple_circle hR hf hf_boundary _ = (ng : ℂ) := by rw [hcounts] _ = normalizedLogDerivCircleIntegral g c R := by simpa [ng] using (argumentPrinciple_circle hR hg hg_boundary).symm -
zeroMultiplicityCount_eq_of_straightLineHomotopytheorem — Two analytic complex functions have the same multiplicity-weighted number of interior zeros when every function on their straight-line interpolation is nonzero on the boundary circle.hypothesesf g :ℂ → ℂc :ℂR :ℝhR :0 < Rhf :AnalyticOnNhd ℂ f (closedBall c R)hg :AnalyticOnNhd ℂ g (closedBall c R)hboundary :∀ t ∈ Icc (0 : ℝ) 1, ∀ z ∈ sphere c R, straightLineHomotopy f g t z ≠ 0conclusionzeroMultiplicityCount f c R = zeroMultiplicityCount g c RProof (Lean source)
theorem zeroMultiplicityCount_eq_of_straightLineHomotopy {f g : ℂ → ℂ} {c : ℂ} {R : ℝ} (hR : 0 < R) (hf : AnalyticOnNhd ℂ f (closedBall c R)) (hg : AnalyticOnNhd ℂ g (closedBall c R)) (hboundary : ∀ t ∈ Icc (0 : ℝ) 1, ∀ z ∈ sphere c R, straightLineHomotopy f g t z ≠ 0) : zeroMultiplicityCount f c R = zeroMultiplicityCount g c R := by have hf_boundary : ∀ z ∈ sphere c R, f z ≠ 0 := by intro z hz simpa [straightLineHomotopy] using hboundary 0 (by simp) z hz have hg_boundary : ∀ z ∈ sphere c R, g z ≠ 0 := by intro z hz simpa [straightLineHomotopy] using hboundary 1 (by simp) z hz have hcast : (zeroMultiplicityCount f c R : ℂ) = (zeroMultiplicityCount g c R : ℂ) := by rw [← argumentPrinciple_circle hR hf hf_boundary, normalizedLogDerivCircleIntegral_eq_of_straightLineHomotopy hR hf hg hboundary, argumentPrinciple_circle hR hg hg_boundary] exact_mod_cast hcast -
normalizedLogDerivCircleIntegral_eq_of_rouchetheorem — Under Rouché's strict boundary inequality, two analytic complex functions have equal normalized logarithmic-derivative circle integrals.hypothesesf g :ℂ → ℂc :ℂR :ℝhR :0 < Rhf :AnalyticOnNhd ℂ f (closedBall c R)hg :AnalyticOnNhd ℂ g (closedBall c R)hrouche :∀ z ∈ sphere c R, ‖g z - f z‖ < ‖f z‖conclusionProof (Lean source)
theorem normalizedLogDerivCircleIntegral_eq_of_rouche {f g : ℂ → ℂ} {c : ℂ} {R : ℝ} (hR : 0 < R) (hf : AnalyticOnNhd ℂ f (closedBall c R)) (hg : AnalyticOnNhd ℂ g (closedBall c R)) (hrouche : ∀ z ∈ sphere c R, ‖g z - f z‖ < ‖f z‖) : normalizedLogDerivCircleIntegral f c R = normalizedLogDerivCircleIntegral g c R := by have hf_boundary : ∀ z ∈ sphere c R, f z ≠ 0 := by intro z hz hzero have h := hrouche z hz rw [hzero] at h have h' : ‖g z‖ < 0 := by simpa using h exact (not_lt_of_ge (norm_nonneg _)) h' have hg_boundary : ∀ z ∈ sphere c R, g z ≠ 0 := by intro z hz hzero have := hrouche z hz rw [hzero, zero_sub, norm_neg] at this exact (lt_irrefl _) this rw [argumentPrinciple_circle hR hf hf_boundary, argumentPrinciple_circle hR hg hg_boundary, rouche_circle hR hf hg hrouche]