lean2/tests/lean/univ.lean
Leonardo de Moura 2b2aa228e3 refactor(builtin/kernel): start with small universes
The universe constraint manager is more flexible now.
We don't need to start with a huge universe  U >= 512.
We can start small, and increase it on demand.

If module mod1 needs it, it can always add

   universe U >= 3

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
2014-01-08 12:35:00 -08:00

43 lines
1 KiB
Text

universe M >= 1
universe U >= M + 1
definition TypeM := (Type M)
universe Z ≥ M+3
(*
local env = get_environment()
assert(env:get_universe_distance("Z", "M") == 3)
assert(not env:get_universe_distance("Z", "U"))
*)
scope
universe Z ≥ U + 10
(*
local env = get_environment()
assert(env:get_universe_distance("Z", "U") == 10)
assert(env:get_universe_distance("Z", "M") ==
env:get_universe_distance("Z", "U") +
env:get_universe_distance("U", "M"))
*)
pop::scope
(*
local env = get_environment()
assert(env:get_universe_distance("Z", "M") == 3)
assert(not env:get_universe_distance("Z", "U"))
*)
universe Z1 ≥ U + 1073741824.
universe Z2 ≥ Z1 + 1073741824.
universe U1
universe U2 ≥ U1 + 1
universe U3 ≥ U1 + 1
universe U4 ≥ U2 + 1
universe U4 ≥ U3 + 3
(*
local env = get_environment()
assert(env:get_universe_distance("U4", "U1") == 4)
assert(env:get_universe_distance("U4", "U3") == 3)
assert(env:get_universe_distance("U4", "U2") == 1)
*)
universe U1 ≥ U4.