def test_resolution_solver(self): clauses = [ 'a || b', '!a || b || e', 'a || !b', 'b || !e', 'd || !e', '!b || !c || !f', 'a || !e', '!b || f', '!b || c' ] assert not full_resolution(cnf.sentence(clauses)) assert full_resolution(cnf.sentence(clauses[1:]))
def test_dpll4(self): clauses = [ 'a || b', '!a || b || e', 'a || !b', 'b || !e', 'd || !e', '!b || !c || !f', 'a || !e', '!b || f', '!b || c' ] result = dpll(cnf.sentence('\n'.join(clauses))) assert result == None result = dpll(cnf.sentence('\n'.join(clauses[1:]))) assert result == { 'a': False, 'b': False, 'c': False, 'd': False, 'e': False, 'f': False } result = dpll(cnf.sentence('\n'.join(clauses[:-1]))) assert result == { 'a': True, 'b': True, 'c': False, 'd': False, 'e': False, 'f': True }
def test_search_solver(self): search_solver = SearchSolver() clauses = [ 'a || b', '!a || b || e', 'a || !b', 'b || !e', 'd || !e', '!b || !c || !f', 'a || !e', '!b || f', '!b || c' ] result = search_solver(cnf.sentence(clauses)) assert result == None result = search_solver(cnf.sentence(clauses[1:])) assert result == {'a': -1, 'b': -1, 'c': 1, 'd': 1, 'e': -1, 'f': 1}
def test_unit_resolution(self): sent = cnf.sentence([ '!b || d', '!b || e', '!c || !e || !f', '!e || f', 'a || !b', 'b || !d || e', 'c || !e', 'd || !e', 'd || e' ]) resolved = unit_resolution(cnf.c('!a'), sent) expected = cnf.sentence([ '!a', '!b', '!b || d', '!b || e', '!c || !e || !f', '!d || e', '!e || f', 'a || !b', 'b || !d || e', 'c || !e', 'd || !e', 'd || e' ]) assert set(resolved.clauses) == set(expected.clauses) resolved = unit_resolution(cnf.c('!c'), resolved)
def test_search_solver1(self): clauses = ['a || b', '!a || b', '!a || !b'] result, models = search_solver(cnf.sentence('\n'.join(clauses))) assert result == {'a': False, 'b': True} assert models == [{'a': False, 'b': False}, {'a': False, 'b': True}]
def test_check_model1(self): clauses = ['a || b', '!a || !b'] sent = cnf.sentence('\n'.join(clauses)) assert not sent.check_model({'a': False, 'b': False}) assert not sent.check_model({'a': True, 'b': True}) assert sent.check_model({'a': False, 'b': True}) assert sent.check_model({'a': True, 'b': False})
def test_model_checker(self): sent = cnf.sentence([ '!a || b || e', 'a || !b', 'b || !e', 'd || !e', '!b || !c || !f', 'a || !e', '!b || f', '!b || c' ]) model = {'a': -1, 'e': -1, 'b': -1, 'f': 1, 'd': 1, 'c': 1} assert sent.check_term(model) model = {'a': -1, 'e': -1, 'b': 1, 'f': -1, 'd': -1, 'c': -1} assert not sent.check_term(model)
def test_dpll_contrastive(self): clauses = [ 'a || b', '!a || b || e', 'a || !b', 'b || !e', 'd || !e', '!b || !c || !f', 'a || !e', '!b || f', '!b || c', 'g1 || !a || b', 'g2 || !a || b', 'g3 || !a || b', 'g4 || !a || b', 'g5 || !a || b', 'g6 || !a || b', 'g7 || !a || b', 'g8 || !a || b', 'g9 || !a || b', 'g10 || !a || b', 'g11 || !a || b' ] result = dpll(cnf.sentence('\n'.join(clauses))) assert result == None
def test_search_solver(self): clauses = [ 'a || b', '!a || b || e', 'a || !b', 'b || !e', 'd || !e', '!b || !c || !f', 'a || !e', '!b || f', '!b || c', 'g1 || !a || b', 'g2 || !a || b', 'g3 || !a || b', 'g4 || !a || b', 'g5 || !a || b', 'g6 || !a || b', 'g7 || !a || b', 'g8 || !a || b', 'g9 || !a || b', 'g10 || !a || b', 'g11 || !a || b' ] result, models = search_solver(cnf.sentence('\n'.join(clauses))) assert result == None assert len(models) == 131072
def test_search_solver4(self): clauses = ['a || b', '!a || b || e', 'a || !b', 'b || !e', 'd || !e', '!b || !c || !f', 'a || !e', '!b || f', '!b || c'] result, models = search_solver(cnf.sentence('\n'.join(clauses))) assert result == None assert len(models) == 64 result, models = search_solver(cnf.sentence('\n'.join(clauses[1:]))) assert result == {'a': False, 'b': False, 'c': False, 'd': False, 'e': False, 'f': False} assert models == [{'a': False, 'b': False, 'c': False, 'd': False, 'e': False, 'f': False}] result, models = search_solver(cnf.sentence('\n'.join(clauses[:-1]))) assert result == {'a': True, 'b': True, 'c': False, 'd': False, 'e': False, 'f': True} assert len(models) == 50
def test_check_model2(self): clauses = ['!a || b || e', 'a || !b', 'b || !e', 'd || !e', '!b || !c || !f', 'a || !e', '!b || f', '!b || c'] sent = cnf.sentence('\n'.join(clauses)) model = {'a': False, 'b': False, 'c': True, 'd': True, 'e': False, 'f': True } assert sent.check_model(model) model = {'a': False, 'b': True, 'c': False, 'd': False, 'e': False, 'f': False } assert not sent.check_model(model)
def test_sent_str(self): sent = cnf.sentence('\n'.join(['!a || b || e', 'a || !b', 'b || !e'])) assert str(sent) == '\n'.join(['!a || b || e', 'a || !b', 'b || !e'])
def test_sent_symbols(self): sent = cnf.sentence('\n'.join([ '!a || b || e', 'a || !b', 'b || !e', 'd || !e', '!b || !c || !f', 'a || !e', '!b || f', '!b || c' ])) assert sent.symbols() == {'a', 'b', 'c', 'd', 'e', 'f'}
def test_full_resolution_6(self): clauses = ['a || b', '!a || b', 'FALSE'] assert not full_resolution(cnf.sentence('\n'.join(clauses)))
def test_full_resolution_5(self): clauses = ['a || b', '!a', '!b || c', 'c || d', '!d || !e', 'e'] assert full_resolution(cnf.sentence('\n'.join(clauses)))
def test_dpll3(self): clauses = ['a || b', '!a || b', 'a || !b', '!a || !b'] result = dpll(cnf.sentence('\n'.join(clauses))) assert result == None
def test_implicit3(self): clauses = ['a', '!b'] sent = cnf.sentence('\n'.join(clauses)) assert sent.implicit_model() == {'a': True, 'b': False}
def test_implicit2(self): clauses = ['a || b', '!a || b', 'c'] sent = cnf.sentence('\n'.join(clauses)) assert sent.implicit_model() == {'c': True}
def test_full_resolution_3(self): clauses = ['a || b', '!a', '!b || !c', 'c'] assert not full_resolution(cnf.sentence('\n'.join(clauses))) assert full_resolution(cnf.sentence('\n'.join(clauses[:-1])))
def test_dpll2(self): clauses = ['a || b', '!a || !b'] result = dpll(cnf.sentence('\n'.join(clauses))) assert result == {'a': False, 'b': True}