Documentation

Lean.Meta.Sym.Reduce

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.

Beta-reduces e when its head is a lambda.

Instances For

    Zeta-reduces the let/have telescope e: let x := v; b[x] becomes b[v].

    Instances For
      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?.

      Instances For

        Reduces a projection function applied to a constructor, e.g. (a, b).1 to a. Class projections are not reduced; instances are handled by instance synthesis.

        Instances For

          Iota-reduces a match or recursor application whose discriminants are constructors.

          Instances For