Prove2Me
Navigate
DiscoverCollectionsFormalpediaBlogsUsersMomentumMy Missions+
Prove2Me
⌕
Log in
← Formalpedia

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

Definition
ChapterQgOuterFockInteractionFL

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

definitionsformalizationtimepiece

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

Definition code
import Theorems.Thm_BookProof_QgOuterFockFL_harmFried_op_core

import Theorems.Thm_BookProof_SqSumFarisLavine_norm_sqSumOp_le

import Theorems.Thm_BookProof_SqSumFarisLavine_potFun_le_of_schur

import Definitions.Def_ChapterQgOuterFockFullFL
import Definitions.Def_ChapterDirectSumEsa
import Definitions.Def_ChapterFarisLavine
import Definitions.Def_ChapterGaussCoreQuadBounds
import Definitions.Def_ChapterHermiteProductBasis
import Definitions.Def_ChapterHermiteProductCore
import Definitions.Def_ChapterQg3DGaugeEsa
import Definitions.Def_ChapterQgHermiteOscillatorEsa
import Definitions.Def_ChapterQgOuterFockEsa
import Definitions.Def_ChapterQgOuterFockCoreFL
import Definitions.Def_ChapterQgOuterFockFarisLavine
import Definitions.Def_ChapterQuantumGravity3DGauge
import Definitions.Def_ChapterSqSumFarisLavine
import Mathlib


/-!
# Interacting quantum gravity on the outer Fock space, by Faris–Lavine

`BookProof.ChapterQgOuterFockFullFL` proves that the outer-Fock second quantization of the
one-particle gauge-fixed gravity Hamiltonian is essentially self-adjoint by Faris–Lavine.
That Hamiltonian is a *sum of one-particle operators*: nothing in it couples two different
excitations.  This module removes that restriction.

## The general statement

A `QgFamily` is a family of `n`-particle Hamiltonians

`H_n = ½ Σ_I κ^{(n)}_I π_I² + ½ Σ_r (L^{(n)}_r)²`,  `L^{(n)}_r = Σ_I v^{(n)}_{rI} x_I`,

on `L²(ℝ^{84n})`, subject to **three uniform bounds**: the signature is bounded by `km`,
every linear form has `ℓ¹` norm at most `a` (a *row* bound), and every coordinate is
touched by forms of total `ℓ¹` weight at most `b` (a *column* bound).  Nothing constrains
which coordinates a form may involve: a form is free to mix the coordinates of arbitrarily
many different particles, so the resulting Hamiltonian is genuinely interacting and is
*not* a sum of one-particle operators.

`QgFamily.esa_farisLavine` is then the headline: such a Hamiltonian is essentially
self-adjoint on the domain of the lifted Friedrichs extension of the positive one-particle
operator `N₁ = −Δ + ‖x‖²/4`, and the operator so realized extends the finite-particle-core
Hamiltonian `QgFamily.outerHam`.  The two Faris–Lavine constants are

`flK = 3km/2 + 4ab`  (relative bound),  `flc = km/2 + 2ab`  (commutator bound),

and — this is the whole point — **they depend on the family only through `km`, `a`, `b`,
never through the particle number**, which is exactly the uniformity the `ℓ²`-direct-sum
Faris–Lavine theorem needs.

## The physical interacting instance

`qgIntFamily lam` is the gauge-fixed 3D gravity family with a *nearest-neighbour torsion
coupling* of strength `lam`: besides the `64` torsion forms `T_m^{(p)}` of each particle,
it carries the `64` coupling forms `lam·(T_m^{(p)} − T_m^{(p+1)})` for every particle `p`
(the successor `nextPart` is taken cyclically).  Each coupling form mixes the coordinates
of two different particles (`qgCoupling_spans_two_particles`), so for `lam ≠ 0` the
Hamiltonian is not a sum of one-particle operators; nevertheless the row bound
`2 + 4|lam|` and the column bound `64 + 128|lam|` are independent of the particle number,
because a coordinate belongs to one particle and that particle occurs in exactly two
coupling blocks.  The conclusion is

