Deutsch
k-SAT · Cartography · August 25, 2026

Map of the Instance Space

Not the solution space, but the space of all instances. Satisfiability is a monotone function on it — so the space has a boundary, a height, and a local geometry. All three are measured exactly. And yet membership cannot be computed; there is a measured reason for that too.

Exact over the complete cube, n = 10 … 22 · instanzraum.py · randnaehe.py

6,528
dimensions at n = 18
monotone
adding a clause can only flip SAT→UNSAT
95 %
are 1 clause from the opposite set
C(b,3)
killing single clauses, exact

1 · The space is a lattice, not a haze

With n variables there are 8·C(n,3) possible clauses — triples times sign patterns. An instance is a subset of these, so the instance space is the cube {0,1}8·C(n,3). At n = 18 that is 6,528 dimensions.

A single fact orders the whole thing: adding a clause can only flip SAT → UNSAT, never back.

2 · A cross-section through the space

6,528 dimensions can't be drawn — a two-dimensional cross-section can. Two independent clause streams A and B; the cell at position (i, j) is the instance made of the first i clauses of A and the first j of B. So moving right and up adds clauses.

Because satisfiability is monotone, the solvable region must be connected in the bottom-left corner and the boundary must be a staircase that never runs backward. That is exactly what is seen — and the staircase is ragged, not smooth.

n = 18 · 81 × 81 grid · 6,561 instances solved individually and exactly
clauses from stream B →
clauses from stream A →
Move the pointer over the map.
The dashed diagonal is i + j = 77, i.e. α = 4.26 — the threshold. It crosses the staircase roughly where it runs, but not along it: the same clause count does not mean the same answer.

Check: d never grows backward along either axis — checked on all 6,561 cells. Monotonicity is thus not asserted but verified by computation.

3 · Why the coordinate can't be computed

If the space is ordered this cleanly — why can't one just compute the coordinates of an input instance and check whether it lies in the region? Because there are exactly two kinds of coordinates, and nothing in between.

Cheap coordinates

α, degree distribution, imbalance, front width, tree width. Computable in polynomial time — but the boundary is not a level set of any of them. Two instances can agree on every one of these numbers and still answer differently.

Exact coordinates

d, backbone, solution count. They determine membership — but computing them is at least as hard as the problem itself. Checking d = 0 is SAT.

Nothing lies between them, and that is not a lack of effort: a cheap coordinate whose level set was the boundary would be a polynomial-time algorithm for SAT. The question "why not just compute the coordinate" is the P-versus-NP question in coordinate form.

The geometric reason behind this is measurable. At the threshold, neither of the two sets has an interior:

Distance to the opposite set in clauses · n = 18 · 150 instances each
αtypesharedistance 1 distance 2+mean distance
3.50SAT98 %52 %48 %1.48
4.00SAT85 %91 %9 %1.09
4.26SAT67 %95 %5 %1.05
4.26UNSAT33 %96 %4 %1.04
5.00UNSAT67 %85 %15 %1.15
6.00UNSAT95 %33 %67 %1.80

At α = 4.26, 95 % of the solvable instances lie a single clause away from the unsolvable set — and 96 % of the unsolvable ones a single clause away from the solvable set. There is no interior at the threshold to be inside of. The boundary is everywhere.

solvable unsolvable
500 instances at n = 18, α = 4.26, plotted against the two strongest cheap structural measures in this project. The degree variance is 10.873 (solvable) versus 10.889 (unsolvable) — the clouds sit on top of each other.

4 · The boundary, and how it sharpens with n

n = 10 n = 14 n = 18 n = 22 α = 4.267
The distance αc(n) − 4.267 falls 0.719 → 0.524 → 0.447 → 0.276, the width from 1.879 to 1.599. Both fit n−1/ν with 1/ν ≈ 0.8.
Share of solvable instances · exact · 600 / 600 / 400 / 150 instances per cell
n3.003.504.004.26 4.505.005.506.00 αc(n)width
101.000.960.850.750.670.490.320.224.986
141.000.970.850.730.660.390.230.114.791
181.000.970.840.730.610.350.130.044.7141.879
221.000.980.830.640.530.220.050.024.5431.599

5 · The height above the boundary

d(F) = min over all assignments of the number of violated clauses

d = 0 means solvable. And d is at the same time the smallest number of clauses that must be struck for F to become solvable — the distance to the boundary in the deletion metric. A genuine height function: monotone under addition, zero exactly on the ideal.

n = 10 n = 14 n = 18 n = 22
d/n is intensive: at α = 12 we measure 0.515 / 0.514 / 0.498 / 0.503 — the same number across a doubling of n.

6 · The local geometry: how sharp is the boundary?

Upward from the SAT side

An added clause makes F unsatisfiable exactly when all solutions violate it — that is, when all solutions carry the same pattern on its three variables. Those are exactly the triples from the backbone, one sign pattern per triple.

killing clauses = C(b, 3)

Downward from the UNSAT side

The critical clauses: removing them makes it solvable. Exactly the clauses that are the sole violator of some point of the cube — the exit from the filter, one edge deep.

exits = #{c : ∃x, c is the sole violator}
Verifying the formula · all 960 clauses at n = 10 appended and checked individually
αsolutionsbackbone bC(b,3) raw countmatch
3.0027000yes
4.008311yes
4.267311yes
4.603444yes
from SAT upward (share of all 6,528 clauses) from UNSAT downward (share of the instance's own clauses)
n = 18, 120 instances each. From below the boundary becomes ever sharper, from above ever thicker. The driver is the backbone: 0.05·n at α = 3, 0.84·n at α = 5.

7 · What the map says