Exemplo n.º 1
0
    def apply_proof(self, decls, proof):
        """ Apply a proof to a list of goals, producing subgoals, or None if
        the proof fails. """

        with ia.ASTContext(proof):
            if len(decls) == 0:
                return []
            if isinstance(proof, ia.SchemaInstantiation):
                m = self.match_schema(decls[0], proof)
                return None if m is None else m + decls[1:]
            elif isinstance(proof, ia.LetTactic):
                return self.let_tactic(decls, proof)
            elif isinstance(proof, ia.ComposeTactics):
                return self.compose_proofs(decls, proof.args)
            elif isinstance(proof, ia.AssumeTactic):
                return self.assume_tactic(decls, proof)
            elif isinstance(proof, ia.ShowGoalsTactic):
                return self.show_goals_tactic(decls, proof)
            elif isinstance(proof, ia.DeferGoalTactic):
                return self.defer_goal_tactic(decls, proof)
            elif isinstance(proof, ia.DeferGoalTactic):
                return self.defer_goal_tactic(decls, proof)
            elif isinstance(proof, ia.LetTactic):
                return self.let_tactic(decls, proof)
            elif isinstance(proof, ia.IfTactic):
                return self.if_tactic(decls, proof)
            elif isinstance(proof, ia.NullTactic):
                return decls
            elif isinstance(proof, ia.PropertyTactic):
                return self.property_tactic(decls, proof)
            assert False, "unknown proof type {}".format(type(proof))
Exemplo n.º 2
0
def compile_defn(df):
    has_consts = any(not isinstance(p, ivy_ast.Variable)
                     for p in df.args[0].args)
    sig = ivy_logic.sig.copy() if has_consts else ivy_logic.sig
    with ivy_ast.ASTContext(df):
        with sig:
            for p in df.args[0].args:
                if not isinstance(p, ivy_ast.Variable):
                    compile_const(p, sig)
            if isinstance(df.args[1], ivy_ast.SomeExpr):
                ifval = df.args[1].if_value() or df.args[1].params()[0]
                elseval = df.args[1].else_value() or ifval
                eqn = ivy_ast.Forall(
                    df.args[1].params(),
                    ivy_ast.Atom(
                        '=', (df.args[0],
                              ivy_ast.Ite(df.args[1].fmla(), ifval, elseval))))
                fmla = sortify_with_inference(eqn)
                args = [list(fmla.variables)[0], fmla.body.args[1].args[0]]
                if df.args[1].if_value():
                    args.append(fmla.body.args[1].args[1])
                if df.args[1].else_value():
                    args.append(fmla.body.args[1].args[2])
                df = ivy_logic.Definition(fmla.body.args[0],
                                          ivy_logic.Some(*args))
            else:
                eqn = ivy_ast.Atom('=', (df.args[0], df.args[1]))
                eqn = sortify_with_inference(eqn)
                df = ivy_logic.Definition(eqn.args[0], eqn.args[1])
            return df
Exemplo n.º 3
0
def compile_expr_vocab(expr,vocab):
    with il.WithSymbols(vocab.symbols):
        with il.WithSorts(vocab.sorts):
            if isinstance(expr,ia.Atom) and expr.rep in il.sig.sorts:
                return il.sig.sorts[expr.rep]
            with il.top_sort_as_default():
                with ia.ASTContext(expr):
                    expr = il.sort_infer_list([expr.compile()] + vocab.variables)[0]
                    return expr