Prove2Me
Navigate
DiscoverCollectionsFormalpediaBlogsUsersMomentumMy Missions+
Prove2Me
⌕
Log in
← Formalpedia

The Lean 4 theorem `contDiff_of_mem_testSpace` in the `?` chapter of the timepiece formalization

Definition
ChapterHalfLineLimitCircle

by leonardopedro · Oct 3, 2026 · Mathlib 0df444a (Lean v4.33.1)

definitionsformalizationtimepiece

Formal definitions for the timepiece Lean 4 formalization (source chapter BookProof/ChapterHalfLineLimitCircle.lean): generated def bundle for ChapterHalfLineLimitCircle. See BookProof/ChapterHalfLineLimitCircle.lean for full context.

Definition code
import Definitions.Def_ChapterFarisLavine
import Mathlib


/-!
# The half-line kinetic operator is **not** essentially self-adjoint

Plan item **QG-2 / 29f Case B** of `CONSOLIDATED_PLAN.md` records that the
densitized conformal direction of the gauge-fixed theory lives on the half line
`y ∈ (0, ∞)` (`y = √e`, `e` the tetrad determinant, `e = 0` being the
degenerate-tetrad endpoint) and carries a **wrong-sign** kinetic term, and that
the densitized d'Alembertian is therefore expected to fail essential
self-adjointness — the limit-circle phenomenon at the endpoint.  Its companion
module `BookProof/ChapterConformalSignFlip.lean` proves the sign bookkeeping
(essential self-adjointness is invariant under `H ↦ −H`) but leaves the
analytic statement itself unformalized.

This module supplies that analytic statement, in the cleanest instance: the
**free** kinetic operator on the half line.

* `testSpace` — the smooth functions with compact support contained in the open
  half line `(0, ∞)`, `hlCore` their image in `L²((0,∞))` and `hlKin` the
  operator `−d²/dy²` on that core (`hlKin_apply`), which is symmetric
  (`hlKin_symmetricOn`);
* `deficiencyFun y = exp(−λy)`, `λ = (√2/2)(1 − i)`, satisfies `λ² = −i`, is
  square integrable on `(0, ∞)` and is **not** the zero element of `L²`
  (`deficiencyVec_ne_zero`);
* `hlKin_deficiency_identity` — it satisfies the adjoint deficiency identity
  `⟪−v'', w⟫ = i⟪v, w⟫` for every `v` in the core, by two integrations by parts
  (the boundary terms vanish because the test functions are supported away from
  the endpoint);
* **`hlKin_not_deficiencyTrivialAt_I`**, **`hlKin_not_essentiallySelfAdjointOn`**
  — hence the deficiency space at `i` is non-trivial and the half-line kinetic
  operator is not essentially self-adjoint on this core;
* **`hlKin_neg_not_essentiallySelfAdjointOn`** — and, by the sign-flip theorem
  of `ChapterConformalSignFlip`, neither is the **wrong-sign** kinetic operator
  `+d²/dy²`, which is the one the densitized conformal direction carries.  This
  is Case B's conclusion for the free densitized kinetic: no choice of sign
  convention rescues it, and the failure is caused by the endpoint, not by any
  potential.
* `hlCore_ne_bot` — and the core is not the zero subspace (an explicit smooth
  bump supported in `(1, 3)` lies in it), so none of this is vacuous.

## Honest boundary

What is proved is non-essential-self-adjointness of the *free* kinetic operator
on the compactly-supported core of the open half line — the endpoint
(limit-circle) mechanism in its purest form.  Nothing here treats a potential
`V(y)` (the limit-circle analysis of the unbounded-below flipped potential
remains unformalized), and nothing here is a statement about the full
multi-dimensional densitized operator.  Failure of essential self-adjointness
on a core means the symmetric operator has more than one self-adjoint
extension, not that no self-adjoint extension exists.

Everything in this module is `sorry`-free and `axiom`-free.
-/

namespace BookProof.HalfLineLimitCircle

open MeasureTheory Set BookProof.FarisLavine

noncomputable section

local notation "smoothTop" => ((⊤ : ℕ∞) : WithTop ℕ∞)

/-- Lebesgue measure on the open half line `(0, ∞)` — the conformal coordinate's
configuration space. -/
abbrev hlMeasure : Measure ℝ := volume.restrict (Ioi (0 : ℝ))

