MAT3253 Complex Variables

8.Β Chapter 12.3 Sequence of holomorphic functionsπŸ”—

import Mathlib.Data.Complex.Basic
import Mathlib.Tactic

Equivalence of Locally Uniform Convergence and Compact Convergence

We prove that for a sequence of complex-valued functions on a nonempty open connected domain D \subseteq \mathbb{C}

Definition of Locally uniform convergence: at every point of D, there is a neighborhood on which the sequence converges uniformly.

Theorem 12.3.1. The following are equivalent:

  1. Locally uniform convergence: For every z_0 \in D, there exists a neighborhood U of z_0 such that f_k \to f uniformly on U.

  2. Compact convergence: For every compact set K \subset D, f_k β†’ f uniformly on K.

We will need some functions from Filter, Topology and Set

open Filter Topology Set

Define locally uniform convergence and compact convergence.

def LocallyUniformConvergence (F : β„• β†’ β„‚ β†’ β„‚) (f : β„‚ β†’ β„‚) (D : Set β„‚) : Prop := βˆ€ zβ‚€ ∈ D, βˆƒ U ∈ 𝓝 zβ‚€, TendstoUniformlyOn F f atTop U /-- Compact convergence: the sequence converges uniformly on every compact subset of D. -/ def CompactConvergence (F : β„• β†’ β„‚ β†’ β„‚) (f : β„‚ β†’ β„‚) (D : Set β„‚) : Prop := βˆ€ K βŠ† D, IsCompact K β†’ TendstoUniformlyOn F f atTop K

Locally uniform convergence implies compact convergence.

