コード例 #1
0
static bool contains_untrusted_macro(unsigned trust_lvl, declaration const & d) {
    if (trust_lvl > LEAN_BELIEVER_TRUST_LEVEL)
        return false;
    if (contains_untrusted_macro(trust_lvl, d.get_type()))
        return true;
    return (d.is_definition() || d.is_theorem()) && contains_untrusted_macro(trust_lvl, d.get_value());
}
コード例 #2
0
ファイル: unfold_macros.cpp プロジェクト: avigad/lean
static bool contains_untrusted_macro(unsigned trust_lvl, declaration const & d) {
#if defined(LEAN_ALL_MACROS_HAVE_SMALL_TRUST_LVL)
    if (trust_lvl > LEAN_BELIEVER_TRUST_LEVEL) return false;
#endif
    if (!d.is_trusted())
        return false;
    if (contains_untrusted_macro(trust_lvl, d.get_type()))
        return true;
    return (d.is_definition() || d.is_theorem()) && contains_untrusted_macro(trust_lvl, d.get_value());
}
コード例 #3
0
ファイル: unfold_macros.cpp プロジェクト: fgdorais/lean
expr unfold_untrusted_macros(environment const & env, expr const & e, unsigned trust_lvl) {
    if (contains_untrusted_macro(trust_lvl, e)) {
        return unfold_untrusted_macros_fn(env, trust_lvl)(e);
    } else {
        return e;
    }
}
コード例 #4
0
ファイル: unfold_macros.cpp プロジェクト: avigad/lean
expr unfold_untrusted_macros(environment const & env, expr const & e, optional<unsigned> const & trust_lvl) {
    if (!trust_lvl || contains_untrusted_macro(*trust_lvl, e)) {
        type_context ctx(env, transparency_mode::All);
        return unfold_untrusted_macros_fn(ctx, trust_lvl)(e);
    } else {
        return e;
    }
}
コード例 #5
0
ファイル: unfold_macros.cpp プロジェクト: avigad/lean
declaration unfold_untrusted_macros(environment const & env, declaration const & d, optional<unsigned> const & trust_lvl) {
    if (!trust_lvl || contains_untrusted_macro(*trust_lvl, d)) {
        expr new_t = unfold_untrusted_macros(env, d.get_type(), trust_lvl);
        if (d.is_theorem()) {
            expr new_v = unfold_untrusted_macros(env, d.get_value(), trust_lvl);
            return mk_theorem(d.get_name(), d.get_univ_params(), new_t, new_v);
        } else if (d.is_definition()) {
            expr new_v = unfold_untrusted_macros(env, d.get_value(), trust_lvl);
            return mk_definition(d.get_name(), d.get_univ_params(), new_t, new_v,
                                 d.get_hints(), d.is_trusted());
        } else if (d.is_axiom()) {
            return mk_axiom(d.get_name(), d.get_univ_params(), new_t);
        } else if (d.is_constant_assumption()) {
            return mk_constant_assumption(d.get_name(), d.get_univ_params(), new_t);
        } else {
            lean_unreachable();
        }
    } else {
        return d;
    }
}
コード例 #6
0
ファイル: unfold_macros.cpp プロジェクト: fgdorais/lean
bool contains_untrusted_macro(unsigned trust_lvl, declaration const & d) {
    if (contains_untrusted_macro(trust_lvl, d.get_type()))
        return true;
    return (d.is_definition() || d.is_theorem()) && contains_untrusted_macro(trust_lvl, d.get_value());
}