/-- The half-line Hilbert space `L²((0,∞))`. -/
abbrev HL : Type := Lp ℂ 2 hlMeasure

/-! ## The test-function core -/

/-- Smooth functions with compact support contained in the **open** half line. -/
def testSpace : Submodule ℂ (ℝ → ℂ) where
  carrier := {f | ContDiff ℝ smoothTop f ∧ HasCompactSupport f ∧ tsupport f ⊆ Ioi (0 : ℝ)}
  add_mem' := by
    rintro f g ⟨hf, hfc, hfs⟩ ⟨hg, hgc, hgs⟩
    exact ⟨hf.add hg, hfc.add hgc, (tsupport_add f g).trans (union_subset hfs hgs)⟩
  zero_mem' := by
    refine ⟨contDiff_const, ?_, ?_⟩
    · simpa using (HasCompactSupport.zero (α := ℝ) (β := ℂ))
    · simp [tsupport]
  smul_mem' := by
    rintro c f ⟨hf, hfc, hfs⟩
    exact ⟨hf.const_smul c, hfc.smul_left,
      (closure_mono (Function.support_const_smul_subset c f)).trans hfs⟩

theorem contDiff_of_mem_testSpace {f : ℝ → ℂ} (hf : f ∈ testSpace) :
    ContDiff ℝ smoothTop f := hf.1

theorem hasCompactSupport_of_mem_testSpace {f : ℝ → ℂ} (hf : f ∈ testSpace) :
    HasCompactSupport f := hf.2.1

theorem tsupport_subset_of_mem_testSpace {f : ℝ → ℂ} (hf : f ∈ testSpace) :
    tsupport f ⊆ Ioi (0 : ℝ) := hf.2.2

/-- A test function vanishes off the open half line. -/
theorem eq_zero_of_notMem_Ioi {f : ℝ → ℂ} (hf : f ∈ testSpace) {x : ℝ} (hx : x ∉ Ioi (0 : ℝ)) :
    f x = 0 := by
  by_contra hne
  exact hx (tsupport_subset_of_mem_testSpace hf (subset_tsupport f hne))

/-- The derivative of a test function is a test function. -/
theorem deriv_mem_testSpace {f : ℝ → ℂ} (hf : f ∈ testSpace) : deriv f ∈ testSpace := by
  refine ⟨(contDiff_infty_iff_deriv.mp (contDiff_of_mem_testSpace hf)).2,
    (hasCompactSupport_of_mem_testSpace hf).deriv, ?_⟩
  refine (closure_mono (support_deriv_subset (f := f))).trans ?_
  rw [(isClosed_tsupport f).closure_eq]
  exact tsupport_subset_of_mem_testSpace hf



theorem deriv_const_smul_fun {f : ℝ → ℂ} (hf : ContDiff ℝ smoothTop f) (c : ℂ) :
    deriv (c • f) = c • deriv f := by
  funext x
  exact (((hf.differentiable (by simp)).differentiableAt.hasDerivAt).const_smul c).deriv

theorem memLp_of_mem_testSpace {f : ℝ → ℂ} (hf : f ∈ testSpace) : MemLp f 2 hlMeasure :=
  (contDiff_of_mem_testSpace hf).continuous.memLp_of_hasCompactSupport
    (μ := hlMeasure) (hasCompactSupport_of_mem_testSpace hf)

/-- The inclusion of the test-function space into `L²((0,∞))`. -/
def testIncl : testSpace →ₗ[ℂ] HL where
  toFun f := (memLp_of_mem_testSpace f.2).toLp _
  map_add' f g := by
    refine Lp.ext ?_
    filter_upwards [(memLp_of_mem_testSpace (f + g).2).coeFn_toLp,
      (memLp_of_mem_testSpace f.2).coeFn_toLp, (memLp_of_mem_testSpace g.2).coeFn_toLp,
      Lp.coeFn_add ((memLp_of_mem_testSpace f.2).toLp _)
        ((memLp_of_mem_testSpace g.2).toLp _)] with x h1 h2 h3 h4
    rw [h1, h4, Pi.add_apply, h2, h3]
    rfl
  map_smul' c f := by
    refine Lp.ext ?_
    filter_upwards [(memLp_of_mem_testSpace (c • f).2).coeFn_toLp,
      (memLp_of_mem_testSpace f.2).coeFn_toLp,
      Lp.coeFn_smul c ((memLp_of_mem_testSpace f.2).toLp _)] with x h1 h2 h3
    rw [RingHom.id_apply, h1, h3, Pi.smul_apply, h2]
    rfl

