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)
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)
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)