예제 #1
0
 def test_problem_19(self):
     prover = Prover()
     prover.add_formula("if(if(R, M), L)")
     prover.add_formula("if(or(N, S), and(M, T))")
     prover.add_formula("if(if(P, R), L)")
     prover.add_formula("if(or(T, K), not(N))")
     prover.add_goal("L")
     self.assertTrue(prover.run_prover())
 def test_problem_20(self):
     prover = Prover()
     prover.add_formula('or(not(A), R)')
     prover.add_formula('not(and(N, not(C)))')
     prover.add_formula('if(R, C)')
     prover.add_formula('if(C, not(N))')
     prover.add_goal('or(A, C)')
     self.assertFalse(prover.run_prover())
 def test_problem_18(self):
     prover = Prover()
     prover.add_formula('iff(K, or(L, M))')
     prover.add_formula('if(L, M)')
     prover.add_formula('if(M, K)')
     prover.add_formula('or(K, L)')
     prover.add_goal('if(K, L)')
     self.assertFalse(prover.run_prover())
 def test_problem_17(self):
     prover = Prover()
     prover.add_formula('if(W, X)')
     prover.add_formula('if(X, W)')
     prover.add_formula('if(X, Y)')
     prover.add_formula('if(Y, X)')
     prover.add_goal('iff(W, Y)')
     self.assertTrue(prover.run_prover())
예제 #5
0
 def test_problem_16(self):
     prover = Prover()
     prover.add_formula("and(or(P, R), or(P, Q))")
     prover.add_formula("if(and(Q, R), if(V, W))")
     prover.add_formula("not(if(if(P, S), not(if(S, W))))")
     prover.add_formula("not(W)")
     prover.add_goal("if(V, S)")
     self.assertTrue(prover.run_prover())
예제 #6
0
 def test_problem_17(self):
     prover = Prover()
     prover.add_formula("forall(x,forall(y,if(and(A(x),B(y)),C(x,y))))")
     prover.add_formula("exists(y,and(F(y),forall(z,if(H(z),C(y,z)))))")
     prover.add_formula("forall(x,forall(y,forall(z,if(and(L(x,y),L(y,z)),"
                        "L(x,z)))))")
     prover.add_formula("forall(x,if(F(x),B(x)))")
     prover.add_goal("forall(z,forall(y,if(and(A(z),H(y)),C(z,y))))")
     self.assertFalse(prover.run_prover())
 def test_problem_20(self):
     """
     While the PDF claims all arguments are "valid", this one is not
     """
     prover = Prover()
     prover.add_formula("if(or(not(A), B), not(and(C, D)))")
     prover.add_formula("if(and(A, C), E)")
     prover.add_formula("and(A, not(E))")
     prover.add_goal("not(or(D, E))")
     self.assertFalse(prover.run_prover())
예제 #8
0
 def test_problem_18(self):
     self.skipTest('Should work')
     prover = Prover()
     prover.add_formula("forall(x,if(exists(y,and(A(y),B(x,y))),C(x)))")
     prover.add_formula(
         "exists(y,and(D(y),exists(x,and(F(x),and(G(x),B(y,x))))))")
     prover.add_formula("forall(x,if(F(x),A(x)))")
     prover.add_formula(
         "if(exists(x,and(C(x),D(x))),if(exists(y,and(D(y),exists(z,B(y,z)))),forall(x,F(x))))"
     )
     prover.add_goal("forall(x,A(x))")
     self.assertTrue(prover.run_prover())
예제 #9
0
 def test_get_proof(self):
     prover = Prover()
     prover.add_formula("and(a,b)")
     prover.add_goal("a")
     prover.run_prover()
     proof = prover.get_proof()
     expected = ['  1)    a                                                    '
                 '                    Assumption',
                 '  3)    ~a                                                   '
                 '                    Assumption',
                 '  4)    $$FALSE                                              '
                 '                    resolve(1,3)']
     self.assertEqual(expected, proof)
예제 #10
0
 def test_problem_06(self):
     prover = Prover()
     prover.add_formula("exists(x,or(A(x),not(B(x))))")
     prover.add_formula("forall(x,if(and(A(x),not(B(x))),C(x)))")
     prover.add_goal("exists(x,C(x))")
     self.assertFalse(prover.run_prover())
예제 #11
0
 def test_problem_07(self):
     prover = Prover()
     prover.add_formula("forall(x,not(F(x,x)))")
     prover.add_formula("if(not(forall(x,G(x))),exists(y,F(y,a)))")
     prover.add_goal("exists(z,and(G(z),F(z,z)))")
     self.assertFalse(prover.run_prover())
예제 #12
0
 def test_problem_03(self):
     prover = Prover()
     prover.add_formula("forall(x,if(A(x),B(x)))")
     prover.add_formula("forall(x,if(not(A(x)),C(x)))")
     prover.add_goal("forall(x,if(not(B(x)),not(C(x))))")
     self.assertFalse(prover.run_prover())
