def test_complex_conversion_to_nnf(self): """ Tests the conversion of complex formulas that aren't in nnf yet. """ formula = bf.And([bf.Var("a"), bf.And([bf.Var("b"), bf.Var("a")]), bf.Or([bf.Var("c"), bf.Var("b")])]) result = bf.And([bf.Var("a"), bf.And([bf.Var("b"), bf.Var("a")]), bf.Or([bf.Var("c"), bf.Var("b")])]) self.assertEqual(result, au.nnf(formula), "Invalid formula, expected the same as specified by result.") formula = bf.And( [bf.Not(bf.Var("a")), bf.Or([bf.And([bf.Var("a"), bf.Var("b"), bf.Var("c")]), bf.Not(bf.Var("b"))])] ) result = bf.And( [bf.Not(bf.Var("a")), bf.Or([bf.And([bf.Var("a"), bf.Var("b"), bf.Var("c")]), bf.Not(bf.Var("b"))])] ) self.assertEqual(result, au.nnf(formula), "Invalid formula, expected the same as specified by result.") formula = bf.And( [ bf.Not(bf.Var("a")), bf.Or([bf.And([bf.Var("b"), bf.Var("c"), bf.Var("d")]), bf.Not(bf.Var("c"))]), bf.Var("a"), ] ) result = bf.And( [ bf.Not(bf.Var("a")), bf.Or([bf.And([bf.Var("b"), bf.Var("c"), bf.Var("d")]), bf.Not(bf.Var("c"))]), bf.Var("a"), ] ) self.assertEqual(result, au.nnf(formula), "Invalid formula, expected the same as specified by result.")
def test_formulas_already_in_nnf(self): """ Tests the conversion of formulas that are already in nnf form. """ formula = bf.Or([bf.And([bf.Var("a"), bf.Var("b")]), bf.Var("c")]) self.assertEqual(formula, au.nnf(formula), "Invalid formula, expected the same as entered.") formula = bf.And([bf.Or([bf.Var("a"), bf.Var("b")]), bf.Var("c")]) self.assertEqual(formula, au.nnf(formula), "Invalid formula, expected the same as entered.") formula = bf.And([bf.Var("a"), bf.Or([bf.Var("b"), bf.And([bf.Var("c"), bf.Var("d")])])]) self.assertEqual(formula, au.nnf(formula), "Invalid formula, expected the same as entered.") formula = bf.Or([bf.Var("a"), bf.Not(bf.Var("b"))]) self.assertEqual(formula, au.nnf(formula), "Invalid formula, expected the same as entered.") formula = bf.And([bf.Var("a"), bf.Not(bf.Var("b"))]) self.assertEqual(formula, au.nnf(formula), "Invalid formula, expected the same as entered.") formula = bf.And([bf.Var("a"), bf.Not(bf.Var("b"))]) self.assertEqual(formula, au.nnf(formula), "Invalid formula, expected the same as entered.") formula = bf.Or( [bf.And([bf.Var("a"), bf.Or([bf.Not(bf.Var("b")), bf.Var("c")]), bf.Not(bf.Var("b"))]), bf.Var("d")] ) self.assertEqual(formula, au.nnf(formula), "Invalid formula, expected the same as entered.") formula = bf.And([bf.Var("a"), bf.Or([bf.Var("b"), bf.Not(bf.Var("c"))])]) self.assertEqual(formula, au.nnf(formula), "Invalid formula, expected the same as entered.") formula = bf.Or([bf.And([bf.Var("a"), bf.Var("b")]), bf.And([bf.Var("a"), bf.Not(bf.Var("c"))])]) self.assertEqual(formula, au.nnf(formula), "Invalid formula, expected the same as entered.")
def test_negation_of_bool_values_to_nnf(self): """ Tests the conversion of boolean values using the nnf method. """ formula = bf.Not(bf.Tru()) result = bf.Fls() self.assertEqual(result, au.nnf(formula), "Invalid formula, expected the same as specified by result.") formula = bf.Not(bf.Fls()) result = bf.Tru() self.assertEqual(result, au.nnf(formula), "Invalid formula, expected the same as specified by result.")
n1 = bf.Not(bf.And([x1, x2, x3, x4])) n2 = bf.Not(bf.Or([x1, x2, x3, x4])) # And and1 = bf.And([x1, x2, x3, x4]) and2 = bf.And([x1, bf.And([x1, x2, x3, x4]), x4, x3, x2]) # this is equivalent to bf.And([x1, x1, x2, x3, x4, x4, x3, x2]) and3 = bf.And([]) # bf.And([]) is equivalent to bf.Tru() # Or or1 = bf.Or([x1, x2, x3, x4]) or2 = bf.Or([x1, bf.Or([x1, x2, x3, x4]), x4, x3, x2]) # this is equivalent to bf.Or([x1, x1, x2, x3, x4, x4, x3, x2]) or3 = bf.Or([]) # bf.Or([]) is equivalent to bf.Fls() # Examples of using the nnf method print "NNF EXAMPLES:" print au.nnf(bf.Not(bf.Not(bf.Var("b")))) print au.nnf(bf.Or([bf.And([bf.Var("a"), bf.Var("b")]), bf.Var("c")])) print au.nnf(bf.Not(bf.Or([bf.Var("a"), bf.Var("b")]))) print au.nnf(bf.And([bf.Var("a"), bf.And([bf.Var("b"), bf.Var("a")]), bf.Or([bf.Var("c"), bf.Var("b")])])) print "-----------------------------------------------------------------------------------------------------------------\n" # Examples of using the cnf method print "CNF EXAMPLES:" print au.cnf_nnf(bf.Or([bf.Var("b"), bf.Var("c")])) print au.cnf_nnf(bf.And([bf.Not(bf.Var("a")), bf.Or([bf.Var("b"), bf.Var("c")])])) print au.cnf_nnf(bf.And([bf.Var("a"), bf.Or([bf.Var("b"), bf.And([bf.Var("c"), bf.Var("d")])])])) print au.cnf_nnf(bf.Not(bf.Or([bf.Var("a"), bf.Var("b"), bf.Not(bf.Fls())]))) print "-----------------------------------------------------------------------------------------------------------------\n" # Examples of using the simplify method print "SIMPLIFY EXAMPLES:"