Compute the maximum index M
used in a declaration.
We M
to initialize the fresh index generator used to create fresh
variable and join point names.
Recall that we variable and join points share the same namespace in our implementation.
@[reducible, inline]
Equations
Instances For
We say a variable (join point) index (aka name) is free in a function body
if there isn't a FnBody.vdecl
(Fnbody.jdecl
) binding it.
@[reducible, inline]
Instances For
Equations
- b.collectFreeIndices init = (match StateT.run (Lean.IR.FreeIndices.visitFnBody b) { freeIndices := init } with | (fst, { freeIndices := freeIndices }) => pure freeIndices).run
Instances For
Equations
Instances For
In principle, we can check whether a function body b
contains an index i
using
b.freeIndices.contains i
, but it is more efficient to avoid the construction
of the set of freeIndices and just search whether i
occurs in b
or not.
Equations
- Lean.IR.HasIndex.visitVar w x = (w == x.idx)
Instances For
Equations
- Lean.IR.HasIndex.visitJP w x = (w == x.idx)
Instances For
Equations
Instances For
Equations
- Lean.IR.HasIndex.visitArgs w xs = xs.any (Lean.IR.HasIndex.visitArg w)
Instances For
Equations
- Lean.IR.HasIndex.visitParams w ps = ps.any fun (p : Lean.IR.Param) => w == p.x.idx
Instances For
Equations
- Lean.IR.HasIndex.visitExpr w (Lean.IR.Expr.proj i x) = Lean.IR.HasIndex.visitVar w x
- Lean.IR.HasIndex.visitExpr w (Lean.IR.Expr.uproj i x) = Lean.IR.HasIndex.visitVar w x
- Lean.IR.HasIndex.visitExpr w (Lean.IR.Expr.sproj n offset x) = Lean.IR.HasIndex.visitVar w x
- Lean.IR.HasIndex.visitExpr w (Lean.IR.Expr.box ty x) = Lean.IR.HasIndex.visitVar w x
- Lean.IR.HasIndex.visitExpr w (Lean.IR.Expr.unbox x) = Lean.IR.HasIndex.visitVar w x
- Lean.IR.HasIndex.visitExpr w (Lean.IR.Expr.reset n x) = Lean.IR.HasIndex.visitVar w x
- Lean.IR.HasIndex.visitExpr w (Lean.IR.Expr.isShared x) = Lean.IR.HasIndex.visitVar w x
- Lean.IR.HasIndex.visitExpr w (Lean.IR.Expr.ctor i ys) = Lean.IR.HasIndex.visitArgs w ys
- Lean.IR.HasIndex.visitExpr w (Lean.IR.Expr.fap c ys) = Lean.IR.HasIndex.visitArgs w ys
- Lean.IR.HasIndex.visitExpr w (Lean.IR.Expr.pap c ys) = Lean.IR.HasIndex.visitArgs w ys
- Lean.IR.HasIndex.visitExpr w (Lean.IR.Expr.ap x ys) = (Lean.IR.HasIndex.visitVar w x || Lean.IR.HasIndex.visitArgs w ys)
- Lean.IR.HasIndex.visitExpr w (Lean.IR.Expr.reuse x i updtHeader ys) = (Lean.IR.HasIndex.visitVar w x || Lean.IR.HasIndex.visitArgs w ys)
- Lean.IR.HasIndex.visitExpr w (Lean.IR.Expr.lit v) = false
Instances For
Equations
- arg.hasFreeVar x = Lean.IR.HasIndex.visitArg x.idx arg
Instances For
Equations
- e.hasFreeVar x = Lean.IR.HasIndex.visitExpr x.idx e
Instances For
Equations
- b.hasFreeVar x = Lean.IR.HasIndex.visitFnBody x.idx b