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()); }
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()); }
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()); }
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()); }
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()); }
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)); }