Zulip Chat Archive
Stream: new members
Topic: is simp "stable"?
Filippo A. E. Nuccio (Oct 17 2020 at 11:28):
I am wondering if simp
is a "stable" tactic in the following sense. If I can finish a proof by
simp, exact h
end
where h
is some local hypothesis that I have in my context, this is because after the application of simp
the goal is exactly h
. But if people keep adding new lemmas with the attribute @[simp]
, Lean might eventually become smarter and transform the goal (as it is before my application of exact h
) to something nicer. Then I wonder if the tactic exact h
will still work to conclude the proof.
Kenny Lau (Oct 17 2020 at 11:29):
that's why we discourage non-terminal usages of simp
Kenny Lau (Oct 17 2020 at 11:30):
(and I discourage simp
in general but that's another topic)
Filippo A. E. Nuccio (Oct 17 2020 at 11:30):
Kenny Lau said:
that's why we discourage non-terminal usages of
simp
Ah, and you meant to start your answer by "No, it won't work...", right? :hurt:
Ruben Van de Velde (Oct 17 2020 at 11:33):
Well, it might keep working... But you probably don't want to make that assumption
Filippo A. E. Nuccio (Oct 17 2020 at 11:34):
Ah gosh. But then simp
is really a terrible tactic... or am I too conspirationist?
Kevin Buzzard (Oct 17 2020 at 11:35):
Maybe simp [h]
works? This would be fine.
Kenny Lau (Oct 17 2020 at 11:35):
Filippo A. E. Nuccio said:
Ah gosh. But then
simp
is really a terrible tactic...
tactics are tools with intended usages
Kevin Buzzard (Oct 17 2020 at 11:37):
There are all sorts of tricks to make non-terminal simps terminal. For example, if h : P
and if simp
changes your goal into P
today, then as we all know it might turn the goal into some different simpler P'
tomorrow because of some clever PR, but if you write
suffices : P,
simpa,
exact h
then this proof will not break even if simp
learns how to simplify P
later on.
Filippo A. E. Nuccio (Oct 17 2020 at 11:37):
Kevin Buzzard said:
Maybe
simp [h]
works? This would be fine.
First, let me clarify that mine is a hypothetical question (I have no issue at the moment with my code). That being said, I am not sure to follow: if I write simp [h]
I am temporarily adding to all @[simp]
's lemma also h
, so Lean is even smarter, no?
Kevin Buzzard (Oct 17 2020 at 11:38):
If h
is an equality then yes, you're temporarily making simp
smarter, but the point is that you are now making it smart enough to close the goal. The rule is that simp
should always close goals.
Filippo A. E. Nuccio (Oct 17 2020 at 11:40):
Ah, ok, I see. I wasn't aware of this rule. Thanks.
Kevin Buzzard (Oct 17 2020 at 11:47):
It's a mathlib rule, not a general rule, but basically it's not ideal if you come back to your code in 1 years' time (like I just did with my undergraduate teaching material) and then find that parts of it don't compile with current mathlib (which fortunately did not happen to me this year).
Reid Barton (Oct 17 2020 at 12:15):
simpa using h
exists for this purpose--it's approximately simp at h, simp, exact h
and the idea is that if simp
got smarter and kept simplifying the goal past the form of h
, then hopefully it will simplify h
in the same way.
Kevin Lacker (Oct 19 2020 at 17:14):
from a tooling point of view, it would be possible to just replace simp
with a simp only
automatically, so that it is stable. select a "simp" in your editor, hit some particular key combination, and it expands out. i'm not sure how much people would appreciate this; it might make a proof look uglier.
Mario Carneiro (Oct 19 2020 at 17:25):
that would be squeeze_simp
Kevin Lacker (Oct 19 2020 at 17:26):
right, you could have your editor do that for you. i mean why do people use simp at all instead of squeeze_simping everything
Yakov Pechersky (Oct 19 2020 at 17:48):
The editor (VSCode) responds to the squeeze_simp
trace output, with a Try this: ...
, which is clickable, and replaces the squeeze_simp
with a simp only [...]
, or whatever variant you used.
Kevin Lacker (Oct 19 2020 at 17:49):
i guess that is close to as easy as possible
Yakov Pechersky (Oct 19 2020 at 17:49):
I use just simp
often in development when I am adding/removing simp lemmas, because such changes would quickly break any simp only
Yakov Pechersky (Oct 19 2020 at 17:50):
When I am in small branches of mathlib
or something similar, such that the accessible simp
set is small.
Yakov Pechersky (Oct 19 2020 at 17:51):
squeeze_simp
is slow, because it tries to be minimal
Yakov Pechersky (Oct 19 2020 at 17:51):
as opposed to simp
, which can make extra unnecessary changes as long as the final term is simplified
Mario Carneiro (Oct 19 2020 at 17:57):
plus squeeze_simp
is noisy, so I usually wouldn't want more than one in the text at once
Mario Carneiro (Oct 19 2020 at 17:58):
usually I just use simp
while developing and find/replace with squeeze_simp
-> simp only
during cleanup
Bryan Gin-ge Chen (Oct 19 2020 at 18:01):
I think we talked a bit before about renaming squeeze_simp
to simp?
, just to make it a bit easier to call. I forget what the obstacles there were though.
Golol (Oct 20 2020 at 15:15):
What about storing the proof term seperately somewhere in the library as a backup proof. That should be stable.
Yakov Pechersky (Oct 20 2020 at 15:18):
That's pretty similar to Kevin's "suffices" style above
Joe Hendrix (Jan 19 2021 at 07:52):
(deleted)
Last updated: Dec 20 2023 at 11:08 UTC