Compare commits

...

1 Commits

Author SHA1 Message Date
Henrik Böving
798f06f2d5 feat: trace non-easy whnf invocations 2024-03-26 15:00:49 +01:00

View File

@@ -936,21 +936,22 @@ private def cache (useCache : Bool) (e r : Expr) : MetaM Expr := do
@[export lean_whnf]
partial def whnfImp (e : Expr) : MetaM Expr :=
withIncRecDepth <| whnfEasyCases e fun e => do
checkSystem "whnf"
let useCache useWHNFCache e
match ( cached? useCache e) with
| some e' => pure e'
| none =>
let e' whnfCore e
match ( reduceNat? e') with
| some v => cache useCache e v
| none =>
match ( reduceNative? e') with
withTraceNode `Meta.whnf (fun _ => return m!"Non-easy whnf: {e}") do
checkSystem "whnf"
let e' whnfCore e
match ( reduceNat? e') with
| some v => cache useCache e v
| none =>
match ( unfoldDefinition? e') with
| some e'' => cache useCache e ( whnfImp e'')
| none => cache useCache e e'
match ( reduceNative? e') with
| some v => cache useCache e v
| none =>
match ( unfoldDefinition? e') with
| some e'' => cache useCache e ( whnfImp e'')
| none => cache useCache e e'
/-- If `e` is a projection function that satisfies `p`, then reduce it -/
def reduceProjOf? (e : Expr) (p : Name Bool) : MetaM (Option Expr) := do