Size-controlled reduction from CNF-SAT to 3SAT #
CNF.to3 replaces every source clause by an exact-width-three formula. Empty
clauses become a contradictory pair, short clauses repeat literals, and wide
clauses use a chain of fresh variables. The transformation is equisatisfiable
and its concrete unary-variable encoding is quadratically bounded.
ThreeSAT.reduction lifts the typed transformation to a total bit-string map.
Malformed source encodings are sent to ThreeSAT.fallbackEncoding, a fixed
valid no-instance. Machine-level polynomial-time computability is deliberately
separate from this semantic layer.
Main results #
CNF.to3_is3CNF— the output has exactly three literals per clauseCNF.to3_satisfiable_iff— equisatisfiabilityCNF.encode_to3_length_le— quadratic encoded-size boundThreeSAT.reduction_correct— total encoded membership equivalence
Splitting from a counter above every source variable preserves and reflects satisfiability.
Splitting produces an exact 3-CNF.
Splitting preserves and reflects satisfiability.
The returned counter is exactly the initial counter plus the number of fresh variables consumed by the formula.
The transformed clause count is linear in source literal and clause counts.
A typed CNF's transformed encoding belongs to 3SAT exactly when the source formula is satisfiable.
A typed CNF split from any fresh counter belongs to 3SAT exactly when the source formula is satisfiable.
Semantic correctness of the total encoded reduction.
Source-first orientation of reduction_correct, matching the convention
used by polynomial-time many-one reductions.