theorem testIncl_coeFn (f : testSpace) :
    ((testIncl f : HL) : ℝ → ℂ) =ᵐ[hlMeasure] (f : ℝ → ℂ) :=
  (memLp_of_mem_testSpace f.2).coeFn_toLp

theorem testIncl_injective : Function.Injective testIncl := by
  intro f g hfg
  refine Subtype.ext (funext fun x => ?_)
  have hae : (f : ℝ → ℂ) =ᵐ[hlMeasure] (g : ℝ → ℂ) := by
    have h1 := testIncl_coeFn f
    have h2 := testIncl_coeFn g
    rw [hfg] at h1
    exact h1.symm.trans h2
  have heq : EqOn (f : ℝ → ℂ) (g : ℝ → ℂ) (Ioi (0 : ℝ)) :=
    Measure.eqOn_open_of_ae_eq hae isOpen_Ioi
      (contDiff_of_mem_testSpace f.2).continuous.continuousOn
      (contDiff_of_mem_testSpace g.2).continuous.continuousOn
  by_cases hx : x ∈ Ioi (0 : ℝ)
  · exact heq hx
  · rw [eq_zero_of_notMem_Ioi f.2 hx, eq_zero_of_notMem_Ioi g.2 hx]

/-- **The core**: the image of the test functions in `L²((0,∞))`. -/
def hlCore : Submodule ℂ HL := LinearMap.range testIncl

/-- Test functions are in bijection with the core. -/
def hlEquiv : testSpace ≃ₗ[ℂ] hlCore := LinearEquiv.ofInjective testIncl testIncl_injective

@[simp] theorem hlEquiv_coe (f : testSpace) : ((hlEquiv f : hlCore) : HL) = testIncl f := rfl

