local env = environment()
env = env:begin_section_scope()
local nat      = Const("nat")
env = add_inductive(env,
                    "nat", Type,
                    "zero", nat,
                    "succ", mk_arrow(nat, nat))
local zero     = Const("zero")
local succ     = Const("succ")

env = env:begin_section_scope()
env = env:add_global_level("l")
local l = mk_global_univ("l")
env = env:add(check(env, mk_var_decl("A", mk_sort(l))), binder_info(true))
env = env:add(check(env, mk_var_decl("B", mk_sort(l))), binder_info(true))
local A = Const("A")
local vector = Const("vector")
local n      = Local("n", nat)
env = add_inductive(env,
                    "vector", mk_arrow(nat, mk_sort(max_univ(l, 1))),
                    "nil", vector(zero),
                    "cons", Pi(n, mk_arrow(A, vector(n), vector(succ(n)))))

print(env:find("vector_rec"):type())
assert(env:find("cons"):type() == Pi(n, mk_arrow(A, vector(n), vector(succ(n)))))
env = env:end_scope()
print(env:find("vector_rec"):type())
print(env:find("cons"):type())
local l = mk_param_univ("l")
local A = Local("A", mk_sort(l))
local vector = Const("vector", {l})
assert(env:find("cons"):type() == Pi({A, n}, mk_arrow(A, vector(A, n), vector(A, succ(n)))))
env = env:end_scope()

print(env:find("vector_rec"):type())
print(env:find("cons"):type())
env:export("sect8_mod.olean")
local env2 = import_modules("sect8_mod")
assert(env:find("vector_rec"):type() == env2:find("vector_rec"):type())