| /-! | |
| 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] |