def test_init_and(self): gen = Generalization("and", [self.f1, self.f2]) self.assertEqual("and", gen.connective) self.assertEqual([self.f1, self.f2], gen.list) gen2 = Generalization("&", [self.f1, self.f2]) self.assertEqual("and", gen2.connective) self.assertEqual([self.f1, self.f2], gen2.list)
def test_cnf(self): g1 = Generalization( "or", [Formula("&", Formula("X"), Formula("!", Formula("Y")))]) g2 = Generalization("and", [ Generalization( "or", [Formula("&", Formula("X"), Formula("!", Formula("Y")))]) ]) self.assertEqual(Generalization("and", g1.cnf_action()), g2.cnf())
def test_remove_every(self): g1 = Generalization( "and", [self.f1, Formula("Z"), self.f2, Formula("Z")]) exp1 = Generalization("and", [self.f1, self.f2]) g2 = Generalization( "and", [self.f1, Formula("Z"), self.f1, Formula("Z"), self.f2]) exp2 = Generalization("and", [Formula("Z"), Formula("Z"), self.f2]) g1.remove_every(Formula("Z")) self.assertEqual(exp1, g1)
def test_is_closed(self): expansion1 = [ Generalization("or", [self.a1, self.l1]), Generalization("or", [self.a2]) ] expansion1 = [[False, disj] for disj in expansion1] expansion2 = [ Generalization("or", [self.a1, self.l1]), Generalization("or", []), Generalization("or", [self.a2]) ] expansion2 = [[False, disj] for disj in expansion2] self.assertFalse(resolution.is_closed(expansion1)) self.assertTrue(resolution.is_closed(expansion2))
def test_remove_every_generalization(self): g1 = Generalization( "and", [self.f1, Formula("Z"), self.f2, Formula("Z")]) g2 = Generalization( "and", [self.f1, Formula("Z"), g1, self.f1, Formula("Z"), self.f2, g1]) exp = Generalization( "and", [Formula("Z"), g1, Formula("Z"), self.f2, g1]) g2.remove_every(self.f1) self.assertEqual(exp, g2)
def test_cnf_wrong(self): g1 = Generalization("or", [Generalization("and", [self.f1, self.f2])]) self.assertRaises(Exception, g1.cnf) g2 = Generalization("and", [self.f2]) self.assertRaises(Exception, g2.cnf) g3 = Generalization("and", [Generalization("and", [self.f1, self.f2])]) self.assertRaises(Exception, g3.cnf) g4 = Generalization("and", [Generalization("or", [self.f1, self.f2])]) self.assertRaises(Exception, g4.cnf)
def test_eq_ne(self): g1 = Generalization("and", [self.f1, self.f2]) g12 = Generalization("and", [self.f1, self.f2]) g13 = Generalization("and", [self.f1]) g2 = Generalization("or", [self.f1, self.f2]) g22 = Generalization("or", [self.f1, self.f2]) g3 = Generalization("or", [g1]) g32 = Generalization("or", [g1]) g33 = Generalization("or", [g13]) self.assertEqual(g1, g12) self.assertEqual(g2, g22) self.assertEqual(g3, g32) self.assertNotEqual(g1, g2) self.assertNotEqual(g1, g13) self.assertNotEqual(g2, g3) self.assertNotEqual(g3, g1)
def test_expand(self): expansion1 = [[False, Generalization("or", [self.a2, self.l1])], [False, Generalization("or", [self.fand1, self.a1])], [False, Generalization("or", [self.fand1, self.for1])]] exp1 = [[True, Generalization("or", [self.a2, self.l1])], [False, Generalization("or", [self.fand1, self.a1])], [False, Generalization("or", [self.fand1, self.for1])], [False, Generalization("or", [self.a2, self.fand1])]] result = resolution.expand(expansion1) self.assertTrue(result) self.assertEqual(exp1, expansion1)
def test_cnf_particular(self): # components p = Formula("P") np = Formula("!", p) q = Formula("Q") nq = Formula("!", q) r = Formula("R") # formulas f1s = "-(P-> (Q-> R)) -> ((P->Q) -> (P -> R))" f1 = parser.parse(f1s) f2s = "-(P&Q) -> R" f2 = parser.parse(f2s) # expected exp1 = Generalization("and", [ Generalization("or", [np, nq, r, p, np, r]), Generalization("or", [np, nq, r, nq, np, r]) ]) exp2 = Generalization( "and", [Generalization("or", [p, r]), Generalization("or", [q, r])]) # assertions self.assertEqual(exp1, f1.cnf()) self.assertEqual(exp2, f2.cnf())
def test_cnf_action_basis(self): g1 = Generalization( "or", [Formula("X"), Formula("Y"), Formula("!", Formula("X"))]) self.assertEqual([g1], g1.cnf_action())
def test_cnf_atomic(self): exp = Generalization("and", [Generalization("or", [self.a1])]) self.assertEqual(exp, self.a1.cnf())
def test_cnf_literal(self): exp = Generalization("and", [Generalization("or", [self.l1])]) self.assertEqual(exp, self.l1.cnf())
def test_get_non_literal_position(self): g1 = Generalization("and", [self.f1, Formula("Z"), self.f2]) self.assertIs(0, g1.get_non_literal_position()) g2 = Generalization("and", [Formula("Z"), self.f2]) self.assertIs(1, g2.get_non_literal_position())
def test_str(self): exp = "< %s , %s >" % (str(self.f1), str(self.f2)) self.assertEqual(exp, str(Generalization("&", [self.f1, self.f2]))) exp2 = "[ %s , %s ]" % (str(self.f1), str(self.f2)) self.assertEqual(exp2, str(Generalization("or", [self.f1, self.f2])))
def test_cnf_action_beta(self): g1 = Generalization("or", [Formula("|", Formula("X"), Formula("Y"))]) exp = [Generalization("or", [Formula("X"), Formula("Y")])] self.assertEqual(exp, g1.cnf_action())
def test_cnf_not_bottom(self): formula = Formula("!", Formula("F")) exp = Generalization("and", [Generalization("or", [Formula("T")])]) self.assertEqual(exp, formula.cnf())
def test_cnf_not_not(self): exp = Generalization("and", [Generalization("or", [self.a1])]) self.assertEqual(exp, Formula("!", self.l1).cnf())
def test_cnf_beta(self): exp = Generalization("and", [Generalization("or", [self.a1, self.a2])]) self.assertEqual(exp, self.for1.cnf())
def test_cnf_alpha(self): exp = Generalization( "and", [Generalization("or", [self.a1]), Generalization("or", [self.a2])]) self.assertEqual(exp, self.fand1.cnf())
def test_cnf_action_not_bottom(self): g1 = Generalization("or", [Formula("!", Formula("F"))]) exp = [Generalization("or", [Formula("T")])] self.assertEqual(exp, g1.cnf_action())
def test_init_empty(self): gen = Generalization("or", []) self.assertEqual("or", gen.connective) self.assertEqual([], gen.list)