blob: cf1f1018e15507f31e8168de3bfd9b6396f420bd [file] [edit]
/-!
Checks that the simp cache is consulted within `simpLoop`, not just in `simpMain`
-/
axiom testSorry : α
opaque a : Nat
opaque b : Nat
opaque c : Nat
opaque f : Nat → Nat
opaque P : Nat → Prop
theorem ab : a = b := testSorry
theorem bc : b = c := testSorry
theorem ba : b = a := testSorry
theorem fafb : f a = f b := testSorry
set_option trace.Meta.Tactic.simp.rewrite true
-- This trace should only mention one `bc` rewrite, not two.
/--
trace: [Meta.Tactic.simp.rewrite] bc:1000:
b
==>
c
[Meta.Tactic.simp.rewrite] h:1000:
P c
==>
True
[Meta.Tactic.simp.rewrite] ab:1000:
a
==>
b
[Meta.Tactic.simp.rewrite] h:1000:
P c
==>
True
[Meta.Tactic.simp.rewrite] and_self:1000:
True ∧ True
==>
True
-/
#guard_msgs in
example (h : P c) : P b ∧ P a := by simp [ab, bc, h]
-- Almost the same goal, but ordered differently.
/--
trace: [Meta.Tactic.simp.rewrite] ab:1000:
a
==>
b
[Meta.Tactic.simp.rewrite] bc:1000:
b
==>
c
[Meta.Tactic.simp.rewrite] h:1000:
P c
==>
True
[Meta.Tactic.simp.rewrite] h:1000:
P c
==>
True
[Meta.Tactic.simp.rewrite] and_self:1000:
True ∧ True
==>
True
-/
#guard_msgs in
example (h : P c) : P a ∧ P b := by simp [ab, bc, h]