Automated Theorem Proving

Presentation on theme: "Automated Theorem Proving"— Presentation transcript:

Automated Theorem Proving
Lecture 2 Propositional Satisfiability

Decision procedures Boolean programs Arithmetic programs
Propositional satisfiability Arithmetic programs Propositional satisfiability modulo theory of linear arithmetic Memory programs Propositional satisfiability modulo theory of linear arithmetic + arrays

Case I: Boolean programs
Boolean-valued variables and boolean operations  Formula := b |  |    b  SymBoolConst

SAT First NP-complete problem (Cook 1972)
Davis-Putnam algorithm (1960) resolution-based may use exponential memory Davis-Logemann-Loveland algorithm (1962) search-based basis for all successful modern solvers Conflict-driven learning and non-chronological backtracking (1996) resolution strikes back! Amazing progress GRASP, SATO, Chaff, ZChaff, BerkMin, …

Conjunctive Normal Form
 CNF Formula ::= c1  c2  … cm c  Clause ::= l1  l2  … ln l  Literal ::= b | b b  SymBoolConst Unit clause ( l ) a clause containing a single literal Empty clause ( ) a clause containing no literal equivalent to false

Conversion into CNF In general, converting  into an equivalent CNF formula may result in an exponential blow-up We are only interested in satisfiability of  Convert into an equi-satisfiable CNF formula EQCNF()  is satisfiable iff EQCNF() is satisfiable size of EQCNF() is polynomial in size of 

Conversion into CNF Convert formula  into normal form NF()
NF() is polynomial in  Convert  = NF() into equisatisfiable CNF formula EQCNF() EQCNF() is polynomial in 

Normal Form Normal form: NF()   Negated normal form: NNF()  
NF(b) = b NNF(b) = b NF() = NNF() NNF() = NF() NF(1  2) = NF(1)  NF(1) NNF(1  2) = NNF(1)  NNF(2)

Equi-satisfiable CNF Let  be a formula in normal form.
For each subformula  of : - create a fresh symbol v in SymBoolConst Identify vb with b and vb with b Cl(b) = Cl(b) = true Cl() = Cl()  Cl()  (v  v  v)  (v  v)  (v  v) Cl() = Cl()  Cl()  (v  v  v)  (v  v)  (v  v) EQCNF() = v  Cl()

Resolution (c1  b) (c2  b) (c1  c2) c1, c2 independent of b
clauses (c1  b) (c2  b) (c1  c2) resolvent resolvent(b, c1  b, c2  b) = c1  c2 = b. (c1  b)  (c2  b)

  (c1  b)  (c2  b)  (c1  c2)
Theorem   (c1  b)  (c2  b) iff   (c1  b)  (c2  b)  (c1  c2) Adding the resolvent to the set of clauses does not affect the satisfiability of the clause set.

Unit resolution One of the clauses being resolved is a unit clause
( b ) (c2  b) ( c2 ) ( b ) (c2  b) ( c2 ) Derivation of the empty clause (denoted by ) ( b ) ( b )

Davis-Putnam algorithm (I)
Given clause set C: Rule 1: If a clause (c  l  l)  C, replace it with (c  l) Rule 2: If a clause (c  b  b)  C, remove it from C Rule 3a: If b does not occur in any clause in C, remove every clause containing b from C Rule 3b: If b does not occur in any clause in C, remove every clause containing b from C

Davis-Putnam algorithm (II)
Saturate C w.r.t Rules 1, 2, 3a, and 3b while (C is nonempty) { Pick a variable b appearing in some clause in C C’ = { resolvent(b,c1,c2) | c1,c2  C } Saturate C’ w.r.t. Rules 1, 2, 3a, and 3b if (  C’) return unsatisfiable C = C’ } return satisfiable

Satisfiable example (a  b  c) (b  c  f) (b  c) Rule 3a
(c  c  f) Resolve on b Rule 2 Clause set is empty

Unsatisfiable example
(a  b) (a  b) (a  c) (a  c) Pick b ( a ) (a  c) (a  c) Pick a ( c ) ( c ) Pick c

Correctness Saturate C w.r.t Rules 1, 2, 3a, and 3b
while (C is nonempty) { Pick a variable b appearing in some clause in C C’ = { resolvent(b,c1,c2) | c1,c2  C } Saturate C’ w.r.t. Rules 1, 2, 3a, and 3b if (  C’) return unsatisfiable C = C’ } return satisfiable Two observations: - Each of the rules 1, 2, 3a, and 3b preserve satisfiability - C’ = b. C

Memory explosion Saturate C w.r.t Rules 1, 2, 3a, and 3b
while (C is nonempty) { Pick a variable b appearing in some clause in C C’ = { resolvent(b,c1,c2) | c1,c2  C } Saturate C’ w.r.t. Rules 1, 2, 3a, and 3b if (  C’) return unsatisfiable C = C’ } return satisfiable Let n be the number of clauses in the input clause set Number of clauses after i-th iteration of loop: O(n^(2^i))

Davis-Logemann-Loveland algorithm

Davis-Logemann-Loveland algorithm
Eliminates exponential memory requirement Might still need exponential time

Conflict-driven learning and non-chronological backtracking