**`qgInteracting_esa_farisLavine`** — the interacting gauge-fixed 3D quantum-gravity
Hamiltonian, with the physical hyperbolic signature `qgKappa`, all `64` torsion terms per
particle and all inter-particle coupling terms, is essentially self-adjoint on the outer
Fock space by Faris–Lavine, with the lifted Friedrichs extension of `N₁` as comparison
operator.

## Honest boundary

The couplings are quadratic in the field coordinates (squares of linear forms), which is
the class the torsion potential itself belongs to, and they preserve the particle number;
the uniform column bound is a *locality* requirement, and a family in which every particle
is coupled to every other with the same strength does not satisfy it.  As everywhere in
this development, the Fock space is the `ℓ²`-direct sum of the sectors (distinguishable
excitations, no symmetrization), and no spectrum, mass gap or continuum limit is claimed.

Everything is `sorry`-free and `axiom`-free.
-/

namespace BookProof.QgOuterFockInteractionFL

open Finset MvPolynomial
open BookProof.HermiteProductCore BookProof.HermiteProductBasis
open BookProof.QgHermiteOscillator BookProof.FarisLavine
open BookProof.DirectSumEsa
open BookProof.QgOuterFock BookProof.QgOuterFockFL BookProof.QgOuterFockCoreFL
open BookProof.QgOuterFockFullFL
open BookProof.Qg3DGaugeEsa BookProof.QuantumGravity3DGauge
open BookProof.GaussCoreQuadBounds BookProof.SqSumFarisLavine

noncomputable section

/-- **A uniform family of kinetic-plus-squares Hamiltonians on the outer Fock sectors.**
The `n`-particle Hamiltonian is `½ Σ_I κ_I π_I² + ½ Σ_r L_r²` with `L_r` the linear form
of coefficient vector `vv n r`; the three bounds `km`, `a`, `b` are uniform in the
particle number `n`.  No structural restriction whatsoever is placed on the linear forms:
they may mix the coordinates of different particles. -/
structure QgFamily where
  /-- The index type of the linear forms of the `n`-particle sector. -/
  R : ℕ → Type
  [finR : ∀ n, Fintype (R n)]
  /-- The signature of the kinetic term of the `n`-particle sector. -/
  kap : ∀ n : ℕ, Fin (n * 84) → ℝ
  /-- The coefficient vectors of the linear forms of the `n`-particle sector. -/
  vv : ∀ n : ℕ, R n → Fin (n * 84) → ℝ
  /-- The uniform bound on the signature. -/
  km : ℝ
  /-- The uniform row (`ℓ¹`-per-form) bound. -/
  a : ℝ
  /-- The uniform column (`ℓ¹`-per-coordinate) bound. -/
  b : ℝ
  km_nonneg : 0 ≤ km
  a_nonneg : 0 ≤ a
  b_nonneg : 0 ≤ b
  kap_le : ∀ (n : ℕ) (I : Fin (n * 84)), |kap n I| ≤ km
  row_le : ∀ (n : ℕ) (r : R n), ∑ I : Fin (n * 84), |vv n r I| ≤ a
  col_le : ∀ (n : ℕ) (I : Fin (n * 84)), ∑ r : R n, |vv n r I| ≤ b

attribute [instance] QgFamily.finR

namespace QgFamily

variable (F : QgFamily)

/-- The relative-bound constant of the family. -/
def flK : ℝ := 3 / 2 * F.km + 4 * (F.a * F.b)

/-- The Faris–Lavine commutator constant of the family. -/
def flc : ℝ := F.km / 2 + 2 * (F.a * F.b)

theorem ab_nonneg : 0 ≤ F.a * F.b := mul_nonneg F.a_nonneg F.b_nonneg

theorem flK_nonneg : 0 ≤ F.flK := by
  have h := F.ab_nonneg
  have := F.km_nonneg
  rw [flK]; linarith



/-- **The `n`-particle Hamiltonian of the family**, on the Gauss–polynomial core of
`L²(ℝ^{84n})`. -/
def secHam (n : ℕ) : polyGaussCore (d := n * 84) →ₗ[ℂ] L2d (n * 84) :=
  sqSumOp (F.kap n) (F.vv n)





