Before this commit, the `theorem` and `def` declarations had different
universe parameter orders.
For example, the following `theorem`:
```
theorem f (a : α) (f : α → β) : f a = f a := by
rfl
```
was elaborated as
```
theorem f.{u_2, u_1} : ∀ {α : Sort u_1} {β : Sort u_2} (a : α) (f : α → β), f a = f a :=
fun {α} {β} a f => Eq.refl (f a)
```
However, if we declare `f` as a `def`, the expected order is produced.
```
def f.{u_1, u_2} : ∀ {α : Sort u_1} {β : Sort u_2} (a : α) (f : α → β), f a = f a :=
fun {α} {β} a f => Eq.refl (f a)
```
This commit fixes this discrepancy.
@semorrison @jcommelin: This might be a disruptive change to Mathlib,
but it is better to fix the issue asap. I am surprised nobody has
complained about this issue before. I discovered it while trying to
reduce discrepancies between `theorem` and `def` elaboration.
39 lines
970 B
Text
39 lines
970 B
Text
theorem f1 (a : α) (f : α → β) : f a = f a := by
|
||
rfl
|
||
|
||
/--
|
||
info: theorem f1.{u_1, u_2} : ∀ {α : Sort u_1} {β : Sort u_2} (a : α) (f : α → β), f a = f a :=
|
||
fun {α} {β} a f => Eq.refl (f a)
|
||
-/
|
||
#guard_msgs in
|
||
#print f1
|
||
|
||
theorem f2 {α : Sort u} {β : Sort v} (a : α) (f : α → β) : f a = f a := by
|
||
rfl
|
||
|
||
/--
|
||
info: theorem f2.{u, v} : ∀ {α : Sort u} {β : Sort v} (a : α) (f : α → β), f a = f a :=
|
||
fun {α} {β} a f => Eq.refl (f a)
|
||
-/
|
||
#guard_msgs in
|
||
#print f2
|
||
|
||
theorem f3.{u,v} {α : Sort u} {β : Sort v} (a : α) (f : α → β) : f a = f a := by
|
||
rfl
|
||
|
||
/--
|
||
info: theorem f3.{u, v} : ∀ {α : Sort u} {β : Sort v} (a : α) (f : α → β), f a = f a :=
|
||
fun {α} {β} a f => Eq.refl (f a)
|
||
-/
|
||
#guard_msgs in
|
||
#print f3
|
||
|
||
def g (a : α) (f : α → β) : f a = f a := by
|
||
rfl
|
||
|
||
/--
|
||
info: def g.{u_1, u_2} : ∀ {α : Sort u_1} {β : Sort u_2} (a : α) (f : α → β), f a = f a :=
|
||
fun {α} {β} a f => Eq.refl (f a)
|
||
-/
|
||
#guard_msgs in
|
||
#print g
|