def test_ex_quant_1(self):
        wff = "(E)a Person(a)"
        expr = ExistentialQuantor(Var("a"), Predicate("Person", [Var("a")]))

        tree = FoplParser.parse(wff)

        self.assertEqual(tree.expr, expr)
    def test_all_quant_1(self):
        wff = "(A)a Person(a)"
        expr = AllQuantor(Var("a"), Predicate("Person", [Var("a")]))

        tree = FoplParser.parse(wff)

        self.assertEqual(tree.expr, expr)
    def test_atom_8(self):
        wff = "(A)a Person(a,B)"
        expr = AllQuantor(Var("a"), Predicate("Person",
                                              [Var("a"), Const("B")]))

        tree = FoplParser.parse(wff)

        self.assertEqual(tree.expr, expr)
        self.assertEqual(tree.constants, ["B"])
    def test_atom_9(self):
        wff = "(A)a,b Person(a,b)"
        expr = AllQuantor(
            Var("a"),
            AllQuantor(Var("b"), Predicate("Person",
                                           [Var("a"), Var("b")])))

        tree = FoplParser.parse(wff)

        self.assertEqual(tree.expr, expr)
        self.assertEqual(tree.constants, [])
    def test_complex_5(self):
        wff = "(A)a (P(a)->K(f(a,B))&P(C)<->!(E(C,D)|K(a)))"
        expr = AllQuantor(
            Var("a"),
            Eq(
                Impl(
                    Predicate("P", [Var("a")]),
                    And(Predicate("K",
                                  [Func("f", [Var("a"), Const("B")])]),
                        Predicate("P", [Const("C")]))),
                Not(
                    Or(Predicate("E", [Const("C"), Const("D")]),
                       Predicate("K", [Var("a")])))))

        tree = FoplParser.parse(wff)

        self.assertEqual(tree.expr, expr)
        self.assertEqual(tree.constants, ["B", "C", "D"])
    def test_complex_1(self):
        wff = "(A)a (E)b (Person(a)&Person(b)->Parent(a,b))"
        expr = AllQuantor(
            Var("a"),
            ExistentialQuantor(
                Var("b"),
                Impl(
                    And(Predicate("Person", [Var("a")]),
                        Predicate("Person", [Var("b")])),
                    Predicate("Parent", [Var("a"), Var("b")]))))

        tree = FoplParser.parse(wff)

        self.assertEqual(tree.expr, expr)
    def test_complex_2(self):
        wff = "(A)a,b (E)c (Person(a)&Person(b)&Person(c)&Parent(a,b)&Parent(b,c)->Grandparent(a,c))"
        expr = AllQuantor(
            Var("a"),
            AllQuantor(
                Var("b"),
                ExistentialQuantor(
                    Var("c"),
                    Impl(
                        And(
                            And(
                                And(
                                    And(Predicate("Person", [Var("a")]),
                                        Predicate("Person", [Var("b")])),
                                    Predicate("Person", [Var("c")])),
                                Predicate("Parent",
                                          [Var("a"), Var("b")])),
                            Predicate("Parent", [Var("b"), Var("c")])),
                        Predicate("Grandparent", [Var("a"), Var("c")])))))

        tree = FoplParser.parse(wff)

        self.assertEqual(tree.expr, expr)