Zulip Chat Archive
Stream: lean4
Topic: simp under binders
David Renshaw (Aug 30 2022 at 16:34):
In Lean 3, this example proof works:
@[simp] theorem not_mem_nil (a : nat) : ¬ (a ∈ ([] : list nat)) := id
theorem forall_prop_of_false {p : Prop} {q : p → Prop} (hn : ¬ p) :
(∀ h' : p, q h') ↔ true := sorry
example (R : nat → Prop) : (∀ (a' : nat), a' ∈ ([]: list nat) → R a') :=
begin
simp only [forall_prop_of_false (not_mem_nil _)],
exact λ n , true.intro
end
However, after translation into Lean 4, the example proof fails at the simp only step:
@[simp] theorem not_mem_nil (a : Nat) : ¬ a ∈ [] := fun.
theorem forall_prop_of_false {p : Prop} {q : p → Prop} (hn : ¬ p) :
(∀ h' : p, q h') ↔ True := sorry
example (R : Nat → Prop) : (∀ (a' : Nat), a' ∈ [] → R a') := by
simp only [forall_prop_of_false (not_mem_nil _)]
-- (fails to simplify)
sorry
Is there some way to make this work? Is Lean 4's simp missing some features that are present in Lean 3's simp?
Leonardo de Moura (Aug 30 2022 at 19:01):
Could you please create an issue on GitHub? Thanks.
David Renshaw (Aug 30 2022 at 19:31):
https://github.com/leanprover/lean4/issues/1549
Last updated: May 02 2025 at 03:31 UTC