# Solver Notes

## Formula Notes

The stripped CNFs encode a Steiner triple/cap-set problem. The all-positive
ternary clauses are exactly the high-level triples over the primary variables:
an assignment selects an independent set by setting primary variables false,
and every triple clause forbids selecting all three points. The remaining
clauses are a Horn-like sequential cardinality witness with one positive unit;
it forces at least `k` selected/false primary variables.

The visible family has recursive Steiner systems with parameters such as
9/15/27/45/135/243/405/729. The known constructive cap thresholds used only
to avoid wasted search are 4, 6, 9, 15, 20, 32, 45, 70, and 112 respectively.
The solver never returns UNSAT from these thresholds; above-threshold cases
return UNKNOWN because there is no VeriPB proof generator yet.

## Techniques Used

- Structural detection from clauses only: primary variables are recovered from
  all-positive ternary clauses, with no dependence on comments or filenames.
- Threshold recovery by unit propagation on the non-hyperedge Horn/cardinality
  clauses.
- Direct cap construction using randomized greedy search, recursive two-copy
  seeds from induced first-third subsystems, an explicit Hill 112-cap for the
  729-point affine system, destroy-and-rebuild maximal cap search, and
  fixed-size conflict repair on small systems.
- Full assignment reconstruction by unit propagation over the original CNF,
  followed by an independent full clause check before printing SATISFIABLE.
- Bounded primary-variable DPLL proof generation for small above-cap cases
  (`v <= 27`), emitting RUP clauses that VeriPB checks directly.

## Remaining Things To Try

- Add explicit affine/Hill cap constructions for AG(5,3) and AG(6,3), which
- Add an explicit affine Hill 45-cap construction for AG(5,3), similar to the
  Hill 112-cap now used for AG(6,3).
- Design a compact VeriPB proof strategy for small above-cap cases, especially
  9/5, 27/10, and 45/16.
- Improve recursive cap composition for the 135 and 405 point systems. Current
  two-copy seeds land just below the visible SAT thresholds.

## Known Limitations

- UNSAT is claimed only for small systems where the generated RUP proof is
  expected to verify; larger above-cap cases still return UNKNOWN.
- Large SAT cases that require exact maximal caps may still return UNKNOWN if
  local search does not find a cap before the deadline.
- The cap-size table is used only as a conservative UNKNOWN cutoff; soundness
  still comes from constructing and verifying a concrete model.

## Changelog

- Initial scaffold replaced with C++ structural parser and UNKNOWN solver.
- Added Steiner triple detection, cardinality threshold inference, cap search,
  model completion, and full CNF verification.
- Added recursive/two-copy seeds and destroy-and-rebuild maximal cap search,
  improving the 243/45 visible SAT instance from timeout to a quick SAT model.
- Disabled the memory-heavy fixed-size repair phase on systems with at least
  100 primary points after broker feedback showed OOMs on 135/32 and 729/112;
  these now fail conservatively as UNKNOWN if maximal-cap rebuilding misses.
- Added the block-design Hill cap construction for 729 primary variables
  (80 weight-3 vectors from a 2-(6,3,2) design plus 32 full-weight vectors with
  even parity of 2s), verified against the recovered triples before use.
- Added a bounded DPLL-to-RUP proof generator for small UNSAT thresholds and
  locally verified proofs for 9/5, 15/7, and 27/10 with VeriPB.
- Filled solver metadata and documented current structure, limitations, and
  next proof/construction work.
