Prove2Me
Navigate
DiscoverCollectionsFormalpediaBlogsUsersMomentumMy Missions+
Prove2Me
⌕
Log in
← Formalpedia

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

Definition
ChapterVonNeumannCore

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

definitionsformalizationtimepiece

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

Definition code
import Theorems.Thm_BookProof_FriedrichsSquare_frDom_le_clDom

import Theorems.Thm_BookProof_ClosureUniqueness_factorGraph_quadForm
import Theorems.Thm_BookProof_ClosureUniqueness_adjGraph_eq_adjPairs_clGraph

import Theorems.Thm_BookProof_FriedrichsSquare_exists_mem_factorRel_add



import Definitions.Def_ChapterFriedrichsSquareFactorization
import Definitions.Def_ChapterClosureUniqueness
import Definitions.Def_ChapterEsaClosureCore
import Definitions.Def_ChapterFarisLavine
import Mathlib
import Theorems.Thm_BookProof_ClosureUniqueness_opGraph_clExt
import Theorems.Thm_BookProof_ClosureUniqueness_adjGraph_eq_of_clGraph_eq
import Theorems.Thm_BookProof_ClosureUniqueness_factorGraph_eq_of_clGraph_eq


/-!
# von Neumann's core theorem: `D(A* Ā)` is a core of `Ā`, and `(1 + A* Ā)⁻¹`

`BookProof.ChapterFriedrichsSquareFactorization` proves that the composite
`A* Ā` — the relation `factorRel A` — is the Friedrichs extension of `A²` for a
densely defined symmetric operator `A` with invariant domain, and that
`1 + A* Ā` is *surjective* (`exists_mem_factorRel_add`).  Two classical
complements of that theorem are proved here.

## The bounded inverse `(1 + A* Ā)⁻¹`

The solution of `x + A* Ā x = h` is also **unique**
(`eq_of_mem_factorRel_add_eq`), because the quadratic form of `A* Ā` is `‖Āx‖²`:
pairing `x + A* Ā x = h` with `x` gives `⟪x, h⟫ = ‖x‖² + ‖Āx‖²`, whence

* `‖x‖ ≤ ‖h‖` and `‖Āx‖ ≤ ‖h‖` (`norm_le_of_mem_factorRel_add`),
* `x = 0` when `h = 0` (`eq_zero_of_mem_factorRel_add_eq_zero`).

So `h ↦ x` is a well-defined linear map `resLin A`, everywhere defined, bounded
by `1` — the continuous operator **`resCLM A`** with `‖resCLM A‖ ≤ 1` — and it
is a two-sided inverse of `1 + A* Ā` (`resLin_left_inverse`,
`resLin_right_inverse`).  In particular `D(A* Ā)`, the domain `frDom A`, is
**dense** (`frDom_dense`): a vector orthogonal to it is orthogonal to `x` for the
solution of `x + A* Ā x = h` with `h` the vector itself, and the same quadratic
form kills it.

## The core theorem

**`topologicalClosure_coreGraph`** — the part of the closed graph of `Ā` lying
over `D(A* Ā)`, i.e. `coreGraph A = clGraph A ⊓ (frDom A ×  F)`, is dense in the
whole closed graph.  Equivalently, in operator form, `Ā` restricted to `D(A* Ā)`
(`coreRes A`) has the same closure as `A` (`clGraph_coreRes`) and is a core of
the closure `clExt A` (`isCoreOf_coreRes`).

The proof is von Neumann's: work in the Hilbert direct sum `F ⊕₂ F`, where the
graph inner product is the ambient one.  If `q = (x, w)` lies in the closed graph
and is orthogonal to the graph over `D(A* Ā)`, then for every `(a, z) ∈ A* Ā`
with `(a, y) ∈ clGraph A` orthogonality reads `⟪a, x⟫ + ⟪y, w⟫ = 0`, and the
adjoint relation `(y, z)` turns `⟪y, w⟫` into `⟪z, x⟫`; hence
`⟪a + z, x⟫ = 0`.  Since `1 + A* Ā` is surjective, `a + z` runs over the whole
space, so `x = 0`, and then `w = 0` by closability
(`eq_zero_of_mem_clLp_of_orthogonal`).  A trivial orthogonal-projection argument
turns that into density (`clLp_le_topologicalClosure_coreLp`), and the
homeomorphism `F ⊕₂ F ≅ F × F` transports the statement back to `F × F`.