/-- **The relative bound**, with a constant uniform in the particle number. -/
theorem secHam_norm_le (n : ℕ) (u : polyGaussCore (d := n * 84)) :
    ‖F.secHam n u‖ ≤ F.flK * ‖QgHermiteOscillator.harmCore u + (u : L2d (n * 84))‖ := by
  have hB : ∀ x : Vd (n * 84), potFun (F.vv n) x ≤ (F.a * F.b / 2) * ‖x‖ ^ 2 :=
    fun x => potFun_le_of_schur F.a_nonneg (F.row_le n) (F.col_le n) x
  have hB0 : (0 : ℝ) ≤ F.a * F.b / 2 := by
    have := F.ab_nonneg; linarith
  have heq : 3 / 2 * F.km + 8 * (F.a * F.b / 2) = F.flK := by rw [flK]; ring
  rw [secHam, ← heq]
  exact norm_sqSumOp_le F.km_nonneg (F.kap_le n) hB0 hB u



/-! ## 2. The Hamiltonian on the outer Fock space -/

/-- **The Hamiltonian of the family on the finite-particle core of the outer Fock
space.** -/
def outerHam : qgOuterCore →ₗ[ℂ] QgOuterFock.qgOuterFock := dsOp (fun n : ℕ => F.secHam n)





/-- The Faris–Lavine core data of the `n`-particle Hamiltonian. -/
def secData (n : ℕ) : CoreData (L2d (n * 84)) where
  C := harmFried (n * 84)
  C₀ := polyGaussCore (d := n * 84)
  gc := harmFried_isGraphCore (n * 84)
  H₀ := F.secHam n
  K := F.flK
  hK := F.flK_nonneg
  rel := by
    intro p
    rw [harmFried_op_core (n * 84) p]
    exact F.secHam_norm_le n p

/-- The `n`-particle Hamiltonian, extended from the Gauss–polynomial core to the whole
domain of the sector comparison operator. -/
def secExt (n : ℕ) : (harmFried (n * 84)).dom →ₗ[ℂ] L2d (n * 84) := (F.secData n).ext













end QgFamily

/-! ## 3. The nearest-neighbour successor of a particle -/

/-- The cyclic successor of a particle index. -/
def nextPart {n : ℕ} (p : Fin n) : Fin n :=
  if h : p.val + 1 < n then ⟨p.val + 1, h⟩
  else ⟨0, Nat.lt_of_le_of_lt (Nat.zero_le p.val) p.isLt⟩

theorem nextPart_val {n : ℕ} (p : Fin n) :
    (nextPart p).val = if p.val + 1 < n then p.val + 1 else 0 := by
  unfold nextPart; split_ifs <;> rfl

theorem nextPart_injective {n : ℕ} : Function.Injective (nextPart (n := n)) := by
  intro p q h
  have hp := p.isLt
  have hq := q.isLt
  have hv := congrArg Fin.val h
  rw [nextPart_val, nextPart_val] at hv
  apply Fin.ext
  split_ifs at hv <;> omega

/-- The cyclic successor as an equivalence, used to reindex sums over particles. -/
def nextEquiv {n : ℕ} : Fin n ≃ Fin n :=
  Equiv.ofBijective nextPart (Finite.injective_iff_bijective.mp nextPart_injective)

@[simp] theorem nextEquiv_apply {n : ℕ} (p : Fin n) : nextEquiv p = nextPart p := rfl

theorem sum_comp_nextPart {n : ℕ} {M : Type*} [AddCommMonoid M] (f : Fin n → M) :
    ∑ p : Fin n, f (nextPart p) = ∑ p : Fin n, f p :=
  Equiv.sum_comp nextEquiv f



/-! ## 4. The interacting gravity family -/

