lean4-htt/tests/lean/convInConv.lean
Joachim Breitner b181fd83ef
feat: in conv tactic, use try with_reducibe rfl (#3763)
The `conv` tactic tries to close “trivial” goals after itself. As of
now, it uses
`try rfl`, which means it can close goals that are only trivial after
reducing with
default transparency. This is suboptimal

* this can require a fair amount of unfolding, and possibly slow down
the proof
   a lot. And the user cannot even prevent it.
* it does not match what `rw` does, and a user might expect the two to
behave the
   same.

So this PR changes it to `with_reducible rfl`, matching `rw`’s behavior.

I considered `with_reducible eq_refl` to only solve trivial goals that
involve equality,
but not other relations (e.g. `Perm xs xs`), but a discussion on mathlib
pointed out
that it’s expected and desirable to solve more general reflexive goals:


https://leanprover.zulipchat.com/#narrow/stream/270676-lean4/topic/Closing.20after.20.60rw.60.2C.20.60conv.60.3A.20.60eq_refl.60.20instead.20of.20.60rfl.60/near/429851605
2024-03-29 11:59:45 +00:00

26 lines
486 B
Text

def twice : Nat → Nat := λ n => 2*n
def foo1 : (λ x : Nat => id (twice (id x))) = twice := by
conv in (id _) =>
trace_state
conv =>
enter [1,1]
trace_state
simp
trace_state
trace_state -- `id (twice x)`
rfl
theorem foo2 (y : Nat) : (fun x => x + y = 0) = (fun x => False) := by
conv =>
trace_state
conv =>
lhs
trace_state
intro x
rw [Nat.add_comm]
trace_state
trace_state
trace_state
sorry