SATO: An Efficient Propositional Prover

SATO (Satissability Testing Optimized) is a propositional prover based on the Davis-Putnam method 3], which is is one of the major practical methods for the satissability (SAT) problem of propositional logic. The rst report of SATO appeared in 12]. Since then, we constantly add new techniques into SATO to make it more eecient 14, 13]. One of the major motivations to develop SATO was to attack open Latin square problems. While SATO works well on Latin square problems, its previous versions did not work well on many classes of the SAT problem. In the fall of 1996, we made an eeort to improve SATO so that it works well on a large set of the SAT problem. In the following, we discuss brieey two techniques that we found eeective to improve SATO performance. One is about splitting rules; the other is about connict analysis. While these two techniques are known in the community, the real challenge is how to integrate these techniques without weakening each other. We are happy to report here that the two techniques integrated very well with the techniques previously implemented in SATO. In the following discussions, we assume that the reader is familiar with propositional logic and the Davis-Putnam method 3]. One important place where heuristics may be inserted in the Davis-Putnam method is in the choice of a literal for splitting. It is well-known that diierent splitting rules make the performance of the Davis-Putnam algorithm diierent by a magnitude of several orders. While SATO provides several popular splitting rules, each rule works well only for a particular class of SAT instances. For instance, in our study of quasigroup problems, one rule seems better than the others: choose one literal in one of the shortest positive clauses (a positive clause is a clause where all the literals are positive). On the other hand, a proved eeective splitting rule is to choose a variable x such that the value f 2 (x)f 2 (:x) is maximal, where f 2 (L) is one plus the number of occurrences of literal L in binary clauses 2, 5]. We tried to combine the above two rules into one as follows: Let 0 < a 1 and n be the number of shortest non-Horn clauses in the current set. At rst, we collect all the variable names appearing in the rst da ne shortest positive clauses. Then we choose x in …