Ejemplo n.º 1
0
    def test_prove_no_relevant_clauses(self):
        joe = logic.Atom('joe')
        judy = logic.Atom('judy')
        jorge = logic.Atom('jorge')
        x = logic.Var('x')

        db = {'likes': []}
        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, judy))))

        goal = logic.Relation('hates', (joe, x))
        bindings = logic.prove(goal, {}, db)
        self.assertFalse(bindings)
Ejemplo n.º 2
0
    def test_prove_no_subgoals_required(self):
        joe = logic.Atom('joe')
        judy = logic.Atom('judy')
        jorge = logic.Atom('jorge')
        x = logic.Var('x')

        db = {'likes': []}
        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, judy))))

        goal = logic.Relation('likes', (jorge, x))
        bindings = logic.prove(goal, {}, db)
        self.assertEqual({x: judy}, bindings)
Ejemplo n.º 3
0
    def test_prove_subgoals_required_fail(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, joe))))

        goal = logic.Relation('likes', (joe, jorge))
        bindings = logic.prove(goal, {}, db)
        self.assertFalse(bindings)