Deutsch
Experimental proof complexity · random 3-SAT at the threshold

The Sign Axis

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.

n = 200, α = 4.26728,808 measured instances two seed ranges2,620 calibration probes, all passed August 20, 2026
Signature σ
the same formula, renamed: g · σ
both times
frust191
frust416
imbalance38
tr(M³)8,922
μ_max(M)14.98864

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.

01

The theorem that finally makes the ladder finite

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.

Theorem V1
Let S be the m×n incidence matrix with S[c][v] = σ(c,v) if v occurs in c, and 0 otherwise — the signed incidence matrix. Let A be the clause matrix, A[c][c′] = Σv ∈ c∩c′ σ(c,v)·σ(c′,v), A[c][c] = 0. Then for 3-CNF A = S·Sᵀ − 3·I, and with M := Sᵀ·S, spec(S·Sᵀ) = spec(M) ∪ {0}m−n.
(S·Sᵀ)[c][c′] = Σv S[c][v]·S[c′][v] is the sum over the shared variables; the diagonal is Σv∈c σ(c,v)² = 3, because every clause has three literals.

Three consequences, and each one saves a measurement:

  • λmin(A) = −3, exactly, for every instance. S has rank at most n, and for m > n, S·Sᵀ is singular. The smallest eigenvalue of the clause matrix is not a measured quantity but an identity — measured while building the instrument, before it was derived.
  • The whole spectrum sits inside the n×n matrix M. Its diagonal is the degree sequence; everything sign-dependent sits beside it. Under the gauge, M ↦ D·M·D — the spectrum is invariant, the individual entry is not.
  • Rung 4 of the ladder has n degrees of freedom, not infinitely many. For every ℓ, tr(A) is a function of the n eigenvalues of M. The frustration profile over all cycle lengths is therefore computable in a single pass.

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.

Theorem V2 — the right weight
μmax(M) − 3 = λmax(A) is the same quadratic form at the best vector. In particular, λmax(A) ≥ (imbalance − 3m)/m.

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.

Theorem V7 — the search space is closed
If for every variable v the set of clauses containing v is connected via pairs sharing exactly one common variable, then A together with the scaffold determines the signature σ completely up to gauge. Consequently, every gauge invariant is a function of A and H.
For a pair (c,c′) with exactly one shared variable v, A[c][c′] = σ(c,v)·σ(c′,v). If the clauses at v are connected via such pairs, σ(·,v) is fixed across all of them as soon as its value is fixed at one — and that single choice is precisely the gauge freedom g_v.

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.

02

Why one may trust the instrument

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.

Three checks before a single hardness value is interpreted

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.

SideNσ²between σ²withinσ²ownCap
UNSAT, seed A1,1970.130 0.2290.017r² ≤ 0.928
UNSAT, seed B1,1910.128 0.2130.017r² ≤ 0.920
SAT, seed A1,2030.087 2.9362.045r² ≤ 0.303
SAT, seed B1,2090.162 2.9811.825r² ≤ 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.

03

The controls — first, not last

A null result without a working positive control is not a finding. Three families, in ascending order of sharpness.

All positive — passed, exactly

σ ≡ +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.

Seeding with bias p — passed, with a caveat

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.

Tseitin — failed, and that is a theorem

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 = 160frust1frust4 frust6imbalancetr(A³)μ_maxμ_min SATlog₂ K
charge even4800 377.604,800 8.08.01.00 0.23
charge odd4800 377.604,800 8.08.00.00 11.49
fair random signature, same scaffold472.8 0537.1516.3 20,41616.51.3 1.002.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.

Theorem V5
For the Tseitin formula over a simple 3-regular graph, M = deg · I, independent of the charges.
Two edge variables v, w occur together exactly when they share a node k. The clauses at k are the four masks μ ∈ {0,1}³ of one parity class, and σ(cμ, ei) = (−1)μi. So M[v][w] = Σμ (−1)μvw. The four masks form a coset of the subgroup {μ : Σμ = 0}; on it, (−1)μvw is a nontrivial character, so the sum is 0 — on both cosets. And M[v][v] = deg(v).

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.

04

