Half of the hardness variance sits not in the scaffold but in the signs. This report measures it fully up to Fourier degree 12 — and finds exactly two directions there, both of which do the same thing: shift the satisfiability threshold.
A real example, n = 12, m = 26. Each column is a clause, each row a variable; stands for a positive, for a negative occurrence. The two pictures differ in 25 of 78 signs. They describe the same instance — and every quantity in this report is on both of them digit-for-digit identical. That is the condition a sign-based quantity must satisfy before it can measure anything at all.
The task lays out a ladder ordered by degree: four-cycle, six-cycle, general cycle of length 2ℓ. On the face of it, it looks infinite. It is not.
Three consequences, and each one saves a measurement:
And the point the task itself points toward: the imbalance Σv(pos−neg)² is the quadratic form of A at the fixed vector 𝟙 — every clause pair with weight one.
The task states: "The failure of the imbalance does not refute degree 2. It refutes uniform weighting. What is sought is not a new quantity, but the right weight." The right weight is μmax(M) — and it has been measured. See section 05.
Checked twice, independently. The premise holds at α = 4.267 in every case examined — n = 50, 100, 150, 200, five scaffolds each, not a single variable with more than one component. And the reconstruction is carried out explicitly, from A and H alone, and matches the original up to gauge at n = 60, 120, and 200.
With this, the search space is no longer "arbitrary functions of 2,559 signs" but exactly: functions of a sparse 853×853 matrix. And in this light, one sees what every quantity in this report has in common — each is a global sum over A: a trace, a quadratic form at the fixed vector 𝟙, a moment of A𝟙, a boundary eigenvalue. What has been measured are the means of A, in many variants. The corner is exhausted; the space is not.
The spelled-out follow-up task is in
GENESIS_III.md: the ladder on regular scaffolds (cheap, with a
precedent), extreme values instead of means of the same matrix
— the bottleneck of a refutation is local, not a mean over 853 clauses —,
and the largest open question from this data: what the non-vanishing residual
of the variance actually is.
Measurement takes place at a fixed scaffold over many signatures. This keeps Σv deg(v)² constant, as well as pairs2 and every other scaffold quantity: centering within scaffolds removes the degree-spread confound exactly rather than approximately. SAT and UNSAT are never pooled.
Against an independent recomputation. A second program
recomputes every quantity from the bare variable triples anew — not translated
from the Rust code, but rewritten from the definitions, using
numpy.linalg.eigvalsh instead of a hand-written eigensolver. At n = 200,
m = 853, two seeds: all 22 quantities agree — the
integer-valued ones digit-for-digit, the spectral ones to 10⁻¹⁰ relative.
The calibration probe. 320 pairs per seed range, σ against g·σ. Largest absolute deviation at frust1, frust4, frust6, imbalance, imbalance4, tr(A²), tr(A³), tr(M²)…tr(M⁶), μmax, μmin: 0. Satisfiability verdict identical in 320 of 320 cases, in both seed ranges.
And it failed once, during construction. The first version determined μmax and μmin with a power iteration; that gave values for M and for D·M·D that differed at the sixth digit, because the small eigenvalues of M lie close together. Without the probe, the spectral quantities would have measured noise. Replaced by a cyclic Jacobi method, exact from then on.
The third check is at the same time the noise floor: the same formula under renaming is, by gauge symmetry, the same instance — whatever the solver still counts differently in conflicts is its own noise. It is completely different on the two sides of the threshold — and that decides what is explainable at all.
| Side | N | σ²between | σ²within | σ²own | Cap |
|---|---|---|---|---|---|
| UNSAT, seed A | 1,197 | 0.130 | 0.229 | 0.017 | r² ≤ 0.928 |
| UNSAT, seed B | 1,191 | 0.128 | 0.213 | 0.017 | r² ≤ 0.920 |
| SAT, seed A | 1,203 | 0.087 | 2.936 | 2.045 | r² ≤ 0.303 |
| SAT, seed B | 1,209 | 0.162 | 2.981 | 1.825 | r² ≤ 0.388 |
The SAT side is 61 to 70 % solver noise. Whoever pools the sides, or estimates the noise floor jointly, will read noise there as structure.
A null result without a working positive control is not a finding. Three families, in ascending order of sharpness.
σ ≡ +1 on 10 scaffolds, 80 instances: frust1 = frust4 = frust6 = 0, all instances satisfiable, zero conflicts. And imbalance = Σv deg(v)² in all 80 rows — the check on the imbalance identity at the boundary point, where pos − neg = deg.
Each variable has a preferred polarity, and each occurrence follows it with probability p. All quantities respond monotonically; frust1 and imbalance with rank correlation ±1.000 across eight levels. At p = 0.50, frust4 = 83.3 against the prediction pairs2/2 = 85.
The caveat is the real payoff: between p = 0.50 and p = 0.70, hardness drops by 11 bits — a factor of 2000 — while frust4 moves only from 83.3 to 80.8, less than half a standard deviation of its own spread. The imbalance meanwhile triples. Already the control shows where frust4 is not looking.
Over a 3-regular graph, satisfiability is decided solely by the charge parity, and flipping one charge replaces the four clauses of a node with the four complementary ones: the same scaffold, different signs. The sharpest control of the sign axis one can imagine.
| nodes = 40, n = 60, m = 160 | frust1 | frust4 | frust6 | imbalance | tr(A³) | μ_max | μ_min | SAT | log₂ K |
|---|---|---|---|---|---|---|---|---|---|
| charge even | 480 | 0 | 377.6 | 0 | 4,800 | 8.0 | 8.0 | 1.00 | 0.23 |
| charge odd | 480 | 0 | 377.6 | 0 | 4,800 | 8.0 | 8.0 | 0.00 | 11.49 |
| fair random signature, same scaffold | 472.8 | 0 | 537.1 | 516.3 | 20,416 | 16.5 | 1.3 | 1.00 | 2.85 |
Every measured invariant is identical between SAT and UNSAT — paired per graph, Δ = 0.000 across all ten and both quantities. Hardness differs by eleven bits. The instrument is therefore not blind: the third row shows it massively distinguishes, on the same scaffold, between Tseitin and a fair signature. It is the object that is built this way.
So tr(Aℓ) for Tseitin is fixed by n, m, and the degree alone. Checked and measured, both times: tr(A³) = 45·125 − 75·27 = 3,600 at n = 45 and 4,800 at n = 60. The entire cycle profile is degenerate there. Even frust1, the only measured quantity without cycle support, is blind: in each parity class exactly two of the four masks have the bit e set, so out of the 16 pairs per edge, exactly 8 always disagree — frust1 = pairs1/2, exactly, measured 480 of 960 and 360 of 720.
The Tseitin family is therefore not a failed control but the exactly worked-out counterexample: a formula family in which satisfiability provably sits entirely in the sign, and yet in which every sign invariant measured here is constant. Whoever searches for a local sign predictor now knows there are objects on which none can exist.
Two seed ranges of 40 scaffolds each with 60 signatures, 4,800 main rows and 640 calibration rows. No run hit the conflict budget. Everything centered within the scaffolds, unsatisfiable instances, standard error of r under the null hypothesis 0.029 in each case.
| Rung · quantity | Fourier degree | r (seed A) | r (seed B) | r² |
|---|---|---|---|---|
| 0 · imbalance Σ(pos−neg)² | 2 | +0.266 | +0.287 | 0.071 |
| 1a · frust1, width-4 sparks | 2 | −0.273 | −0.290 | 0.074 |
| 1b · frust4, width-3 sparks | 4 | −0.232 | −0.191 | 0.054 |
| 2 · imbalance4 Σ(pos−neg)⁴ | 4 | +0.245 | +0.260 | 0.060 |
| 3 · frust6, six-cycles | 6 | +0.068 | +0.121 | 0.005 |
| 3′ · tr(A³) | 6 | +0.235 | +0.168 | 0.055 |
| 4 · tr(M³), cycles of length 6 | 6 | +0.236 | +0.173 | 0.056 |
| 4 · tr(M⁴), length 8 | 8 | +0.230 | +0.156 | 0.053 |
| 4 · tr(M⁵), length 10 | 10 | +0.218 | +0.142 | 0.048 |
| 4 · tr(M⁶), length 12 | 12 | +0.205 | +0.130 | 0.042 |
| 4 · μ_max(M) — the best weight | all | +0.060 | +0.050 | 0.004 |
| 4 · μ_min(M) | all | +0.000 | −0.069 | 0.000 |
| — · order d(50 %) | — | +0.165 | +0.150 | 0.027 |
frust4 is a hit. Eight and 6.6 standard deviations across two independent seed ranges, and with the predicted sign: more frustrated four-cycles means more width-3 resolvents means easier. It is the first structural sign quantity in this project that does anything at all — and it is not the imbalance:
Rungs 3 and 4 contribute nothing of their own: tr(M²) correlates with frust4 at −0.997 (that is Theorem V3, exactly), tr(M³) at −0.976, tr(M⁶) still at −0.817. They are frust4 seen again in longer cycles, with diminishing quality. And μmax(M) — the right weight — contributes nothing. That is the sharpest single statement of this section, because μmax is, by V2, exactly the quantity the task is looking for.
| Model (R² of within-scaffold variance, UNSAT) | k | A → B | B → A |
|---|---|---|---|
| frust4 only | 1 | 0.035 | 0.052 |
| imbalance only | 1 | 0.083 | 0.071 |
| μ_max(M) only | 1 | 0.002 | 0.004 |
| d(50 %) only | 1 | 0.021 | 0.026 |
| rung 1 — frust1 + frust4 | 2 | 0.124 | 0.133 |
| rungs 1–4 — everything | 12 | 0.131 | 0.139 |
| rungs 1–4 + d(50 %) | 13 | 0.134 | 0.142 |
On the SAT side, all that survives out of sample is the imbalance (0.040 and 0.063); frust4 delivers exactly 0.000, and rungs 2 through 4 make the prediction worse rather than better: 0.043 → 0.038 and 0.064 → 0.052. More degrees of freedom, worse prediction — the signature of overfitting to noise.
For each signature, the nearest signature of the same scaffold in the twelve-dimensional invariant space, mean distance 2.2 σ. If the invariants capture hardness, such pairs must lie close together.
| σ²(hardness) nearest pairs | arbitrary pairs | ratio | |
|---|---|---|---|
| UNSAT, seed A | 0.190 | 0.241 | 0.789 |
| UNSAT, seed B | 0.200 | 0.234 | 0.854 |
| SAT, seed A | 2.982 | 3.138 | 0.950 |
| SAT, seed B | 2.905 | 3.170 | 0.917 |
Two signatures that nearly agree on all twelve invariants still retain 79 to 85 % of the full hardness variance between them on the UNSAT side — the same number as the out-of-sample regression, arrived at by a route that assumes no linear form.
The only point in the task where a causal chain is available instead of a correlation. frust4 is not a correlate of width-3 sparks but their exact count: two clauses with exactly two shared variables have a width-3 resolvent exactly when they agree on exactly one of the two. So — does frust4 predict whether the width-3 closure ignites?
And no other quantity does. At n = 53, within scaffolds, against ignites: frust4 +0.308 — the imbalance, the quantity with the strongest pull on CDCL hardness at n = 200, sits at +0.006 at N = 1,183. frust6 −0.020, frust1 +0.007, imbalance4 +0.013. The two directions of the sign axis belong to two different mechanisms.
A side finding, unplanned: p₃(53) = 0.527. The earlier finding placed the transition, with a completely different measurement series, at n₅₀ = 52.9. The instrument reproduces the constant without it being built in anywhere.
While the ignition probability falls from 90 % to practically zero, the hardness correlation stays flat and then keeps growing: −0.172 / −0.237 / −0.232 / −0.293 at n = 100 / 150 / 200 / 250, i.e. +0.072 per hundred variables. The width-3 closure is dead at n = 200, but the frust4 effect on hardness is not. The derivation that put frust4 on the agenda in the first place explains the ignition — it does not explain what frust4 does at this project's working scale.
The sharpest objection to any hardness quantity: it merely shifts α_c, and then the instance simply sits deeper in the unsatisfiable phase — and deep in is easy to refute. For frust4 to pass this test, it must be available as a control knob. It is none, so it is instead discarded and redrawn until frust4 falls within a given z-window. That is a condition, not seeding: frust4 is gauge-invariant, and a condition on it cannot favor any assignment at all — unlike the imbalance, which can only be produced through partial planting.
| n = 150, 900 instances each | z(frust4) | frust4 vs. pairs2 ≈ 165 | α_c |
|---|---|---|---|
| low tercile | −3.28 | 61.4 | 4.3513 |
| no selection | −0.01 | 82.4 | 4.2818 |
| high tercile | +3.26 | 103.3 | 4.2244 |
The threshold really does move, by −0.127 across a lever of 6.5 standard deviations — about a third of the pull of the degree spread, which shifts it by 0.347. So each group is remeasured at its own α_c plus a fixed offset, 120 instances each. The UNSAT fractions match pairwise: the groups really do sit at the same point of the phase diagram.
By height, frust4 lands near the imbalance — by shape, it does not. The imbalance decays with increasing distance (1.24 → 1.09 → 1.03), frust4 does not (1.21 → 1.19 → 1.28). At Cohen's d of 0.58 / 0.55 / 0.76 and N = 110 to 120 per group, this is not noise (t = 4.3 to 5.9).
The scan also delivers both groups at equal α, not only at equal threshold distance. The difference between the two comparisons is exactly what the threshold shift contributes — without extrapolation, without a slope estimate, without a model.
| α | N low | N high | log₂K low | log₂K high | difference | factor |
|---|---|---|---|---|---|---|
| 4.35 | 86 | 114 | 11.64 | 11.07 | +0.57 | 1.48 |
| 4.50 | 121 | 141 | 11.34 | 10.75 | +0.60 | 1.51 |
| 4.65 | 141 | 149 | 10.99 | 10.47 | +0.52 | 1.44 |
This is the correction to the obvious reading. frust4 does not act predominantly through the threshold. The residual is a constant relative effect of about 3 % of hardness across n = 100 to 250, while the threshold share halves. The split moves from 48/52 to 27/73 because the threshold vanishes — not because the residual grows. For the imbalance, by contrast, the residual decays to 1.03 and the threshold share goes to 100 %.
A caveat that belongs with this comparison. The three number series were produced with different levers: the degree spread across families σ = 0 versus σ = 5.5, the imbalance across the seeding degree p, frust4 across a rejection draw at ±3.3 σ. What is comparable is the shape — does the residual decay with distance or not — not the absolute magnitude of the factors.
The task's ladder orders cycles. That is not the whole space the gauge condition permits: it requires even degree only at variable nodes. If a support also has even degree at every clause node, it is a cycle — otherwise it has an even number of odd clause nodes, and the case of two is a path in the incidence graph.
That is precisely what Ak counts: (Ak)[c][c′] sums the paths of length k with degree 2 at every intermediate clause and degree 1 at the ends. The canonical aggregate is therefore path(k) = 𝟙ᵀ·A^k·𝟙.
That is G4 in new notation, and it finally places the imbalance: it is the beginning of the path branch, not a special case. Checked against the data: max |path(1) − (imbalance − 3m)| = 0 across all 4,800 instances.
The obvious move would have been to pit G4 and V2 directly against each other: ⟨𝟙, u₁⟩², the overlap of uniform weighting with the best one. That is a gauge invariant — and not a measurable quantity. The spectral gap μ₁ − μ₂ sits in the first percentile at 0.105 and at the minimum at 0.023; with μ₁ nearly degenerate, u₁ rotates freely within the degenerate subspace. The calibration probe caught it at the third digit, and the quantity was discarded.
The path sums carry the same information robustly. With w_i = ⟨𝟙, u_i⟩² and Σ w_i = m, path(k)/m = E[λ^k] under the 𝟙-weighted spectral density of A — the imbalance is its mean, everything further is a higher moment. Moments are polynomials in A and insensitive to degeneracies.
The longer paths are the imbalance in stretched-out form — r to it falls from +0.893 at k = 2 to +0.559 at k = 6, and the correlation to hardness fades with it. Out of sample, all five together contribute +0.0002 and +0.0078 beyond imbalance + frust4. So both branches of the classification are measured, to equal depth, and both are empty on the UNSAT side.
| SAT, R² of within-scaffold variance, out of sample | k | A → B | B → A |
|---|---|---|---|
| imbalance only (= path(1), the mean) | 1 | 0.0400 | 0.0630 |
| path(2) only | 1 | 0.0032 | 0.0212 |
| imbalance + variance of density | 2 | 0.0802 | 0.0879 |
| imbalance + variance + skew | 3 | 0.0819 | 0.1010 |
| Placebo: imbalance + frust4 + 5 random columns | 7 | 0.0329 | 0.0554 |
The sign axis has a third direction, and it lives only on the SAT side. The imbalance is the mean of the 𝟙-weighted spectral density; its variance is new and independent — partial correlation +0.167 and +0.208 across two seed ranges — and doubles the out-of-sample prediction. The placebo decides it: five columns of noise make it worse, five path sums make it better. No extra degrees of freedom, signal.
For context: the cap on the SAT side, due to the solver noise, sits at r² ≤ 0.303 / 0.388. Of that, the imbalance alone reached 13 to 16 %, with the variance it is 23 to 28 %. On the UNSAT side, this same quantity contributes nothing (0.1216 → 0.1227) — and precisely that needs explaining. The next section resolves it.
The counter-check is harder here than for frust4, because r(imbalance, variance) = +0.898: a rejection draw on the variance alone would drag the mean with it, and that is provably pure threshold. The lever must move the variance while holding the imbalance fixed — per scaffold, a calibration sample of 4,000 signatures, then the regression path(2) ~ imbalance, then reject on the residual. Achieved: 3.65 σ variance lever at 0.19 σ difference in the imbalance.
First: yes, and strongly — almost as strong as the imbalance itself, nine times stronger than frust4, and with the opposite sign to the imbalance, with which it correlates at +0.90.
Second: but not only. Each group at its own α_c, 250 instances each, both sides of the threshold:
| distance | side | N | log₂K low | log₂K high | difference | t |
|---|---|---|---|---|---|---|
| α_c − 0.40 | SAT | 250/247 | 7.64 | 8.07 | −0.425 | −2.7 |
| α_c − 0.25 | SAT | 241/234 | 8.40 | 9.17 | −0.769 | −4.6 |
| α_c − 0.10 | SAT | 189/177 | 9.39 | 9.84 | −0.450 | −2.7 |
| α_c + 0.25 | UNSAT | 229/231 | 10.71 | 11.15 | −0.438 | −9.1 |
| α_c + 0.50 | UNSAT | 248/249 | 10.22 | 10.65 | −0.430 | −10.6 |
The sign test decides. A pure threshold quantity flips sign between the sides — deeper in UNSAT is easier, deeper in SAT is also easier. The residual of the variance does not: −0.548 bit on the SAT side, −0.434 on the UNSAT side, both times "more variance is harder", across five distances without decay. No threshold pattern.
And this explains the null result above. At fixed α, the total effect splits into:
On the UNSAT side, the two nearly cancel out; on the SAT side, they add up. The variance is not a SAT quantity — the UNSAT null result was a cancellation, not an absence.
A density artifact is ruled out: the groups sit at absolute α values 0.29 apart. A pure density effect would act oppositely on the two sides — more clauses make UNSAT easier and SAT harder. What is measured is that the low group is easier on both sides. What remains open: the logistic slopes of the groups differ by 7 %, so "equal distance in α" is not quite the same distance in units of transition width. The sign test does not depend on this.
Zero odd clause nodes are the cycles, two are the paths. Four is a third case, and its shape follows from the gauge condition: because every variable needs even degree, a leaf of the support can only be a clause node — four odd therefore means one clause node with three or four branches.
The first two are identities and run along as a check — across all 4,800 instances with max |Δ| = 0. From k = 3 on it is new, and not merely formally: Σ_c x_c³ is not 𝟙ᵀA³𝟙 (on one example −2,074 versus 17,360). The star branches at a clause; the path runs through it.
The raw moments are the paths in different notation — for a bell-shaped distribution, m₃ ≈ 3μσ² + μ³, and measured is r(Σx⁴, variance) = +0.95. What is new sits in the shape, i.e. in the standardized moments.
| Model (UNSAT, R² of within-scaffold variance) | k | A → B | B → A |
|---|---|---|---|
| imbalance + frust4 + variance (the paths) | 3 | 0.1227 | 0.1313 |
| + skew and kurtosis of A𝟙 | 5 | 0.1263 | 0.1370 |
| + all six star moments | 9 | 0.1323 | 0.1455 |
| + only the skew of A²𝟙 | 4 | 0.1317 | 0.1454 |
| Placebo: + 6 random columns | 9 | 0.1200 | 0.1282 |
Not empty, but small. +0.010 and +0.014 beyond the paths — a tenth of what paths and cycles together contribute. The placebo confirms it is signal. And practically all of it sits in one quantity: the skew of A²𝟙. On the SAT side: +0.001, i.e. nothing.
The counter-checks each cost their own measurement setup. It can be done cheaper: whoever shifts α_c must, at a fixed scaffold and fixed α, predict satisfiability. The core measurement has 4,800 such instances, half SAT and half UNSAT — the test costs nothing and measures every quantity at once.
| Quantity | degree | r(·, unsat) raw | at fixed imbalance | reading |
|---|---|---|---|---|
| imbalance | 2 | −0.432 / −0.419 | — | the threshold quantity itself |
| variance | 4 | −0.282 / −0.240 | +0.267 / +0.320 | strongly threshold |
| path(3) | 6 | −0.237 / −0.194 | +0.219 / +0.267 | strongly threshold |
| frust4 | 4 | +0.106 / +0.062 | +0.120 / +0.065 | weakly threshold |
| skew (A²𝟙) | 12 | −0.024 / −0.034 | +0.004 / −0.011 | not a threshold quantity |
| μ_max(M) | all | −0.005 / +0.010 | −0.017 / −0.003 | not a threshold quantity |
The test independently confirms both costly counter-checks — the sign of the variance flips when the imbalance is held fixed (−0.28 raw, +0.29 partial), matching dα_c/d(variance) = −0.150, and frust4 lands nine times weaker, exactly as measured there.
And it settles the stars. The skew of A²𝟙 does not predict satisfiability — its contribution of +0.010 is the first on the sign axis that lies entirely beyond the phase location. Small, but clean.
A suggestion from outside: also measure the instance with all variables negated, and run it through under "all true" and "all false". Both parts have a short theoretical answer — and both deserve to be shown rather than merely asserted. 280 instances, four views.
"All variables negated" is the gauge g ≡ −1 and therefore not a new measurement point but the same point under a different name. Measured: imbalance, frust4, tr(M³), triangle3 and excess with max |Δ| = 0 across all four views, satisfiability verdict identical in 280 of 280 instances.
"All true" counts the purely negative clauses — a support with degree 1 at each variable, so by the gauge condition not an invariant:
| View | purely negative | purely positive | Δ log₂K, UNSAT | SAT |
|---|---|---|---|---|
| original | 106.9 | 106.2 | — | — |
| all negated (g ≡ −1) | 106.2 | 106.9 | +0.010 ± 0.015 | −0.164 ± 0.176 |
| random gauge | 106.4 | 107.2 | +0.014 ± 0.014 | −0.030 ± 0.163 |
| majority gauge | 50.8 | 194.3 | +0.033 ± 0.013 | −0.060 ± 0.164 |
Under g ≡ −1, the two numbers swap exactly, in 280 of 280 instances. Under the majority gauge they tip to 51 versus 194, while the formula itself does not change.
A side finding that supports every number in this report. The guess seemed natural that the majority gauge would help the solver — under it, "all true" satisfies the most clauses, and CDCL has a pre-assignment heuristic. It does not help: factor 1.02 on the UNSAT side, and in the harder direction, 0.96 on the SAT side at t = −0.4. So the hardness measure is neutral not only under random renaming but also under the canonical one.
There is a version of the suggestion that is invariant, and it is built differently from the whole ladder: first fix the gauge canonically, then measure. With s_v = sign(pos_v − neg_v), σ(c,v)·s_v is invariant, even though neither factor is on its own — and it is not a character, because a sign of a sum is embedded in it. What is measured is how many literals per clause stand against their own majority (a tie gets weight ½, since any other tiebreak would otherwise be arbitrary).
The sum is old — r(counter-sum, imbalance) = −0.91. New would be the clustering. Out of sample the profile sits between baseline and placebo, and the two directions disagree in sign (−0.008 versus +0.007). That is exactly how one recognizes noise: real signal improves both, as the stars do. Empty.
What the attempt still delivered: confirmation of gauge neutrality even under a targeted renaming — and an invariant of a different kind that is likewise empty. That narrows the space further in which the remaining 85 % can still sit.
Thanks to Theorem V1, the whole ladder could be measured in one pass instead of four. Connected supports before unconnected ones, short before long — the order the task itself prescribes.
The task holds out a theorem in prospect: if rungs 1 through 4 together contribute nothing beyond noise out of sample, then hardness is a high-degree function of the signature, and no local sign quantity can ever predict it.
The premise is not met. The ladder delivers R² = 0.131 and 0.139, far above any noise level. The theorem is therefore not claimed. What stands instead is sharper, because it is more precise.
To this is added the variance of the 𝟙-weighted spectral density (07b) and, small but clean beyond the phase location, the skew of A²𝟙 (07c). Everything else is one of these four in different notation, or empty. The imbalance acts only through the satisfiability threshold; frust4, half so. The scaffold axis shifts the threshold too — and retains a factor of 15 beside it, frust4 retains 1.2. The difference between the two axes is thus quantitative and large, not qualitative.
The sign invariants ordered by support length, up to Fourier degree 12 — i.e. the full frustration profile of all incidence cycles up to length 12, in the form of the five trace moments tr(M²)…tr(M⁶), plus the four boundary eigenvalues — explain, at n ≤ 250, roughly a seventh of the sign variance, and roughly half of that is the position relative to the satisfiability threshold. The path via the cycles has been walked.
Not measured is the entirety of the characters of one degree; their number is astronomical. What is measured is the order the task prescribes, plus two reweightings that were specifically sought — and both are empty.
Not more cycles and not more weights. If 85 % of the sign axis does not sit in the cycles, then it sits in supports that are not cycles — characters χ_T with odd degree at clause nodes. The gauge condition explicitly permits them; it constrains only the variable nodes. Their count is always even: |T| = Σv deg(v) is even as a sum of even numbers, and |T| = Σc deg(c). The case of two is frust1, and frust1 is the imbalance. The next rung has four, and it is unmeasured.
And a warning to go with it, from the material itself: the obvious thought would be that exactly these supports see the charge on Tseitin. The simplest one of them provably does not. A successor who goes there has, with Tseitin, a positive control sharp enough to stop them — and that is the reason to build it before measuring.
Full report with all numbers, proofs, and checking rules:
VORZEICHEN.md. Tools:
solver/src/vorzeichen_mass.rs (all quantities, the calibration
probe, the Jacobi eigensolver), vorzeichen_nachrechnung.py (the independent
recomputation), vorzeichen_laeufe.sh (all measurement runs in the
order they were run). Raw data in mess_vorzeichen/.
"""
Independent recomputation of all sign quantities.
Not translated from the Rust code, but rewritten from the DEFINITIONS in
`GENESIS_VORZEICHEN.md` G2 through G5. An instrument that
only confirms itself has confirmed nothing.
Usage: vorzeichen_nachrechnung.py < output_of_vorzeichen_probe
"""
import sys, itertools
import numpy as np
def lies(text):
z = text.strip().split("\n")
n, m = map(int, z[0].split())
tri, sg = [], []
for i in range(1, m + 1):
t = list(map(int, z[i].split()))
tri.append(t[:3]); sg.append(t[3:])
rest = {}
for zeile in z[m + 1:]:
for stueck in zeile.split()[1:]:
k, v = stueck.split("=")
rest[k] = float(v)
return n, m, np.array(tri), np.array(sg), rest
def rechne(n, m, tri, sg):
w = {}
# --- occurrence list ---
occ = {v: [] for v in range(1, n + 1)}
for c in range(m):
for i in range(3):
occ[tri[c][i]].append((c, i))
# --- u(c,c';v) per shared variable, ordered by overlap ---
gem = {}
for v in range(1, n + 1):
for (c, i), (d, j) in itertools.combinations(occ[v], 2):
key = (min(c, d), max(c, d))
gem.setdefault(key, []).append((v, sg[c][i] * sg[d][j]))
p1 = [k for k, x in gem.items() if len(x) == 1]
p2 = [k for k, x in gem.items() if len(x) == 2]
dp = [k for k, x in gem.items() if len(x) >= 3]
w["paare1"], w["paare2"], w["dopp"] = len(p1), len(p2), len(dp)
# G5: Phi = u_a * u_b = -1 <=> width-3 resolvent
w["frust1"] = sum(1 for k in p1 if gem[k][0][1] < 0)
w["frust4"] = sum(1 for k in p2 if gem[k][0][1] * gem[k][1][1] < 0)
# --- A = clause matrix, independent via S S^T - 3I ---
S = np.zeros((m, n))
for c in range(m):
for i in range(3):
S[c, tri[c][i] - 1] = sg[c][i]
A = S @ S.T - 3 * np.eye(m)
w["spur2"] = np.trace(A @ A)
w["spur3"] = np.trace(A @ A @ A)
# --- imbalance: G4 ---
d = np.zeros(n + 1)
for c in range(m):
for i in range(3):
d[tri[c][i]] += sg[c][i]
w["unwucht"] = (d[1:] ** 2).sum()
w["unwucht4"] = (d[1:] ** 4).sum()
# check G4 as an identity
w["_G4"] = 3 * m + 2 * sum(u for k in gem for (_, u) in gem[k])
# --- six-cycles: three clauses, three DIFFERENT variables ---
nach = {}
for (c, dd) in gem:
nach.setdefault(c, set()).add(dd)
nach.setdefault(dd, set()).add(c)
f6, s6 = 0, 0
for c in sorted(nach):
for dd in sorted(x for x in nach[c] if x > c):
for e in sorted(x for x in nach[dd] if x > dd and x in nach[c]):
for (v1, u1) in gem[(c, dd)]:
for (v2, u2) in gem[(dd, e)]:
if v2 == v1: continue
for (v3, u3) in gem[(c, e)]:
if v3 in (v1, v2): continue
s6 += 1
if u1 * u2 * u3 < 0: f6 += 1
w["frust6"], w["sechs"] = f6, s6
# --- M = S^T S, traces and boundary eigenvalues ---
M = S.T @ S
ev = np.linalg.eigvalsh(M)
for k in range(2, 7):
w[f"mspur{k}"] = (ev ** k).sum()
w["mlam1"], w["mlam2"], w["mlam3"], w["mlamn"] = ev[-1], ev[-2], ev[-3], ev[0]
w["sgrad2"] = sum(int((tri == v).sum()) ** 2 for v in range(1, n + 1))
w["dreiecke"] = sum(1 for c in sorted(nach) for dd in nach[c] if dd > c
for e in nach[dd] if e > dd and e in nach[c])
return w
if __name__ == "__main__":
n, m, tri, sg, rust = lies(sys.stdin.read())
py = rechne(n, m, tri, sg)
print(f" n = {n}, m = {m}\n")
print(f" {'Quantity':<12} {'Rust':>20} {'independent':>20} {'Δ':>10}")
print(f" {'-'*12} {'-'*20} {'-'*20} {'-'*10}")
schlecht = 0
for k in ["paare1","paare2","dopp","dreiecke","sechs","sgrad2","frust1","frust4",
"frust6","unwucht","unwucht4","spur2","spur3",
"mspur2","mspur3","mspur4","mspur5","mspur6","mlam1","mlam2","mlam3","mlamn"]:
if k not in rust: continue
a, b = rust[k], py[k]
dd = abs(a - b)
ok = dd <= 1e-6 * (1 + abs(b))
schlecht += not ok
print(f" {k:<12} {a:>20.6f} {b:>20.6f} {dd:>10.2e} {'' if ok else ' <-- MISMATCH'}")
print(f"\n G4 identity Σ(pos−neg)² = 3m + 2·Σu : {py['unwucht']:.0f} = {py['_G4']:.0f} "
f"{'holds' if py['unwucht']==py['_G4'] else 'DOES NOT HOLD'}")
v = rust["paare1"]*2 + 8*(rust["paare2"] - rust["frust4"])
print(f" tr(A²) identity 2·p1 + 8·(p2−frust4) : {v:.0f} = {rust['spur2']:.0f} "
f"{'holds' if abs(v-rust['spur2'])<1e-6 else 'DOES NOT HOLD (dopp>0?)'}")
print(f"\n {'ALL QUANTITIES MATCH' if schlecht==0 else str(schlecht)+' MISMATCHES'}")
sys.exit(1 if schlecht else 0)
n,alpha,zmin,zmax,instanz,paare2,frust4,z,unwucht,mlam1,sat,unsat,konflikte,zieh
100,4.7101,3,10,0,189,118,3.4187,1325,29.879079,0,1,258,67
100,4.7101,3,10,1,205,125,3.1429,1365,31.310069,0,1,288,365
100,4.7101,3,10,2,202,123,3.0958,1335,28.855501,0,1,278,1033
100,4.7101,3,10,3,188,115,3.0632,1529,30.375909,0,1,310,71
100,4.7101,3,10,4,207,126,3.1277,1039,30.940358,0,1,140,404
100,4.7101,3,10,5,216,139,4.2186,1241,29.079203,0,1,200,1000
100,4.7101,3,10,6,205,124,3.0033,1431,31.227336,0,1,261,1043
100,4.7101,3,10,7,213,131,3.3574,1361,29.500513,0,1,316,795
100,4.7101,3,10,8,179,110,3.0645,1579,29.717885,0,1,266,2589
100,4.7101,3,10,9,182,112,3.1132,1555,28.511420,0,1,384,1749
100,4.7101,3,10,10,196,121,3.2857,1499,28.143298,0,1,240,253
100,4.7101,3,10,11,191,120,3.5455,1375,29.723463,0,1,227,31
100,4.7101,3,10,12,180,112,3.2796,1207,29.694634,0,1,155,321
100,4.7101,3,10,13,209,128,3.2511,1525,30.644793,0,1,227,477
100,4.7101,3,10,14,220,133,3.1013,1553,30.562751,0,1,384,354
100,4.7101,3,10,15,219,137,3.7166,1747,28.406864,1,0,117,186
100,4.7101,3,10,16,204,127,3.5007,1455,28.610178,0,1,309,3385
100,4.7101,3,10,17,217,133,3.3263,1277,30.158252,0,1,281,349
100,4.7101,3,10,18,194,119,3.1590,1347,32.063699,0,1,297,751
100,4.7101,3,10,19,193,118,3.0952,1291,30.136241,0,1,238,319
100,4.7101,3,10,20,199,125,3.6153,1801,29.205677,1,0,169,146
100,4.7101,3,10,21,194,119,3.1590,1363,29.488920,0,1,267,135
100,4.7101,3,10,22,192,119,3.3198,1451,29.955704,0,1,413,1183
100,4.7101,3,10,23,204,124,3.0806,1695,30.276824,0,1,289,662
100,4.7101,3,10,24,195,119,3.0793,1343,27.607886,0,1,268,323
100,4.7101,3,10,25,217,131,3.0548,1283,29.946869,0,1,262,797
100,4.7101,3,10,26,206,127,3.3443,1613,30.655733,0,1,212,482
100,4.7101,3,10,27,197,120,3.0636,1353,30.187130,0,1,312,566
100,4.7101,3,10,28,202,126,3.5180,1161,29.635141,0,1,323,872
100,4.7101,3,10,29,200,122,3.1113,1201,29.436609,0,1,329,664
100,4.7101,3,10,30,201,124,3.3151,1465,29.395377,0,1,420,465
100,4.7101,3,10,31,212,128,3.0219,1831,29.830213,0,1,153,872
100,4.7101,3,10,32,196,119,3.0000,1303,30.604671,0,1,174,484
100,4.7101,3,10,33,216,137,3.9464,1599,32.286548,0,1,200,2282
100,4.7101,3,10,34,186,117,3.5195,1255,28.689172,0,1,243,2407
100,4.7101,3,10,35,179,112,3.3635,1565,30.381379,0,1,341,1063
100,4.7101,3,10,36,225,135,3.0000,1913,29.997976,0,1,177,1884
100,4.7101,3,10,37,209,130,3.5277,1341,28.658956,0,1,227,1719
100,4.7101,3,10,38,160,103,3.6366,1337,29.265701,0,1,245,87
100,4.7101,3,10,39,187,117,3.4370,1329,29.592564,0,1,267,871
100,4.7101,3,10,40,189,116,3.1278,1121,31.485369,0,1,260,282
100,4.7101,3,10,41,197,121,3.2061,1185,29.876202,0,1,309,1465
100,4.7101,3,10,42,201,123,3.1741,1681,27.079504,0,1,219,1221
100,4.7101,3,10,43,214,133,3.5546,1007,31.970780,0,1,206,1298
100,4.7101,3,10,44,210,129,3.3123,1421,28.938768,0,1,343,150
100,4.7101,3,10,45,206,127,3.3443,1511,27.442608,0,1,398,18
100,4.7101,3,10,46,197,120,3.0636,1629,30.274234,0,1,271,305
100,4.7101,3,10,47,192,121,3.6084,1221,28.347938,0,1,337,435
100,4.7101,3,10,48,205,124,3.0033,1485,29.762251,0,1,286,1378
100,4.7101,3,10,49,204,125,3.2206,1171,29.519099,0,1,340,1799
100,4.7101,3,10,50,219,132,3.0408,1589,29.581442,0,1,292,1936
100,4.7101,3,10,51,193,123,3.8150,1367,29.332066,0,1,322,681
100,4.7101,3,10,52,192,117,3.0311,1521,30.165658,0,1,271,3325
100,4.7101,3,10,53,197,121,3.2061,1553,30.093858,0,1,198,501
100,4.7101,3,10,54,227,138,3.2522,1279,29.730625,0,1,241,291
100,4.7101,3,10,55,191,118,3.2561,1535,29.206371,0,1,485,14
100,4.7101,3,10,56,205,130,3.8414,1657,28.803022,0,1,230,29
100,4.7101,3,10,57,179,113,3.5129,1279,34.710602,0,1,209,971
100,4.7101,3,10,58,210,127,3.0363,1445,30.439699,0,1,292,231
100,4.7101,3,10,59,195,121,3.3657,1265,28.201608,0,1,251,298
100,4.7101,3,10,60,211,136,4.1994,1769,28.081570,0,1,291,1351
100,4.7101,3,10,61,176,108,3.0151,1515,27.981539,0,1,331,215
100,4.7101,3,10,62,207,126,3.1277,1945,30.050375,0,1,249,1033
100,4.7101,3,10,63,210,129,3.3123,1533,30.604209,0,1,176,477
100,4.7101,3,10,64,219,135,3.4463,1665,29.098509,0,1,356,210
100,4.7101,3,10,65,191,117,3.1114,1543,29.765750,0,1,369,642
100,4.7101,3,10,66,234,140,3.0071,2049,29.034700,0,1,261,859
100,4.7101,3,10,67,196,120,3.1429,1255,28.682581,0,1,306,702
100,4.7101,3,10,68,210,128,3.1743,1419,28.976323,0,1,283,5421
100,4.7101,3,10,69,215,132,3.3418,1065,30.053209,0,1,265,482
100,4.7101,3,10,70,206,125,3.0656,1555,28.716996,0,1,386,242
100,4.7101,3,10,71,196,119,3.0000,1615,28.844573,0,1,397,233
100,4.7101,3,10,72,207,128,3.4057,1441,29.222615,0,1,134,337
100,4.7101,3,10,73,197,122,3.3486,1567,28.759932,0,1,337,63
100,4.7101,3,10,74,204,124,3.0806,1307,29.809344,0,1,382,95
100,4.7101,3,10,75,195,121,3.3657,1247,31.599401,0,1,268,2457
100,4.7101,3,10,76,183,112,3.0308,1189,28.747057,0,1,309,811
100,4.7101,3,10,77,212,129,3.1593,1231,31.017151,0,1,292,25
100,4.7101,3,10,78,177,109,3.0817,1351,30.883345,0,1,344,1078
100,4.7101,3,10,79,181,113,3.3448,1113,28.337614,0,1,222,364
100,4.7101,3,10,80,191,117,3.1114,1193,30.607281,0,1,231,635
100,4.7101,3,10,81,161,102,3.3889,1131,28.728226,0,1,335,1000
100,4.7101,3,10,82,205,125,3.1429,1265,29.554607,0,1,267,1075
100,4.7101,3,10,83,194,118,3.0154,1313,31.041071,0,1,221,284
100,4.7101,3,10,84,213,132,3.4945,1887,31.464551,0,1,208,1504
100,4.7101,3,10,85,186,114,3.0796,1321,29.251681,0,1,334,866
100,4.7101,3,10,86,191,118,3.2561,1671,27.906862,0,1,430,346
100,4.7101,3,10,87,197,120,3.0636,1047,27.947076,0,1,216,345
100,4.7101,3,10,88,173,107,3.1172,1333,29.732029,0,1,314,356
100,4.7101,3,10,89,192,117,3.0311,1413,28.054663,0,1,347,810
100,4.7101,3,10,90,202,126,3.5180,1281,28.341598,0,1,413,1307
100,4.7101,3,10,91,210,128,3.1743,1185,28.259972,0,1,268,1595
100,4.7101,3,10,92,188,117,3.3549,1031,28.901816,0,1,251,1162
100,4.7101,3,10,93,193,119,3.2392,1355,27.616181,0,1,361,2478
100,4.7101,3,10,94,187,116,3.2907,1549,30.625190,0,1,168,27
100,4.7101,3,10,95,192,117,3.0311,1243,29.291977,0,1,238,153
100,4.7101,3,10,96,198,121,3.1269,1639,28.266273,0,1,390,3856
100,4.7101,3,10,97,216,131,3.1299,1563,29.292993,0,1,320,1886
100,4.7101,3,10,98,187,117,3.4370,1267,28.675907,0,1,271,1193
100,4.7101,3,10,99,180,111,3.1305,1109,28.536644,0,1,227,1827
100,4.7101,3,10,100,189,116,3.1278,1577,29.659526,0,1,239,662
100,4.7101,3,10,101,208,128,3.3282,1631,29.989855,0,1,273,1069
100,4.7101,3,10,102,184,114,3.2437,1663,27.989117,0,1,321,603
100,4.7101,3,10,103,236,142,3.1245,1209,31.612255,0,1,230,50
100,4.7101,3,10,104,203,125,3.2988,1485,28.527351,0,1,309,348
100,4.7101,3,10,105,203,124,3.1584,1293,31.157074,0,1,294,52
100,4.7101,3,10,106,191,118,3.2561,1447,30.059268,0,1,227,271
100,4.7101,3,10,107,183,114,3.3265,1413,27.905446,0,1,403,114
100,4.7101,3,10,108,191,117,3.1114,1519,28.599308,0,1,404,238
100,4.7101,3,10,109,186,115,3.2262,1123,31.330567,0,1,298,1802
100,4.7101,3,10,110,194,121,3.4462,1517,29.328673,0,1,242,87
100,4.7101,3,10,111,216,134,3.5382,1205,27.983312,0,1,331,1114
100,4.7101,3,10,112,214,130,3.1445,1565,29.072503,0,1,344,796
100,4.7101,3,10,113,227,137,3.1195,1641,28.594489,0,1,339,1899
100,4.7101,3,10,114,174,107,3.0324,1249,28.263816,0,1,467,443
100,4.7101,3,10,115,213,130,3.2204,1405,31.273621,0,1,198,554
100,4.7101,3,10,116,198,126,3.8376,1157,30.124376,0,1,177,128
100,4.7101,3,10,117,197,123,3.4911,1471,28.664365,0,1,268,891
100,4.7101,3,10,118,218,133,3.2510,1585,28.589807,0,1,295,1124
100,4.7101,3,10,119,185,114,3.1614,1457,30.900984,0,1,209,1311
Raw data in mess_vorzeichen/ (many more CSVs per distance/direction), tool solver/src/vorzeichen_mass.rs (932 lines — all quantities, calibration probe, Jacobi eigensolver). The recomputation shown here is deliberately rewritten independently from the definitions in GENESIS_VORZEICHEN.md: "an instrument that only confirms itself has confirmed nothing."
Execution of the task in GENESIS_VORZEICHEN.md, August 20, 2026.
No run hit the conflict budget; no cap on width-bounded
saturation ever fired.