예제 #1
0
        public void ResolveRuleMultipleTest()
        {
            Expression <Del1> node1 = (x) => P(x) | !Q(x) | R(x);
            Expression <Del1> node2 = (x) => !P(x) | Q(x) | !R(x);
            var result = ComputerAlgebra.Resolve(Expressions2LogicTree.Parse(node1), Expressions2LogicTree.Parse(node2));

            Assert.AreEqual(3, result.Count());
        }
예제 #2
0
        public void ResolveWithUnificateTest()
        {
            Expression <Del1> root      = (x) => P(x) | Q(f(x));
            Expression <Del1> gypotesis = (z) => !P(g(z));
            var result = ComputerAlgebra.Resolve(Expressions2LogicTree.Parse(root), Expressions2LogicTree.Parse(gypotesis)).ToList();

            Assert.AreEqual(1, result.Count);
            Assert.AreEqual("Q(f(g(z)))", result[0].ToString());
        }
예제 #3
0
        public void PredicateAndNegatePredicate()
        {
            Expression <Del1> root      = (x) => P(x);
            Expression <Del1> gypotesis = (x) => !P(x);

            var result =
                ComputerAlgebra.Resolve(Expressions2LogicTree.Parse(root), Expressions2LogicTree.Parse(gypotesis)).ToList();

            Assert.AreEqual(1, result.Count);
            Assert.AreEqual("", result[0].ToString());
        }
예제 #4
0
        public void ResolveRuleTest()
        {
            // P(x) V Q(f(y))
            Expression <Del2> root = (x, y) => P(x) | Q(f(y));
            // !P(x)
            Expression <Del1> gypotesis = (x) => !P(x);
            var result = ComputerAlgebra.Resolve(Expressions2LogicTree.Parse(root), Expressions2LogicTree.Parse(gypotesis)).ToList();

            Assert.AreEqual(1, result.Count);
            Assert.AreEqual("Q(f(y))", result[0].ToString());
            result = ComputerAlgebra.Resolve(Expressions2LogicTree.Parse(gypotesis), Expressions2LogicTree.Parse(root)).ToList();
            Assert.AreEqual("Q(f(y))", result[0].ToString());
        }
예제 #5
0
        public void ResolutionOnResultOfResolution()
        {
            Expression <Del1> f1 = (x) => P(x) | Q(x);
            Expression <Del1> f2 = (x) => !Q(x);
            Expression <Del1> f3 = (x) => !P(x);

            //P(x)
            var result = ComputerAlgebra.Resolve(Expressions2LogicTree.Parse(f1), Expressions2LogicTree.Parse(f2)).Single();
            //{} ?
            var result2 = ComputerAlgebra.Resolve(Expressions2LogicTree.Parse(f3), result).ToList();

            Assert.AreEqual(1, result2.Count);
            Assert.AreEqual("", result2[0].ToString());
        }
예제 #6
0
        static void Main()
        {
            //Type two clauses in SNF without quantifiers
            Expression <Func <int, int, int, int, BooleanGroup> > exp       = (x, y, z, u) => !P(x, y) | Q(z, g(u)) | R(z, f(u));
            Expression <Func <int, int, BooleanGroup> >           gypotesis = (x, u) => !R(x, f(u)) | P(b, h(a));

            var expNode       = Expressions2LogicTree.Parse(exp);
            var gypotesisNode = Expressions2LogicTree.Parse(gypotesis);

            Console.WriteLine("First clause: {0}", expNode);
            Console.WriteLine("Second clause: {0}", gypotesisNode);
            var result = ComputerAlgebra.Resolve(expNode, gypotesisNode).ToList();

            Console.WriteLine("Possible resolvents: [{0}]", string.Join(" ; ", result));
        }