diff --git a/src/Lean/Meta/WHNF.lean b/src/Lean/Meta/WHNF.lean index 86ab6e59f9af..c118459acce2 100644 --- a/src/Lean/Meta/WHNF.lean +++ b/src/Lean/Meta/WHNF.lean @@ -625,17 +625,18 @@ where | .partialApp => pure e | .stuck _ => pure e | .notMatcher => - matchConstAux f' (fun _ => return e) fun cinfo lvls => - match cinfo with - | .recInfo rec => reduceRec rec lvls e.getAppArgs (fun _ => return e) (fun e => do recordUnfold cinfo.name; go e) - | .quotInfo rec => reduceQuotRec rec e.getAppArgs (fun _ => return e) (fun e => do recordUnfold cinfo.name; go e) - | c@(.defnInfo _) => do - if (← isAuxDef c.name) then - recordUnfold c.name - deltaBetaDefinition c lvls e.getAppRevArgs (fun _ => return e) go - else - return e - | _ => return e + let .const cname lvls := f' | return e + let some cinfo := (← getEnv).find? cname | return e + match cinfo with + | .recInfo rec => reduceRec rec lvls e.getAppArgs (fun _ => return e) (fun e => do recordUnfold cinfo.name; go e) + | .quotInfo rec => reduceQuotRec rec e.getAppArgs (fun _ => return e) (fun e => do recordUnfold cinfo.name; go e) + | c@(.defnInfo _) => do + if (← isAuxDef c.name) then + recordUnfold c.name + deltaBetaDefinition c lvls e.getAppRevArgs (fun _ => return e) go + else + return e + | _ => return e | .proj _ i c => let k (c : Expr) := do match (← projectCore? c i) with @@ -860,7 +861,9 @@ def reduceRecMatcher? (e : Expr) : MetaM (Option Expr) := do return none else match (← reduceMatcher? e) with | .reduced e => return e - | _ => matchConstAux e.getAppFn (fun _ => pure none) fun cinfo lvls => do + | _ => + let .const cname lvls := e.getAppFn | return none + let some cinfo := (← getEnv).find? cname | return none match cinfo with | .recInfo «rec» => reduceRec «rec» lvls e.getAppArgs (fun _ => pure none) (fun e => do recordUnfold cinfo.name; pure (some e)) | .quotInfo «rec» => reduceQuotRec «rec» e.getAppArgs (fun _ => pure none) (fun e => do recordUnfold cinfo.name; pure (some e))