This paper describes a method for finding the least fixed
points of higher-order functions over
finite domains using symbolic manipulation. Fixed point finding is an
essential component
in the calculation of abstract semantics of functional programs, providing
the foundation for
program analyses based on abstract interpretation. Previous methods for
fixed point finding
have primarily used semantic approaches, which often must traverse
large portions of the
semantic domain even for simple programs. This paper provides the
theoretical framework
for a syntax-based analysis that is potentially very fast. The proposed
syntactic method is
based on an augmented simply typed lambda calculus where the symbolic representation
of each function produced in the fixed point iteration is transformed
to a syntactic normal
form. Normal forms resulting from successive iterations are then
compared syntactically to
determine their ordering in the semantic domain, and to decide whether
a fixed point has
been reached. We show the method to be sound, complete and compositional.
Examples are presented to show how this method can be used to perform strictness
analysis for higher-order
functions over non-flat domains. Our method is compositional in the
sense that the strictness
property of an expression can be easily calculated from those of its
sub-expressions. This is
contrary to most strictness analysers, where the strictness property
of an expression has to be
computed anew whenever one of its subexpressions changes. We also
compare our approach with recent developments in strictness analysis.