virtual pair<expr, constraint_seq> check_type(expr const & m, extension_context & ctx, bool infer_only) const { environment const & env = ctx.env(); check_num_args(env, m); if (!infer_only) infer_type(macro_arg(m, 0), ctx, infer_only); expr l = whnf(macro_arg(m, 0), ctx); expr not_l = whnf(mk_app(*g_not, l), ctx); expr C1 = infer_type(macro_arg(m, 1), ctx, infer_only); expr C2 = infer_type(macro_arg(m, 2), ctx, infer_only); return mk_pair(mk_resolvent(env, ctx, m, l, not_l, C1, C2), constraint_seq()); }
virtual pair<bool, constraint_seq> is_def_eq(expr const &, expr const &, type_checker &, delayed_justification &) { return mk_pair(true, constraint_seq()); }
virtual pair<expr, constraint_seq> whnf(expr const & e, type_checker &) { return mk_pair(e, constraint_seq()); }
expr operator()(level_param_names const & ls, expr const & e) { m_cnstrs = constraint_seq(); return m_tc.with_params(ls, [&]() { return normalize(e); }); }
expr operator()(expr const & e) { m_cnstrs = constraint_seq(); return normalize(e); }