# Documentation

Lean.Compiler.LCNF.FixedParams

# Fixed Parameter Static Analyzer #

Abstract value for the "fixed parameter" analysis.

Instances For
• Declaration in the same mutual block.

decls :
• Function being analyzed. We check every recursive call to this function. Remark: main is in decls.

• The assignment maps free variable ids in the current code being analyzed to abstract values. We only track the abstract value assigned to parameters.

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 application f a₁ ... aₙ, where f is in decls, f is not main, and we visit with the abstract values assigned to aᵢ, but first we record the visit here.

• Bitmask containing the result, i.e., which parameters of main are fixed. We initialize it with true everywhere.

fixed :
Instances For
@[inline]

Monad for the fixed parameter static analyzer. We use the unit-exception to interrupt the analysis.

Equations
@[inline]

Stop the analysis and mark all parameters as non-fixed.

Equations
• Lean.Compiler.LCNF.FixedParams.abort = do modify fun s => { visited := s.visited, fixed := Array.map (fun x => false) s.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
Equations
• One or more equations did not get rendered due to their size.
partial def Lean.Compiler.LCNF.FixedParams.evalApp (declName : Lean.Name) (args : ) :
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.