/-- **The nearest-neighbour torsion coupling.**  The `m`-th coupling form of particle `p`
is `lam·(T_m^{(p)} − T_m^{(p+1)})`; it mixes the coordinates of two different
particles. -/
def qgCouplingVec (lam : ℝ) (n : ℕ) (r : Fin n × Fin 64) (I : Fin (n * 84)) : ℝ :=
  lam * (qgTorsionVecN n r I - qgTorsionVecN n (nextPart r.1, r.2) I)

/-- The full family of linear forms of the interacting gravity Hamiltonian: the torsion
forms of every particle, and the nearest-neighbour coupling forms. -/
def qgIntVec (lam : ℝ) (n : ℕ) :
    (Fin n × Fin 64) ⊕ (Fin n × Fin 64) → Fin (n * 84) → ℝ :=
  Sum.elim (qgTorsionVecN n) (qgCouplingVec lam n)

theorem qgCouplingVec_row_le (lam : ℝ) (n : ℕ) (r : Fin n × Fin 64) :
    ∑ I : Fin (n * 84), |qgCouplingVec lam n r I| ≤ 4 * |lam| := by
  have hterm : ∀ I : Fin (n * 84), |qgCouplingVec lam n r I|
      ≤ |lam| * (|qgTorsionVecN n r I| + |qgTorsionVecN n (nextPart r.1, r.2) I|) := by
    intro I
    rw [qgCouplingVec, abs_mul]
    exact mul_le_mul_of_nonneg_left (abs_sub _ _) (abs_nonneg lam)
  calc ∑ I : Fin (n * 84), |qgCouplingVec lam n r I|
      ≤ ∑ I : Fin (n * 84),
          |lam| * (|qgTorsionVecN n r I| + |qgTorsionVecN n (nextPart r.1, r.2) I|) :=
        Finset.sum_le_sum fun I _ => hterm I
    _ = |lam| * ((∑ I : Fin (n * 84), |qgTorsionVecN n r I|)
          + ∑ I : Fin (n * 84), |qgTorsionVecN n (nextPart r.1, r.2) I|) := by
        rw [← Finset.mul_sum, ← Finset.sum_add_distrib]
    _ ≤ |lam| * (2 + 2) := by
        refine mul_le_mul_of_nonneg_left ?_ (abs_nonneg lam)
        have h1 := qgTorsionVecN_row_le n r
        have h2 := qgTorsionVecN_row_le n (nextPart r.1, r.2)
        linarith
    _ = 4 * |lam| := by ring

theorem sum_torsion_col_next (n : ℕ) (I : Fin (n * 84)) :
    ∑ r : Fin n × Fin 64, |qgTorsionVecN n (nextPart r.1, r.2) I| ≤ 64 := by
  have hsplit : ∑ r : Fin n × Fin 64, |qgTorsionVecN n (nextPart r.1, r.2) I|
      = ∑ p : Fin n, ∑ m : Fin 64, |qgTorsionVecN n (nextPart p, m) I| :=
    Fintype.sum_prod_type (fun r : Fin n × Fin 64 => |qgTorsionVecN n (nextPart r.1, r.2) I|)
  have hre : ∑ p : Fin n, ∑ m : Fin 64, |qgTorsionVecN n (nextPart p, m) I|
      = ∑ p : Fin n, ∑ m : Fin 64, |qgTorsionVecN n (p, m) I| :=
    sum_comp_nextPart (fun q : Fin n => ∑ m : Fin 64, |qgTorsionVecN n (q, m) I|)
  have hfin : ∑ p : Fin n, ∑ m : Fin 64, |qgTorsionVecN n (p, m) I|
      = ∑ r : Fin n × Fin 64, |qgTorsionVecN n r I| :=
    (Fintype.sum_prod_type (fun r : Fin n × Fin 64 => |qgTorsionVecN n r I|)).symm
  rw [hsplit, hre, hfin]
  exact qgTorsionVecN_col_le n I

