lean2/tests/lua/coe3.lua
Leonardo de Moura edcbe6fe10 feat(frontends/lean): allow multiple coercions from class A to B, closes #187
See new tests (for examples)
tests/lean/run/coe10.lean
tests/lean/run/coe11.lean
tests/lean/run/coe9.lean

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
2014-09-14 12:59:43 -07:00

13 lines
751 B
Lua

local env = environment()
local l = param_univ("l")
env = add_decl(env, mk_var_decl("group", {l}, mk_sort(l+1)))
env = add_decl(env, mk_var_decl("abelian_group", {l}, mk_sort(l+1)))
local group = Const("group", {l})
local ab_group = Const("abelian_group", {l})
env = add_decl(env, mk_var_decl("carrier", {l}, mk_arrow(group, mk_sort(l))))
env = add_coercion(env, "carrier")
env = add_decl(env, mk_var_decl("abg2g", {l}, mk_arrow(ab_group, group)))
env = add_coercion(env, "abg2g")
for_each_coercion_sort(env, function(C, f) print(tostring(C) .. " >-> sort : " .. tostring(f)) end)
print(get_coercions_to_sort(env, Const("abelian_group", {1})):head())
assert(env:type_check(get_coercions_to_sort(env, Const("abelian_group", {1})):head()))