235 lines
3.8 KiB
Python
235 lines
3.8 KiB
Python
"""Various tests on satisfiability using dimacs cnf file syntax
|
|
You can find lots of cnf files in
|
|
ftp://dimacs.rutgers.edu/pub/challenge/satisfiability/benchmarks/cnf/
|
|
"""
|
|
|
|
from sympy.logic.utilities.dimacs import load
|
|
from sympy.logic.algorithms.dpll import dpll_satisfiable
|
|
|
|
|
|
def test_f1():
|
|
assert bool(dpll_satisfiable(load(f1)))
|
|
|
|
|
|
def test_f2():
|
|
assert bool(dpll_satisfiable(load(f2)))
|
|
|
|
|
|
def test_f3():
|
|
assert bool(dpll_satisfiable(load(f3)))
|
|
|
|
|
|
def test_f4():
|
|
assert not bool(dpll_satisfiable(load(f4)))
|
|
|
|
|
|
def test_f5():
|
|
assert bool(dpll_satisfiable(load(f5)))
|
|
|
|
f1 = """c simple example
|
|
c Resolution: SATISFIABLE
|
|
c
|
|
p cnf 3 2
|
|
1 -3 0
|
|
2 3 -1 0
|
|
"""
|
|
|
|
|
|
f2 = """c an example from Quinn's text, 16 variables and 18 clauses.
|
|
c Resolution: SATISFIABLE
|
|
c
|
|
p cnf 16 18
|
|
1 2 0
|
|
-2 -4 0
|
|
3 4 0
|
|
-4 -5 0
|
|
5 -6 0
|
|
6 -7 0
|
|
6 7 0
|
|
7 -16 0
|
|
8 -9 0
|
|
-8 -14 0
|
|
9 10 0
|
|
9 -10 0
|
|
-10 -11 0
|
|
10 12 0
|
|
11 12 0
|
|
13 14 0
|
|
14 -15 0
|
|
15 16 0
|
|
"""
|
|
|
|
f3 = """c
|
|
p cnf 6 9
|
|
-1 0
|
|
-3 0
|
|
2 -1 0
|
|
2 -4 0
|
|
5 -4 0
|
|
-1 -3 0
|
|
-4 -6 0
|
|
1 3 -2 0
|
|
4 6 -2 -5 0
|
|
"""
|
|
|
|
f4 = """c
|
|
c file: hole6.cnf [http://people.sc.fsu.edu/~jburkardt/data/cnf/hole6.cnf]
|
|
c
|
|
c SOURCE: John Hooker (jh38+@andrew.cmu.edu)
|
|
c
|
|
c DESCRIPTION: Pigeon hole problem of placing n (for file 'holen.cnf') pigeons
|
|
c in n+1 holes without placing 2 pigeons in the same hole
|
|
c
|
|
c NOTE: Part of the collection at the Forschungsinstitut fuer
|
|
c anwendungsorientierte Wissensverarbeitung in Ulm Germany.
|
|
c
|
|
c NOTE: Not satisfiable
|
|
c
|
|
p cnf 42 133
|
|
-1 -7 0
|
|
-1 -13 0
|
|
-1 -19 0
|
|
-1 -25 0
|
|
-1 -31 0
|
|
-1 -37 0
|
|
-7 -13 0
|
|
-7 -19 0
|
|
-7 -25 0
|
|
-7 -31 0
|
|
-7 -37 0
|
|
-13 -19 0
|
|
-13 -25 0
|
|
-13 -31 0
|
|
-13 -37 0
|
|
-19 -25 0
|
|
-19 -31 0
|
|
-19 -37 0
|
|
-25 -31 0
|
|
-25 -37 0
|
|
-31 -37 0
|
|
-2 -8 0
|
|
-2 -14 0
|
|
-2 -20 0
|
|
-2 -26 0
|
|
-2 -32 0
|
|
-2 -38 0
|
|
-8 -14 0
|
|
-8 -20 0
|
|
-8 -26 0
|
|
-8 -32 0
|
|
-8 -38 0
|
|
-14 -20 0
|
|
-14 -26 0
|
|
-14 -32 0
|
|
-14 -38 0
|
|
-20 -26 0
|
|
-20 -32 0
|
|
-20 -38 0
|
|
-26 -32 0
|
|
-26 -38 0
|
|
-32 -38 0
|
|
-3 -9 0
|
|
-3 -15 0
|
|
-3 -21 0
|
|
-3 -27 0
|
|
-3 -33 0
|
|
-3 -39 0
|
|
-9 -15 0
|
|
-9 -21 0
|
|
-9 -27 0
|
|
-9 -33 0
|
|
-9 -39 0
|
|
-15 -21 0
|
|
-15 -27 0
|
|
-15 -33 0
|
|
-15 -39 0
|
|
-21 -27 0
|
|
-21 -33 0
|
|
-21 -39 0
|
|
-27 -33 0
|
|
-27 -39 0
|
|
-33 -39 0
|
|
-4 -10 0
|
|
-4 -16 0
|
|
-4 -22 0
|
|
-4 -28 0
|
|
-4 -34 0
|
|
-4 -40 0
|
|
-10 -16 0
|
|
-10 -22 0
|
|
-10 -28 0
|
|
-10 -34 0
|
|
-10 -40 0
|
|
-16 -22 0
|
|
-16 -28 0
|
|
-16 -34 0
|
|
-16 -40 0
|
|
-22 -28 0
|
|
-22 -34 0
|
|
-22 -40 0
|
|
-28 -34 0
|
|
-28 -40 0
|
|
-34 -40 0
|
|
-5 -11 0
|
|
-5 -17 0
|
|
-5 -23 0
|
|
-5 -29 0
|
|
-5 -35 0
|
|
-5 -41 0
|
|
-11 -17 0
|
|
-11 -23 0
|
|
-11 -29 0
|
|
-11 -35 0
|
|
-11 -41 0
|
|
-17 -23 0
|
|
-17 -29 0
|
|
-17 -35 0
|
|
-17 -41 0
|
|
-23 -29 0
|
|
-23 -35 0
|
|
-23 -41 0
|
|
-29 -35 0
|
|
-29 -41 0
|
|
-35 -41 0
|
|
-6 -12 0
|
|
-6 -18 0
|
|
-6 -24 0
|
|
-6 -30 0
|
|
-6 -36 0
|
|
-6 -42 0
|
|
-12 -18 0
|
|
-12 -24 0
|
|
-12 -30 0
|
|
-12 -36 0
|
|
-12 -42 0
|
|
-18 -24 0
|
|
-18 -30 0
|
|
-18 -36 0
|
|
-18 -42 0
|
|
-24 -30 0
|
|
-24 -36 0
|
|
-24 -42 0
|
|
-30 -36 0
|
|
-30 -42 0
|
|
-36 -42 0
|
|
6 5 4 3 2 1 0
|
|
12 11 10 9 8 7 0
|
|
18 17 16 15 14 13 0
|
|
24 23 22 21 20 19 0
|
|
30 29 28 27 26 25 0
|
|
36 35 34 33 32 31 0
|
|
42 41 40 39 38 37 0
|
|
"""
|
|
|
|
f5 = """c simple example requiring variable selection
|
|
c
|
|
c NOTE: Satisfiable
|
|
c
|
|
p cnf 5 5
|
|
1 2 3 0
|
|
1 -2 3 0
|
|
4 5 -3 0
|
|
1 -4 -3 0
|
|
-1 -5 0
|
|
"""
|