public void TestConjunctionDifferent() { var v1 = new LogicVar(); var v2 = new LogicVar(); var goal1 = MicroKanren.Equal(v1, 5); var goal2 = MicroKanren.Equal(v2, "6"); var goal3 = MicroKanren.Equal(v2, v1); var conjGoal = MicroKanren.Conjunction(goal3, MicroKanren.Conjunction(goal1, goal2)); var subst = conjGoal(MicroKanren.GetEmptySubst()); Assert.IsNull(subst); }
public void TestRecursiveConjunction() { var v1 = new LogicVar(); var v2 = new LogicVar(); var v3 = new LogicVar(); var goal1 = MicroKanren.Equal(v1, 5); var goal2 = MicroKanren.Equal(v2, v1); var goal3 = MicroKanren.Equal(v3, v2); var conjGoal = MicroKanren.Conjunction(goal3, MicroKanren.Conjunction(goal1, goal2)); var subst = conjGoal(MicroKanren.GetEmptySubst()).SingleOrDefault(); Assert.NotNull(subst); Assert.AreEqual(5, subst.GetValue(v1)); Assert.AreEqual(5, subst.GetValue(v2)); Assert.AreEqual(5, subst.GetValue(v3)); }
public void TestDisjunction() { var v1 = new LogicVar(); var v2 = new LogicVar(); var goal0 = MicroKanren.Equal(v1, v2); var goal1 = MicroKanren.Equal(v1, 5); var goal2 = MicroKanren.Equal(v2, 6); var conjGoal = MicroKanren.Conjunction(goal0, MicroKanren.Disjunction(goal1, goal2)); var subst = conjGoal(MicroKanren.GetEmptySubst()); Assert.NotNull(subst); var substList = subst.ToList(); Assert.AreEqual(5, substList[0].GetValue(v1)); Assert.AreEqual(5, substList[0].GetValue(v2)); Assert.AreEqual(6, substList[1].GetValue(v1)); Assert.AreEqual(6, substList[1].GetValue(v2)); }