示例#1
0
文件: ivy_proof.py 项目: hannesm/ivy
 def rec(goal, res):
     defns = goal_defns(goal)
     with il.BindSymbols(bound, defns):
         for x in goal_prem_goals(goal):
             if isinstance(x.formula, ia.SchemaBody):
                 rec(x, res)
             else:
                 rec_fmla(x.formula, res)
         rec_fmla(goal_conc(goal), res)
示例#2
0
def apply_match_rec(match,fmla,env):
    args = [apply_match_rec(match,f,env) for f in fmla.args]
    if il.is_app(fmla):
        if fmla.rep in match:
            func = match[fmla.rep]
            return func(*args)
        return apply_match_func(match,fmla.rep)(*args)
    if il.is_variable(fmla) and fmla in match:
        return match[fmla]
    if il.is_binder(fmla):
        with il.BindSymbols(env,fmla.variables):
            fmla = fmla.clone_binder([apply_match_rec(match,v,env) for v in fmla.variables],args[0])
        return fmla
    return fmla.clone(args)
示例#3
0
def apply_match_goal(match,x,apply_match,env = None):
    """ Apply a match to a goal """
    env = env if env is not None else set()
    if isinstance(x,ia.LabeledFormula):
        fmla = x.formula
        if isinstance(fmla,ia.SchemaBody):
            bound = [s for s in goal_defns(x) if s not in match]
            with il.BindSymbols(env,bound):
                fmla = fmla.clone([apply_match_goal(match,y,apply_match,env)
                                   for y in fmla.prems()]+[apply_match(match,fmla.conc(),env)])
        else:
            fmla = apply_match(match,fmla,env)
        g = x.clone([x.label,fmla])
        return g
    if isinstance(x,il.UninterpretedSort):
        return apply_match_sort(match,x)
    else:
        return x.clone([apply_match_func_alt(match,x.args[0],env)])
示例#4
0
def apply_match_alt_rec(match,fmla,env):
    args = [apply_match_alt_rec(match,f,env) for f in fmla.args]
    if il.is_app(fmla):
        if fmla.rep in match:
            return apply_fun(match_get(match,fmla.rep,env),args)
        func = apply_match_func(match,fmla.rep)
        func = match_get(match,func,env,func)
        return func(*args)
    if il.is_variable(fmla):
        if fmla in match:
            return match_get(match,fmla,env)
        fmla = il.Variable(fmla.name,apply_match_sort(match,fmla.sort))
        fmla = match_get(match,fmla,env,fmla)
        return fmla
    if il.is_binder(fmla):
        with il.BindSymbols(env,fmla.variables):
            fmla = fmla.clone_binder([apply_match_alt_rec(match,v,env) for v in fmla.variables],args[0])
        return fmla
    return fmla.clone(args)