Files
SAT-SOLVING-EXAMPREP/Encoding.md
T
2026-08-09 14:08:05 +02:00

2.6 KiB
Raw Blame History

CNF (Conjunctive Normal Form)

  • Conjunction of Disjunctions
  • 'AND' of 'OR's
  • (0 \lor 1 \lor -2) \land (0 \lor -5)

DNF (Disjunctive Normal Form)

  • Conjunction of Disjunctions
  • 'AND' of 'OR's
  • (15 \land 1 \land -2) \lor (1 \land -5)
  • Easy to see if there is a SAT assignment
    • Is any Clause SAT?
    • Conversely In CNF finding an UNSAT assignment is easy

Variables as Integers

  • x, y, z \mapsto 1, 2, 3
  • Efficient representation
  • Can store assignments in an array
  • Negation -var has a literal meaning in code

Encoding Problems to boolean formula

  • For example compile: if x then y else z \mapsto (x \land y) \lor (\lnot x \land z)
  • What do you encode?
    • Equivalence of two programs?
    • compile(A) \cancel\leftrightarrow compile(B)
    • Encode this, if its SAT we have a counterexample

NNF / Negation Normal Form

  • Mixture of 'AND's and 'OR's
  • But negation can only be in front of Variables
  • Can be made easily using De Morgan
  • Naive transformation from NNF to CNF
    • by merging via 'OR-distribution'
    • Merge on: (a \lor b) \lor (c \land d) \mapsto (a \lor b \lor c) \land (a \lor b \lor d)
  • Exponential Fan out

Tseitin Transformation

  • Extract Formula nodes into new variables and create a constraint list
  • ((a \leftrightarrow b) \land (c \lor \overline{d}))
    • x_1 \leftrightarrow (a \leftrightarrow b)
    • x_2 \leftrightarrow \overline d
    • x_2 \leftrightarrow (c \lor x_2)
    • x_4 \leftrightarrow (x_1 \land x_3)
  • Then transform all of them to CNF and conjunct them !tseitin.png
  • The resulting formula grows linearly in respect to the size of the original formula
  • Sometimes taking dividing into binary operations is not optimal (xor optimum is 3)

PlaistedGreenbaum (PG)

  • Only use implication instead of equivalence \leftrightarrow
  • Direction depends on polarity of the subformula's occurrence
    • Positive polarity: only need x \rightarrow \varphi
    • Negative polarity: only need \varphi \rightarrow x
    • Mixed polarity (e.g. under XOR/biconditional): need both, i.e. full Tseitin x \leftrightarrow \varphi
  • Example x \leftrightarrow (a \land b): positive occurrence needs (\overline x \lor a) \land (\overline x \lor b); negative occurrence needs just (\overline a \lor \overline b \lor x)
    • Positive occurrence: x appears unnegated in F, e.g. F = x \lor c (as a\land b becomes true, F can only become 'more satisfied') \Rightarrow only need x \rightarrow (a \land b)
    • Negative occurrence: x appears negated in F, e.g. F = \overline x \lor c (mirror case, F becomes 'more satisfied' as a \land b becomes false) \Rightarrow only need (a \land b) \rightarrow x