axiom testSorry : α theorem le_of_not_lt {a b : Nat} (_: ¬ a < b): b ≤ a := testSorry theorem lt_of_succ_lt (_: a + 1 < b): a < b := testSorry theorem succ_pred_eq_of_pos (_: 0 < v): v - 1 + 1 = v := testSorry set_option trace.Meta.Tactic.simp true set_option linter.unusedSimpArgs false --set_option trace.Debug.Meta.Tactic.simp true set_option Elab.async false -- for stable message ordering in #guard_msgs /-- warning: declaration uses `sorry` --- trace: [Meta.Tactic.simp.rewrite] h₁:1000: k ≤ v - 1 ==> True [Meta.Tactic.simp.discharge] ✅️ succ_pred_eq_of_pos discharge ✅️ 0 < v [Meta.Tactic.simp.rewrite] h₂:1000: 0 < v ==> True [Meta.Tactic.simp.rewrite] succ_pred_eq_of_pos:1000: v - 1 + 1 ==> v [Meta.Tactic.simp.rewrite] ite_true:1000: if True then ⟨v, ⋯⟩ else ⟨v - 1, ⋯⟩ ==> ⟨v, ⋯⟩ [Meta.Tactic.simp.rewrite] eq_self:1000: ⟨v, ⋯⟩ = ⟨v, ⋯⟩ ==> True -/ #guard_msgs in example (h₁: k ≤ v - 1) (h₂: 0 < v): (if k ≤ v - 1 then Fin.mk (v-1+1) sorry else Fin.mk (v-1) sorry) = Fin.mk v sorry (n:=n) := by simp only [ h₁, h₂, ite_true, succ_pred_eq_of_pos ---------------- , le_of_not_lt , lt_of_succ_lt ] -- it works /-- warning: declaration uses `sorry` --- trace: [Meta.Tactic.simp.rewrite] h₁:1000: k ≤ v - 1 ==> True [Meta.Tactic.simp.discharge] ✅️ succ_pred_eq_of_pos discharge ✅️ 0 < v [Meta.Tactic.simp.rewrite] h₂:1000: 0 < v ==> True [Meta.Tactic.simp.rewrite] succ_pred_eq_of_pos:1000: v - 1 + 1 ==> v [Meta.Tactic.simp.rewrite] ite_true:1000: if True then ⟨v, ⋯⟩ else ⟨v - 1, ⋯⟩ ==> ⟨v, ⋯⟩ [Meta.Tactic.simp.rewrite] eq_self:1000: ⟨v, ⋯⟩ = ⟨v, ⋯⟩ ==> True -/ #guard_msgs in example (h₁: k ≤ v - 1) (h₂: 0 < v): (if k ≤ v - 1 then Fin.mk (v-1+1) sorry else Fin.mk (v-1) sorry) = Fin.mk v sorry (n:=n) := by simp (config := { memoize := false}) only [ h₁, h₂, ite_true, succ_pred_eq_of_pos ---------------- , le_of_not_lt , lt_of_succ_lt ] /-- warning: declaration uses `sorry` --- trace: [Meta.Tactic.simp.rewrite] h₁:1000: k ≤ v - 1 ==> True [Meta.Tactic.simp.discharge] ✅️ succ_pred_eq_of_pos discharge ✅️ 0 < v [Meta.Tactic.simp.rewrite] h₂:1000: 0 < v ==> True [Meta.Tactic.simp.rewrite] succ_pred_eq_of_pos:1000: v - 1 + 1 ==> v [Meta.Tactic.simp.rewrite] ite_true:1000: if True then ⟨v, ⋯⟩ else ⟨v - 1, ⋯⟩ ==> ⟨v, ⋯⟩ [Meta.Tactic.simp.rewrite] eq_self:1000: ⟨v, ⋯⟩ = ⟨v, ⋯⟩ ==> True -/ #guard_msgs in example (h₁: k ≤ v - 1) (h₂: 0 < v): (if k ≤ v - 1 then Fin.mk (v-1+1) sorry else Fin.mk (v-1) sorry) = Fin.mk v sorry (n:=n) := by simp only [ h₁, h₂, ite_true, succ_pred_eq_of_pos ---------------- --, le_of_not_lt --, lt_of_succ_lt ]