예제 #1
0
    def test_prove_primitive_call(self):
        joe = logic.Atom('joe')
        judy = logic.Atom('judy')
        jorge = logic.Atom('jorge')
        x = logic.Var('x')

        db = {'likes': [], 'hates': []}
        db['likes'].append(
            logic.Clause(logic.Relation('likes', (joe, x)), [
                logic.Relation('likes', (x, joe)),
                logic.Relation('hates', (judy, x))
            ]))
        db['likes'].append(logic.Clause(logic.Relation('likes', (jorge, joe))))
        db['hates'].append(logic.Clause(logic.Relation('hates',
                                                       (judy, jorge))))

        things = []

        def prim(a, b, c, d):
            things.append(a)

        db['prim'] = prim

        goal = logic.Relation('likes', (joe, x))
        display = logic.Relation('prim', 'foo')

        bindings = logic.prove_all([goal, display], {}, db)
        self.assertEqual(['foo'], things)
예제 #2
0
    def test_prove_all_no_subgoals_required(self):
        joe = logic.Atom('joe')
        judy = logic.Atom('judy')
        jorge = logic.Atom('jorge')
        x = logic.Var('x')

        db = {'likes': [], 'hates': []}
        db['likes'].append(logic.Clause(logic.Relation('likes', (joe, x)),
                            [logic.Relation('likes', (x, joe)),
                             logic.Relation('hates', (judy, x))]))
        db['likes'].append(logic.Clause(logic.Relation('likes', (jorge, joe))))
        db['hates'].append(logic.Clause(logic.Relation('hates', (judy, jorge))))

        goal1 = logic.Relation('likes', (x, joe))
        goal2 = logic.Relation('hates', (judy, x))
        bindings = logic.prove_all([goal1, goal2], {}, db)
        self.assertEqual({x: jorge}, bindings)
예제 #3
0
    def test_prove_all_no_subgoals_required(self):
        joe = logic.Atom('joe')
        judy = logic.Atom('judy')
        jorge = logic.Atom('jorge')
        x = logic.Var('x')

        db = {'likes': [], 'hates': []}
        db['likes'].append(
            logic.Clause(logic.Relation('likes', (joe, x)), [
                logic.Relation('likes', (x, joe)),
                logic.Relation('hates', (judy, x))
            ]))
        db['likes'].append(logic.Clause(logic.Relation('likes', (jorge, joe))))
        db['hates'].append(logic.Clause(logic.Relation('hates',
                                                       (judy, jorge))))

        goal1 = logic.Relation('likes', (x, joe))
        goal2 = logic.Relation('hates', (judy, x))
        bindings = logic.prove_all([goal1, goal2], {}, db)
        self.assertEqual({x: jorge}, bindings)
예제 #4
0
    def test_prove_primitive_call(self):
        joe = logic.Atom('joe')
        judy = logic.Atom('judy')
        jorge = logic.Atom('jorge')
        x = logic.Var('x')

        db = {'likes': [], 'hates': []}
        db['likes'].append(logic.Clause(logic.Relation('likes', (joe, x)),
                            [logic.Relation('likes', (x, joe)),
                             logic.Relation('hates', (judy, x))]))
        db['likes'].append(logic.Clause(logic.Relation('likes', (jorge, joe))))
        db['hates'].append(logic.Clause(logic.Relation('hates', (judy, jorge))))

        things = []
        def prim(a, b, c, d):
            things.append(a)
        db['prim'] = prim

        goal = logic.Relation('likes', (joe, x))
        display = logic.Relation('prim', 'foo')
        
        bindings = logic.prove_all([goal, display], {}, db)
        self.assertEqual(['foo'], things)