Zulip Chat Archive
Stream: general
Topic: apply induction_lemma, clear n
Kevin Buzzard (Nov 11 2020 at 19:44):
Reviewing a PR and I see apply nat.strong_induction_on n, clear n,
. This reminded me of some code I was writing last week which had the line apply span_induction hx; clear hx x,
. This is perhaps quite a common idiom? The reason one wants to clear the variable is because one is about to embark on a proof or proofs of results related to the original goal and ones instinct is to use the same variable names again -- for example I want to prove results about elements of submodules and I want to use x and y for these elements, so it's annoying if I don't clear the original x
which is now useless to me. Is this style OK or is it worth modding some induction tactic to make this happen automatically? I'm not entirely sure what I want here, but given that I've now seen this twice in one week it made me wonder.
Mario Carneiro (Nov 11 2020 at 20:29):
I think ssreflect has something for this, a la have {h1} h2 := foo h1
which is like have h2 := foo h1, clear h1
except it works even if you reuse the variable names
Mario Carneiro (Nov 11 2020 at 20:33):
I don't see how we can offer something better than ; clear
though
Mario Carneiro (Nov 11 2020 at 20:33):
in the examples, apply span_induction hx clearing hx x
would be no better
Shing Tak Lam (Nov 11 2020 at 20:41):
fwiw induction n using nat.strong_induction_on with n hn
works (does the same as apply nat.strong_induction_on n, clear n, intros n hn
)
Kevin Buzzard (Nov 11 2020 at 21:42):
Yes, I realised when I was posting that I couldn't really see a solution which would be saving too many characters!
Last updated: Dec 20 2023 at 11:08 UTC