Zulip Chat Archive

Stream: general

Topic: Inconsistent behavior between `simp_all` and `simp [*]`


Asei Inoue (Dec 16 2025 at 13:19):

this simp_all throw an error: (failed with a nested error)

example (_h : 1 + 1 = 2) : True := by
  have : 1 = 1 + 1 - 1 := by simp

  simp_all

And this simp [*] does not raise an error.

example (_h : 1 + 1 = 2) : True := by
  have : 1 = 1 + 1 - 1 := by simp

  simp [*]

However, both simp_all and simp [*] are failing for the same reason: there is a bad simp lemma in the local context. Given that the reason for failure is the same, I think it is strange that their behavior differs in whether or not they produce an error.

Asei Inoue (Dec 16 2025 at 13:20):

In v4.26.0, the behaviors of the two were consistent. I believe this is a bug in v4.27.0-rc1—what do you think?

Artie Khovanov (Dec 16 2025 at 19:01):

simp_all is very different to simp [*] at *. It's a much more powerful tactic that does things simp does not.

Asei Inoue (Dec 17 2025 at 01:31):

I know that simp_all and simp [*] are different.
the problem is, it is specific to v4.27.0-rc1
why this change is made?

Kim Morrison (Dec 21 2025 at 18:42):

@Asei Inoue you could use the new lean-bisect to in lean#11727 to identify which PR changed the behaviour.

Jakub Nowak (Dec 21 2025 at 20:07):

That's probably some simp confluence bug.

/--
error: Tactic `simp` failed with a nested error:
maximum recursion depth has been reached
use `set_option maxRecDepth <num>` to increase limit
use `set_option diagnostics true` to get diagnostic information
-/
#guard_msgs in
example (_h : 1 + 1 = 2) : True := by
  have : 1 = 1 + 1 - 1 := by simp
  simp_all

Last updated: Feb 28 2026 at 14:05 UTC