# Solver Notes

## Formula Notes

- The family uses two length-`N` support vectors. Clauses 1 and 3 force the
  identity entries true, and two long clauses require a non-identity entry in
  each vector.
- Variables `2N+1 .. 2N+N^2` are a dense AND layer for all products
  `x_i & y_j`, in row-major order. This is detected from the exact
  `(-z a)`, `(-z b)`, `(-a -b z)` pattern, not comments or filenames.
- The remaining small clauses are parity encodings over GF(2): binary
  equalities, ternary parity clauses, and 4-variable XOR/XNOR Tseitin gates.
  Eliminating auxiliary parity variables leaves a compact quadratic system
  over the AND terms.
- The projected quadratic rows partition all `N^2` pair-products. The single
  RHS-1 row is the identity coefficient of the group-ring equation
  `alpha * beta = 1`; all other rows force zero coefficients.
- The Hantzsche-Wendt instances use shortlex order in generators
  `a,A,b,B`. The `N=93` SAT instance is handled by normalized automorphic
  21-term support pairs whose product equations are still checked against the
  recovered CNF structure.

## Techniques Used

- Structural detector for the support-vector, AND, and XOR/XNOR layers.
- GF(2) Gaussian elimination over the parity layer to project constraints onto
  pair-product terms.
- SAT-only search: sparse support enumeration, random linearization by fixing
  one support vector and solving for the other, and quadratic local search over
  the projected equations.
- Algebraic repair: local-search near misses are linearized over GF(2), solved
  as correction systems, and accepted only when the true quadratic residual
  decreases. Small Hantzsche-Wendt near misses also get bounded one/two-bit
  exact repair followed by solving the opposite support vector.
- Full CNF model reconstruction and verification before exit code 10. The
  solver never prints UNSAT.

## Remaining Things To Try

- Improve Soelberg search. Linearized repair reaches roughly 20-30 violated
  product equations on `soelberg_unit_159`, but no reliable support pair has
  been recovered yet.
- Recover more algebraic multiplication structure from the projected rows and
  search for nilpotent augmentation elements directly.
- Add a VeriPB strategy only after the algebraic UNSAT certificate is clear.

## Known Limitations

- UNSAT instances return UNKNOWN because there is no proof generator.
- SAT success depends on stochastic search and may need most of the 600 second
  instance budget.
- The detector assumes the dense row-major AND layer and small parity clauses
  observed across the training split.
- Soelberg SAT cases still depend on stochastic/local search and may return
  UNKNOWN.
- Broker submission `eval_20260507T041903Z_2caba4d6` solved
  `hantzsche_wendt_unit_147` in 0.321s, returned UNKNOWN on the remaining
  visible train instances, and produced no invalid answers.

## Changelog

- Initial scaffold replaced with a C++ structural detector and SAT-only solver.
- Added XOR/XNOR parity extraction and GF(2) elimination over auxiliary parity
  variables.
- Added sparse enumeration and random linearized solves in both x-fixed and
  y-fixed directions.
- Added specialized quadratic local search and mandatory full-CNF model check.
- Added structural Gardam-unit support candidates derived from the published
  Hantzsche-Wendt group-ring unit; they are still accepted only after solving
  for the inverse support and verifying the full CNF.
- Added bounded low-conflict repair: near 10 violated projected equations,
  the solver tries one- and two-bit support perturbations followed by exact
  GF(2) repair of the opposite support vector.
- Updated metadata and build notes for broker submission.
- This run: added a parity-analysis tool that confirms projected rows partition
  all pair-products and records row-size distributions for Hantzsche-Wendt and
  Soelberg instances.
- This run: added direct normalized Hantzsche-Wendt support-pair candidates,
  including an automorphic 21-term pair that solves `N=93` immediately after
  full CNF verification.
- This run: added GF(2) linearized local-search repair and raised bounded
  exact perturbation repair for small near-miss Hantzsche-Wendt cases.
- This run: added a small support floor for larger-instance local search to
  avoid sparse near-trivial Soelberg traps observed during 300s local runs.
