Encyclopedia Geometry Geometry Regge Action Concrete Canonical Edge Pair Weight Reindex Of No Self Loo
ARTICLE 3 claims 3 theorems
Geometry Regge Action Concrete Canonical Edge Pair Weight Reindex Of No Self Loo
A machine-checked lemma shows that a certain sum over vertex pairs collapses to a single edge term, but only when the triangulation has no self-loops.
The edge reindexing lemma
In a finite three-dimensional triangulation, the Regge action is a discrete model of general relativity built from tetrahedra. The framework's machine-checked library of formal theorems works with a concrete version of this action. The declaration canonicalEdgePairWeightReindex_of_noSelfLoop proves a technical identity about how a sum over all ordered pairs of vertices can be re-expressed as a sum over edges.
The identity concerns a weight function defined on pairs of vertices and an edge. For a fixed edge with endpoints u and v, the weight is the square root of the squared edge length if the pair is exactly (u,v) or (v,u), and zero otherwise. The theorem states that summing this weight times the squared difference of a vertex potential over all ordered pairs (i,j) equals twice the square root of the squared edge length times the squared difference of the potential at the two endpoints. This is a reindexing result: it shows that the double sum over vertices collapses to a single term per edge.
The theorem requires the hypothesis NoSelfLoopEdges, which asserts that no edge has the same vertex at both ends. This condition is necessary because the weight function treats the two endpoints of an edge as distinct; if an edge were a self-loop, the ordered pair (u,u) would not match the pattern (u,v) with u ≠ v, and the identity would fail. The proof proceeds by unfolding the definition of the weight and applying the no-self-loop condition to rule out the degenerate case.
This lemma is a stepping stone, not a final result. It feeds into the larger theorem canonicalDirichletEqualsEdgeStencil_of_sumComm_and_reindex, which combines this reindexing with a separate commutation result to show that a canonical Dirichlet energy equals an edge-stencil energy. That equality, in turn, supports the positivity of the Hessian quadratic form, a key property for stability analysis of the Regge action.
What the declaration does not claim is just as important. It does not assert that the Regge action is physically correct, that the triangulation is non-degenerate, or that the vertex potential satisfies any equation of motion. It only establishes a combinatorial identity under the stated no-self-loop condition. The theorem is a formal statement in the library; its application to physics is a separate step.
THEOREM canonicalEdgePairWeightReindex_of_noSelfLoop · IndisputableMonolith/Geometry/ReggeActionConcrete.lean
theorem canonicalEdgePairWeightReindex_of_noSelfLoop
(K : Triangulation3D) (hK : IncidenceConsistent K)
(hNoLoop : NoSelfLoopEdges K) :
CanonicalEdgePairWeightReindexTarget K hK := by
intro ξ e
let a := (K.edgeVerts e).1
let b := (K.edgeVerts e).2
let inner := fun i : Fin K.nV =>
∑ j : Fin K.nV,
canonicalEdgePairWeight K hK i j e * (ξ i - ξ j) ^ (2 : ℕ)
have hab : a ≠ b := hNoLoop e
have hinner_a : inner a =
Real.sqrt (hK.globalSqEdge e) * (ξ a - ξ b) ^ (2 : ℕ) := by
unfold inner
rw [Finset.sum_eq_single b]
· simp [canonicalEdgePairWeight, a, b, hab]
· intro j _ hjb
have hnot1 : ¬ ((K.edgeVerts e).1 = a ∧ (K.edgeVerts e).2 = j) := by
intro h
exact hjb (by simpa [b] using h.2.symm)
have hnot2 : ¬ ((K.edgeVerts e).1 = j ∧ (K.edgeVerts e).2 = a) := by
intro h
have hba : b = a := by simpa [b] using h.2
exact hab hba.symm
simp [canonicalEdgePairWeight, hnot1, hnot2]
· intro hb
exact (hb (Finset.mem_univ b)).elim
have hinner_b : inner b =
Real.sqrt (hK.globalSqEdge e) * (ξ b - ξ a) ^ (2 : ℕ) := by
unfold inner
rw [Finset.sum_eq_single a]
· have hba : b ≠ a := fun h => hab h.symm
simp [canonicalEdgePairWeight, a, b, hab, hba]
· intro j _ hja
have hnot1 : ¬ ((K.edgeVerts e).1 = b ∧ (K.edgeVerts e).2 = j) := by
intro h
have hab' : a = b := by simpa [a] using h.1
exact hab hab'
have hnot2 : ¬ ((K.edgeVerts e).1 = j ∧ (K.edgeVerts e).2 = b) := by
intro h
exact hja (by simpa [a] using h.1.symm)
simp [canonicalEdgePairWeight, hnot1, hnot2]
· intro ha
exact (ha (Finset.mem_univ a)).elim
have hinner_other : ∀ i : Fin K.nV, i ≠ a → i ≠ b → inner i = 0 := by
intro i hia hib
unfold inner
refine Finset.sum_eq_zero ?_
intro j _
have hnot1 : ¬ ((K.edgeVerts e).1 = i ∧ (K.edgeVerts e).2 = j) := by
intro h
exact hia (by simpa [a] using h.1.symm)
have hnot2 : ¬ ((K.edgeVerts e).1 = j ∧ (K.edgeVerts e).2 = i) := by
intro h
exact hib (by simpa [b] using h.2.symm)
simp [canonicalEdgePairWeight, hnot1, hnot2]
have hb_mem : b ∈ (Finset.univ : Finset (Fin K.nV)) \ {a} := by
simp [hab.symm]
calc
(∑ i : Fin K.nV, ∑ j : Fin K.nV,
canonicalEdgePairWeight K hK i j e * (ξ i - ξ j) ^ (2 : ℕ))
= ∑ i : Fin K.nV, inner i := rfl
_ = inner a + ∑ i ∈ (Finset.univ : Finset (Fin K.nV)) \ {a}, inner i := by
exact Finset.sum_eq_add_sum_diff_singleton
(s := (Finset.univ : Finset (Fin K.nV))) (i := a)
(h := Finset.mem_univ a) (f := inner)
_ = inner a + (inner b + ∑ i ∈ ((Finset.univ : Finset (Fin K.nV)) \ {a}) \ {b}, inner i) := by
congr 1
exact Finset.sum_eq_add_sum_diff_singleton
(s := ((Finset.univ : Finset (Fin K.nV)) \ {a})) (i := b)
(h := hb_mem) (f := inner)
_ = inner a + inner b := by
have hzero :
(∑ i ∈ ((Finset.univ : Finset (Fin K.nV)) \ {a}) \ {b}, inner i) = 0 := by
refine Finset.sum_eq_zero ?_
intro i hi
have hia : i ≠ a := by
intro h
subst i
simp at hi
have hib : i ≠ b := by
intro h
subst i
simp at hi
exact hinner_other i hia hib
rw [hzero]
ring
_ = Real.sqrt (hK.globalSqEdge e) * (ξ a - ξ b) ^ (2 : ℕ) +
Real.sqrt (hK.globalSqEdge e) * (ξ b - ξ a) ^ (2 : ℕ) := by
rw [hinner_a, hinner_b]
_ = 2 * Real.sqrt (hK.globalSqEdge e) *
(ξ (K.edgeVerts e).1 - ξ (K.edgeVerts e).2) ^ (2 : ℕ) := by
have hsq : (ξ b - ξ a) ^ (2 : ℕ) = (ξ a - ξ b) ^ (2 : ℕ) := by ring
rw [hsq]
simp [a, b]
ring
THEOREM NoSelfLoopEdges · IndisputableMonolith/Geometry/ReggeActionConcrete.lean
def NoSelfLoopEdges (K : Triangulation3D) : Prop :=
∀ e : Fin K.nE, (K.edgeVerts e).1 ≠ (K.edgeVerts e).2
THEOREM canonicalDirichletEqualsEdgeStencil_of_sumComm_and_reindex · IndisputableMonolith/Geometry/ReggeActionConcrete.lean
theorem canonicalDirichletEqualsEdgeStencil_of_sumComm_and_reindex
(K : Triangulation3D) (hK : IncidenceConsistent K)
(hSum : CanonicalEdgeStencilSumCommTarget K hK)
(hReindex : CanonicalEdgePairWeightReindexTarget K hK) :
CanonicalDirichletEqualsEdgeStencilTarget K hK := by
intro ξ
unfold canonicalDirichletEnergy canonicalEdgeStencilDirichletEnergy canonicalDualWeight
rw [hSum ξ]
calc
(1 / 2) * (∑ e : Fin K.nE, ∑ i : Fin K.nV, ∑ j : Fin K.nV,
canonicalEdgePairWeight K hK i j e * (ξ i - ξ j) ^ (2 : ℕ))
= ∑ e : Fin K.nE, (1 / 2) * (∑ i : Fin K.nV, ∑ j : Fin K.nV,
canonicalEdgePairWeight K hK i j e * (ξ i - ξ j) ^ (2 : ℕ)) := by
rw [Finset.mul_sum]
_ = ∑ e : Fin K.nE,
Real.sqrt (hK.globalSqEdge e) *
(ξ (K.edgeVerts e).1 - ξ (K.edgeVerts e).2) ^ (2 : ℕ) := by
refine Finset.sum_congr rfl ?_
intro e _
rw [hReindex ξ e]
ring
What this page does not claim
The Regge action is a physically correct model of general relativity. The triangulation is non-degenerate or satisfies any geometric regularity condition. The vertex potential satisfies any equation of motion or variational principle.
Verify this page
Every tagged claim above names its theorem. To check one yourself rather than trust this page, elaborate the source module with Lean 4 and audit its axiom basis:
$ lake env lean IndisputableMonolith/Geometry/ReggeActionConcrete.lean
expected axiom basis: [propext, Classical.choice, Quot.sound] (the Lean kernel's standard three; no RS-specific axioms)
A page whose claims cannot be reproduced this way does not ship. In production, every anchor links to the exact declaration in the public source release, and this block carries the build receipt for the page itself.
Derived articles
This page is generated by a question-recursion engine: the questions its answers raise become the next pages. The current agenda, with open targets marked red:
- What is the commutation result that the reindexing lemma is paired with?
- How does the edge-stencil Dirichlet energy relate to the standard Regge action?
- What physical significance does the Hessian quadratic form have for the Regge action?
- What happens to the identity when the triangulation contains a self-loop edge?
MACHINE LAYER · GROUNDED CLAIM TABLE · CLICK TO EXPAND
THEOREM canonicalEdgePairWeightReindex_of_noSelfLoop · IndisputableMonolith/Geometry/ReggeActionConcrete.lean
theorem canonicalEdgePairWeightReindex_of_noSelfLoop (K : Triangulation3D) (hK : IncidenceConsistent K) (hNoLoop : NoSelfLoopEdges K) : CanonicalEdgePairWeightReindexTarget K hK := by intro ξ e let a := (K.edgeVerts e).1 let b := (K.edgeVerts e).2 let inner := fun i : Fin K.nV => ∑ j : Fin K.nV, canonicalEdgePairWeight K hK i j e * (ξ i - ξ j) ^ (2 : ℕ) have hab : a ≠ b := hNoLoop e have hinner_a : inner a = Real.sqrt (hK.globalSqEdge e) * (ξ a - ξ b) ^ (2 : ℕ) := by unfold inner rw [Finset.sum_eq_single b] · simp [canonicalEdgePairWeight, a, b, hab] · intro j _ hjb have hnot1 : ¬ ((K.edgeVerts e).1 = a ∧ (K.edgeVerts e).2 = j) := by intro h exact hjb (by simpa [b] using h.2.symm) have hnot2 : ¬ ((K.edgeVerts e).1 = j ∧ (K.edgeVerts e).2 = a) := by intro h have hba : b = a := by simpa [b] using h.2 exact hab hba.symm simp [canonicalEdgePairWeight, hnot1, hnot2] · intro hb exact (hb (Finset.mem_univ b)).elim have hinner_b : inner b = Real.sqrt (hK.globalSqEdge e) * (ξ b - ξ a) ^ (2 : ℕ) := by unfold inner rw [Finset.sum_eq_single a] · have hba : b ≠ a := fun h => hab h.symm simp [canonicalEdgePairWeight, a, b, hab, hba] · intro j _ hja have hnot1 : ¬ ((K.edgeVerts e).1 = b ∧ (K.edgeVerts e).2 = j) := by intro h have hab' : a = b := by simpa [a] using h.1 exact hab hab' have hnot2 : ¬ ((K.edgeVerts e).1 = j ∧ (K.edgeVerts e).2 = b) := by intro h exact hja (by simpa [a] using h.1.symm) simp [canonicalEdgePairWeight, hnot1, hnot2] · intro ha exact (ha (Finset.mem_univ a)).elim have hinner_other : ∀ i : Fin K.nV, i ≠ a → i ≠ b → inner i = 0 := by intro i hia hib unfold inner refine Finset.sum_eq_zero ?_ intro j _ have hnot1 : ¬ ((K.edgeVerts e).1 = i ∧ (K.edgeVerts e).2 = j) := by intro h exact hia (by simpa [a] using h.1.symm) have hnot2 : ¬ ((K.edgeVerts e).1 = j ∧ (K.edgeVerts e).2 = i) := by intro h exact hib (by simpa [b] using h.2.symm) simp [canonicalEdgePairWeight, hnot1, hnot2] have hb_mem : b ∈ (Finset.univ : Finset (Fin K.nV)) \ {a} := by simp [hab.symm] calc (∑ i : Fin K.nV, ∑ j : Fin K.nV, canonicalEdgePairWeight K hK i j e * (ξ i - ξ j) ^ (2 : ℕ)) = ∑ i : Fin K.nV, inner i := rfl _ = inner a + ∑ i ∈ (Finset.univ : Finset (Fin K.nV)) \ {a}, inner i := by exact Finset.sum_eq_add_sum_diff_singleton (s := (Finset.univ : Finset (Fin K.nV))) (i := a) (h := Finset.mem_univ a) (f := inner) _ = inner a + (inner b + ∑ i ∈ ((Finset.univ : Finset (Fin K.nV)) \ {a}) \ {b}, inner i) := by congr 1 exact Finset.sum_eq_add_sum_diff_singleton (s := ((Finset.univ : Finset (Fin K.nV)) \ {a})) (i := b) (h := hb_mem) (f := inner) _ = inner a + inner b := by have hzero : (∑ i ∈ ((Finset.univ : Finset (Fin K.nV)) \ {a}) \ {b}, inner i) = 0 := by refine Finset.sum_eq_zero ?_ intro i hi have hia : i ≠ a := by intro h subst i simp at hi have hib : i ≠ b := by intro h subst i simp at hi exact hinner_other i hia hib rw [hzero] ring _ = Real.sqrt (hK.globalSqEdge e) * (ξ a - ξ b) ^ (2 : ℕ) + Real.sqrt (hK.globalSqEdge e) * (ξ b - ξ a) ^ (2 : ℕ) := by rw [hinner_a, hinner_b] _ = 2 * Real.sqrt (hK.globalSqEdge e) * (ξ (K.edgeVerts e).1 - ξ (K.edgeVerts e).2) ^ (2 : ℕ) := by have hsq : (ξ b - ξ a) ^ (2 : ℕ) = (ξ a - ξ b) ^ (2 : ℕ) := by ring rw [hsq] simp [a, b] ringThe theorem states that summing this weight times the squared difference of a vertex potential over all ordered pairs (i,j) equals twice the square root of the squared edge length times the squared difference of the potential at the two endpoints. canonicalEdgePairWeightReindex_of_noSelfLoop · IndisputableMonolith/Geometry/ReggeActionConcrete.leanTHEOREM NoSelfLoopEdges · IndisputableMonolith/Geometry/ReggeActionConcrete.lean
def NoSelfLoopEdges (K : Triangulation3D) : Prop := ∀ e : Fin K.nE, (K.edgeVerts e).1 ≠ (K.edgeVerts e).2The theorem requires the hypothesis NoSelfLoopEdges, which asserts that no edge has the same vertex at both ends. NoSelfLoopEdges · IndisputableMonolith/Geometry/ReggeActionConcrete.leanTHEOREM canonicalDirichletEqualsEdgeStencil_of_sumComm_and_reindex · IndisputableMonolith/Geometry/ReggeActionConcrete.lean
theorem canonicalDirichletEqualsEdgeStencil_of_sumComm_and_reindex (K : Triangulation3D) (hK : IncidenceConsistent K) (hSum : CanonicalEdgeStencilSumCommTarget K hK) (hReindex : CanonicalEdgePairWeightReindexTarget K hK) : CanonicalDirichletEqualsEdgeStencilTarget K hK := by intro ξ unfold canonicalDirichletEnergy canonicalEdgeStencilDirichletEnergy canonicalDualWeight rw [hSum ξ] calc (1 / 2) * (∑ e : Fin K.nE, ∑ i : Fin K.nV, ∑ j : Fin K.nV, canonicalEdgePairWeight K hK i j e * (ξ i - ξ j) ^ (2 : ℕ)) = ∑ e : Fin K.nE, (1 / 2) * (∑ i : Fin K.nV, ∑ j : Fin K.nV, canonicalEdgePairWeight K hK i j e * (ξ i - ξ j) ^ (2 : ℕ)) := by rw [Finset.mul_sum] _ = ∑ e : Fin K.nE, Real.sqrt (hK.globalSqEdge e) * (ξ (K.edgeVerts e).1 - ξ (K.edgeVerts e).2) ^ (2 : ℕ) := by refine Finset.sum_congr rfl ?_ intro e _ rw [hReindex ξ e] ringThis lemma is a stepping stone, not a final result. canonicalDirichletEqualsEdgeStencil_of_sumComm_and_reindex · IndisputableMonolith/Geometry/ReggeActionConcrete.lean