/-- Locally uniform convergence implies compact convergence for sequences of complex functions on a nonempty open connected domain. -/ theorem locallyUniform_implies_compact (D : Set β„‚) -- (hD_open : IsOpen D) -- the argument does not -- (hD_nonempty : D.Nonempty) -- requires these -- (hD_conn : IsConnected D) -- assumptions (F : β„• β†’ β„‚ β†’ β„‚) (f : β„‚ β†’ β„‚) (hloc : LocallyUniformConvergence F f D) : CompactConvergence F f D := D:Set β„‚F:β„• β†’ β„‚ β†’ β„‚f:β„‚ β†’ β„‚hloc:LocallyUniformConvergence F f D⊒ CompactConvergence F f D intro K D:Set β„‚F:β„• β†’ β„‚ β†’ β„‚f:β„‚ β†’ β„‚hloc:LocallyUniformConvergence F f DK:Set β„‚hK_sub:K βŠ† D⊒ IsCompact K β†’ TendstoUniformlyOn F f atTop K D:Set β„‚F:β„• β†’ β„‚ β†’ β„‚f:β„‚ β†’ β„‚hloc:LocallyUniformConvergence F f DK:Set β„‚hK_sub:K βŠ† DhK_compact:IsCompact K⊒ TendstoUniformlyOn F f atTop K have h_neighborhoods : βˆ€ z ∈ K, βˆƒ U ∈ 𝓝 z, TendstoUniformlyOn F f atTop U := D:Set β„‚F:β„• β†’ β„‚ β†’ β„‚f:β„‚ β†’ β„‚hloc:LocallyUniformConvergence F f D⊒ CompactConvergence F f D All goals completed! πŸ™ D:Set β„‚F:β„• β†’ β„‚ β†’ β„‚f:β„‚ β†’ β„‚hloc:LocallyUniformConvergence F f DK:Set β„‚hK_sub:K βŠ† DhK_compact:IsCompact Kh_neighborhoods:βˆ€ z ∈ K, βˆƒ U ∈ 𝓝 z, TendstoUniformlyOn F f atTop U⊒ TendstoUniformlyOn F f atTop K; ( D:Set β„‚F:β„• β†’ β„‚ β†’ β„‚f:β„‚ β†’ β„‚hloc:LocallyUniformConvergence F f DK:Set β„‚hK_sub:K βŠ† DhK_compact:IsCompact KU:β„‚ β†’ Set β„‚hU:βˆ€ z ∈ K, U z ∈ 𝓝 z ∧ TendstoUniformlyOn F f atTop (U z)⊒ TendstoUniformlyOn F f atTop K; -- Since $K$ is compact, we can find a finite subcover -- of $K$ by the neighborhoods $U_z$. obtain ⟨z_fin, hz_fin⟩ : βˆƒ z_fin : Finset β„‚, (βˆ€ z ∈ z_fin, z ∈ K) ∧ K βŠ† ⋃ z ∈ z_fin, U z := D:Set β„‚F:β„• β†’ β„‚ β†’ β„‚f:β„‚ β†’ β„‚hloc:LocallyUniformConvergence F f DK:Set β„‚hK_sub:K βŠ† DhK_compact:IsCompact KU:β„‚ β†’ Set β„‚hU:βˆ€ z ∈ K, U z ∈ 𝓝 z ∧ TendstoUniformlyOn F f atTop (U z)⊒ βˆƒ z_fin, (βˆ€ z ∈ z_fin, z ∈ K) ∧ K βŠ† ⋃ z ∈ z_fin, U z D:Set β„‚F:β„• β†’ β„‚ β†’ β„‚f:β„‚ β†’ β„‚hloc:LocallyUniformConvergence F f DK:Set β„‚hK_sub:K βŠ† DhK_compact:IsCompact KU:β„‚ β†’ Set β„‚hU:βˆ€ z ∈ K, U z ∈ 𝓝 z ∧ TendstoUniformlyOn F f atTop (U z)this:βˆƒ t, (βˆ€ x ∈ t, x ∈ K) ∧ K βŠ† ⋃ x ∈ t, U x⊒ βˆƒ z_fin, (βˆ€ z ∈ z_fin, z ∈ K) ∧ K βŠ† ⋃ z ∈ z_fin, U z; All goals completed! πŸ™; D:Set β„‚F:β„• β†’ β„‚ β†’ β„‚f:β„‚ β†’ β„‚hloc:LocallyUniformConvergence F f DK:Set β„‚hK_sub:K βŠ† DhK_compact:IsCompact KU:β„‚ β†’ Set β„‚hU:βˆ€ z ∈ K, U z ∈ 𝓝 z ∧ TendstoUniformlyOn F f atTop (U z)z_fin:Finset β„‚hz_fin:(βˆ€ z ∈ z_fin, z ∈ K) ∧ K βŠ† ⋃ z ∈ z_fin, U z⊒ TendstoUniformlyOn F f atTop K; ( D:Set β„‚F:β„• β†’ β„‚ β†’ β„‚f:β„‚ β†’ β„‚hloc:LocallyUniformConvergence F f DK:Set β„‚hK_sub:K βŠ† DhK_compact:IsCompact KU:β„‚ β†’ Set β„‚z_fin:Finset β„‚hU:βˆ€ z ∈ K, U z ∈ 𝓝 z ∧ βˆ€ (Ξ΅ : ℝ), 0 < Ξ΅ β†’ βˆƒ a, βˆ€ (b : β„•), a ≀ b β†’ βˆ€ x ∈ U z, dist (f x) (F b x) < Ξ΅hz_fin:(βˆ€ z ∈ z_fin, z ∈ K) ∧ K βŠ† ⋃ z ∈ z_fin, U z⊒ βˆ€ (Ξ΅ : ℝ), 0 < Ξ΅ β†’ βˆƒ a, βˆ€ (b : β„•), a ≀ b β†’ βˆ€ x ∈ K, dist (f x) (F b x) < Ξ΅ intro Ξ΅ D:Set β„‚F:β„• β†’ β„‚ β†’ β„‚f:β„‚ β†’ β„‚hloc:LocallyUniformConvergence F f DK:Set β„‚hK_sub:K βŠ† DhK_compact:IsCompact KU:β„‚ β†’ Set β„‚z_fin:Finset β„‚hU:βˆ€ z ∈ K, U z ∈ 𝓝 z ∧ βˆ€ (Ξ΅ : ℝ), 0 < Ξ΅ β†’ βˆƒ a, βˆ€ (b : β„•), a ≀ b β†’ βˆ€ x ∈ U z, dist (f x) (F b x) < Ξ΅hz_fin:(βˆ€ z ∈ z_fin, z ∈ K) ∧ K βŠ† ⋃ z ∈ z_fin, U zΞ΅:ℝhΞ΅:0 < Ρ⊒ βˆƒ a, βˆ€ (b : β„•), a ≀ b β†’ βˆ€ x ∈ K, dist (f x) (F b x) < Ξ΅ D:Set β„‚F:β„• β†’ β„‚ β†’ β„‚f:β„‚ β†’ β„‚hloc:LocallyUniformConvergence F f DK:Set β„‚hK_sub:K βŠ† DhK_compact:IsCompact KU:β„‚ β†’ Set β„‚z_fin:Finset β„‚hU:βˆ€ z ∈ K, U z ∈ 𝓝 z ∧ βˆ€ (Ξ΅ : ℝ), 0 < Ξ΅ β†’ βˆƒ a, βˆ€ (b : β„•), a ≀ b β†’ βˆ€ x ∈ U z, dist (f x) (F b x) < Ξ΅hz_fin:(βˆ€ z ∈ z_fin, z ∈ K) ∧ K βŠ† ⋃ z ∈ z_fin, U zΞ΅:ℝhΞ΅:0 < Ξ΅a:β„‚ β†’ β„•ha:βˆ€ z ∈ z_fin, βˆ€ (b : β„•), a z ≀ b β†’ βˆ€ x ∈ U z, dist (f x) (F b x) < Ρ⊒ βˆƒ a, βˆ€ (b : β„•), a ≀ b β†’ βˆ€ x ∈ K, dist (f x) (F b x) < Ξ΅ D:Set β„‚F:β„• β†’ β„‚ β†’ β„‚f:β„‚ β†’ β„‚hloc:LocallyUniformConvergence F f DK:Set β„‚hK_sub:K βŠ† DhK_compact:IsCompact KU:β„‚ β†’ Set β„‚z_fin:Finset β„‚hU:βˆ€ z ∈ K, U z ∈ 𝓝 z ∧ βˆ€ (Ξ΅ : ℝ), 0 < Ξ΅ β†’ βˆƒ a, βˆ€ (b : β„•), a ≀ b β†’ βˆ€ x ∈ U z, dist (f x) (F b x) < Ξ΅hz_fin:(βˆ€ z ∈ z_fin, z ∈ K) ∧ K βŠ† ⋃ z ∈ z_fin, U zΞ΅:ℝhΞ΅:0 < Ξ΅a:β„‚ β†’ β„•ha:βˆ€ z ∈ z_fin, βˆ€ (b : β„•), a z ≀ b β†’ βˆ€ x ∈ U z, dist (f x) (F b x) < Ρ⊒ βˆ€ (b : β„•), z_fin.sup a ≀ b β†’ βˆ€ x ∈ K, dist (f x) (F b x) < Ξ΅ intro n D:Set β„‚F:β„• β†’ β„‚ β†’ β„‚f:β„‚ β†’ β„‚hloc:LocallyUniformConvergence F f DK:Set β„‚hK_sub:K βŠ† DhK_compact:IsCompact KU:β„‚ β†’ Set β„‚z_fin:Finset β„‚hU:βˆ€ z ∈ K, U z ∈ 𝓝 z ∧ βˆ€ (Ξ΅ : ℝ), 0 < Ξ΅ β†’ βˆƒ a, βˆ€ (b : β„•), a ≀ b β†’ βˆ€ x ∈ U z, dist (f x) (F b x) < Ξ΅hz_fin:(βˆ€ z ∈ z_fin, z ∈ K) ∧ K βŠ† ⋃ z ∈ z_fin, U zΞ΅:ℝhΞ΅:0 < Ξ΅a:β„‚ β†’ β„•ha:βˆ€ z ∈ z_fin, βˆ€ (b : β„•), a z ≀ b β†’ βˆ€ x ∈ U z, dist (f x) (F b x) < Ξ΅n:β„•hn:z_fin.sup a ≀ n⊒ βˆ€ x ∈ K, dist (f x) (F n x) < Ξ΅ D:Set β„‚F:β„• β†’ β„‚ β†’ β„‚f:β„‚ β†’ β„‚hloc:LocallyUniformConvergence F f DK:Set β„‚hK_sub:K βŠ† DhK_compact:IsCompact KU:β„‚ β†’ Set β„‚z_fin:Finset β„‚hU:βˆ€ z ∈ K, U z ∈ 𝓝 z ∧ βˆ€ (Ξ΅ : ℝ), 0 < Ξ΅ β†’ βˆƒ a, βˆ€ (b : β„•), a ≀ b β†’ βˆ€ x ∈ U z, dist (f x) (F b x) < Ξ΅hz_fin:(βˆ€ z ∈ z_fin, z ∈ K) ∧ K βŠ† ⋃ z ∈ z_fin, U zΞ΅:ℝhΞ΅:0 < Ξ΅a:β„‚ β†’ β„•ha:βˆ€ z ∈ z_fin, βˆ€ (b : β„•), a z ≀ b β†’ βˆ€ x ∈ U z, dist (f x) (F b x) < Ξ΅n:β„•hn:z_fin.sup a ≀ nx:β„‚βŠ’ x ∈ K β†’ dist (f x) (F n x) < Ξ΅ D:Set β„‚F:β„• β†’ β„‚ β†’ β„‚f:β„‚ β†’ β„‚hloc:LocallyUniformConvergence F f DK:Set β„‚hK_sub:K βŠ† DhK_compact:IsCompact KU:β„‚ β†’ Set β„‚z_fin:Finset β„‚hU:βˆ€ z ∈ K, U z ∈ 𝓝 z ∧ βˆ€ (Ξ΅ : ℝ), 0 < Ξ΅ β†’ βˆƒ a, βˆ€ (b : β„•), a ≀ b β†’ βˆ€ x ∈ U z, dist (f x) (F b x) < Ξ΅hz_fin:(βˆ€ z ∈ z_fin, z ∈ K) ∧ K βŠ† ⋃ z ∈ z_fin, U zΞ΅:ℝhΞ΅:0 < Ξ΅a:β„‚ β†’ β„•ha:βˆ€ z ∈ z_fin, βˆ€ (b : β„•), a z ≀ b β†’ βˆ€ x ∈ U z, dist (f x) (F b x) < Ξ΅n:β„•hn:z_fin.sup a ≀ nx:β„‚hx:x ∈ K⊒ dist (f x) (F n x) < Ξ΅ D:Set β„‚F:β„• β†’ β„‚ β†’ β„‚f:β„‚ β†’ β„‚hloc:LocallyUniformConvergence F f DK:Set β„‚hK_sub:K βŠ† DhK_compact:IsCompact KU:β„‚ β†’ Set β„‚z_fin:Finset β„‚hU:βˆ€ z ∈ K, U z ∈ 𝓝 z ∧ βˆ€ (Ξ΅ : ℝ), 0 < Ξ΅ β†’ βˆƒ a, βˆ€ (b : β„•), a ≀ b β†’ βˆ€ x ∈ U z, dist (f x) (F b x) < Ξ΅hz_fin:(βˆ€ z ∈ z_fin, z ∈ K) ∧ K βŠ† ⋃ z ∈ z_fin, U zΞ΅:ℝhΞ΅:0 < Ξ΅a:β„‚ β†’ β„•ha:βˆ€ z ∈ z_fin, βˆ€ (b : β„•), a z ≀ b β†’ βˆ€ x ∈ U z, dist (f x) (F b x) < Ξ΅n:β„•hn:z_fin.sup a ≀ nx:β„‚hx:x ∈ Kz:β„‚hz:z ∈ z_finhxz:x ∈ U z⊒ dist (f x) (F n x) < Ξ΅ All goals completed! πŸ™;))

