/** * La función TT-CHECK-ALL(KB, α symbols, model) devuelve cierto o falso * * @param kb * KB, la base de conocimiento, una sentencia en lógica proposicional * @param alpha * α, la consulta, una sentencia en lógica proposicional * @param symbols * una lista de símbolos proposicionales no asignados actualmente en el modelo * @param model * una asignación del modelo parcial o completa para la BC dada y la consulta. * @return cierto si α es consecuencia lógica de KB, falso en otro caso. */ public bool TTCheckAll(KnowledgeBase kb, Sentence alpha, IList <PropositionSymbol> symbols, Model model) { // si EMPTY?(symbols) entonces if (symbols.Count == 0) { // si PL-TRUE?(KB, model) entonces return PL-TRUE?(α, model) if (model.IsTrue(kb.AsSentence())) { return(model.IsTrue(alpha)); } else { // en caso contrario devolver cierto (cuando la KB es falsa, SIEMPRE se devuelve cierto) return(true); } } // en caso contrario hacer // P <- FIRST(symbols) PropositionSymbol p = Util.First(symbols); // rest <- REST(symbols) IList <PropositionSymbol> rest = Util.Rest(symbols); // return (TT-CHECK-ALL(KB, α, rest, model ∪ { P = true }) // and // TT-CHECK-ALL(KB, α, rest, model U { P = false })) var checkIfTrue = TTCheckAll(kb, alpha, rest, model.Union(p, true)); var checkIfFalse = TTCheckAll(kb, alpha, rest, model.Union(p, false)); return(checkIfTrue && checkIfFalse); }
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.AreEqual(true, model.IsTrue(kbs)); }
public class TT_Entails { // No podemos llamar a la clase igual que a uno de sus métodos... /** * La función TT-ENTAILS?(KB, α) devuelve cierto o falso. * * @param kb * KB, la base de conocimiento, una sentencia en lógica proposicional * @param alpha * α, la consulta, una sentencia en lógica proposicional * * @return cierto si α es consecuencia lógica de KB, falso en otro caso. */ public bool TTEntails(KnowledgeBase kb, Sentence alpha) { // symbols <- una lista de símbolos de proposición de KB y &alpha IList <PropositionSymbol> symbols = new List <PropositionSymbol>(SymbolCollector.GetSymbolsFrom(kb.AsSentence(), alpha)); // return TT-CHECK-ALL(KB, α symbols, {}) return(TTCheckAll(kb, alpha, symbols, new Model())); }