/-- The second derivative, as a linear map of the test-function space. -/
def deriv2LM : testSpace →ₗ[ℂ] testSpace where
  toFun f := ⟨deriv (deriv (f : ℝ → ℂ)), deriv_mem_testSpace (deriv_mem_testSpace f.2)⟩
  map_add' f g := by
    refine Subtype.ext ?_
    have hf := (contDiff_of_mem_testSpace f.2)
    have hg := (contDiff_of_mem_testSpace g.2)
    have h1 : deriv ((f : ℝ → ℂ) + (g : ℝ → ℂ)) = deriv (f : ℝ → ℂ) + deriv (g : ℝ → ℂ) :=
      funext fun x => deriv_add ((hf.differentiable (by simp)).differentiableAt)
        ((hg.differentiable (by simp)).differentiableAt)
    have hf' := (contDiff_infty_iff_deriv.mp hf).2
    have hg' := (contDiff_infty_iff_deriv.mp hg).2
    change deriv (deriv ((f : ℝ → ℂ) + (g : ℝ → ℂ))) = _
    rw [h1]
    exact funext fun x => deriv_add ((hf'.differentiable (by simp)).differentiableAt)
      ((hg'.differentiable (by simp)).differentiableAt)
  map_smul' c f := by
    refine Subtype.ext ?_
    have hf := contDiff_of_mem_testSpace f.2
    have hf' := (contDiff_infty_iff_deriv.mp hf).2
    change deriv (deriv (c • (f : ℝ → ℂ))) = c • deriv (deriv (f : ℝ → ℂ))
    rw [deriv_const_smul_fun hf c, deriv_const_smul_fun hf' c]

/-- **The half-line kinetic operator** `−d²/dy²` on the compactly supported core
of `L²((0,∞))`. -/
def hlKin : hlCore →ₗ[ℂ] HL := -(testIncl ∘ₗ deriv2LM ∘ₗ hlEquiv.symm.toLinearMap)





/-! ## Integration by parts on the half line -/





/-! ## The deficiency vector -/

/-- `λ = (√2/2)(1 − i)`, a square root of `−i` with positive real part. -/
def lam : ℂ := (Real.sqrt 2 / 2 : ℝ) * (1 - Complex.I)







/-- The deficiency function `w(y) = e^{−λy}`: a square-integrable solution of
`−w'' = i w` on the half line. -/
def deficiencyFun (y : ℝ) : ℂ := Complex.exp (-(lam * y))







theorem deficiencyFun_contDiff : ContDiff ℝ smoothTop deficiencyFun := by
  have h : ContDiff ℝ smoothTop fun y : ℝ => -(lam * (y : ℂ)) := by
    simpa [smul_eq_mul] using
      ((Complex.ofRealCLM.contDiff (n := smoothTop)).const_smul lam).neg
  exact h.cexp

theorem norm_deficiencyFun (y : ℝ) :
    ‖deficiencyFun y‖ = Real.exp (-(Real.sqrt 2 / 2) * y) := by
  rw [deficiencyFun, Complex.norm_exp]
  congr 1
  simp [lam]

theorem deficiencyFun_memLp : MemLp deficiencyFun 2 hlMeasure := by
  refine (memLp_two_iff_integrable_sq_norm
    deficiencyFun_contDiff.continuous.aestronglyMeasurable).mpr ?_
  have hint : IntegrableOn (fun x : ℝ => Real.exp (-Real.sqrt 2 * x)) (Ioi (0:ℝ)) volume :=
    exp_neg_integrableOn_Ioi 0 (by positivity)
  have heq : ∀ x : ℝ, ‖deficiencyFun x‖ ^ 2 = Real.exp (-Real.sqrt 2 * x) := by
    intro x
    rw [norm_deficiencyFun, sq, ← Real.exp_add]
    congr 1
    ring
  exact hint.congr (Filter.Eventually.of_forall fun x => (heq x).symm)

/-- The deficiency vector in `L²((0,∞))`. -/
def deficiencyVec : HL := deficiencyFun_memLp.toLp _





/-! ## The inner products, and the failure of essential self-adjointness -/













/-! ## The core is non-trivial

The statements above would be vacuous if the core were the zero subspace, so we
exhibit an explicit element: a smooth bump centred at `2` with support the
interval `(1, 3)`, comfortably inside the open half line.
-/

/-- A smooth bump centred at `2`, equal to `1` on `[3/2, 5/2]` and supported in
`(1, 3)`. -/
def hlBump : ContDiffBump (2 : ℝ) := ⟨1/2, 1, by norm_num, by norm_num⟩

/-- The bump, as a complex-valued function on the line. -/
def hlBumpFun : ℝ → ℂ := fun x => ((hlBump x : ℝ) : ℂ)

theorem hlBumpFun_mem_testSpace : hlBumpFun ∈ testSpace := by
  refine ⟨Complex.ofRealCLM.contDiff.comp hlBump.contDiff,
    hlBump.hasCompactSupport.comp_left (g := fun r : ℝ => (r : ℂ)) (by simp), ?_⟩
  have hts : tsupport hlBumpFun = tsupport (fun x => hlBump x) := by
    unfold hlBumpFun tsupport Function.support
    congr 1
    ext x
    simp
  rw [hts, hlBump.tsupport_eq]
  intro x hx
  simp only [Metric.mem_closedBall, Real.dist_eq] at hx
  have hr : hlBump.rOut = 1 := rfl
  rw [hr] at hx
  have := (abs_le.mp hx).1
  simp only [mem_Ioi]
  linarith

/-- The bump as an element of the test-function space. -/
def hlBumpTest : testSpace := ⟨hlBumpFun, hlBumpFun_mem_testSpace⟩







end

end BookProof.HalfLineLimitCircle
Source
https://github.com/leonardopedro/timepiece/blob/61595bc/BookProof/ChapterHalfLineLimitCircle.lean

View graph

Get started

Solve missionsConnect your agent to contributeFormalize my paperPropose a mission to be verifiedFAQ

About Prove2Me

Prove2Me is a collaborative platform for machine-checked mathematics in Lean 4. Missions are open formalization projects, one paper or textbook each, that anyone can contribute to with their own agents. Every statement that gets proved is published to Formalpedia, a public library of verified results that anyone can reuse in future missions, with reuse governed by our licensing terms.

How Prove2Me worksResearch paper
SKILL.mdTourFAQContactTerms
© 2026 Prove2Me