Zulip Chat Archive

Stream: new members

Topic: difference between dsimp and unfold


Rado Kirov (Jul 12 2025 at 15:02):

Working on a problem from Tao's Analysis 3.5, but the question is pretty general.

We have two definitions (side q: why are they abbrev? and not def)

abbrev SetTheory.Set.curry {X Y Z:Set} (f: X ×ˢ Y  Z) : X  Y  Z :=
  fun x y  f  ( x, y :OrderedPair), by rw [mem_cartesian]; use x, y 

noncomputable abbrev SetTheory.Set.uncurry {X Y Z:Set} (f: X  Y  Z) : X ×ˢ Y  Z :=
  fun z  f (fst z) (snd z)

and want to prove

theorem SetTheory.Set.curry_uncurry {X Y Z:Set} (f: X  Y  Z) : curry (uncurry f) = f := ...

by trial and answer I found out that unfold will expand the definitions but dsimp, simp and rw wont. How should I think about this properly.

Rado Kirov (Jul 12 2025 at 15:08):

Also, for the next step to go from

(fun x y  (fun z  f (fst z) (snd z)) OrderedPair.toObject { fst := x, snd := y }, ⋯⟩) = f

to

(fun x y 
    f (fst OrderedPair.toObject { fst := x, snd := y }, ⋯⟩)
      (snd OrderedPair.toObject { fst := x, snd := y }, ⋯⟩)) =
  f

I found I can do it by doing simp_only with no theorems. Why does plain simp run one step of the evaluation?

Ruben Van de Velde (Jul 12 2025 at 15:56):

That's one of the Greek letter reductions that simp does by default. Beta? Try simp -beta only if that leaves it alone

Rado Kirov (Jul 12 2025 at 16:27):

Makes sense. Is ‘simp’ the preferred way to run beta reduction? I think the reduced form is defeq so I have also seen using ‘change’ but then one has to spell out the outcome which is cumbersome

Aaron Liu (Jul 12 2025 at 16:33):

I prefer dsimp but there's also beta_reduce from mathlib


Last updated: Dec 20 2025 at 21:32 UTC