The core measurement

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 · quantityFourier degreer (seed A) r (seed B)
0 · imbalance Σ(pos−neg)²2 +0.266+0.2870.071
1a · frust1, width-4 sparks2 −0.273−0.2900.074
1b · frust4, width-3 sparks4 −0.232−0.1910.054
2 · imbalance4 Σ(pos−neg)⁴4 +0.245+0.2600.060
3 · frust6, six-cycles6 +0.068+0.1210.005
3′ · tr(A³)6 +0.235+0.1680.055
4 · tr(M³), cycles of length 66 +0.236+0.1730.056
4 · tr(M⁴), length 88 +0.230+0.1560.053
4 · tr(M⁵), length 1010 +0.218+0.1420.048
4 · tr(M⁶), length 1212 +0.205+0.1300.042
4 · μ_max(M) — the best weight all+0.060+0.050 0.004
4 · μ_min(M)all +0.000−0.0690.000
— · order d(50 %) +0.165+0.1500.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:

r(frust4, hardness | imbalance) = −0.256 (A) −0.212 (B) r(imbalance, hardness | frust4) = +0.287 (A) +0.301 (B) r(frust4, hardness | imbalance, d(50 %)) = −0.241 (A) −0.199 (B) r(μ_max, hardness | imbalance, frust4) = +0.013 (A) +0.024 (B) r(frust4, imbalance) = +0.055 — two directions, not one

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.

Out-of-sample — fit on one seed range, test on the other

Model (R² of within-scaffold variance, UNSAT)kA → B B → A
frust4 only10.0350.052
imbalance only10.0830.071
μ_max(M) only10.0020.004
d(50 %) only10.0210.026
rung 1 — frust1 + frust420.1240.133
rungs 1–4 — everything12 0.1310.139
rungs 1–4 + d(50 %)130.1340.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.

The same question without regression

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 pairsarbitrary pairs ratio
UNSAT, seed A0.1900.2410.789
UNSAT, seed B0.2000.2340.854
SAT, seed A2.9823.1380.950
SAT, seed B2.9053.1700.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.

05

The ignition test — where frust4 carries weight, and causally

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?

bottom frust4 tercile top frust4 tercile
p₃ — share of unsatisfiable instances the width-3 closure refutes 0 % 25 % 50 % 75 % 100 % n = 45 1132 UNSAT n = 45, bottom frust4 tercile: p₃ = 0.8080.808 n = 45, top frust4 tercile: p₃ = 0.9630.963 n = 53 1183 UNSAT n = 53, bottom frust4 tercile: p₃ = 0.3710.371 n = 53, top frust4 tercile: p₃ = 0.7100.710 n = 60 1237 UNSAT n = 60, bottom frust4 tercile: p₃ = 0.0650.065 n = 60, top frust4 tercile: p₃ = 0.1820.182
30 scaffolds each with 100 signatures, 3,000 instances per n, centered within the scaffolds. The saturation cap sat at the full space bound and did not fire once across all 10,170 rows — every ignition statement is a verdict, not a truncation. Odds ratios 6.2× / 4.2× / 3.2× at 6.9 σ / 10.2 σ / 5.2 σ.

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.

What the ignition test does not explain

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.

06

The threshold counter-check — and it decides

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 eachz(frust4) frust4 vs. pairs2 ≈ 165α_c
low tercile−3.2861.44.3513
no selection−0.0182.44.2818
high tercile+3.26103.34.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.

Factor "hard / easy" at equal distance from own threshold 16× Scaffold axis · Σ deg² GRADSTREUUNG.md §7 α_c+0.25 Scaffold axis · Σ deg², α_c+0.25: factor 15.0015.00× α_c+0.50 Scaffold axis · Σ deg², α_c+0.50: factor 11.1011.10× α_c+0.75 Scaffold axis · Σ deg², α_c+0.75: factor 6.506.50× Sign · frust4 this work, §7.3 α_c+0.25 Sign · frust4, α_c+0.25: factor 1.211.21× α_c+0.50 Sign · frust4, α_c+0.50: factor 1.191.19× α_c+0.75 Sign · frust4, α_c+0.75: factor 1.281.28× Sign · imbalance unwucht.rs α_c+0.25 Sign · imbalance, α_c+0.25: factor 1.241.24× α_c+0.50 Sign · imbalance, α_c+0.50: factor 1.091.09× α_c+0.75 Sign · imbalance, α_c+0.75: factor 1.031.03×
Logarithmic axis. The three bars per family are the distances α_c + 0.25 / 0.50 / 0.75. The dashed line at 1× is "no effect". The degree spread retains a factor of 15 alongside the threshold shift; the sign axis retains 1.2.

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).