Combined with `BookProof.ClosureUniqueness.factorGraph_eq_of_clGraph_eq`, the
Friedrichs extension of `A²` may therefore be computed from the core `D(A* Ā)`
itself (`factorGraph_coreRes`).

Hypotheses: `F` is a complex Hilbert space, `A` is symmetric on a dense domain
`D`.  No invariance of `D` is needed anywhere in this module — `A²` never
appears; only the closure `Ā`, the adjoint `A*` and their composite do.
-/

namespace BookProof.VonNeumannCore

open BookProof.FarisLavine BookProof.EsaClosure BookProof.ClosureUniqueness
open BookProof.FriedrichsSquare

variable {F : Type*} [NormedAddCommGroup F] [InnerProductSpace ℂ F]
variable {D : Submodule ℂ F}

/-- The quadratic-form identity for `1 + A* Ā`. -/
theorem inner_fst_add_self {A : D →ₗ[ℂ] F} {p : F × F} (hp : p ∈ factorRel A) :
    ∃ y : F, (p.1, y) ∈ clGraph A ∧
      (inner ℂ p.1 (p.1 + p.2) : ℂ) = ((‖p.1‖ ^ 2 + ‖y‖ ^ 2 : ℝ) : ℂ) := by
  obtain ⟨y, hy, hval⟩ := factorGraph_quadForm (A := A) (p := p) hp
  refine ⟨y, hy, ?_⟩
  have h1 : (inner ℂ p.1 p.1 : ℂ) = ((‖p.1‖ ^ 2 : ℝ) : ℂ) := by
    rw [inner_self_eq_norm_sq_to_K]
    norm_cast
  rw [inner_add_right, h1, hval, ← Complex.ofReal_add]

theorem eq_zero_of_mem_factorRel_add_eq_zero {A : D →ₗ[ℂ] F} {p : F × F} (hp : p ∈ factorRel A)
    (hsum : p.1 + p.2 = 0) : p = 0 := by
  obtain ⟨y, -, hval⟩ := inner_fst_add_self hp
  rw [hsum, inner_zero_right] at hval
  have hre : (0 : ℝ) = ‖p.1‖ ^ 2 + ‖y‖ ^ 2 := by
    have h0 := congrArg Complex.re hval
    rwa [Complex.zero_re, Complex.ofReal_re] at h0
  have h1 : p.1 = 0 := by
    have : ‖p.1‖ = 0 := by nlinarith [norm_nonneg p.1, norm_nonneg y]
    simpa using this
  have h2 : p.2 = 0 := by
    have := hsum
    rw [h1, zero_add] at this
    exact this
  exact Prod.ext h1 h2

/-- Uniqueness of the solution of `x + A* Ā x = h`. -/
theorem eq_of_mem_factorRel_add_eq {A : D →ₗ[ℂ] F} {p q : F × F} (hp : p ∈ factorRel A)
    (hq : q ∈ factorRel A) {h : F} (hps : p.1 + p.2 = h) (hqs : q.1 + q.2 = h) : p = q := by
  have hsub : p - q ∈ factorRel A := (factorRel A).sub_mem hp hq
  have hsum : (p - q).1 + (p - q).2 = 0 := by
    simp only [Prod.fst_sub, Prod.snd_sub]
    rw [show p.1 - q.1 + (p.2 - q.2) = (p.1 + p.2) - (q.1 + q.2) by abel, hps, hqs, sub_self]
  have := eq_zero_of_mem_factorRel_add_eq_zero hsub hsum
  exact sub_eq_zero.1 this

