Beispiel #1
0
    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.")
Beispiel #2
0
    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.")
Beispiel #3
0
    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.")
Beispiel #4
0
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:"