expr_const::expr_const(name const & n): expr_cell(expr_kind::Constant, n.hash(), false), m_name(n) {}
expr_mlocal::expr_mlocal(bool is_meta, name const & n, expr const & t, tag g): expr_composite(is_meta ? expr_kind::Meta : expr_kind::Local, n.hash(), is_meta || t.has_expr_metavar(), t.has_univ_metavar(), !is_meta || t.has_local(), t.has_param_univ(), 1, get_free_var_range(t), g), m_name(n), m_type(t) {}
virtual unsigned hash() const { return m_proj_name.hash(); }
expr_const::expr_const(name const & n, levels const & ls, tag g): expr_cell(expr_kind::Constant, ::lean::hash(n.hash(), hash_levels(ls)), false, has_meta(ls), false, has_param(ls), g), m_name(n), m_levels(ls) { }
level_param_core(level_kind k, name const & id): level_cell(k, hash(id.hash(), static_cast<unsigned>(k))), m_id(id) { lean_assert(k == level_kind::Meta || k == level_kind::Param || k == level_kind::Global); }