Zulip Chat Archive
Stream: new members
Topic: the word "to"
Kevin Lacker (Dec 09 2020 at 17:19):
it is annoying that naming your variable "to" works fine, until one happens to import something that recursively depends on tactic.lift, in which the word "to" is declared to be reserved notation
Mario Carneiro (Dec 09 2020 at 17:20):
maybe don't name your variable to then
Kevin Lacker (Dec 09 2020 at 17:21):
yeah now i know, this has been an enlightening experience chasing down why adding one more import causes a parse failure in unrelated code
Mario Carneiro (Dec 09 2020 at 17:21):
declaring a word as a token is a pretty big step, because it means no one is allowed to ever use it as a variable. This is a user facing design choice
Mario Carneiro (Dec 09 2020 at 17:22):
probably we should coalesce all token declarations in mathlib in one file that gets imported universally, like tactic.core or something
Kevin Lacker (Dec 09 2020 at 17:23):
it's just weird that I could make file A import file B, and that breaks a totally unrelated file C, because C happens to have a long dependency chain on A, and it uses the word "to"
Mario Carneiro (Dec 09 2020 at 17:23):
it's not that it uses the word to, it is that the file declares that to is now a keyword
Kevin Lacker (Dec 09 2020 at 17:23):
I mean that file C uses the word "to" as a variable name, an allegedly permitted maneuver
Mario Carneiro (Dec 09 2020 at 17:24):
C has the same issue when they declare new keywords
Mario Carneiro (Dec 09 2020 at 17:24):
There is a reason all the new keywords are weird things like co_await and reflexpr
Kevin Lacker (Dec 09 2020 at 17:24):
that usually happens when you push a new version of the language, though, not when someone adds import data.list.basic to some random library
Mario Carneiro (Dec 09 2020 at 17:25):
That's due to the extensible syntax design of lean
Kevin Lacker (Dec 09 2020 at 17:25):
anyway i just wanted to vent. thank you for feeling my pain. i'll go rename this stupid variable now
Mario Carneiro (Dec 09 2020 at 17:25):
it means libraries can literally extend the language in the same way as a new C version. This is huge for mathlib, we make extensive use of this capability
Johan Commelin (Dec 09 2020 at 17:25):
@Kevin Lacker I understand your pain. Do you think Marios suggestion would help?
Johan Commelin (Dec 09 2020 at 17:26):
Mario Carneiro said:
probably we should coalesce all token declarations in mathlib in one file that gets imported universally, like
tactic.coreor something
I mean :this:
Kevin Lacker (Dec 09 2020 at 17:26):
I don't really understand why this breaks, honestly, so I hesitate to support any particular solution
Kevin Lacker (Dec 09 2020 at 17:26):
I did not know about the reserve notation command until I discovered it was lurking in the weeds biting my ankle
Mario Carneiro (Dec 09 2020 at 17:27):
That's because you probably never thought to name a variable generalizing
Mario Carneiro (Dec 09 2020 at 17:27):
or using
Mario Carneiro (Dec 09 2020 at 17:27):
or at
Mario Carneiro (Dec 09 2020 at 17:27):
really any keywordy word that gets used in tactics
Mario Carneiro (Dec 09 2020 at 17:28):
ring implements a trick to allow it to recognize ring raw / ring SOP / ring horner without making those keywords
Mario Carneiro (Dec 09 2020 at 17:31):
Alternatively, we could change the preposition that lift uses
Mario Carneiro (Dec 09 2020 at 17:32):
there is a reason we reuse the same 3-4 words all over the place in tactic parsers
Mario Carneiro (Dec 09 2020 at 17:33):
how about lift x as int?
Bryan Gin-ge Chen (Dec 09 2020 at 17:34):
Isn't as much more commonly used, e.g. in lists a :: as?
Mario Carneiro (Dec 09 2020 at 17:35):
Right now I guess it's not a keyword, but I believe it used to be and at least some syntax highlighters think it still is
Rob Lewis (Dec 09 2020 at 17:37):
Mario Carneiro said:
probably we should coalesce all token declarations in mathlib in one file that gets imported universally, like
tactic.coreor something
I think this is a good idea and we don't need to change lift. As long as the variable to gets rejected immediately and not by some transitive import, it's not a big problem.
Mario Carneiro (Dec 09 2020 at 17:39):
can we get a style linter for this?
Mario Carneiro (Dec 09 2020 at 17:40):
I think it is as simple as grepping for reserve or precedence at the start of a line
Bryan Gin-ge Chen (Dec 09 2020 at 17:53):
I can work on a style linter for this when I get a chance.
Bryan Gin-ge Chen (Dec 12 2020 at 05:35):
Last updated: May 02 2025 at 03:31 UTC