Skip to content

Commit 4ae5631

Browse files
committed
feat: generalize Liouville's theorem for harmonic functions (leanprover-community#36049)
On a suggestion of @urkud, generalize Liouville's theorem for harmonic functions, removing the restriction that the functions are real-valued. Further generalization will come in a separate PR.
1 parent 364d070 commit 4ae5631

2 files changed

Lines changed: 41 additions & 6 deletions

File tree

Mathlib/Analysis/Complex/Harmonic/Liouville.lean

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,15 @@ TODO: Prove this result for harmonic functions with values in vector spaces.
1818

1919
public section
2020

21-
open Complex Real Set
21+
open Bornology Complex Real Set
22+
23+
variable
24+
{E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E]
2225

2326
set_option backward.isDefEq.respectTransparency false in
24-
/-
25-
**Liouville's theorem for harmonic functions on the complex plane** A real-valued, bounded harmonic
26-
function on the complex plane is constant.
27-
-/
28-
theorem InnerProductSpace.bounded_harmonic_on_complex_plane_is_constant (f : ℂ → ℝ)
27+
-- Auxiliary version of Liouville's theorem, for real-valued harmonic functions on the complex
28+
-- plane.
29+
private theorem InnerProductSpace.bounded_harmonic_on_complex_plane_is_constant_aux (f : ℂ → ℝ)
2930
(h_harm : HarmonicOnNhd f univ) (h_bound : Bornology.IsBounded (range f)) :
3031
∀ z w, f z = f w := by
3132
-- By assumption, there exists a holomorphic function $f$ such that $\Re(f) = u$.
@@ -41,3 +42,19 @@ theorem InnerProductSpace.bounded_harmonic_on_complex_plane_is_constant (f : ℂ
4142
norm_exp, exp_le_exp]
4243
rw [← hF_re] at hM
4344
grind
45+
46+
set_option backward.isDefEq.respectTransparency false in
47+
/--
48+
**Liouville's theorem for harmonic functions on the complex plane** A real-valued, bounded harmonic
49+
function on the complex plane is constant.
50+
-/
51+
theorem InnerProductSpace.bounded_harmonic_on_complex_plane_is_constant (f : ℂ → E)
52+
(h_harm : HarmonicOnNhd f univ) (h_bound : IsBounded (range f)) :
53+
∀ z w, f z = f w := by
54+
intro z w
55+
obtain ⟨ℓ, h₁ℓ, h₂ℓ⟩ := exists_dual_vector'' ℝ (f z - f w)
56+
rw [map_sub, RCLike.ofReal_real_eq_id, id_eq] at h₂ℓ
57+
have η₁ : Bornology.IsBounded (range (ℓ ∘ f)) := by
58+
simpa [range_comp] using IsBounded.image ℓ h_bound
59+
rw [← sub_eq_zero, ← norm_eq_zero, ← h₂ℓ]
60+
grind [bounded_harmonic_on_complex_plane_is_constant_aux (ℓ ∘ f) (h_harm.comp_CLM ℓ) η₁]

Mathlib/Analysis/Normed/Operator/Basic.lean

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,24 @@ theorem ratio_le_opNorm : ‖f x‖ / ‖x‖ ≤ ‖f‖ :=
262262
theorem unit_le_opNorm : ‖x‖ ≤ 1 → ‖f x‖ ≤ ‖f‖ :=
263263
mul_one ‖f‖ ▸ f.le_opNorm_of_le
264264

265+
/--
266+
Continuous linear maps are locally bounded. In other words, they map bounded sets to bounded sets.
267+
-/
268+
instance : LocallyBoundedMapClass (E →SL[σ₁₂] F) E F where
269+
comap_cobounded_le := by
270+
intro ℓ
271+
rw [Bornology.comap_cobounded_le_iff]
272+
intro s hs
273+
obtain ⟨M, hM⟩ := hs.exists_norm_le
274+
rw [isBounded_iff_forall_norm_le]
275+
use ‖ℓ‖ * M
276+
intro y hy
277+
obtain ⟨σ, hσ⟩ := (mem_image _ _ _).1 hy
278+
calc ‖y‖
279+
_ ≤ ‖ℓ σ‖ := by rw [hσ.2]
280+
_ ≤ ‖ℓ‖ * ‖σ‖ := ContinuousLinearMap.le_opNorm ℓ σ
281+
_ ≤ ‖ℓ‖ * M := mul_le_mul (by rfl) (hM σ hσ.1) (norm_nonneg σ) (opNorm_nonneg ℓ)
282+
265283
theorem opNorm_le_of_shell {f : E →SL[σ₁₂] F} {ε C : ℝ} (ε_pos : 0 < ε) (hC : 0 ≤ C) {c : 𝕜}
266284
(hc : 1 < ‖c‖) (hf : ∀ x, ε / ‖c‖ ≤ ‖x‖ → ‖x‖ < ε → ‖f x‖ ≤ C * ‖x‖) : ‖f‖ ≤ C :=
267285
f.opNorm_le_bound' hC fun _ hx => SemilinearMapClass.bound_of_shell_semi_normed f ε_pos hc hf hx

0 commit comments

Comments
 (0)