ca632cca13
We can declare variables anywhere. So, we must also be able do declare "universe" variables anywhere. Here is a minimal example that requires this feature ``` -- We want A and B to be in the same universe universe variable l variable A : Type.{l} variable B : Type.{l} definition tst := A = B ``` The following doesn't work because A and B are in different universes ``` variable A : Type variable B : Type definition tst := A = B ``` The following works, but tst is not universe polymorphic, since l is one *fixed* global universe ``` universe l variable A : Type.{l} variable B : Type.{l} definition tst := A = B ```
28 lines
427 B
Text
28 lines
427 B
Text
import logic
|
|
set_option pp.universes true
|
|
|
|
universe u
|
|
variable A : Type.{u}
|
|
|
|
definition id1 (a : A) : A := a
|
|
check @id1
|
|
|
|
variable B : Type
|
|
|
|
definition id2 (a : B) : B := a
|
|
check @id2
|
|
|
|
universe variable k
|
|
variable C : Type.{k}
|
|
|
|
definition id3 (a : C) := a
|
|
|
|
check @id3
|
|
|
|
universe variables l m
|
|
variable A₁ : Type.{l}
|
|
variable A₂ : Type.{l}
|
|
definition foo (a₁ : A₁) (a₂ : A₂) := a₁ == a₂
|
|
check @foo
|
|
|
|
check Type.{m}
|