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()); }
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()); }
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; } }
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; } }
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; } }
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()); }