expr mk_prenum(mpz const & v) { return mk_macro(macro_definition(new prenum_macro_definition_cell(v)), 0, nullptr); }
expr mk_string_macro(std::string const & v) { return mk_macro(macro_definition(new string_macro(v))); }
expr mk_let_macro(name const & n, expr const & v, expr const & b) { auto d = macro_definition(new let_macro_definition_cell(n)); expr args[2] = {v, b}; return mk_macro(d, 2, args); }