예제 #1
0
 def testMultZeroRight(self):
     """Proof of n * 0 = 0 by induction."""
     thy = basic.load_theory('nat')
     n = Var("n", nat.natT)
     state = ProofState.init_state(thy, [n], [], Term.mk_equals(nat.times(n, nat.zero), nat.zero))
     state.apply_induction(0, "nat_induct", "n")
     state.rewrite_goal(0, "times_def_1")
     state.introduction(1, names=["n"])
     state.rewrite_goal((1, 2), "times_def_2")
     state.rewrite_goal((1, 2), "plus_def_1")
     self.assertEqual(state.check_proof(no_gaps=True), Thm.mk_equals(nat.times(n, nat.zero), nat.zero))
예제 #2
0
 def testMultZeroRight(self):
     """Proof of n * 0 = 0 by induction."""
     thy = basic.load_theory('nat')
     n = Var("n", nat.natT)
     eq = Term.mk_equals
     prf = Proof()
     prf.add_item(0, "theorem", args="nat_induct")
     prf.add_item(1,
                  "substitution",
                  args={
                      "P": Term.mk_abs(n,
                                       eq(nat.times(n, nat.zero),
                                          nat.zero)),
                      "x": n
                  },
                  prevs=[0])
     prf.add_item(2, "beta_norm", prevs=[1])
     prf.add_item(3, "theorem", args="times_def_1")
     prf.add_item(4, "substitution", args={"n": nat.zero}, prevs=[3])
     prf.add_item(5, "implies_elim", prevs=[2, 4])
     prf.add_item(6, "assume", args=eq(nat.times(n, nat.zero), nat.zero))
     prf.add_item(7, "theorem", args="times_def_2")
     prf.add_item(8,
                  "substitution",
                  args={
                      "m": n,
                      "n": nat.zero
                  },
                  prevs=[7])
     prf.add_item(9, "theorem", args="plus_def_1")
     prf.add_item(10,
                  "substitution",
                  args={"n": nat.times(n, nat.zero)},
                  prevs=[9])
     prf.add_item(11, "transitive", prevs=[8, 10])
     prf.add_item(12, "transitive", prevs=[11, 6])
     prf.add_item(13,
                  "implies_intr",
                  args=eq(nat.times(n, nat.zero), nat.zero),
                  prevs=[12])
     prf.add_item(14, "forall_intr", args=n, prevs=[13])
     prf.add_item(15, "implies_elim", prevs=[5, 14])
     th = Thm.mk_equals(nat.times(n, nat.zero), nat.zero)
     self.assertEqual(thy.check_proof(prf), th)
예제 #3
0
    def testPrintUnicode(self):
        test_data = [
            (conj(A, B), "A ∧ B"),
            (disj(A, B), "A ∨ B"),
            (imp(A, B), "A ⟶ B"),
            (abs(a, P(a)), "λa. P a"),
            (all(a, P(a)), "∀a. P a"),
            (exists(a, P(a)), "∃a. P a"),
            (neg(A), "¬A"),
            (nat.plus(m, n), "m + n"),
            (nat.times(m, n), "m * n"),
        ]

        for t, s in test_data:
            self.assertEqual(printer.print_term(thy, t, unicode=True), s)
예제 #4
0
    def testPrintArithmetic(self):
        test_data = [
            (nat.plus(m, n), "m + n"),
            (nat.plus(nat.plus(m, n), p), "m + n + p"),
            (nat.plus(m, nat.plus(n, p)), "m + (n + p)"),
            (nat.times(m, n), "m * n"),
            (nat.times(nat.times(m, n), p), "m * n * p"),
            (nat.times(m, nat.times(n, p)), "m * (n * p)"),
            (nat.plus(m, nat.times(n, p)), "m + n * p"),
            (nat.times(m, nat.plus(n, p)), "m * (n + p)"),
            (nat.zero, "0"),
            (nat.plus(nat.zero, nat.zero), "0 + 0"),
            (nat.times(m, nat.zero), "m * 0"),
        ]

        for t, s in test_data:
            self.assertEqual(printer.print_term(thy, t), s)
예제 #5
0
파일: parser.py 프로젝트: zhouwenfan/temp
 def times(self, lhs, rhs):
     return nat.times(lhs, rhs)
예제 #6
0
 def times_expr(self, e1, e2):
     return nat.times(e1, e2)