Learn More
The "size-change termination" principle for a first-order functional language with well-founded data is: a program terminates on all inputs if <i>every infinite call sequence</i> (following program control flow) would cause an infinite descent in some data values.Size-change analysis is based only on local approximations to parameter size changes derivable(More)
The present paper is an extended abstract of (Jones 1985), in which a running , non-trivial partial evaluator is described. As far as we know, this partia l evaluator is the first which has been used in practice to transform interpreters into corresponding stand-alone compilers, or to generate a compile r generator by transforming itself. A partial(More)
In [12] the authors introduced the concept of binding time optimization and presented a series of data flow analytic methods for determining some of the binding time characteristics of programs. In this paper we extend that work by providing methods for determining the class of shapes which an unbounded data object may assume during execution of a LISP-like(More)
Logic-programming languages are based on a principle of separation &#8220;logic&#8221; and &#8220;control.&#8221;. This means that they can be given simple model-theoretic semantics without regard to any particular execution mechanism (or proof procedure, viewing execution as theorem proving). Although the separation is desirable from a semantical point of(More)
The results of Cook and Karp ([K], [C]) aroused considerable interest for at least two reasons. First, the answer to a long-standing open question which had seemed peculiar to automata theory&#8212;whether deterministic and nondeterministic polynomial-time-bounded Turing machines are equivalent in power&#8212;was seen to be exactly equivalent to determining(More)