\begin{abstract}
In this paper, we present a new approach to {\em partitioning},
the problem of generating sequential threads for 
programs written in a non-strict functional language. The goal of partitioning
is to generate threads as large as possible, while retaining
the non-strict semantics of the program.
We define partitioning
as a program transformation and design algorithms for {\em basic
block partitioning} and {\em inter-procedural partitioning}. The inter-procedural
algorithm presented here is more powerful than the ones previously
known and is based on abstract interpretation, enabling the
algorithm to handle recursion in a straightforward
manner. We prove the correctness of these algorithms in a denotational
semantic framework.
\end{abstract}

\noindent {\bf Keywords:} Partitioning, abstract interpretation,
demand and tolerance sets, inter-procedural analysis, non-strict
functional languages.