How much of it is threshold? The model-free decomposition

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 lowN highlog₂K low log₂K highdifferencefactor
4.3586114 11.6411.07 +0.571.48
4.50121141 11.3410.75 +0.601.51
4.65141149 10.9910.47 +0.521.44
shift α_c total residual threshold residual n=100 −0.173 ± 0.016 0.492 bit 0.256 bit 48 % 52 % n=150 −0.127 ± 0.014 0.564 bit 0.294 bit 48 % 52 % n=250 −0.067 ± 0.011 0.660 bit 0.480 bit 27 % 73 % on the right scale — hardness grows exponentially with n: residual relative to hardness 3.1 % 2.8 % 3.1 % constant threshold relative 2.8 % 2.5 % 1.2 % halves

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.

07b

The other half of G2 — the paths

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·𝟙.

Theorem V6
path(1) = imbalance − 3m
imbalance = ‖Sᵀ𝟙‖² = 𝟙ᵀ·S·Sᵀ·𝟙 = 𝟙ᵀ(A + 3I)𝟙 by V1.

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.

Why moments, and not the leading eigenvector

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.

UNSAT: empty, as predicted

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: and here something stands

SAT, R² of within-scaffold variance, out of samplek A → BB → A
imbalance only (= path(1), the mean)1 0.04000.0630
path(2) only1 0.00320.0212
imbalance + variance of density 20.08020.0879
imbalance + variance + skew3 0.08190.1010
Placebo: imbalance + frust4 + 5 random columns 70.03290.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.

Does the variance act only through the threshold?

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.

Joint logistic regression, unsat ~ α + imbalance + variance, 2,700 instances dα_c / d(variance) = −0.150 per σ (at fixed imbalance, t = 18.3) dα_c / d(imbalance) = +0.187 per σ (at fixed variance, t = 19.6) dα_c / d(frust4) = −0.016 per σ

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:

distancesideNlog₂K low log₂K highdifferencet
α_c − 0.40SAT250/247 7.648.07 −0.425−2.7
α_c − 0.25SAT241/234 8.409.17 −0.769−4.6
α_c − 0.10SAT189/177 9.399.84 −0.450−2.7
α_c + 0.25UNSAT229/231 10.7111.15 −0.438−9.1
α_c + 0.50UNSAT248/249 10.2210.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:

UNSAT: threshold +0.512 bit structure −0.434 bit sum +0.078 bit SAT: threshold −1.384 bit structure −0.548 bit sum −1.932 bit

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.

07c

Four odd clause nodes — the stars

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.

with x = A·𝟙, i.e. x_c = Σ_{c′} A[c][c′] : Σ_c x_c^k = sum over all stars with k branches at the center c odd clause nodes = k + (k mod 2) k = 1, 2 → 2 odd the paths: Σx = path(1), Σx² = path(2) k = 3, 4 → 4 odd THIS RUNG k = 5, 6 → 6 odd the next

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)kA → B B → A
imbalance + frust4 + variance (the paths)3 0.12270.1313
+ skew and kurtosis of A𝟙5 0.12630.1370
+ all six star moments 90.13230.1455
+ only the skew of A²𝟙4 0.13170.1454
Placebo: + 6 random columns9 0.12000.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 threshold test at no extra cost

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.

Quantitydegreer(·, unsat) raw at fixed imbalancereading
imbalance2−0.432 / −0.419 the threshold quantity itself
variance4−0.282 / −0.240 +0.267 / +0.320strongly threshold
path(3)6−0.237 / −0.194 +0.219 / +0.267strongly threshold
frust44+0.106 / +0.062 +0.120 / +0.065weakly 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.003not 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.

07d

Triangulation — the same formula seen four ways

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:

