Documentation

Complexitylib.SAT.Tseitin.Defs

Tseitin splitting from CNF to exact 3-CNF #

This definitions layer gives a total fresh-variable-threaded transformation from the existing unbounded-width SAT.CNF representation to exact 3-CNF.

Short nonempty clauses are padded by repeating literals. An empty clause is replaced by a contradictory pair of width-three unit clauses. A clause of width at least four is split by the standard chain

(a ∨ b ∨ z) ∧ (¬z ∨ rest).

Fresh counters are threaded across clauses, beginning above the largest source variable. Correctness and size theorems live in the internal and public layers.

Negate a literal without changing its variable.

Equations
Instances For

    Positive literal on variable v.

    Equations
    Instances For

      Negative literal on variable v.

      Equations
      Instances For

        Number of fresh variables consumed while splitting one clause. Empty clauses use one variable for a contradictory gadget; a clause of width k ≥ 4 uses k - 3 chain variables.

        Equations
        Instances For
          @[irreducible]

          Split one clause into exact-width-three clauses, drawing auxiliary variables consecutively from next.

          Equations
          Instances For

            Total number of literal occurrences in a CNF.

            Equations
            Instances For

              Total number of fresh variables consumed by all clause splitters.

              Equations
              Instances For

                Split every clause while threading the fresh-variable counter. The second component is the first unused variable after the transformation.

                Equations
                Instances For

                  Convert an arbitrary CNF to exact 3-CNF. Auxiliary variables begin one past the largest variable occurring in the source.

                  Equations
                  Instances For