Compact convergence implies locally uniform convergence

/-- Compact convergence implies locally uniform convergence for sequences of complex functions on a nonempty open connected domain. -/ theorem compact_implies_locallyUniform (D : Set β„‚) (hD_open : IsOpen D) -- (_hD_nonempty : D.Nonempty) -- (_hD_conn : IsConnected D) (F : β„• β†’ β„‚ β†’ β„‚) (f : β„‚ β†’ β„‚) (hcpt : CompactConvergence F f D) : LocallyUniformConvergence F f D := D:Set β„‚hD_open:IsOpen DF:β„• β†’ β„‚ β†’ β„‚f:β„‚ β†’ β„‚hcpt:CompactConvergence F f D⊒ LocallyUniformConvergence F f D -- Given that F converges compactly to f on D, -- we need to show that F converges locally -- uniformly to f on D. intro zβ‚€ D:Set β„‚hD_open:IsOpen DF:β„• β†’ β„‚ β†’ β„‚f:β„‚ β†’ β„‚hcpt:CompactConvergence F f Dzβ‚€:β„‚hzβ‚€:zβ‚€ ∈ D⊒ βˆƒ U ∈ 𝓝 zβ‚€, TendstoUniformlyOn F f atTop U obtain ⟨r, hr_pos, hr⟩ : βˆƒ r > 0, (Metric.closedBall zβ‚€ r) βŠ† D := D:Set β„‚hD_open:IsOpen DF:β„• β†’ β„‚ β†’ β„‚f:β„‚ β†’ β„‚hcpt:CompactConvergence F f Dzβ‚€:β„‚hzβ‚€:zβ‚€ ∈ D⊒ βˆƒ r > 0, Metric.closedBall zβ‚€ r βŠ† D All goals completed! πŸ™ All goals completed! πŸ™ /-- Locally uniform convergence and compact convergence are equivalent for sequences of complex functions on a nonempty open connected domain D βŠ† β„‚. -/ theorem locallyUniform_iff_compact (D : Set β„‚) (hD_open : IsOpen D) -- (hD_nonempty : D.Nonempty) -- (hD_conn : IsConnected D) (F : β„• β†’ β„‚ β†’ β„‚) (f : β„‚ β†’ β„‚) : LocallyUniformConvergence F f D ↔ CompactConvergence F f D := D:Set β„‚hD_open:IsOpen DF:β„• β†’ β„‚ β†’ β„‚f:β„‚ β†’ β„‚βŠ’ LocallyUniformConvergence F f D ↔ CompactConvergence F f D D:Set β„‚hD_open:IsOpen DF:β„• β†’ β„‚ β†’ β„‚f:β„‚ β†’ β„‚βŠ’ LocallyUniformConvergence F f D β†’ CompactConvergence F f DD:Set β„‚hD_open:IsOpen DF:β„• β†’ β„‚ β†’ β„‚f:β„‚ β†’ β„‚βŠ’ CompactConvergence F f D β†’ LocallyUniformConvergence F f D D:Set β„‚hD_open:IsOpen DF:β„• β†’ β„‚ β†’ β„‚f:β„‚ β†’ β„‚βŠ’ LocallyUniformConvergence F f D β†’ CompactConvergence F f D All goals completed! πŸ™ -- hD_open hD_nonempty hD_conn F f D:Set β„‚hD_open:IsOpen DF:β„• β†’ β„‚ β†’ β„‚f:β„‚ β†’ β„‚βŠ’ CompactConvergence F f D β†’ LocallyUniformConvergence F f D All goals completed! πŸ™ -- hD_nonempty hD_conn F f