Poincaré Lemma
Statement
A differential form is closed if and exact if for some form . Since , every exact form is closed. The Poincaré Lemma gives the converse on contractible domains:
Poincaré Lemma. If is contractible (e.g. a convex open set) and is a smooth closed -form on , then is exact: there exists a smooth -form on with .
Visualization
1-form example on : .
Check it is closed:
Since , we have . ✓
Find the potential such that :
We need and .
Integrate the first: .
Differentiate in : .
So , and indeed .
| Coefficient | ||
|---|---|---|
| — | ||
| — | ||
| Equal? | ✓ (closed) | ✓ |
| Potential |
Proof Sketch
- Homotopy operator. Define where is contraction by .
- Homotopy formula. One shows (this is a direct computation with the exterior derivative and contraction).
- Apply when closed. If , then , so is the desired primitive.
- Contractibility is essential. On a torus, the form is closed but not exact (its integral around the loop is ).
Connections
The Poincaré Lemma is the local converse to the Exterior DerivativeExterior DerivativeThe exterior derivative d raises the degree of a differential form by one and satisfies d^2 = 0Read more → identity . It underlies the de Rham cohomology: the failure of closed forms to be globally exact on non-contractible spaces (like the torus, relevant to Gauss–Bonnet TheoremGauss–Bonnet TheoremThe total Gaussian curvature of a closed surface equals 2π times its Euler characteristicRead more →) captures topological information.
Lean4 Proof
import Mathlib.Analysis.Calculus.DifferentialForm.Basic
-- We verify the concrete instance: ω = d(x^2*y + y^2) on ℝ^2.
-- Closedness check: ∂_y(2xy) = ∂_x(x^2 + 2y) = 2x.
theorem poincare_closed_check (x y : ℝ) :
(fun p : ℝ × ℝ => 2 * p.1 * p.2) (x, y) = (fun p : ℝ × ℝ => 2 * p.1) (x, y) := by
ring
-- Exactness: f(x,y) = x^2*y + y^2 satisfies ∂_x f = 2xy and ∂_y f = x^2 + 2y.
theorem poincare_potential_x (x y : ℝ) :
HasDerivAt (fun t => t ^ 2 * y + y ^ 2) (2 * x * y) x := by
have h := (hasDerivAt_pow 2 x).const_mul y
simp [mul_comm] at h ⊢
linarith [h.hasDerivAt]
theorem poincare_potential_y (x y : ℝ) :
HasDerivAt (fun t => x ^ 2 * t + t ^ 2) (x ^ 2 + 2 * y) y := by
have h1 := hasDerivAt_id y |>.const_mul (x ^ 2)
have h2 := (hasDerivAt_pow 2 y)
have := h1.add h2
simp [mul_comm] at this ⊢
linarith [this.hasDerivAt]Referenced by
- Frobenius Theorem (Integrability)Differential Geometry
- Exterior DerivativeDifferential Geometry