Zulip Chat Archive
Stream: general
Topic: simp'ing lets in proof
Bernd Losert (Feb 09 2022 at 22:46):
MWE:
import data.prod
import order.filter.basic
open filter
open_locale filter
universe u
variables {α β γ : Type*}
variables [has_mul α]
lemma bar (baz : α) (qux : β) : 1 = 1 := begin
let act : α × (α × β) → α × β := λ ⟨a, b, x⟩, (a * b, x),
let mul : α × α → α := function.uncurry (*),
let rlassoc := (equiv.prod_assoc α α β).inv_fun,
have : act = prod.map mul id ∘ rlassoc, begin
funext,
simp,
end,
end
This is clearly not working out since simp doesn't know about the let bound variables. I can use dsimpbefore simp, but that doesn't get me anywhere. Is there a way to make this work, or will I have to extract everything out into defs?
Adam Topaz (Feb 09 2022 at 22:49):
try tidy
Adam Topaz (Feb 09 2022 at 22:50):
And then tidy? to see what it did, so you can golf it away.
Bernd Losert (Feb 09 2022 at 22:51):
Let me try...
Adam Topaz (Feb 09 2022 at 22:51):
hint: ext ⟨_,_,_⟩; refl closes the goal
Bernd Losert (Feb 09 2022 at 22:52):
tidy works marvelously.
Adam Topaz (Feb 09 2022 at 22:54):
If you really want to unfold your lets, you can use tactic#unfold or, e.g., dsimp [mul].
Bernd Losert (Feb 09 2022 at 22:55):
I was using dsimp to unfold the let bound variables, but calling simp afterwards did not have an effect. Is tidy a more powerful simp?
Adam Topaz (Feb 09 2022 at 22:55):
You can also replace let with tactic#set using set ... with ...
Adam Topaz (Feb 09 2022 at 22:55):
Use tidy? to see what tidy does
Adam Topaz (Feb 09 2022 at 22:56):
You were missing an ext and some case splits. It had nothing to do with the lets.
Bernd Losert (Feb 09 2022 at 22:57):
Try this: cases a, cases hk, cases hk_right, cases a_snd, refl <-- that's what it says it does. No clue what's going on.
Kevin Buzzard (Feb 09 2022 at 22:57):
You can use set ... with h rather than let ... and then throw in h into the simp set (oops, missed that Adam said this already)
Bernd Losert (Feb 09 2022 at 22:58):
I'm not sure how set with would work here. Never used it before.
Kevin Buzzard (Feb 09 2022 at 23:01):
Type set in tactic mode and then hover over it to see the documentation, or send a message to yourself on Zulip saying tactic#set and click on the link
Bernd Losert (Feb 09 2022 at 23:01):
set act : α × (α × β) → α × β := λ ⟨a, b, x⟩, (a * b, x) with <what do I put here?>
Kevin Buzzard (Feb 09 2022 at 23:01):
act_def
Bernd Losert (Feb 09 2022 at 23:02):
Ah, so it's the name of the equality hypothesis.
Bernd Losert (Feb 09 2022 at 23:02):
Nice.
Bernd Losert (Feb 09 2022 at 23:02):
Thanks guys.
Last updated: May 02 2025 at 03:31 UTC