Viewpurely negativepurely positive Δ log₂K, UNSATSAT
original106.9106.2
all negated (g ≡ −1)106.2106.9 +0.010 ± 0.015−0.164 ± 0.176
random gauge106.4107.2 +0.014 ± 0.014−0.030 ± 0.163
majority gauge 50.8194.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.

08

The ladder, climbed

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.

  1. 1a
    pair with one shared variable — frust1
    degree 2 · r = −0.273 / −0.290 · and it is the imbalance: r(frust1, imbalance) = −0.986
  2. 1b
    four-cycle — frust4
    degree 4 · r = −0.232 / −0.191 · support of tr(M²), r = −0.997 · the one new direction
  3. 1b′
    four-cycle, weighted by connectivity — the spark graph
    r = −0.206 / −0.132 for touching spark pairs, −0.104 / −0.063 for the largest core · beyond frust4: −0.092 / −0.031, inconsistent · connectivity does not beat the count
  4. 2
    degree 4 at one variable — imbalance4
    Exhausted by a single theorem: at one variable the gauge flips all occurrences at once, the only invariant is |pos − neg|. Higher degrees only give higher moments of the same number.
  5. 3
    six-cycle — frust6
    degree 6 · r = +0.068 / +0.121 · inconsistent, barely above 2 σ, no finding
  6. 4
    cycles of length 8, 10, 12 — tr(M⁴), tr(M⁵), tr(M⁶)
    Correlation with frust4: −0.930, −0.874, −0.817. Nothing is added; something is lost: +0.230 → +0.205 (seed A), +0.156 → +0.130 (seed B).
  7. 4
    all orders, best weight — μ_max(M), μ_2, μ_min
    Raw +0.060 / +0.050, after removing imbalance and frust4 +0.013 / +0.024. Empty.
09

The final finding

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.

imbalance ≡ −2·frust1 + const degree 2, uniform r = +0.27 / +0.29 frust4 ≡ support of tr(M²) degree 4, four-cycle r = −0.23 / −0.19 r(imbalance, frust4) = +0.055 independent of each other

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.

Scaffold axis: 36.2 % of the variance of log₂(conflicts) Scaffold axis 36.2 % Sign axis: 59.2 % of the variance of log₂(conflicts) Sign axis 59.2 % Solver noise: 4.6 % of the variance of log₂(conflicts) Solver noise 4.6 % The whole ladder captures 8.4 % of the total variance — 14.1 % of the sign axis 8.4 % — what the whole ladder captures
Variance of log₂(conflicts) at n = 200, α = 4.267, unsatisfiable instances, seed range A (seed B: 37.5 / 57.6 / 4.9 %). The light-shaded area is the part the whole ladder captures out of sample — 14.1 % of the sign axis, 15.1 % in seed B.

Up to what degree this holds

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.

What a successor would need

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.

10

What this finding does not say

  • Not that the sign axis is empty. frust4 is a hit, across two seed ranges, out of sample, with the predicted sign and a demonstrated causal chain.
  • Not that no local sign quantity can ever predict anything. The premise of the theorem is not met, and the theorem is not claimed.
  • Not that the measured quantities capture all characters of their degree. The order is exhausted, not the space.
  • Nothing about other solvers. Hardness here means: conflicts of this project's CDCL. The ignition test, by contrast, does not depend on any solver — the width-bounded closure is confluent.
  • Nothing about P versus NP. That is a statement about the worst case; random 3-SAT at the threshold is for that neither necessary nor sufficient.
The pre-asymptotic caveat, stated literally. Everything here is measured at n ≤ 250. The minimum resolution width w* is measured at 3 at n = 55 and at 4 at n = 110, while the theory says w* = Ω(n): the asymptotic regime is not reached by n ≈ 100. Every constant in this report describes a finite range, not an estimate of an asymptotic constant. For the frust4 effect this is not merely a formality but the crux of the matter: the mechanism it drives is half-dead at n ≈ 53 and fully dead at n = 200.

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/.

View code & data — the independent recomputation
vorzeichen_nachrechnung.py — independent recomputation, not translated from the Rust code
"""
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)
mess_vorzeichen/abst100_hoch_d0.50.csv — one of the measurement series (120 instances, n=100)
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.