Fixed Parameter Static Analyzer #
- top: Lean.Compiler.LCNF.FixedParams.AbsValue
- erased: Lean.Compiler.LCNF.FixedParams.AbsValue
- val: Nat → Lean.Compiler.LCNF.FixedParams.AbsValue
Abstract value for the "fixed parameter" analysis.
Instances For
Declaration in the same mutual block.
decls : Array Lean.Compiler.LCNF.DeclFunction being analyzed. We check every recursive call to this function. Remark:
main
is indecls
.main : Lean.Compiler.LCNF.DeclThe assignment maps free variable ids in the current code being analyzed to abstract values. We only track the abstract value assigned to parameters.
assignment : Lean.FVarIdMap Lean.Compiler.LCNF.FixedParams.AbsValue
Instances For
Set of calls that have been already analyzed. Recall that we assume that only functions in
decls
may have recursive calls to the function being analyzed (i.e.,main
). Whenever there is function applicationf a₁ ... aₙ
, wheref
is indecls
,f
is notmain
, and we visit with the abstract values assigned toaᵢ
, but first we record the visit here.Bitmask containing the result, i.e., which parameters of
main
are fixed. We initialize it withtrue
everywhere.
Instances For
Monad for the fixed parameter static analyzer. We use the unit-exception to interrupt the analysis.
Stop the analysis and mark all parameters as non-fixed.
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Equations
- Lean.Compiler.LCNF.FixedParams.inMutualBlock declName = do let __do_lift ← read pure (Array.any __do_lift.decls (fun x => x.name == declName) 0 (Array.size __do_lift.decls))
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Given the (potentially mutually) recursive declarations decls
,
return a map from declaration name decl.name
to a bit-mask m
where m[i]
is true
iff the decl.params[i]
is a fixed argument. That is, it does not change in recursive
applications.
The function assumes that if a function f
was declared in a mutual block, then decls
contains all (computationally relevant) functions in the mutual block.
Equations
- One or more equations did not get rendered due to their size.