Built with doc-gen4, running Lean4. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓to navigate, Ctrl+🖱️to focus. On Mac, use Cmdinstead of Ctrl.
/-
Copyright (c) 2022 E.W.Ayers. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: E.W.Ayers
-/

import Lean
import Mathlib.Lean.Expr.Basic

/-!
# Traversal functions for expressions.
-/

namespace Lean.Expr

/-- Maps `f` on each immediate child of the given expression. -/
def 
traverseChildren: {M : TypeType ?u.8} → [inst : Applicative M] → (ExprM Expr) → ExprM Expr
traverseChildren
[
Applicative: (Type ?u.9 → Type ?u.8) → Type (max(?u.9+1)?u.8)
Applicative
M: ?m.5
M
] (
f: ExprM Expr
f
:
Expr: Type
Expr
M: ?m.5
M
Expr: Type
Expr
) :
Expr: Type
Expr
M: ?m.5
M
Expr: Type
Expr
|
e: Expr
e
@(
forallE: NameExprExprBinderInfoExpr
forallE
_
d: Expr
d
b: Expr
b
_) =>
pure: {f : Type ?u.127 → Type ?u.126} → [self : Pure f] → {α : Type ?u.127} → αf α
pure
e: Expr
e
.
updateForallE!: ExprExprExprExpr
updateForallE!
<*>
f: ExprM Expr
f
d: Expr
d
<*>
f: ExprM Expr
f
b: Expr
b
|
e: Expr
e
@(
lam: NameExprExprBinderInfoExpr
lam
_
d: Expr
d
b: Expr
b
_) =>
pure: {f : Type ?u.292 → Type ?u.291} → [self : Pure f] → {α : Type ?u.292} → αf α
pure
e: Expr
e
.
updateLambdaE!: ExprExprExprExpr
updateLambdaE!
<*>
f: ExprM Expr
f
d: Expr
d
<*>
f: ExprM Expr
f
b: Expr
b
|
e: Expr
e
@(
mdata: MDataExprExpr
mdata
_
b: Expr
b
) =>
e: Expr
e
.
updateMData!: ExprExprExpr
updateMData!
<$>
f: ExprM Expr
f
b: Expr
b
|
e: Expr
e
@(
letE: NameExprExprExprBoolExpr
letE
_
t: Expr
t
v: Expr
v
b: Expr
b
_) =>
pure: {f : Type ?u.523 → Type ?u.522} → [self : Pure f] → {α : Type ?u.523} → αf α
pure
e: Expr
e
.
updateLet!: ExprExprExprExprExpr
updateLet!
<*>
f: ExprM Expr
f
t: Expr
t
<*>
f: ExprM Expr
f
v: Expr
v
<*>
f: ExprM Expr
f
b: Expr
b
|
e: Expr
e
@(
app: ExprExprExpr
app
l: Expr
l
r: Expr
r
) =>
pure: {f : Type ?u.645 → Type ?u.644} → [self : Pure f] → {α : Type ?u.645} → αf α
pure
e: Expr
e
.
updateApp!: ExprExprExprExpr
updateApp!
<*>
f: ExprM Expr
f
l: Expr
l
<*>
f: ExprM Expr
f
r: Expr
r
|
e: Expr
e
@(
proj: NameNatExprExpr
proj
_ _
b: Expr
b
) =>
e: Expr
e
.
updateProj!: ExprExprExpr
updateProj!
<$>
f: ExprM Expr
f
b: Expr
b
|
e: Expr
e
=>
pure: {f : Type ?u.752 → Type ?u.751} → [self : Pure f] → {α : Type ?u.752} → αf α
pure
e: Expr
e
/-- `e.foldlM f a` folds the monadic function `f` over the subterms of the expression `e`, with initial value `a`. -/ def
foldlM: {α : Type} → {m : TypeType ?u.2094} → [inst : Monad m] → (αExprm α) → αExprm α
foldlM
{
α: Type
α
:
Type: Type 1
Type
} {
m: ?m.2091
m
} [
Monad: (Type ?u.2095 → Type ?u.2094) → Type (max(?u.2095+1)?u.2094)
Monad
m: ?m.2091
m
] (
f: αExprm α
f
:
α: Type
α
Expr: Type
Expr
m: ?m.2091
m
α: Type
α
) (
x: α
x
:
α: Type
α
) (
e: Expr
e
:
Expr: Type
Expr
) :
m: ?m.2091
m
α: Type
α
:=
Prod.snd: {α : Type ?u.2133} → {β : Type ?u.2132} → α × ββ
Prod.snd
<$> (
StateT.run: {σ : Type ?u.2144} → {m : Type ?u.2144 → Type ?u.2143} → {α : Type ?u.2144} → StateT σ m ασm (α × σ)
StateT.run
(
e: Expr
e
.
traverseChildren: {M : TypeType ?u.2149} → [inst : Applicative M] → (ExprM Expr) → ExprM Expr
traverseChildren
$ fun
e': ?m.2170
e'
=>
Functor.mapConst: {f : Type ?u.2173 → Type ?u.2172} → [self : Functor f] → {α β : Type ?u.2173} → αf βf α
Functor.mapConst
e': ?m.2170
e'
(
get: {σ : outParam (Type ?u.2257)} → {m : Type ?u.2257 → Type ?u.2256} → [self : MonadState σ m] → m σ
get
>>=
monadLift: {m : Type ?u.2337 → Type ?u.2336} → {n : Type ?u.2337 → Type ?u.2335} → [self : MonadLiftT m n] → {α : Type ?u.2337} → m αn α
monadLift
flip: {α : Sort ?u.2373} → {β : Sort ?u.2372} → {φ : Sort ?u.2371} → (αβφ) → βαφ
flip
f: αExprm α
f
e': ?m.2170
e'
>>=
set: {σ : semiOutParam (Type ?u.2412)} → {m : Type ?u.2412 → Type ?u.2411} → [self : MonadStateOf σ m] → σm PUnit
set
))
x: α
x
:
m: TypeType ?u.2094
m
_: Type
_
) end Lean.Expr