package aima.test.core.unit.logic.propositional.inference; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import aima.core.logic.propositional.inference.TTEntails; import aima.core.logic.propositional.kb.KnowledgeBase; import aima.core.logic.propositional.kb.data.Model; import aima.core.logic.propositional.parsing.ast.Sentence; import aima.core.logic.propositional.parsing.ast.PropositionSymbol; /** * @author Ravi Mohan * */ public class TTEntailsTest { TTEntails tte; KnowledgeBase kb; @Before public void setUp() { tte = new TTEntails(); kb = new KnowledgeBase(); } @Test public void testSimpleSentence1() { kb.tell("A & B"); Assert.assertEquals(true, kb.askWithTTEntails("A")); } @Test public void testSimpleSentence2() { kb.tell("A | B"); Assert.assertEquals(false, kb.askWithTTEntails("A")); } @Test public void testSimpleSentence3() { kb.tell("(A => B) & A"); Assert.assertEquals(true, kb.askWithTTEntails("B")); } @Test public void testSimpleSentence4() { kb.tell("(A => B) & B"); Assert.assertEquals(false, kb.askWithTTEntails("A")); } @Test public void testSimpleSentence5() { kb.tell("A"); Assert.assertEquals(false, kb.askWithTTEntails("~A")); } @Test public void testSUnkownSymbol() { kb.tell("(A => B) & B"); Assert.assertEquals(false, kb.askWithTTEntails("X")); } @Test public void testSimpleSentence6() { kb.tell("~A"); Assert.assertEquals(false, kb.askWithTTEntails("A")); } @Test public void testNewAIMAExample() { kb.tell("~P11"); kb.tell("B11 <=> P12 | P21"); kb.tell("B21 <=> P11 | P22 | P31"); kb.tell("~B11"); kb.tell("B21"); Assert.assertEquals(true, kb.askWithTTEntails("~P12")); Assert.assertEquals(false, kb.askWithTTEntails("P22")); } @Test public void testTTEntailsSucceedsWithChadCarffsBugReport() { KnowledgeBase kb = new KnowledgeBase(); kb.tell("B12 <=> P11 | P13 | P22 | P02"); kb.tell("B21 <=> P20 | P22 | P31 | P11"); kb.tell("B01 <=> P00 | P02 | P11"); kb.tell("B10 <=> P11 | P20 | P00"); kb.tell("~B21"); kb.tell("~B12"); kb.tell("B10"); kb.tell("B01"); Assert.assertTrue(kb.askWithTTEntails("P00")); Assert.assertFalse(kb.askWithTTEntails("~P00")); } @Test public void testDoesNotKnow() { KnowledgeBase kb = new KnowledgeBase(); kb.tell("A"); Assert.assertFalse(kb.askWithTTEntails("B")); Assert.assertFalse(kb.askWithTTEntails("~B")); } public void testTTEntailsSucceedsWithCStackOverFlowBugReport() { KnowledgeBase kb = new KnowledgeBase(); Assert.assertTrue(kb.askWithTTEntails("((A | (~ A)) & (A | B))")); } @Test public void testModelEvaluation() { kb.tell("~P11"); kb.tell("B11 <=> P12 | P21"); kb.tell("B21 <=> P11 | P22 | P31"); kb.tell("~B11"); kb.tell("B21"); Model model = new Model(); model = model.union(new PropositionSymbol("B11"), false); model = model.union(new PropositionSymbol("B21"), true); model = model.union(new PropositionSymbol("P11"), false); model = model.union(new PropositionSymbol("P12"), false); model = model.union(new PropositionSymbol("P21"), false); model = model.union(new PropositionSymbol("P22"), false); model = model.union(new PropositionSymbol("P31"), true); Sentence kbs = kb.asSentence(); Assert.assertEquals(true, model.isTrue(kbs)); } }