/-- `‖(1 + A* Ā)⁻¹ h‖ ≤ ‖h‖` and `‖Ā (1 + A* Ā)⁻¹ h‖ ≤ ‖h‖`. -/
theorem norm_le_of_mem_factorRel_add {A : D →ₗ[ℂ] F} {p : F × F} (hp : p ∈ factorRel A) {h : F}
    (hsum : p.1 + p.2 = h) :
    ‖p.1‖ ≤ ‖h‖ ∧ ∃ y : F, (p.1, y) ∈ clGraph A ∧ ‖y‖ ≤ ‖h‖ := by
  obtain ⟨y, hy, hval⟩ := inner_fst_add_self hp
  rw [hsum] at hval
  have hkey : ‖p.1‖ ^ 2 + ‖y‖ ^ 2 ≤ ‖p.1‖ * ‖h‖ := by
    have hre : (inner ℂ p.1 h : ℂ).re = ‖p.1‖ ^ 2 + ‖y‖ ^ 2 := by
      rw [hval, Complex.ofReal_re]
    have hle : (inner ℂ p.1 h : ℂ).re ≤ ‖p.1‖ * ‖h‖ := by
      simpa using re_inner_le_norm (𝕜 := ℂ) p.1 h
    rw [hre] at hle
    linarith
  have h1 : ‖p.1‖ ≤ ‖h‖ := by
    rcases eq_or_lt_of_le (norm_nonneg p.1) with hz | hz
    · rw [← hz]; exact norm_nonneg h
    · nlinarith [norm_nonneg y]
  refine ⟨h1, y, hy, ?_⟩
  have hsq : ‖y‖ ^ 2 ≤ ‖h‖ ^ 2 := by nlinarith [norm_nonneg p.1, norm_nonneg h]
  nlinarith [norm_nonneg y, norm_nonneg h]

/-- The witness of the factorization, together with the quadratic form. -/
theorem factorRel_witness {A : D →ₗ[ℂ] F} {p : F × F} (hp : p ∈ factorRel A) :
    ∃ y : F, (p.1, y) ∈ clGraph A ∧ (y, p.2) ∈ adjGraph A ∧
      (inner ℂ p.1 p.2 : ℂ) = ((‖y‖ ^ 2 : ℝ) : ℂ) := by
  obtain ⟨y, hy, hz⟩ := hp
  refine ⟨y, hy, hz, ?_⟩
  rw [adjGraph_eq_adjPairs_clGraph] at hz
  have h1 : (inner ℂ y y : ℂ) = inner ℂ p.1 p.2 := hz (p.1, y) hy
  rw [← h1, inner_self_eq_norm_sq_to_K]
  norm_cast

section Complete

variable [CompleteSpace F]

/-! ## The bounded inverse `(1 + A* Ā)⁻¹` -/

/-- The unique solution pair of `x + A* Ā x = h`. -/
noncomputable def resPair (A : D →ₗ[ℂ] F) (h : F) : F × F :=
  Classical.choose (exists_mem_factorRel_add A h)

theorem resPair_mem (A : D →ₗ[ℂ] F) (h : F) : resPair A h ∈ factorRel A :=
  (Classical.choose_spec (exists_mem_factorRel_add A h)).1

theorem resPair_add (A : D →ₗ[ℂ] F) (h : F) : (resPair A h).1 + (resPair A h).2 = h :=
  (Classical.choose_spec (exists_mem_factorRel_add A h)).2

theorem resPair_unique {A : D →ₗ[ℂ] F} {h : F} {p : F × F} (hp : p ∈ factorRel A)
    (hsum : p.1 + p.2 = h) : resPair A h = p :=
  eq_of_mem_factorRel_add_eq (resPair_mem A h) hp (resPair_add A h) hsum

/-- `(1 + A* Ā)⁻¹` as a linear map. -/
noncomputable def resLin (A : D →ₗ[ℂ] F) : F →ₗ[ℂ] F where
  toFun h := (resPair A h).1
  map_add' h k := by
    have : resPair A (h + k) = resPair A h + resPair A k := by
      refine resPair_unique ((factorRel A).add_mem (resPair_mem A h) (resPair_mem A k)) ?_
      have h1 := resPair_add A h
      have h2 := resPair_add A k
      simp only [Prod.fst_add, Prod.snd_add]
      rw [show (resPair A h).1 + (resPair A k).1 + ((resPair A h).2 + (resPair A k).2)
          = ((resPair A h).1 + (resPair A h).2) + ((resPair A k).1 + (resPair A k).2) by abel,
        h1, h2]
    rw [this]
    rfl
  map_smul' c h := by
    have : resPair A (c • h) = c • resPair A h := by
      refine resPair_unique ((factorRel A).smul_mem c (resPair_mem A h)) ?_
      simp only [Prod.smul_fst, Prod.smul_snd, ← smul_add, resPair_add A h]
    rw [this]
    rfl

theorem resLin_apply (A : D →ₗ[ℂ] F) (h : F) : resLin A h = (resPair A h).1 := rfl

