@@ -12,6 +12,7 @@ public import Lean.Meta.Tactic.Simp.Diagnostics
1212public import Lean.Meta.Match.Value
1313public import Lean.Util.CollectLooseBVars
1414import Lean.PrettyPrinter
15+ import Lean.ExtraModUses
1516
1617public section
1718
@@ -1069,15 +1070,29 @@ def simpImpl (e : Expr) : SimpM Result := withIncRecDepth do
10691070 else
10701071 x
10711072
1073+ /--
1074+ For `rfl` theorems and simprocs, there might not be an explicit reference in the proof term, so
1075+ we record (all non-builtin) usages explicitly.
1076+ -/
1077+ private def recordSimpUses (s : State) : MetaM Unit := do
1078+ for (thm, _) in s.usedTheorems.map do
1079+ if let .decl declName .. := thm then
1080+ if !(← isBuiltinSimproc declName) then
1081+ recordExtraModUseFromDecl (isMeta := false ) declName
1082+
10721083def mainCore (e : Expr) (ctx : Context) (s : State := {}) (methods : Methods := {}) : MetaM (Result × State) := do
1073- SimpM.run ctx s methods <| withCatchingRuntimeEx <| simp e
1084+ let (r, s) ← SimpM.run ctx s methods <| withCatchingRuntimeEx <| simp e
1085+ recordSimpUses s
1086+ return (r, s)
10741087
10751088def main (e : Expr) (ctx : Context) (stats : Stats := {}) (methods : Methods := {}) : MetaM (Result × Stats) := do
10761089 let (r, s) ← mainCore e ctx { stats with } methods
10771090 return (r, { s with })
10781091
10791092def dsimpMainCore (e : Expr) (ctx : Context) (s : State := {}) (methods : Methods := {}) : MetaM (Expr × State) := do
1080- SimpM.run ctx s methods <| withCatchingRuntimeEx <| dsimp e
1093+ let (r, s) ← SimpM.run ctx s methods <| withCatchingRuntimeEx <| dsimp e
1094+ recordSimpUses s
1095+ return (r, s)
10811096
10821097def dsimpMain (e : Expr) (ctx : Context) (stats : Stats := {}) (methods : Methods := {}) : MetaM (Expr × Stats) := do
10831098 let (r, s) ← dsimpMainCore e ctx { stats with } methods
0 commit comments