# Solver Notes

## Formula Notes

- The direct large instances are Mycielski graph coloring formulas. Variables are
  contiguous vertex/color blocks: M10 uses 767 vertices and 9 colors; M11 uses
  1535 vertices and 10 colors.
- Positive clauses are vertex at-least-one-color clauses. Negative binary clauses
  encode graph edges per color plus, for the direct large formulas, at-most-one
  color per vertex.
- The ternary clauses in the fully hinted direct formulas match the PR-proof
  helper clauses from the Mycielski graph proof literature. M10-hints-10 has the
  full recursive ternary layer needed by the current proof. M10 hints 6/7/9 do
  not; local VeriPB checks showed copied-edge RUP inferences fail there, so the
  solver now rejects them structurally.
- M11 hints 1/2/3/4 all have the full ternary count seen locally and pass the
  recursive copied-edge proof.
- `myciel6-tr` and `myciel6-cn` are different encodings. They are currently
  detected as unsupported and return UNKNOWN.

## Techniques Used

- Structural detector for full direct Mycielski encodings:
  - all positive clauses must form full contiguous vertex/color domains;
  - the vertex count must follow the Mycielski recurrence;
  - only known full-hint dimensions are enabled: 767x9 with at least 826272
    ternary clauses, or 1535x10 with at least 3099510 ternary clauses.
- VeriPB `red` strengthening:
  - root color symmetry is broken with explicit color-swap witnesses;
  - list-color at-most clauses are supported for encodings that omit them, though
    those paths are not currently marked supported for final UNSAT.
- Recursive RUP edge copying:
  - for each Mycielski subgraph, old edges are copied onto the corresponding
    shadow vertices;
  - these copied edges build the clique described by the PR proof;
  - the solver then branches on the clique vertices first.
- A small watched-literal CDCL engine logs every learned clause as `rup` and
  independently checks SAT models before printing SAT.

## Local Results

- Solved and locally VeriPB-checked:
  - `Mycielski-10-hints-10`: solver about 0.9s, proof about 5.1 MB, verifier
    about 17s locally.
  - `Mycielski-11-hints-1/2/3/4`: solver about 40-60s, proof about 32-35 MB,
    verifier about 120-165s and about 2 GB RSS locally.
- Returned UNKNOWN quickly:
  - M10 hints 6/7/9, `myciel6-tr`, `myciel6-cn`.
- Baseline to beat solved only one train instance, so the guarded direct proof
  path should improve solved count if the broker prover accepts the M11 proof
  sizes.

## Known Limitations

- The detector intentionally does not support shuffled direct encodings yet,
  because variable-to-vertex/color reconstruction for proof witnesses is not
  implemented.
- M10 partial-hint formulas are not solved. The copied-edge RUP proof is invalid
  there without additional PR/RED generation for missing ternary hints.
- The compact bit-vector coloring encoding (`myciel6-cn`) is not reverse-mapped
  to graph coloring proof steps.
- M11 proof checking is memory-heavy. If broker results show prover OOM or
  timeout, the next step is to add checked deletions or a direct PHP proof for
  the final clique to reduce proof pressure.

## Changelog

- Initial scaffold replaced with a C++20 solver compiled by the provided Ice
  Lake build script.
- Added DIMACS parser, watched-literal propagation, CDCL learning, SAT model
  checking, and VeriPB RUP proof output.
- Added graph-coloring RED strengthenings for at-most and root color symmetry.
- Added recursive Mycielski copied-edge RUP generator and clique-first branch
  order.
- Added structural guard after local invalid-proof findings on M10 hints 6/7/9.
- Updated metadata for broker submission.
