This paper presents a general-purpose framework for the abstract interpretation of logic programs and applies it to the problem of automatically extracting independent AND parallelism from PROLOG. In this model of parallelism, goals may be executed concurrently only if they cannot access common variables. We present an abstract domain that captures such variable aliasing information with a high degree of accuracy. We then show how this analysis can be used in the compilation of PROLOG clauses into control statements that schedule goals under independent AND parallelism. Our abstract interpretation framework is novel in that it directly addresses the generally acknowledged problem that naive abstract execution is too ineffecient for a practical compiler. Our solution is to precompute a fixed approximation to the meaning of clauses, a process called condensing, allowing specific calls to be abstractly executed without computation of a fixpoint. We show that condensing does not result in a loss of accuracy if the abstract unification operation satisfies certain algebraic properties. We argue that these properties are important even if a more conventional form of abstract execution is employed.
Read full abstract