Exemple #1
0
    def get_proof_term(self, t):
        if not t.is_comb():
            return refl(t)

        f, c = t.fun, t.arg
        if is_fun_upd(f):
            f1, a, b = f.args
            if a == c:
                return rewr_conv("fun_upd_same").get_proof_term(t)
            else:
                neq = nat.nat_const_ineq(c, a)
                eq = rewr_conv("fun_upd_other", conds=[neq]).get_proof_term(t)
                return eq.on_arg(self)
        elif f.is_abs():
            return ProofTerm.beta_conv(t)
        else:
            return refl(t)
Exemple #2
0
 def rec(t):
     if t.is_abs():
         v, body = t.dest_abs()
         body_pt = rec(body)
         if body_pt.is_reflexive():
             return refl(t)
         else:
             return body_pt.abstraction(v)
     elif t.is_comb():
         fun_pt = rec(t.fun)
         arg_pt = rec(t.arg)
         pt = fun_pt.combination(arg_pt)
         if fun_pt.rhs.is_abs():
             pt2 = ProofTerm.beta_conv(pt.rhs)
             pt3 = rec(pt2.rhs)
             return pt.transitive(pt2, pt3)
         else:
             return pt
     else:
         return refl(t)
Exemple #3
0
 def get_proof_term(self, t):
     try:
         return ProofTerm.beta_conv(t)
     except InvalidDerivationException:
         raise ConvException("beta_conv")