@@ -54,16 +54,29 @@ def mkMethods (fallback : Fallback) : CoreM Methods := do
5454 prop e
5555 }
5656
57+ -- A `simp` discharger that does not use assumptions.
58+ -- We use it to make sure we don't have to reset the `simp` cache used in `grind`.
59+ private def discharge? (e : Expr) : SimpM (Option Expr) := do
60+ let e := e.cleanupAnnotations
61+ let r ← Simp.simp e
62+ if let some p ← Simp.dischargeRfl r.expr then
63+ return some (mkApp4 (mkConst ``Eq.mpr [levelZero]) e r.expr (← r.getProof) p)
64+ else if r.expr.isTrue then
65+ return some (← mkOfEqTrue (← r.getProof))
66+ else
67+ return none
68+
5769def GrindM.run (x : GrindM α) (params : Params) (fallback : Fallback) : MetaM α := do
5870 let (falseExpr, scState) := shareCommonAlpha (mkConst ``False) {}
5971 let (trueExpr, scState) := shareCommonAlpha (mkConst ``True) scState
6072 let (bfalseExpr, scState) := shareCommonAlpha (mkConst ``Bool.false) scState
6173 let (btrueExpr, scState) := shareCommonAlpha (mkConst ``Bool.true) scState
6274 let (natZExpr, scState) := shareCommonAlpha (mkNatLit 0 ) scState
6375 let simprocs := params.normProcs
76+ let simpMethods := Simp.mkMethods simprocs discharge? (wellBehavedDischarge := true )
6477 let simp := params.norm
6578 let config := params.config
66- x (← mkMethods fallback).toMethodsRef { config, simprocs , simp }
79+ x (← mkMethods fallback).toMethodsRef { config, simpMethods , simp }
6780 |>.run' { scState, trueExpr, falseExpr, natZExpr, btrueExpr, bfalseExpr }
6881
6982private def mkCleanState (mvarId : MVarId) (params : Params) : MetaM Clean.State := mvarId.withContext do
@@ -167,7 +180,7 @@ def main (mvarId : MVarId) (params : Params) (fallback : Fallback) : MetaM Resul
167180 let issues := (← get).issues
168181 let trace := (← get).trace
169182 let counters := (← get).counters
170- let simp := (← get).simpStats
183+ let simp := { (← get).simp with }
171184 if failure?.isNone then
172185 -- If there are no failures and diagnostics are enabled, we still report the performance counters.
173186 if (← isDiagnosticsEnabled) then
0 commit comments