2014-05-21 18:49:30 +00:00
|
|
|
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)))
|
|
|
|
|
2014-06-13 15:26:05 +00:00
|
|
|
env:for_each_decl(function(d)
|
|
|
|
print(tostring(d:name()) .. " : " .. tostring(d:type()))
|
|
|
|
end
|
2014-05-21 18:49:30 +00:00
|
|
|
)
|