Expand description
The Boolean hypercube {0,1}ⁿ and its subcube cover — the geometric substrate beneath SAT,
and the executable form of Pnp.lean’s HypercubeSAT (the Lean formalization lives at
work/Pnp.lean).
Every clause of a CNF is a blocker: the set of corners (vertices) of the hypercube that
falsify it. A clause of width w forbids exactly the 2^{n-w} corners that set each of its
literals false — a subcube (a face) of codimension w. The whole formula is UNSAT precisely
when its blockers cover the hypercube: every one of the 2ⁿ corners is forbidden by some
clause, so no satisfying assignment escapes. SAT ⟺ some corner has energy zero — covered by
no blocker. This is Pnp.lean’s Blocker / vertexEnergy / CoverUNSAT, made concrete.
The point of the representation: the problem (solutions = uncovered corners) and the
rules (clauses = blockers) live in the same world {0,1}ⁿ. A clause is not a separate
syntactic object; it is a region of the very space the solutions inhabit. So one group action —
a CubeSym, Pnp.lean’s CubeSymmetry of coordinate permutations and per-coordinate flips —
moves both: it permutes blockers among themselves and permutes corners among themselves, in
lockstep. That is what lets us symmetry-break the rules and the solutions with a single move, and
it is why the cover-totality question (UNSAT) collapses by the order of the symmetry group: a
cover is total iff it covers one representative per orbit, not all 2ⁿ corners.
Pigeonhole is the canonical instance because we can always build one (php_cover): n pigeons
into n-1 holes, with the full row×column symmetry group Sₙ × Sₙ₋₁ acting on the grid of
variables. Here we build the stage, answer the first question — which corners are we blocking? —
and then measure how far each stacked symmetry collapses the cover-check.
Structs§
- Abstract
Refutation - An abstract, scale-invariant refutation: the family’s rules symmetry-broken to their orbit
types, plus the abstract invariant those types violate, plus the constant-size witness. For
pigeonhole this is two rule-types (every pigeon takes a hole; no two share one) and the counting
fact pigeons > holes — identical at every scale. This is the lift-and-shift-left: the proof’s true
size is
O(1)in the rule-types, reached by symmetry breaking the rules to their types, never by enumerating resolvents (the concrete and even the symmetric resolution closure both explode). - Advance
Step - One step of the self-driving reduction: the lever applied, and the structure remaining after it.
- Carve
Stats - Autocarve — recursive carving that lets the rules fall out. Carve the formula to its core,
decompose into independent components, and for each: if a certified cut recognizes it, the rule
falls out and the component closes; otherwise branch one variable and carve again on each
branch. Every decision cascades fresh unit propagations and pure literals, exposing structure the
previous level hid — so a buried, masked, or nested invariant surfaces on its own at the depth it
becomes visible. UNSAT iff any component is, SAT iff all are;
Nonepast the budget. What an autocarve run did: how many recursion nodes it visited, how many times a certified cut fired (a “punch”), and how deep the carving recursed. - Collapse
Step - One step of the collapse curve: how many orbits remain after stacking the first
kgenerators. - Cover
- A cover of the hypercube by clause-blockers — the geometric form of a CNF. UNSAT ⟺ the blockers leave no corner uncovered.
- CubeSym
- A hypercube symmetry: permute coordinates, then optionally flip each one (
Pnp.lean’sCubeSymmetry).perm[j]is the coordinate thatj’s value lands on;flip[j]negates it. These are the automorphisms that move blockers among blockers and corners among corners with the same action — the bridge that puts rules and solutions in one mathematical world. - Diagnosis
- A complete auto-diagnosis of an instance: every structure-detector run at once, so you can read off the full menu of applicable symmetry-breaks and cuts — what you can still do to it.
- Family
Signature - The abstract signature of a family: its rules symmetry-broken to their orbit types, and which certified shadow (if any) refutes it. This is the auto-collapse spread across families — the same machinery that found pigeonhole’s two-type counting abstraction, applied blind to any cover.
- Ladder
Stats - What a laddered branch-and-cut search did: how many subcubes (nodes) it visited, how deep it laddered, and how many subtrees a certified cut closed outright.
- Rule
Symmetry - The rule-symmetry signature of a cover: how the polynomially-many blockers collapse under the
family’s automorphism group.
rule_orbitsis the count of essentially-distinct rules — a measure of structural complexity read off without enumerating the2ⁿcorners. A small, scale-invariantrule_orbitsis the geometric fingerprint of a family that admits a short symmetry-broken proof. - Structural
Profile - The structural profile of an instance — what every lever reveals about where its difficulty lives.
quotientis the number of rule orbit-types under its discovered symmetry (how far the cube collapses);cutis the certified shadow that decides it, if any;core_clausesis what survives carving + bounded variable elimination (the irreducible residue). Together they place the instance on the spectrum from “all symmetry, O(1) quotient, instantly cut” to “no symmetry, full quotient, nothing reduces — the genuinely interesting core.” - Subcube
- A subcube of
{0,1}ⁿ: the coordinates set incareare fixed to the matching bits ofvalue; the rest are free. As a blocker it is the footprint of one clause — the corners that falsify it. (Pnp.lean’sBlocker, generalized from clean 3-bit faces to any width.)
Enums§
- Advance
Status - Where
auto_advanceended: a decided verdict, or the structureless residue (the irreducible core no structural lever could touch — where you’d branch). - Carve
Outcome - What carving the hypercube reduced a formula to.
- Cover
Verdict - The verdict of auto-cutting a cover: which certified cut showed it total (no corner escapes), or that a corner escapes (satisfiable), or that it is not a cover the prover decides.
- Proof
Rung - Where an UNSAT instance sits in the proof-complexity landscape, as our certified cuts see it.
This is a ladder of proof systems (Cook–Reckhow): each rung crushes families the cheaper ones are
blind to.
CountingandParityare incomparable narrow detectors — pigeonhole needs counting and is invisible to GF(2); Tseitin needs GF(2) and is invisible to counting — whileNullstellensatz{min_degree}is the universal algebraic height over GF(2), complete at degreen. The honest face of the wall: an instance whose narrow cuts are silent and whose minimum NS degree is large sits at the top of this ladder, and the cost at that height is exponential. We can locate an instance on the ladder; we cannot prove the top rung is unavoidable for a family — that lower bound is exactly P vs NP, and it stays open. - Search
Cost - The measured cost of a branch search: either it decided within the node budget, or the search blew past it (the exponential explosion, captured rather than hung).
- Shadow
- Which certified shadow refutes a cover — the abstract class of its hardness.
Functions§
- abstract_
signature - Symmetry-break any cover to its abstract signature: discover its automorphisms, quotient the rules
to orbit-types (
clause_orbits), and probe the certified shadows in turn — counting, then parity, then cutting-planes.shadow = Nonemeans no shadow recognizes it (it falls through to the general certified CDCL core). A maximally symmetric family collapses to a few rule-types decided by one shadow; an unstructured one spreads across many types with no shadow — but still has a backdoor. - applicable_
levers - From a
Diagnosis, the list of symmetry-breaks and cuts that apply — the menu of moves, in order of decisiveness. Empty global structure ⟹ the honest fallback: backdoor + branch on the residue. - apply_
perm_ to_ model - Push a model through an automorphism: if
σpreserves the clause set andmsatisfies it, so doesσ(m). Variablev’s value lands onσ(+v)’s variable, negated whenσ(+v)is the negative literal — chosen som ⊨ C ⟹ σ(m) ⊨ σ(C). - apply_
renaming - Apply a flip-renaming
x_v → ¬x_vfor everyvwithflips[v]— a phase-flip symmetry of the cube. It permutes models bijectively (negate the flipped coordinates), so it preserves satisfiability. - auto_
advance - Auto-diagnose, auto-break, auto-advance — to the fixpoint. Repeatedly diagnose the instance and apply the most decisive lever it offers: a certified cut decides it outright; otherwise carve (unit / pure-literal / subsumption) and bounded variable elimination peel it down; the loop advances until a verdict drops out or no structural lever reduces it further — the structureless residue, where the only remaining move is to branch. The returned trace shows the structure draining away step by step.
- autocarve
- autocarve_
measured - Like
autocarve, but also returns theCarveStats— node count, punch count, recursion depth. - automorphism_
group_ size - The order of a formula’s automorphism group —
1means rigid (only the identity preserves it), the maximally asymmetric extreme. Discovers the generators and closes them under composition. - backdoor_
branch_ orbit_ count - Symmetry breaking for speed. Count the orbits of the
2^{|U|}backdoor branches (assignments toU) under the generators that preserveUsetwise. A symmetry-aware solver inspects one branch per orbit instead of all2^{|U|}— fewer poly-time solves for the same verdict. Generators that moveUoff itself do not act on the branches and are skipped; each kept generator induces a permutation-with-flips on the backdoor positions. - blocker_
orbit - The full orbit of a blocker under the group generated by
generators(BFS over images). For a structured family this is polynomial-sized even though|G|is astronomical, because the blocker’s stabilizer is huge (a pigeonhole exclusion has orbitholes·C(pigeons,2), not|G|). - bounded_
variable_ elimination - Bounded variable elimination — carve away every dimension whose projection doesn’t grow the formula (resolvents ≤ clauses removed). Iterated to a fixpoint, it peels the cube down dimension by dimension wherever it’s free to do so; the variables that would explode (pigeonhole’s, by Haken) are left for the cuts. Satisfiability-preserving.
- burnside_
corner_ orbits - Combinatorics — Burnside’s lemma. The number of corner orbits equals the average number of
corners fixed by a group element:
(1/|G|) Σ_g |Fix(g)|. A different invariant for the same count the orbit-BFS computes — counting by fixed points instead of by walking orbits. (n ≤ ~16.) - burnside_
orbit_ count - Burnside orbit count — the number of essentially-distinct witnesses. By Burnside’s lemma the
number of orbits of a group action equals the average number of fixed points:
#orbits = (1/|G|) · Σ_{g∈G} |Fix(g)|, whereFix(g) = { m : g·m = m }. Applied to the solution set (closed under the automorphisms, since everygis an automorphism), this counts the witnesses up to symmetry — the essential solutions — as a fixed-point average, never enumerating an orbit. The sum is exactly divisible by|G|(the lemma guarantees it);groupmust be the whole group (useperm_group_closure). - canonical_
blocker - The orbit representative (canonical form) of a blocker under a generating set: the lexicographically minimal blocker reachable through the generators. Two blockers are symmetric iff they share a canonical form, so canonicalizing is how a symmetry-aware engine dedups derived rules by orbit.
- canonical_
cover - The
Bₙ-canonical form of a cover, and its orbit size. Acts the group on the whole cover byg·C = { g.map_subcube(b) }and returns the lexicographically least sorted-blocker key together with the number of distinct covers in the orbit. The canonical key is constant on an orbit and distinct across orbits, a sound orbit invariant; the orbit size feeds the orbit–stabilizer identity|Stab| · orbit_size = |Bₙ|. - canonical_
model - Symmetry-break the witness. The canonical (lexicographically least) model in a witness’s orbit
under the automorphisms — the symmetry-broken representative. All witnesses in one orbit reduce to the
same canonical witness, so the essential content of the solution set is one canonical witness per
orbit; the symmetry regenerates the rest via
model_orbit. - carve
- Carve away the hypercube. Peel the formula down by the three classic simplifications, iterated to a fixpoint: unit propagation (a unit clause carves the cube in half by forcing a variable), pure-literal assignment (carves an autark section), and subsumption (drops a blocker contained in a stronger one). All three preserve satisfiability, so the result is either a verdict or the irreducible core that genuine hardness leaves behind. Pigeonhole carves to itself.
- clause_
orbits - Symmetry-break the rules at the clause level — the lift-and-shift-left form that scales to any
number of variables. Partition the clause indices (the blockers) into orbits under a generating
set of automorphisms, applying each
Permto clause literals directly via the canonicalclause_key. A blocker is a clause, so this is the same rule-quotient asCover::blocker_orbits— but with no2ⁿcorner geometry and no 63-variable ceiling, so it runs at scales where the cube is astronomically large. The orbit count is the number of essentially-distinct rules. (Generators that move a clause off the set are simply not followed — only genuine rule-automorphisms close orbits.) - clauses_
to_ expr - Build the CNF
ProofExprover atomsx{var}from raw clauses — the door into the certified prover, scalable (no cube).Noneon an empty clause or empty formula. - collapse_
curve - Stack the generators one at a time and record how the orbit count shrinks — the executable answer
to “how much does each symmetry break cut the problem?” Begins at
2ⁿ(no symmetry) and descends as generators compose. The ratios are measured, not asserted. - components
- Partition a formula into its independent components — maximal clause groups sharing no variable (the connected components of the variable-interaction graph). The formula is the conjunction of its components, so it is UNSAT iff any component is, and each can be attacked on its own. A structured UNSAT component buried in a big mixed formula — invisible to the monolithic cut — is laid bare here.
- crush
- The unified crush. Compose every lever into one decision procedure: carve the autark sections
(pure literals), split into independent components, and decide each by the cut-enabled
symmetry-aware search — a component refuted by a certified cut at the root closes in one node, the
rest fall to bounded branch-and-cut. The formula is UNSAT iff any component is, SAT iff all are.
Returns
Noneonly when a component blows past the budget — the genuinely hard residue, honestly surfaced rather than hidden. - cube_
group_ closure - The full group generated by
generators, materialized (closure under composition) — the public door onto the otherwise-internal [group_closure]. For the small groups the census needs (Bₙ,n ≤ 5⇒|G| = 3840) the orbit–stabilizer cross-checks sum over every element. - decide_
2sat - Decide a width-≤2 CNF in polynomial time via the 2-SAT SCC solver.
true= satisfiable. An empty clause forces UNSAT. Panics if handed a clause wider than 2 (not a 2-SAT instance). - decide_
laddered - Ladder up the hypercube: crush what we can, brute-force the rest. Branch-and-cut over
{0,1}ⁿ, one variable at a time — exactly DPLL with our certified cuts as the theory: - decide_
laddered_ nocut - The baseline the symmetry-pruned search is measured against: the same branch engine with no cut
and no generators (so
violates_lex_leadernever fires). Isolates the effect of symmetry pruning. - decide_
laddered_ sym - Symmetry-break the search itself. The same branch-and-cut ladder, but it branches variables in index order and prunes a node whenever a root automorphism maps its decided prefix to a lexicographically smaller decided assignment — classic lex-leader symmetry breaking during search. Sound by construction: every orbit of assignments keeps exactly one lex-leader, and only strict non-leaders are pruned, so the verdict never changes; symmetric subtrees are simply skipped. The automorphisms are discovered once at the root.
- decide_
sat_ via_ 2sat_ backdoor - Decide satisfiability through a 2-SAT backdoor: the instance is satisfiable iff some fixing of
Uleaves a satisfiable 2-SAT residual. This solves in2^{|U|}polynomial branches instead of a2ⁿsearch — the structure (the backdoor) turned an exponential into a small, easy fan-out.Umust be a strong backdoor to 2-SAT (every residual width ≤ 2). - decompose_
and_ crush - Decompose into independent components and crush: return
true(UNSAT) the moment any component is refuted by a certified cut, never having examined the rest. Isolating a structured UNSAT component unlocks a cut the monolithic formula hides. - diagnose
- Run every lever’s detector and report what applies. The automated “what can we still do” — one call, the whole portfolio probed.
- eliminate_
variable - Carve out a dimension. Eliminate variable
vby resolution (Davis–Putnam): drop every clause mentioningv, and add the non-tautological resolvents of eachv-clause against each¬v-clause. Geometrically this projects the cube’sv-axis away — the formula overndimensions becomes an equisatisfiable one overn-1. Sound: a model of the projection lifts to a model of the original. - face_
vector - Geometry — the f-vector. The number of blockers of each face dimension. A symmetry permutes blockers among themselves but preserves each one’s dimension, so the f-vector is a geometric invariant of the cover (the discrete analog of a polytope’s face counts).
- find_
random_ core - Find the randomness. Strip every structural lever — a certified cut decides it (so there was no
irreducible randomness), carve (unit/pure/subsumption) and bounded variable elimination peel structure
away — and return what survives: the irreducible core.
Nonemeans the instance was fully structured and got decided.Some(core)is the kernel where carving can do no more; check it withdiagnose— if it also has no cut and ~zero symmetry-bits, that is the randomness, isolated. - greedy_
2sat_ backdoor - Greedily find a backdoor to 2-SAT: a set of variables
Usuch that every clause has at most two literals outsideU. Then under any assignment toU, each clause is either satisfied or shrinks to width ≤ 2, so the residual is 2-SAT — poly-decidable. Built by repeatedly fixing the variable that appears in the most still-too-wide clauses (a hitting set of the wide clauses). - hyperoctahedral_
generators - Generators of the full hyperoctahedral group
Bₙ = (ℤ/2)ⁿ ⋊ Sₙ— the signed permutations, the automorphism group of then-cube and the complete clause-level symmetry: everyCubeSymis one of its elements. Then−1adjacent coordinate transpositions generateSₙ; the single coordinate-0 flip, conjugated by those, generates the(ℤ/2)ⁿof phase flips; together they generate all ofBₙ. Thecube_group_closureof these has order exactly2ⁿ·n!(1, 2, 8, 48, 384, 3840forn = 0..=5). The census quotients minimal covers by this group. - is_
antipodally_ symmetric - Is the cover invariant under the antipodal map — global negation
x → ¬x, the center-inversion of the cube? True iff flipping every literal of every clause maps the clause set onto itself. This is a symmetry axis distinct from coordinate permutation: it is the involution whose unique fixed point is the ½-center (CubeSym::map_fractionalwith all flips and no permutation fixes½ⁿ). When it holds, satisfying assignments come in antipodal pairs{a, ¬a}, so one variable’s value is free WLOG. - is_
strong_ backdoor_ to_ 2sat - Verify
Uis a strong backdoor to 2-SAT by enumeration: every one of the2^{|U|}assignments toUyields a residual of width ≤ 2. Bounded to|U| ≤ 24(the enumeration guard). - is_
total_ via_ orbits - The symmetry-broken cover-totality check: when every generator is a verified automorphism,
the cover is total iff it covers one representative per orbit. Same verdict as
Cover::is_total, but it inspectsorbit_countcorners instead of2ⁿ.None(fail-closed) when some generator is not actually an automorphism — never a guessed answer. - min_
resolution_ width - The minimum width of a resolution refutation of an UNSAT cover — the size of the widest clause
any width-bounded refutation must carry, the classic resolution complexity measure (Ben-Sasson–
Wigderson). A subcube is a clause (
Subcube::clause_literals) andSubcube::resolveis the geometry of the resolution step; the empty subcube (care = 0, the whole cube blocked) is the derived contradiction. For width budgetwwe seed with the input blockers of support≤ wand saturate under width-≤ wresolution; the leastwthat derives the empty subcube is the width.Noneonly if the cover is satisfiable (no refutation at any width); every UNSAT cover succeeds byw = nsince full-width resolution is complete. (For small covers — it enumerates resolvents.) - minimal_
cover_ orbits - Enumerate every minimal UNSAT cover of the
n-cube, one canonical representative perBₙorbit. A minimal cover is a set of subcube blockers that covers every corner (UNSAT) and none of which is droppable (every blocker privately owns some corner) — i.e. a minimal unsatisfiable CNF (an MUS), the irreducible atom of the UNSAT universe. Branch on the lex-least uncovered corner: it lies in exactly2ⁿsubcubes (one per supportcare ⊆ [n], withvalue = corner & care); recurse on each. Monotone pruning kills a branch the moment any chosen blocker becomes fully redundant (it can never recover a private corner once one is stolen). A leaf is total ∧ fully essential; leaves are folded to theircanonical_coverkey so each orbit is reported once. (Exhaustive; for smalln.) - model_
orbit - Symmetry generates solutions. From one model, the entire orbit under a generating set of automorphisms — every member a model too, produced with no search. The generative dual of resolution (which begets rules from symmetry); here symmetry begets solutions.
- orbit_
count - How many orbits the corners fall into under these generators.
- orbit_
representatives - Orbit partition of the
2ⁿcorners under a set of generators, each a verified automorphism. Returns one representative per orbit (the orbit-collapsed corner set the cover check needs). Materializes a2ⁿseen-bitmap, so this is itself bounded by the hypercube size — it measures the collapse rather than escaping it; the counting/parity shadows are what decide totality without the2ⁿwalk. Honest by construction. - partition_
into_ orbits - Symmetry-aware solution counting. Partition a set of models into orbits under a generating set
of automorphisms; each orbit is the full
model_orbitof any of its members. The solution count is the sum of the orbit sizes, so a symmetric instance collapses to one representative per orbit — far fewer than the solutions themselves. (modelsshould be closed under the symmetry, e.g. all models.) - perm_
group_ closure - The full symmetry group: every distinct
Permreachable by composing the generators (closure under composition). Small-group only — the orbit-stabilizer accounting below needs the whole group, not a generating set. Includes the identity. - php_
cover - The pigeonhole cover:
npigeons inton-1holes. Variable(p,h)(“pigeonpin holeh”) lives at indexp*(n-1)+h, matchingcrate::families::php. Always buildable, always UNSAT. - php_
perm_ symmetries - The pigeonhole grid symmetry group
Sₙ × Sₙ₋₁as scalablePerms — adjacent pigeon (row) and hole (column) transpositions over then*(n-1)grid variables. Nou64cap. - php_
symmetries - The generating symmetries of the pigeonhole cover: adjacent transpositions of pigeons (rows) and
of holes (columns). Together they generate the full grid symmetry group
Sₙ × Sₙ₋₁— pure coordinate permutations (no phase flips). Each is aCubeSymover then*(n-1)grid variables. - pigeonhole_
abstract_ refutation - Symmetry-break pigeonhole to its abstract certificate. The rules collapse (via
clause_orbits) to exactly two types regardless ofn; the abstract invariant on those types is Hall’s condition, witnessed by theO(1)counting certificate pigeons > holes. The whole certificate is constant in size and identical in shape at every scale — the auto-collapse of pigeonhole, lifted to the type level where it actually scales.Noneonly in the degenerate hole-free case. - pigeonhole_
rule_ symmetry - The rule-symmetry signature of pigeonhole at scale
n, computed at the clause level with the full grid groupSₙ × Sₙ₋₁. The blocker set grows superlinearly and the cube has2^{n(n-1)}corners, yet the rules always collapse to exactly two orbits — the complexity limit symmetry exposes, computable at anynbecause it never touches the cube. - pure_
literal_ reduce - Cut out the autark sections. A pure literal (a variable appearing in only one polarity) is the
simplest autarky: assigning it satisfies every clause it touches, so that whole section of the cube is
removed without affecting satisfiability. Iterate to a fixpoint and what remains is the hard core —
the part with no free section to cut. Returns
(core clauses, assigned pure literals). Sound: pure- literal elimination preserves satisfiability (Davis–Putnam). - renaming_
to_ horn - Recognize a new symmetry: renamable-Horn. Is there a flip-renaming under which every clause has
at most one positive literal (Horn)? Horn-SAT is polynomial (unit propagation finds the least model),
so a renamable-Horn formula is in a poly class our field cuts cannot see. Crucially, finding the
renaming is itself a 2-SAT: a clause is Horn-after-flip iff no two of its literals are both positive,
and “literal
lis positive after flip” is the singlef-literal(l.var, l.is_positive). Returns the flip-set, orNoneif no renaming makes it Horn. - restrict
- The residual CNF after fixing variables:
assignment[v] = Some(b)fixesv,Noneleaves it free. Clauses satisfied by a fixed literal are dropped; falsified literals are removed. An empty clause in the result means the restriction already falsifies the formula. - search_
cost - Run the branch engine purely to measure its size, with
use_cutselecting whether the certified cuts fire, and a hardbudgeton visited nodes so a resolution-class explosion is recorded asExceededinstead of running forever. With the cut off this is raw DPLL (resolution-strength); with it on, the certified cut closes whole subtrees. The apples-to-apples gap between the two is the campaign’s thesis, quantified. - search_
cost_ antipodal - Recursive antipodal symmetry breaking. Branch search that, at every node, re-detects whether
the residual is antipodally symmetric (
is_antipodally_symmetric); when it is, it fixes the pivot tofalseWLOG and prunes thetruebranch — soundly, since the residual’s models come in antipodal pairs. A disjoint union of self-complementary blocks keeps regaining the symmetry as each block’s first variable is fixed, so the break fires recursively, collapsing one factor of 2 per block. - stabilizer
- The stabilizer of a witness — the subgroup of symmetries that fix it (
σ·m = m). These are the transformations under which the witness sees itself; they are exactly the redundancy in its perspective of the others. - structural_
profile - Profile an instance: collapse its rules to orbit-types, probe which cut decides it, and carve it to its irreducible core. The reading that emerges — quotient size tracks cut-decidability tracks core reducibility — is the single axis underneath every lever: difficulty is quotient size.
- symmetric_
resolution_ closure - Symmetric resolution closure on orbit representatives: resolve each representative against every
image in another representative’s orbit. Since resolution commutes with symmetry —
σ(resolve(c,d)) = resolve(σc,σd)— this captures every derivable rule up to symmetry without building the raw exponential closure. Returns the saturated count of orbit-types and whether the empty clause (a refutation) was derived, bounded bymax_roundsand amax_repssize guard. - symmetric_
resolution_ growth - Symmetric resolution closure — rules beget rules, collapsed by symmetry. From a cover’s blockers, repeatedly resolve all pairs (each resolvent a new rule) and record, per round, both the raw count of distinct derived rules and the count of their orbit representatives under the automorphism group. The widening gap between the two is the symmetry collapse of the resolution proof: raw resolution explodes, but modulo symmetry only a handful of essentially-distinct rules are ever derived — the geometric reason symmetric proof systems refute pigeonhole in polynomial size where plain resolution cannot.
- symmetry_
entropy_ bits - Information theory — the bits of symmetry.
log₂|Aut|is the symmetry-entropy: the number of bits the automorphism group compresses out of the formula’s description (knowing one orbit representative plus the group recovers the rest). High for symmetric structure, exactly0for a rigid one — and that zero is the maximal-information, incompressible extreme. - walsh_
hadamard_ energy - Analysis — the Walsh–Hadamard (Fourier) spectrum. Expand the cover’s vertex-energy function over
the cube’s characters
χ_S(x) = (-1)^{⟨S,x⟩}:f̂(S) = 2⁻ⁿ Σ_x energy(x) χ_S(x). Harmonic analysis on the hypercube — the coefficients are the analytic invariant. (n ≤ ~16.) - weakest_
crushing_ rung - Locate an instance on the
ProofRungladder: the weakest certified cut that crushes it, probed cheapest-first (carve ≺ counting ≺ parity ≺ Nullstellensatz-by-degree). The narrow rungs (Counting,Parity) are incomparable; probe order only decides the label when more than one happens to fire. - weakest_
crushing_ rung_ with_ char weakest_crushing_rungwith the characteristic rungs enabled — the same cascade, plus, between the parity probe and the algebraic ascent, a certified mod-pcut per prime inprimes: when the CNF is a recognized one-hot encoding of aGF(p)linear system (crate::modp::recover_from_cnf, which declines rather than guesses) and theGF(p)Gaussian refutation re-checks (crate::modp::is_refutation), the instance lands onProofRung::ModCount. This is the ladder rung the census’srouter_beats_ladderaudit flagged as missing: the structured router’sRoute::ModPspecialist finally has a certified proof system the ladder can name. Withprimes = &[]the cascade is exactly the legacy one.- witness_
perspective - Symmetry-break across the witness’s perspective of the other witnesses. From witness
m, every other witness in its orbit is reached by some symmetry — but many symmetries land on the same one (they differ by a stabilizer element ofm). The symmetry-broken perspective quotients that redundancy out: exactly one representative transformation per distinct witnessmcan see — a transversal of the coset spaceG / Stab(m). The returned(witness, σ)pairs satisfyσ·m = witness, and their count is|G| / |Stab(m)| = |orbit(m)|(orbit–stabilizer). The first entry is(m, identity): the witness’s view of itself.
Type Aliases§
- Corner
- A corner (vertex) of the hypercube
{0,1}ⁿ: bitvholds the value of variablev. Enumeration routines assumen ≤ 63; the algebra itself is width-agnostic.