Пример #1
0
 def test_final_2_3():
     s = {Variable(("Y")): Number("0"), Variable("X"): Variable(("Y"))}
     r = Rule((Function(
         "p", [Variable("X"), Variable("Y"),
               Atom("a")])), RuleBody([]))
     r_ = Rule(
         (Function("p", [Variable("Y"),
                         Number("0"), Atom("a")])), RuleBody([]))
     assert (interpreter.substitute_in_clause(s, r) == r_)
Пример #2
0
 def test_final_2_4():
     s = {Variable(("Y")): Number("0"), Variable("X"): Variable(("Y"))}
     p = Function("p", [Variable("X"), Variable(("Y")), Atom(("a"))])
     q = Function("q", [Atom(("a")), Atom(("b")), Atom(("a"))])
     p_ = Function("p", [Variable(("Y")), Number("0"), Atom(("a"))])
     q_ = Function("q", [Atom(("a")), Atom(("b")), Atom(("a"))])
     r = Rule(p, RuleBody([q]))
     r_ = Rule(p_, RuleBody([q_]))
     assert (interpreter.substitute_in_clause(s, r) == r_)
Пример #3
0
 def test_substitute_in_clause(self):
     s = {Variable("Y"): Number(0), Variable("X"): Variable("Y")}
     p = Function("p", [Variable("X"), Variable("Y"), Atom("a")])
     q = Function("q", [Atom("a"), Atom("b"), Atom("a")])
     p_ = Function("p", [Variable("Y"), Number(0), Atom("a")])
     q_ = Function("q", [Atom("a"), Atom("b"), Atom("a")])
     r = Rule(p, [q])
     r_ = Rule(p_, [q_])
     #assert
     (self.substitute_in_clause(s, r) == r_)
Пример #4
0
 def test_variables_of_clause(self):
     c = Rule(
         Function("p",
                  [Variable("X"), Variable("Y"),
                   Atom("a")]),
         RuleBody([Function(
             "q", [Atom("a"), Atom("b"), Atom("a")])]))
     #assert
     (self.variables_of_clause(c) == set([Variable("X"), Variable("Y")]))
Пример #5
0
 def request(self, body):
     return Rule(None, body)
Пример #6
0
 def rule(self, predicate, body):
     return Rule(predicate, body)
Пример #7
0
 def assertion(self, predicate):
     return Rule(predicate, RuleBody([]))
Пример #8
0
 def test_final_1_4():
     h = Function("p", [Variable("X"), Variable("Y"), Atom("a")])
     b = [Function("q", [Atom("a"), Atom("b"), Atom("a")])]
     r = Rule(h, RuleBody(b))
     assert (interpreter.variables_of_clause(r) == set(
         [Variable("X"), Variable("Y")]))
Пример #9
0
 def test_final_1_3():
     r = Rule((Function(
         "p", [Variable("X"), Variable("Y"),
               Atom("a")])), RuleBody([]))
     assert ((interpreter.variables_of_clause(r) == set(
         [Variable("X"), Variable("Y")])))
Пример #10
0
    def test_final_3_9():
        t1 = Function("f", [Variable("X"), Variable("Y"), Variable("Y")])
        t2 = Function("f", [Variable("Y"), Variable("Z"), Atom("a")])
        u = {
            Variable("X"): Atom("a"),
            Variable("Y"): Atom("a"),
            Variable("Z"): Atom("a")
        }
        #print("9")
        assert (interpreter.unify(t1, t2) == u)

    def list2str(l):
        return ('(' + (',' + ' ').join(list(map(str, l))) + ')')

    # Test on a simple program
    psimple = [Rule(Function("f", [Atom("a"), Atom("b")]), RuleBody([]))]

    def test_final_4_1():
        print(
            "\n\n################################################################"
        )
        print(
            "###### Testing the non-deterministic abstract interpreter ######")
        print(
            "################################################################")
        print(f"Program: {list2str(psimple)}")
        g = [Function("f", [Atom("a"), Atom("b")])]
        print(f"Goal: {list2str(g)}")
        g_ = interpreter.nondet_query(psimple, g)
        assert (g_ == [Function("f", [Atom("a"), Atom("b")])])
        print(f"Solution: {list2str(g_)}")