A finite formalization of the finite part of the hard-sphere NBC
proof. points is a finite configuration ledger, trees is a finite list
of candidate spanning trees, and region t x is the NBC ownership test.
The central theorem is a literal finite Tonelli/double-counting proof:
sum_x weight(x) * NBCMultiplicity(x)
= sum_t NBCRegionWeight(t).
No measure theorem, graph theorem, or opaque assumption is imported here. The continuous hard-sphere interpretation is obtained by replacing the finite weight sum with Lebesgue integration after this algebraic identity.
Compatibility name for the standard sum of a list of natural numbers.
Equations
- HsVirial.sumNat xs = xs.sum
Instances For
Count the listed tree regions containing the point, including repeated tree entries.
Equations
- HsVirial.nbcMultiplicity trees region x = HsVirial.sumNat (List.map (fun (t : T) => HsVirial.indicator (region t x) 1) trees)
Instances For
Sum point weights over one tree region.
Equations
- HsVirial.nbcRegionWeight points weight region t = HsVirial.sumNat (List.map (fun (x : X) => HsVirial.indicator (region t x) (weight x)) points)
Instances For
Sum point weights multiplied by the number of tree regions containing the point.
Equations
- HsVirial.pointwiseNbcWeight points trees weight region = HsVirial.sumNat (List.map (fun (x : X) => weight x * HsVirial.nbcMultiplicity trees region x) points)
Instances For
Sum the weighted sizes of all listed tree regions.
Equations
- HsVirial.nbcVolumeSum points trees weight region = HsVirial.sumNat (List.map (HsVirial.nbcRegionWeight points weight region) trees)
Instances For
Compatibility name for the standard sum of a list of integers.
Equations
- HsVirial.sumInt xs = xs.sum
Instances For
The alternating integer sign associated with a natural-number size.
Instances For
This is the finite active-graph restriction used before the NBC step. The
list graphs represents the complete finite list of edge subsets. A Mayer
term is zero unless every edge is active; otherwise its product is the
parity sign of the number of edges.
The parity contribution of a connected edge list with every edge active.
Equations
- HsVirial.signedMayerTerm connected active edges = if connected edges = true then if HsVirial.allActive active edges = true then HsVirial.paritySign edges.length else 0 else 0
Instances For
Sum signed Mayer terms over a list of candidate edge sets.
Equations
- HsVirial.signedMayerSum graphs connected active = HsVirial.sumInt (List.map (HsVirial.signedMayerTerm connected active) graphs)
Instances For
The next block formalizes the sign-reversing part independently of graph
representation. For a fixed ordered graph, all is the finite list of
connected edge sets, good is the finite list of NBC trees, and badPairs
is produced by the least broken-circuit toggle described in the TeX proof.
The theorem checks, in the kernel, that every paired bad contribution
disappears.
The sum of parity signs for the sizes of a list of objects.
Equations
- HsVirial.signedList xs size = HsVirial.sumInt (List.map (fun (a : A) => HsVirial.paritySign (size a)) xs)
Instances For
A decomposition into surviving objects and pairs with opposite parity contributions.
- all : List A
The full list before cancellation.
- good : List A
The surviving list of no-broken-circuit objects.
Pairs whose signed contributions cancel.
- size : A → ℕ
The size determining the parity sign of each object.
- rank : ℕ
The common size of the surviving objects.
- opposite (p : A × A) : p ∈ self.badPairs → paritySign (self.size p.1) + paritySign (self.size p.2) = 0
- goodParity (a : A) : a ∈ self.good → paritySign (self.size a) = paritySign self.rank