示例#1
0
 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
     }
示例#3
0
 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}
示例#4
0
 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})
示例#7
0
 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) 
示例#12
0
 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'])
示例#13
0
 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'}
示例#14
0
 def test_full_resolution_6(self):
     clauses = ['a || b', '!a || b', 'FALSE']
     assert not full_resolution(cnf.sentence('\n'.join(clauses)))
示例#15
0
 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}
示例#19
0
 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}