assert(level():is_zero())
assert(mk_level_zero():is_zero())
assert(mk_level_one():is_succ())
assert(not mk_level_one():is_zero())
assert(mk_level_max(mk_level_zero(), mk_level_one()):is_succ())
assert(mk_level_max(mk_param_univ("a"), mk_param_univ("b")):is_max())
assert(mk_level_max(mk_level_one(), mk_level_zero()):is_succ())
assert(level():succ():is_succ())
assert(mk_level_imax(mk_level_one(), mk_level_zero()):is_zero())
assert(is_level(mk_level_one()))
assert(not is_level(1))
assert(mk_level_one():succ_of() == mk_level_zero())
assert(mk_level_one():succ_of():is_zero())
assert(mk_level_succ(mk_level_succ(level())):is_not_zero())
assert(not mk_param_univ("a"):is_not_zero())
assert(mk_level_max(mk_param_univ("a"), mk_param_univ("b")):lhs() == mk_param_univ("a"))
assert(mk_level_max(mk_param_univ("a"), mk_param_univ("b")):rhs() == mk_param_univ("b"))
assert(mk_level_imax(mk_param_univ("a"), mk_param_univ("b")):lhs() == mk_param_univ("a"))
assert(mk_level_imax(mk_param_univ("a"), mk_param_univ("b")):rhs() == mk_param_univ("b"))
assert(mk_param_univ("a"):id() == name("a"))
assert(mk_meta_univ("b"):id() == name("b"))
assert(mk_level_succ(mk_level_zero()):is_equivalent(mk_level_one()))
assert(not mk_param_univ("b"):is_equivalent(mk_param_univ("a")))
assert(mk_level_one():kind() == level_kind.Succ)
assert(not mk_level_one():has_meta())
assert(not mk_level_succ(mk_param_univ("a")):has_meta())
assert(mk_level_succ(mk_meta_univ("a")):has_meta())
local l = mk_level_max(mk_param_univ("a"), mk_param_univ("b"))
assert(l:instantiate({"a"}, {mk_level_one()}) == mk_level_max(mk_level_one(), mk_param_univ("b")))
assert(l:instantiate({"a", "b"}, {mk_level_one(), mk_param_univ("c")}) == mk_level_max(mk_level_one(), mk_param_univ("c")))
assert(not pcall(function() l:instantiate({"a", "b", "C"}, {mk_level_one(), mk_param_univ("c")}) end))
assert(l:is_eqp(l))
assert(not l:is_eqp(level()))