theorem resLin_mem_factorRel (A : D →ₗ[ℂ] F) (h : F) :
    (resLin A h, h - resLin A h) ∈ factorRel A := by
  have hmem := resPair_mem A h
  have hsum := resPair_add A h
  have : (resLin A h, h - resLin A h) = resPair A h := by
    rw [resLin_apply, Prod.ext_iff]
    exact ⟨rfl, (eq_sub_of_add_eq' hsum).symm⟩
  rw [this]; exact hmem

theorem norm_resLin_le (A : D →ₗ[ℂ] F) (h : F) : ‖resLin A h‖ ≤ ‖h‖ :=
  (norm_le_of_mem_factorRel_add (resPair_mem A h) (resPair_add A h)).1

/-- **`(1 + A* Ā)⁻¹` is everywhere defined and a contraction.** -/
noncomputable def resCLM (A : D →ₗ[ℂ] F) : F →L[ℂ] F :=
  (resLin A).mkContinuous 1 (fun h => by simpa using norm_resLin_le A h)

theorem resCLM_apply (A : D →ₗ[ℂ] F) (h : F) : resCLM A h = resLin A h := rfl

theorem norm_resCLM_le_one (A : D →ₗ[ℂ] F) : ‖resCLM A‖ ≤ 1 :=
  LinearMap.mkContinuous_norm_le _ zero_le_one _

/-- The resolvent lands in the domain of `A* Ā`, and inverts `1 + A* Ā`. -/
theorem resCLM_mem_frDom (A : D →ₗ[ℂ] F) (h : F) : resCLM A h ∈ frDom A :=
  mem_frDom_iff.2 ⟨_, resLin_mem_factorRel A h⟩

/-- `(1 + A* Ā)⁻¹` is a left inverse of `1 + A* Ā`. -/
theorem resLin_left_inverse (A : D →ₗ[ℂ] F) (x : frDom A) :
    resLin A ((x : F) + frFun A x) = (x : F) := by
  rw [resLin_apply, resPair_unique (frFun_spec A x) rfl]

/-- `(1 + A* Ā)⁻¹` is a right inverse of `1 + A* Ā`. -/
theorem resLin_right_inverse (A : D →ₗ[ℂ] F) (hdense : Dense (D : Set F))
    (hsym : SymmetricOn D A) (h : F) :
    resLin A h + frFun A ⟨resLin A h, resCLM_mem_frDom A h⟩ = h := by
  have hval : frFun A ⟨resLin A h, resCLM_mem_frDom A h⟩ = h - resLin A h :=
    frFun_unique hdense hsym (resLin_mem_factorRel A h)
  rw [hval]
  abel

/-! ## The domain of `A* Ā` is dense -/

theorem eq_zero_of_inner_frDom_eq_zero (A : D →ₗ[ℂ] F) (hdense : Dense (D : Set F)) {x : F}
    (hx : ∀ u ∈ frDom A, (inner ℂ u x : ℂ) = 0) : x = 0 := by
  obtain ⟨p, hp, hsum⟩ := exists_mem_factorRel_add A x
  obtain ⟨y, hy, hz, hval⟩ := factorRel_witness hp
  have hx1 : (inner ℂ p.1 x : ℂ) = 0 := hx p.1 (mem_frDom_iff.2 ⟨p.2, hp⟩)
  have hquad : (inner ℂ p.1 (p.1 + p.2) : ℂ) = ((‖p.1‖ ^ 2 + ‖y‖ ^ 2 : ℝ) : ℂ) := by
    have h1 : (inner ℂ p.1 p.1 : ℂ) = ((‖p.1‖ ^ 2 : ℝ) : ℂ) := by
      rw [inner_self_eq_norm_sq_to_K]
      norm_cast
    rw [inner_add_right, h1, hval, ← Complex.ofReal_add]
  rw [hsum, hx1] at hquad
  have hre : (0 : ℝ) = ‖p.1‖ ^ 2 + ‖y‖ ^ 2 := by
    have h0 := congrArg Complex.re hquad
    rwa [Complex.zero_re, Complex.ofReal_re] at h0
  have hp1 : p.1 = 0 := by
    have : ‖p.1‖ = 0 := by nlinarith [norm_nonneg p.1, norm_nonneg y]
    simpa using this
  have hy0 : y = 0 := by
    have : ‖y‖ = 0 := by nlinarith [norm_nonneg p.1, norm_nonneg y]
    simpa using this
  have hp2 : p.2 = 0 := by
    rw [mem_adjGraph_iff] at hz
    refine Dense.eq_zero_of_inner_right ℂ hdense fun v hv => ?_
    have hv' := hz ⟨v, hv⟩
    simp only [hy0, inner_zero_right] at hv'
    exact hv'.symm
  rw [← hsum, hp1, hp2, add_zero]

/-- **`D(A* Ā)` is dense.** -/
theorem frDom_dense (A : D →ₗ[ℂ] F) (hdense : Dense (D : Set F)) :
    Dense ((frDom A : Submodule ℂ F) : Set F) := by
  rw [Submodule.dense_iff_topologicalClosure_eq_top, Submodule.topologicalClosure_eq_top_iff,
    Submodule.eq_bot_iff]
  intro x hx
  exact eq_zero_of_inner_frDom_eq_zero A hdense fun u hu => hx u hu

/-! ## von Neumann's core theorem -/

end Complete

/-- The graph of `Ā` restricted to the domain of `A* Ā`. -/
def coreGraph (A : D →ₗ[ℂ] F) : Submodule ℂ (F × F) :=
  clGraph A ⊓ (frDom A).comap (LinearMap.fst ℂ F F)

theorem mem_coreGraph_iff {A : D →ₗ[ℂ] F} {p : F × F} :
    p ∈ coreGraph A ↔ p ∈ clGraph A ∧ p.1 ∈ frDom A := Iff.rfl

theorem coreGraph_le_clGraph (A : D →ₗ[ℂ] F) : coreGraph A ≤ clGraph A := inf_le_left

/-- The same graph, inside the Hilbert direct sum `F ⊕₂ F`. -/
def coreLp (A : D →ₗ[ℂ] F) : Submodule ℂ (WithLp 2 (F × F)) :=
  (coreGraph A).comap (WithLp.linearEquiv 2 ℂ (F × F)).toLinearMap

/-- The closed graph, inside the Hilbert direct sum `F ⊕₂ F`. -/
def clLp (A : D →ₗ[ℂ] F) : Submodule ℂ (WithLp 2 (F × F)) :=
  (clGraph A).comap (WithLp.linearEquiv 2 ℂ (F × F)).toLinearMap

theorem mem_coreLp_iff {A : D →ₗ[ℂ] F} {p : WithLp 2 (F × F)} :
    p ∈ coreLp A ↔ WithLp.ofLp p ∈ coreGraph A := Iff.rfl

theorem mem_clLp_iff {A : D →ₗ[ℂ] F} {p : WithLp 2 (F × F)} :
    p ∈ clLp A ↔ WithLp.ofLp p ∈ clGraph A := Iff.rfl

theorem coreLp_le_clLp (A : D →ₗ[ℂ] F) : coreLp A ≤ clLp A :=
  fun _ hp => (mem_coreGraph_iff.1 hp).1

theorem clLp_isClosed (A : D →ₗ[ℂ] F) :
    IsClosed ((clLp A : Submodule ℂ (WithLp 2 (F × F))) : Set (WithLp 2 (F × F))) := by
  have hcont : Continuous fun p : WithLp 2 (F × F) => WithLp.ofLp p := by fun_prop
  exact (clGraph_isClosed A).preimage hcont

section Complete2

variable [CompleteSpace F]

/-- **The heart of the core theorem**: an element of the closed graph that is
orthogonal, in the graph inner product, to the part of the graph over `D(A* Ā)`
is zero. -/
theorem eq_zero_of_mem_clLp_of_orthogonal (A : D →ₗ[ℂ] F) (hdense : Dense (D : Set F))
    (hsym : SymmetricOn D A) {q : WithLp 2 (F × F)} (hq : q ∈ clLp A)
    (horth : q ∈ (coreLp A)ᗮ) : q = 0 := by
  have hqG : ((WithLp.ofLp q).1, (WithLp.ofLp q).2) ∈ clGraph A := hq
  have hx : (WithLp.ofLp q).1 = 0 := by
    have hall : ∀ h : F, (inner ℂ h (WithLp.ofLp q).1 : ℂ) = 0 := by
      intro h
      obtain ⟨p, hp, hsum⟩ := exists_mem_factorRel_add A h
      obtain ⟨y, hy, hz, -⟩ := factorRel_witness hp
      have hu : (WithLp.toLp 2 (p.1, y)) ∈ coreLp A := by
        refine mem_coreLp_iff.2 ?_
        exact ⟨by simpa using hy, by simpa using mem_frDom_iff.2 ⟨p.2, hp⟩⟩
      have h0 := horth _ hu
      rw [WithLp.prod_inner_apply] at h0
      have hyw : (inner ℂ y (WithLp.ofLp q).2 : ℂ) = inner ℂ p.2 (WithLp.ofLp q).1 := by
        rw [adjGraph_eq_adjPairs_clGraph] at hz
        have hr := hz ((WithLp.ofLp q).1, (WithLp.ofLp q).2) hqG
        have := congrArg (starRingEnd ℂ) hr
        rwa [inner_conj_symm, inner_conj_symm] at this
      rw [hyw] at h0
      rw [← hsum, inner_add_left]
      exact h0
    have := hall (WithLp.ofLp q).1
    exact inner_self_eq_zero.1 this
  have hw : (WithLp.ofLp q).2 = 0 := by
    refine clGraph_snd_eq_zero_of_fst_eq_zero hdense hsym ?_
    rw [← hx]
    exact hqG
  have hz : WithLp.ofLp q = (0 : F × F) := Prod.ext hx hw
  have := congrArg (WithLp.toLp 2) hz
  simpa using this

/-- **von Neumann's core theorem**, in the Hilbert direct sum. -/
theorem clLp_le_topologicalClosure_coreLp (A : D →ₗ[ℂ] F) (hdense : Dense (D : Set F))
    (hsym : SymmetricOn D A) : clLp A ≤ (coreLp A).topologicalClosure := by
  haveI : CompleteSpace ((coreLp A).topologicalClosure) :=
    (coreLp A).isClosed_topologicalClosure.completeSpace_coe
  haveI : ((coreLp A).topologicalClosure).HasOrthogonalProjection :=
    Submodule.HasOrthogonalProjection.ofCompleteSpace _
  intro v hv
  obtain ⟨a, ha, b, hb, hab⟩ :=
    Submodule.exists_add_mem_mem_orthogonal (K := (coreLp A).topologicalClosure) v
  have hKle : (coreLp A).topologicalClosure ≤ clLp A :=
    Submodule.topologicalClosure_minimal _ (coreLp_le_clLp A) (clLp_isClosed A)
  have hbcl : b ∈ clLp A := by
    have hb' : b = v - a := by rw [hab]; abel
    rw [hb']
    exact (clLp A).sub_mem hv (hKle ha)
  have hborth : b ∈ (coreLp A)ᗮ :=
    Submodule.orthogonal_le (Submodule.le_topologicalClosure _) hb
  have hb0 : b = 0 := eq_zero_of_mem_clLp_of_orthogonal A hdense hsym hbcl hborth
  rw [hab, hb0, add_zero]
  exact ha

/-- **von Neumann's core theorem**: `D(A* Ā)` is a core of `Ā` — the graph of `Ā`
over that domain is dense in the whole closed graph. -/
theorem topologicalClosure_coreGraph (A : D →ₗ[ℂ] F) (hdense : Dense (D : Set F))
    (hsym : SymmetricOn D A) : (coreGraph A).topologicalClosure = clGraph A := by
  refine le_antisymm
    (Submodule.topologicalClosure_minimal _ (coreGraph_le_clGraph A) (clGraph_isClosed A)) ?_
  intro p hp
  have hmem : (WithLp.toLp 2 p) ∈ (coreLp A).topologicalClosure :=
    clLp_le_topologicalClosure_coreLp A hdense hsym (by simpa [mem_clLp_iff] using hp)
  have hcont : Continuous fun z : WithLp 2 (F × F) => WithLp.ofLp z := by fun_prop
  have himg : (fun z : WithLp 2 (F × F) => WithLp.ofLp z) ''
      ((coreLp A : Submodule ℂ (WithLp 2 (F × F))) : Set (WithLp 2 (F × F)))
      = ((coreGraph A : Submodule ℂ (F × F)) : Set (F × F)) := by
    ext r
    constructor
    · rintro ⟨z, hz, rfl⟩
      exact hz
    · intro hr
      exact ⟨WithLp.toLp 2 r, by simpa [mem_coreLp_iff] using hr, by simp⟩
  have hsub := image_closure_subset_closure_image (f := fun z : WithLp 2 (F × F) => WithLp.ofLp z)
    hcont (s := ((coreLp A : Submodule ℂ (WithLp 2 (F × F))) : Set (WithLp 2 (F × F))))
  rw [himg] at hsub
  have hpmem : p ∈ closure ((coreGraph A : Submodule ℂ (F × F)) : Set (F × F)) := by
    refine hsub ⟨WithLp.toLp 2 p, ?_, by simp⟩
    rw [← Submodule.topologicalClosure_coe]
    exact hmem
  rwa [← Submodule.topologicalClosure_coe] at hpmem

/-! ## Operator form -/

/-- `Ā` restricted to the domain of `A* Ā`. -/
noncomputable def coreRes (A : D →ₗ[ℂ] F) (hdense : Dense (D : Set F)) (hsym : SymmetricOn D A) :
    frDom A →ₗ[ℂ] F :=
  (clExt A hdense hsym).comp (Submodule.inclusion (frDom_le_clDom A))

theorem coreRes_apply (A : D →ₗ[ℂ] F) (hdense : Dense (D : Set F)) (hsym : SymmetricOn D A)
    (x : frDom A) : coreRes A hdense hsym x = clFun A ⟨(x : F), frDom_le_clDom A x.2⟩ := rfl

theorem opGraph_coreRes (A : D →ₗ[ℂ] F) (hdense : Dense (D : Set F)) (hsym : SymmetricOn D A) :
    opGraph (coreRes A hdense hsym) = coreGraph A := by
  refine le_antisymm ?_ ?_
  · rintro p ⟨x, rfl⟩
    exact ⟨clFun_spec A ⟨(x : F), frDom_le_clDom A x.2⟩, x.2⟩
  · intro p hp
    obtain ⟨hpc, hpd⟩ := mem_coreGraph_iff.1 hp
    refine ⟨⟨p.1, hpd⟩, ?_⟩
    have hval : clFun A ⟨p.1, frDom_le_clDom A hpd⟩ = p.2 :=
      clFun_unique hdense hsym (by simpa using hpc)
    simp [coreRes_apply, hval]

/-- **`D(A* Ā)` is a core of `Ā`**, in operator form. -/
theorem clGraph_coreRes (A : D →ₗ[ℂ] F) (hdense : Dense (D : Set F)) (hsym : SymmetricOn D A) :
    clGraph (coreRes A hdense hsym) = clGraph A := by
  unfold clGraph
  rw [opGraph_coreRes A hdense hsym]
  exact topologicalClosure_coreGraph A hdense hsym

theorem isCoreOf_coreRes (A : D →ₗ[ℂ] F) (hdense : Dense (D : Set F)) (hsym : SymmetricOn D A) :
    IsCoreOf (coreRes A hdense hsym) (clExt A hdense hsym) := by
  constructor
  · intro x
    refine ⟨frDom_le_clDom A x.2, ?_⟩
    rw [coreRes_apply]
    rfl
  · rw [clGraph_coreRes A hdense hsym, opGraph_clExt A hdense hsym]

/-- The adjoint is the same whether taken from `A` or from `Ā` on `D(A* Ā)`. -/
theorem adjGraph_coreRes (A : D →ₗ[ℂ] F) (hdense : Dense (D : Set F)) (hsym : SymmetricOn D A) :
    adjGraph (coreRes A hdense hsym) = adjGraph A :=
  adjGraph_eq_of_clGraph_eq (clGraph_coreRes A hdense hsym)

/-- **The Friedrichs extension of `A²` may be computed from the core `D(A* Ā)`.** -/
theorem factorGraph_coreRes (A : D →ₗ[ℂ] F) (hdense : Dense (D : Set F))
    (hsym : SymmetricOn D A) : factorGraph (coreRes A hdense hsym) = factorGraph A :=
  factorGraph_eq_of_clGraph_eq (clGraph_coreRes A hdense hsym)

end Complete2

end BookProof.VonNeumannCore
Source
https://github.com/leonardopedro/timepiece/blob/61595bc/BookProof/ChapterVonNeumannCore.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