コード例 #1
0
        /**
         * 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?(&alpha;, 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, &alpha;, rest, model &cup; { P = true })
            // and
            // TT-CHECK-ALL(KB, &alpha;, 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);
        }
コード例 #2
0
        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));
        }
コード例 #3
0
    public class TT_Entails { // No podemos llamar a la clase igual que a uno de sus métodos...
        /**
         * La función TT-ENTAILS?(KB, &alpha;) devuelve cierto o falso.
         *
         * @param kb
         *            KB, la base de conocimiento, una sentencia en lógica proposicional
         * @param alpha
         *            &alpha;, la consulta, una sentencia en lógica proposicional
         *
         * @return cierto si &alpha; 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, &alpha; symbols, {})
            return(TTCheckAll(kb, alpha, symbols, new Model()));
        }