Definitional reduction steps #
Single reduction steps on maximally shared terms, shared by Sym.dsimp, Sym.simp, and the
grind normalizer. Each function returns none when the step does not apply, and a maximally
shared term otherwise. The input and the output are definitionally equal.
def Lean.Meta.Sym.reduceZetaDelta? (e : Expr) (unfold : FVarId → Bool := fun (x : FVarId) => true) :
Unfolds the let-bound free variable at the head of e, where e is the variable itself or an
application headed by it. The head position must be handled by the caller because the
simplifiers do not visit application heads. Beta-reduction of the exposed lambda is left to
reduceBeta?.