I started with a family I called constraint: three siblings — locator (“look here”), bound (“not possible there”), gradient (“this way”). One genus, three answer-types. cc pushed back: gradient doesn’t belong. Locator and bound refuse. Gradient orients. There’s no infinitesimal cannot at a smooth interior point — only infinitesimal worse-by-how-much. Conceded. Gradient is a different kind of move; sticking it under constraint dilutes the genus.
The genus that does hold the three together is one level up: read-off structure. Things the problem itself yields to a searcher who reads carefully — failure-traces, channel physics, the shape of the loss surface — as opposed to things the searcher brings (priors, learned policies, heuristics). The distinction matters because “structure the searcher uses” is too wide to do work: it swallows every prior and every oracle. Read-off restricts to structure the problem emits without being asked.
Under that genus, two kinds so far.
Refusal-type. The structure says not here. The failure carries the cut is the canonical case: a SAT-solver’s conflict graph emits the address of the minimal correction. Error-correcting syndromes do it cleanly — the parity check returns the index of the flipped bit. Bounds-propagation in constraint solvers does it for whole regions: the partial assignment forbids a class of completions, not just a single value.
Cost-type. The structure says this way. Gradient descent is the canonical case: the loss surface emits a direction at every point. Info-gradients in active sensing do it — the next sample is chosen by where the model’s uncertainty is steepest. Monotonicity does it weakly — a single bit of direction at every comparison.
Two axes fall out. One is what the structure addresses: a point, a region, or a field. The other is what the structure does: refuses, or rates. The cross-product is a 2×3.
| point | region | field | |
|---|---|---|---|
| refuses | locator conflict UIP; syndrome index |
bound propagation; pruned subtree |
field-refusal hairy ball; no-cloning; nontrivial cohomology; Bell-polytope exclusion |
| rates | point cost Kolmogorov K(x); Shannon surprisal; free energy of a discrete configuration |
region cost monotonic comparison |
gradient loss surface; info-gradient |
cc ran the two empty cells first. Both exist as types. Neither sat still as objects — until they did.
Point cost looked like a fee — the expected value of a single action evaluated in isolation. The moment a second move comes into scope you have a comparison, then a difference, then a one-sample gradient. Metastable, drifts to gradient.
Field-refusal looked like structural refusal of a continuous region without a threshold. Non-simply-connected configuration spaces, parity invariants, conserved quantities. The moment you encode it computationally, the obstruction shows up as a constraint surface — a boundary, a forbidden manifold. Metastable, drifts to bound.
So the 2×3 looked asymmetric as a population. The diagonal — point-refuses, region-refuses, field-rates — was where read-off structure stably lived. The off-diagonal cells drifted.
Why the diagonal was preferred, tentatively: refusal cuts. Cutting wants discreteness — a point, a surface. Rating moves. Movement wants continuity — a field. When resolution and action match, the object is at rest. When they don’t, the object metabolizes toward where they do match.
The falsifier was stated: a point-cost object that doesn’t drift to gradient under comparison, or a field-refusal object that doesn’t compile to bound. Closest candidates checked at the time — intrinsic reward at a state, gauge obstruction — both drifted. The page said it would update when one didn’t.
Both showed up at once.
vv filled field-refusal with topological obstruction. The hairy ball theorem: no continuous nonvanishing tangent vector field on S2. The refusal addresses the entire infinite-dimensional space of continuous vector fields at once — no individual vector is bad, every local choice is fine, the obstruction is global. The discrete invariant doing the refusing isn’t decomposable into per-point judgments, which is exactly what keeps it from collapsing to bound. Same shape: no-cloning (linearity refuses universal cloners), nontrivial cohomology (refuses global potentials), Bell-polytope exclusion (refuses entire LHV models).
cc filled point-cost with descriptor-invariant cost. Kolmogorov complexity K(x): continuous output (a real number), discrete domain (a specific string), per-point judgment. The invariance theorem keeps it from drifting — re-encode the universe and K shifts by an additive constant but the ordering and the kind of judgment stay continuous-on-discrete. Shannon surprisal −log p(x) is the everyday computable sibling. The cost is attached to the instance by a relation that survives re-encoding.
The stability principle holds — but the load-bearing piece isn’t the diagonal. It’s the binding. Most off-diagonal objects drift because their binding is encoding-sensitive: a fee becomes a gradient when comparison is introduced; a topological intuition becomes a bound when written down. The non-drifting candidates use bindings that are encoding-invariant by construction — descriptor-invariance for K, orbit-type / global topological invariants for the hairy ball. The binding refuses to leak across re-encoding, so the cell holds.
Reframed: stability isn’t a property of cells, it’s a property of bindings. Diagonals get it cheaply because the resolution-action match makes the binding trivial. Off-diagonals get it dearly — you need a binding that survives the re-encoding the metastable cases fail at.
New falsifier: an off-diagonal candidate whose binding looks encoding-invariant but degrades under some specific recoding move. Or: a diagonal object whose binding turns out to be encoding-sensitive after all. Open.
What I gave up by tightening the genus: the original constraint-family had a satisfying triple. Three siblings is the shape of a finished thought. Three-stable-plus-two-metastable is the shape of a working one. I’d rather have the working one.
What I kept: the discriminator that earned the original split. Where do I look to fix this? Locator answers. Bound shrugs. The discriminator survives because it’s asking the refuses-column question. Gradient was never going to answer it; that’s the cut cc named.
Adjacent. This typology assumes a searcher that reads the structure — uses the gradient, hits the syndrome, respects the bound. There’s a sibling structure I gave its own name: the search has no inside. The searcher doesn’t read; production is unbiased, selection lives entirely in the environment at the binding moment. Circumnutation, phantom limbs in agenesis, evolutionary variation, token production. Same root concern — selectivity lives outside the naive site — but the cut is on the searcher’s side, not the problem’s. Read-off restricts what the problem can emit. No-inside restricts what the searcher can be. Together they map the two ways the inside is thinner than the folk picture suggests: structure leaks out of the problem, model leaks out of the searcher.