예제 #13
0
 def test_problem_05(self):
     prover = Prover()
     prover.add_formula("forall(x,if(A(x),F(x)))")
     prover.add_formula("if(exists(x,F(x)),not(exists(y,G(y))))")
     prover.add_goal("forall(x,if(exists(y,A(y)),not(G(x))))")
     self.assertTrue(prover.run_prover())
예제 #14
0
 def test_problem_12(self):
     prover = Prover()
     prover.add_formula("forall(z,iff(L(z),H(z)))")
     prover.add_formula("forall(x,not(or(H(x),not(B(x)))))")
     prover.add_goal("not(L(b))")
     self.assertTrue(prover.run_prover())
예제 #15
0
 def test_problem_05(self):
     prover = Prover()
     prover.add_formula("if(A, C)")
     prover.add_formula("if(B, C)")
     prover.add_goal("if(or(A, B), C)")
     self.assertTrue(prover.run_prover())
예제 #16
0
 def test_problem_01(self):
     prover = Prover()
     prover.add_formula("forall(x,if(A(x),B(x)))")
     prover.add_formula("forall(x,if(B(x),C(x)))")
     prover.add_goal("forall(x,if(A(x),C(x)))")
     self.assertTrue(prover.run_prover())
예제 #17
0
 def test_problem_10(self):
     prover = Prover()
     prover.add_formula("or(F(a),exists(y,G(y,a)))")
     prover.add_formula("or(F(b),exists(y,not(G(y,a))))")
     prover.add_goal("exists(y,G(y,a))")
     self.assertFalse(prover.run_prover())
예제 #18
0
 def test_prover_no_goal_error(self):
     prover = Prover()
     with self.assertRaises(Exception):
         prover.run_prover()
예제 #19
0
 def test_problem_02(self):
     prover = Prover()
     prover.add_formula("A")
     prover.add_goal("if(B, A)")
     self.assertTrue(prover.run_prover())
예제 #20
0
 def test_prover_formula_error(self):
     prover = Prover()
     with self.assertRaises(TypeError):
         prover.add_formula(None)
예제 #21
0
 def test_problem_01(self):
     prover = Prover()
     prover.add_formula("not(A)")
     prover.add_goal("if(A, B)")
     self.assertTrue(prover.run_prover())
예제 #22
0
 def test_problem_08(self):
     prover = Prover()
     prover.add_formula("if(or(A, B), if(C, D))")
     prover.add_formula("if(or(not(D), E), and(A, C))")
     prover.add_goal("D")
     self.assertTrue(prover.run_prover())
예제 #23
0
 def test_problem_08(self):
     prover = Prover()
     prover.add_formula("forall(x,exists(y,and(F(x),G(x,y))))")
     prover.add_goal("exists(y,forall(x,and(F(x),G(x,y))))")
     self.assertFalse(prover.run_prover())
예제 #24
0
 def test_problem_16(self):
     prover = Prover()
     prover.add_formula("iff(not(or(A, not(B))), not(C))")
     prover.add_formula("C")
     prover.add_goal("if(B, or(A, D))")
     self.assertTrue(prover.run_prover())
예제 #25
0
 def test_problem_09(self):
     prover = Prover()
     prover.add_formula("exists(x,and(F(x),forall(y,if(G(y),L(x,y)))))")
     prover.add_formula("forall(x,if(F(x),forall(y,if(M(y),not(L(x,y))))))")
     prover.add_goal("forall(x,if(G(x),not(M(x))))")
     self.assertTrue(prover.run_prover())
예제 #26
0
 def test_problem_14(self):
     prover = Prover()
     prover.add_formula("if(or(A, not(A)), not(B))")
     prover.add_formula("if(and(C, D), B)")
     prover.add_goal("or(not(D), not(C))")
     self.assertTrue(prover.run_prover())
예제 #27
0
 def test_problem_11(self):
     prover = Prover()
     prover.add_formula("forall(x,not(J(x)))")
     prover.add_formula("if(exists(y,or(H(b,y),R(y,y))),exists(x,J(x)))")
     prover.add_goal("forall(y,not(or(H(b,y),R(y,y))))")
     self.assertTrue(prover.run_prover())
예제 #28
0
 def test_problem_02(self):
     prover = Prover()
     prover.add_formula("forall(x,if(A(x),and(B(x),C(x))))")
     prover.add_formula("forall(x,if(A(x),not(C(x))))")
     prover.add_goal("not(A(a))")
     self.assertTrue(prover.run_prover())
예제 #29
0
 def test_problem_13(self):
     prover = Prover()
     prover.add_formula("or(not(forall(x,K(x,x))),forall(y,H(y,y)))")
     prover.add_goal("exists(z,if(not(H(z,z)),not(K(z,z))))")
     self.assertTrue(prover.run_prover())
예제 #30
0
 def test_problem_19(self):
     prover = Prover()
     prover.add_formula("if(A, and(B, C))")
     prover.add_formula("if(or(B, D), A)")
     prover.add_goal("iff(A, B)")
     self.assertTrue(prover.run_prover())