- done
(e : Expr)
: TransformStep
Return expression without visiting any subexpressions.
- visit
(e : Expr)
: TransformStep
Visit expression (which should be different from current expression) instead. The new expression
eis passed topreagain. - continue
(e? : Option Expr := none)
: TransformStep
Continue transformation with the given expression (defaults to current expression). For
pre, this means visiting the children of the expression. Forpost, this is equivalent to returningdone.
Instances For
Equations
Equations
- Lean.instReprTransformStep = { reprPrec := Lean.instReprTransformStep.repr }
Equations
- One or more equations did not get rendered due to their size.
Instances For
Transform the expression input using pre and post.
- First
preis invoked with the current expression and recursion is continued according to theTransformStepresult. In all cases, the expression contained in the result, if any, must be definitionally equal to the current expression. - After recursion, if any,
postis invoked on the resulting expression.
The term s in both pre s and post s may contain loose bound variables. So, this method is not appropriate for
if one needs to apply operations (e.g., whnf, inferType) that do not handle loose bound variables.
Consider using Meta.transform to avoid loose bound variables.
This method is useful for applying transformations such as beta-reduction and delta-reduction.
Equations
- Lean.Core.transform input pre post = (Lean.Core.transform.visit✝ pre post { } { monadLift := fun {α : Type} (x : ST IO.RealWorld α) => liftM (liftM x) } input).run
Instances For
Equations
- Lean.Core.betaReduce e = Lean.Core.transform e fun (e : Lean.Expr) => pure (if e.isHeadBetaTarget = true then Lean.TransformStep.visit e.headBeta else Lean.TransformStep.continue)
Instances For
Similar to Meta.transform, but allows the use of a pre-existing cache.
Warnings:
- For the cache to be valid, it must always use the same
preandpostfunctions. - It is important that there are no other references to
cachewhen it is passed totransformWithCache, to avoid unnecessary copying of the hash map.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Similar to Core.transform, but terms provided to pre and post do not contain loose bound variables.
So, it is safe to use any MetaM method at pre and post.
Warning: pre and post should not depend on variables in the local context introduced by transform.
This is in order to allow aggressive caching.
If skipConstInApp := true, then for an expression mkAppN (.const f) args, the subexpression
.const f is not visited again. Put differently: every .const f is visited once, with its
arguments if present, on its own otherwise.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Unfold definitions and theorems in e that are not in the current environment, but are in biggerEnv.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Unfolds theorems that are applied to a .const n where n in the given array.
This is used to undo proof abstraction for termination checking, as otherwise the bare
occurrence of the recursive function prevents termination checking from succeeding.
This unfolds from the private environment. The resulting definitions are (usually) not exposed anyways.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.