local env = hott_environment() assert(not env:impredicative()) assert(not env:prop_proof_irrel()) local l = param_univ("l") local U_l = mk_sort(l) local A = Local("A", U_l) local list_l = Const("list", {l}) -- In HoTT environments, we don't need to use max(l, 1) trick -- in the following definition env = add_inductive(env, "list", {l}, 1, Pi(A, U_l), "nil", Pi(A, list_l(A)), "cons", Pi(A, mk_arrow(A, list_l(A), list_l(A)))) local l1 = param_univ("l1") local l2 = param_univ("l2") local U_l1 = mk_sort(l1) local U_l2 = mk_sort(l2) local U_l1l2 = mk_sort(max_univ(l1, l2)) local A = Local("A", U_l1) local B = Local("B", U_l2) local a = Local("a", A) local b = Local("b", B) local sigma_l1l2 = Const("sigma", {l1, l2}) env = add_inductive(env, "sigma", {l1, l2}, 2, Pi({A, B}, U_l1l2), "pair", Pi({A, B, a, b}, sigma_l1l2(A, B))) local coproduct_l1l2 = Const("coproduct", {l1, l2}) env = add_inductive(env, "coproduct", {l1, l2}, 2, Pi({A, B}, U_l1l2), "inl", Pi({A, B, a}, coproduct_l1l2(A, B)), "inr", Pi({A, B, b}, coproduct_l1l2(A, B))) env:for_each_decl(function(d) print(tostring(d:name()) .. " : " .. tostring(d:type())) end )