Zulip Chat Archive
Stream: new members
Topic: simp and do notation
Miguel Negrão (Apr 01 2023 at 15:53):
Hi again,
Sometimes after calling simp the result is in do notation. At least for me, this make is it a bit more difficult to visualize what I need to prove. Is there a way to force simp not to display do notation and show me instead >>= and lambdas ?
Kevin Buzzard (Apr 01 2023 at 20:13):
Can you give a #mwe ?
Miguel Negrão (Apr 03 2023 at 10:48):
I think the do notation appeared in my goal from a function definition. So let's say what we are trying to prove is in do notation, but during proof, we would like to change into desugared form, to make it easier to see which theorems apply, how would one do that ? A very simple mwe below.
universe u v w
variable {m : Type u → Type v} [Monad m] [LawfulMonad m]
variable {α β γ : Type u}
theorem map_bind2 (x : m α) {g : α → m β} {f : β → γ} :
f <$> (x >>= g) = (do
let a <- x
f <$> g a) := by
_
unsolved goals
m: Type u → Type v
x: m α
g: α → m β
f: β → γ
⊢ f <$> (x >>= g) = do
let a ← x
f <$> g a
Alex J. Best (Apr 03 2023 at 11:10):
Does
attribute [-delab] Lean.PrettyPrinter.Delaborator.delabDo
do what you want?
Eric Wieser (Apr 03 2023 at 11:12):
What import does that need, Alex?
Eric Wieser (Apr 03 2023 at 11:12):
docs4#Lean.PrettyPrinter.Delaborator.delabDo
Alex J. Best (Apr 03 2023 at 11:12):
I would think nothing?
Eric Wieser (Apr 03 2023 at 11:13):
It doesn't work for me without import Lean.PrettyPrinter.Delaborator.Builtins
Alex J. Best (Apr 03 2023 at 11:14):
Hmm interesting, not sure I understand how that works to be honest
Eric Wieser (Apr 03 2023 at 11:15):
I think it's because it's builtin
Miguel Negrão (Apr 03 2023 at 11:23):
Alex J. Best disse:
Does
attribute [-delab] Lean.PrettyPrinter.Delaborator.delabDo
do what you want?
Yup, that does the trick !!! Great ! Indeed l report the same as @Eric Wieser , I need that import to make it work. Thanks all !
Eric Wieser (Apr 03 2023 at 11:24):
FWIW, I was able to prove your lemma with simp only [map_eq_pure_bind, bind_assoc]
Miguel Negrão (Apr 03 2023 at 11:28):
Thanks, but my example is from mathlib4. Just needed something to illustrate the point. :-)
theorem map_bind (x : m α) {g : α → m β} {f : β → γ} :
f <$> (x >>= g) = x >>= fun a => f <$> g a := by
rw [← bind_pure_comp, bind_assoc] <;> simp [bind_pure_comp]
Last updated: Dec 20 2023 at 11:08 UTC