Zulip Chat Archive
Stream: Type theory
Topic: The `{}` annotation for inductive types
Gihan Marasingha (Dec 20 2020 at 15:26):
Can someone give a simple example to show where the {}
annotation for constructors of inductive types is necessary? For instance, what works with
inductive sum (α : Type u) (β : Type v)
| inl {} : α → sum
| inr {} : β → sum
that doesn't work for
inductive sum' (α : Type u) (β : Type v)
| inl : α → sum'
| inr : β → sum'
?
Kenny Lau (Dec 20 2020 at 15:40):
implicit arguments
Kevin Buzzard (Dec 20 2020 at 15:42):
#tpil explains an example here.
...erm, except that indeed the {}
(in list.nil
) seems to have no effect in their example either.
universes u
namespace hidden
inductive list (α : Type u)
| nil {} : list
| cons : α → list → list
inductive list' (α : Type u)
| nil : list' -- get {} brackets
| cons : α → list' → list'
inductive list'' (α : Type*)
| nil [] : list'' -- get () brackets :D
| cons : α → list'' → list''
Kevin Buzzard (Dec 20 2020 at 15:45):
I think some change was made in core Lean relatively recently and perhaps TPIL was not updated.
Gihan Marasingha (Dec 20 2020 at 16:11):
Right, that's what I thought. The []
annotation does make a difference, but just removing {}
doesn't seem to do anything. Should the definitions in mathlib be updated to remove the {}
annotation?
Unless there really is a difference and I just don't understand what it is.
Kevin Buzzard (Dec 20 2020 at 16:18):
universes u v
namespace hidden
inductive sum1 (α : Type u) (β : Type v)
| inl {} : α → sum1
| inr {} : β → sum1
inductive sum2 (α : Type u) (β : Type v)
| inl : α → sum2
| inr : β → sum2
#print prefix hidden.sum1
#print prefix hidden.sum2
end hidden
Make the infoview big and move your cursor between the two #print statements to see...no change at all other than 1<->2
Gihan Marasingha (Dec 20 2020 at 16:22):
Yes and ignore my previous comment. I see that the constructors for sum
and list
don't take the {}
annotation in core Lean.
Gihan Marasingha (Dec 20 2020 at 16:26):
@Jeremy Avigad can you confirm that the {}
annotation for constructors of implicit types doesn't do anything in the current version of Lean? Does tpil need to be updated?
Kevin Buzzard (Dec 20 2020 at 16:27):
so one can use git blame to find out when that changed, and one is led here.
Kevin Buzzard (Dec 20 2020 at 16:32):
Looking at the diff, you see that it was clearly the right decision.
Jeremy Avigad (Dec 22 2020 at 17:47):
Sorry, I have been dragging my feet on this. The semester is over now, and my grades are in. Within the next day or two I'll update TPIL to compile with the latest version of mathlib, and I'll update this in the text.
Jeremy Avigad (Dec 23 2020 at 02:20):
I just updated TPIL to Lean 3.23.0, removed the discussion of {}, and merged a number of pull requests I had been neglecting. @Gihan Marasingha thanks for pinging me on this.
Last updated: Dec 20 2023 at 11:08 UTC