In the standard library, we should use explicit universe variables for universe polymorphic definitions. Users that want to declare universe polymorphic definitions but do not want to provide universe level parameters should use Type _ or Type*
38 lines
937 B
Text
38 lines
937 B
Text
open nat
|
||
section
|
||
parameter (X : Type)
|
||
definition A {n : ℕ} : Type := X
|
||
definition B : Type := X
|
||
variable {n : ℕ}
|
||
check @A n
|
||
check _root_.A nat
|
||
check _root_.A (X × B)
|
||
check @_root_.A (X × B) 10
|
||
check @_root_.A (_root_.B (@_root_.A X n)) n
|
||
check @_root_.A (@_root_.B (@_root_.A nat n)) n
|
||
|
||
set_option pp.full_names true
|
||
check A
|
||
check _root_.A nat
|
||
check @_root_.A (X × B) 10
|
||
check @_root_.A (@_root_.B (@_root_.A X n)) n
|
||
check @_root_.A (@_root_.B (@_root_.A nat n)) n
|
||
|
||
set_option pp.full_names false
|
||
|
||
set_option pp.implicit true
|
||
check @A n
|
||
check @_root_.A nat 10
|
||
check @_root_.A X n
|
||
set_option pp.full_names true
|
||
check @_root_.A X n
|
||
check @_root_.A B n
|
||
|
||
set_option pp.full_names false
|
||
check @_root_.A X n
|
||
check @_root_.A B n
|
||
check @_root_.A (@_root_.B (@A n)) n
|
||
check @_root_.A (@_root_.B (@_root_.A X n)) n
|
||
check @_root_.A (@_root_.B (@_root_.A nat n)) n
|
||
check @A n
|
||
end
|