theorem qgCouplingVec_col_le (lam : ℝ) (n : ℕ) (I : Fin (n * 84)) :
    ∑ r : Fin n × Fin 64, |qgCouplingVec lam n r I| ≤ 128 * |lam| := by
  have hterm : ∀ r : Fin n × Fin 64, |qgCouplingVec lam n r I|
      ≤ |lam| * (|qgTorsionVecN n r I| + |qgTorsionVecN n (nextPart r.1, r.2) I|) := by
    intro r
    rw [qgCouplingVec, abs_mul]
    exact mul_le_mul_of_nonneg_left (abs_sub _ _) (abs_nonneg lam)
  calc ∑ r : Fin n × Fin 64, |qgCouplingVec lam n r I|
      ≤ ∑ r : Fin n × Fin 64,
          |lam| * (|qgTorsionVecN n r I| + |qgTorsionVecN n (nextPart r.1, r.2) I|) :=
        Finset.sum_le_sum fun r _ => hterm r
    _ = |lam| * ((∑ r : Fin n × Fin 64, |qgTorsionVecN n r I|)
          + ∑ r : Fin n × Fin 64, |qgTorsionVecN n (nextPart r.1, r.2) I|) := by
        rw [← Finset.mul_sum, ← Finset.sum_add_distrib]
    _ ≤ |lam| * (64 + 64) := by
        refine mul_le_mul_of_nonneg_left ?_ (abs_nonneg lam)
        have h1 := qgTorsionVecN_col_le n I
        have h2 := sum_torsion_col_next n I
        linarith
    _ = 128 * |lam| := by ring

theorem qgIntVec_row_le (lam : ℝ) (n : ℕ) (r : (Fin n × Fin 64) ⊕ (Fin n × Fin 64)) :
    ∑ I : Fin (n * 84), |qgIntVec lam n r I| ≤ 2 + 4 * |lam| := by
  have hl : (0 : ℝ) ≤ |lam| := abs_nonneg lam
  cases r with
  | inl s =>
      have h := qgTorsionVecN_row_le n s
      have he : ∀ I : Fin (n * 84), qgIntVec lam n (Sum.inl s) I = qgTorsionVecN n s I :=
        fun _ => rfl
      simp only [he]
      linarith
  | inr s =>
      have h := qgCouplingVec_row_le lam n s
      have he : ∀ I : Fin (n * 84), qgIntVec lam n (Sum.inr s) I = qgCouplingVec lam n s I :=
        fun _ => rfl
      simp only [he]
      linarith

theorem qgIntVec_col_le (lam : ℝ) (n : ℕ) (I : Fin (n * 84)) :
    ∑ r : (Fin n × Fin 64) ⊕ (Fin n × Fin 64), |qgIntVec lam n r I| ≤ 64 + 128 * |lam| := by
  rw [Fintype.sum_sum_type]
  have h1 : ∑ s : Fin n × Fin 64, |qgIntVec lam n (Sum.inl s) I|
      = ∑ s : Fin n × Fin 64, |qgTorsionVecN n s I| := rfl
  have h2 : ∑ s : Fin n × Fin 64, |qgIntVec lam n (Sum.inr s) I|
      = ∑ s : Fin n × Fin 64, |qgCouplingVec lam n s I| := rfl
  rw [h1, h2]
  have ha := qgTorsionVecN_col_le n I
  have hb := qgCouplingVec_col_le lam n I
  linarith

/-- **The interacting gauge-fixed 3D quantum-gravity family**: the physical hyperbolic
signature `qgKappa` in every particle's block, all `64` torsion forms of every particle,
and the nearest-neighbour torsion couplings of strength `lam`. -/
def qgIntFamily (lam : ℝ) : QgFamily where
  R n := (Fin n × Fin 64) ⊕ (Fin n × Fin 64)
  kap := qgKappaN
  vv := qgIntVec lam
  km := 1 / 16
  a := 2 + 4 * |lam|
  b := 64 + 128 * |lam|
  km_nonneg := by norm_num
  a_nonneg := by have := abs_nonneg lam; linarith
  b_nonneg := by have := abs_nonneg lam; linarith
  kap_le := qgKappaN_abs_le
  row_le := qgIntVec_row_le lam
  col_le := qgIntVec_col_le lam





/-! ## 5. Non-vacuity: the couplings really do mix two particles -/









end

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