Demonstration venue · read-only. Every page can be browsed; the buttons that would change it are switched off. Create an account to run TaxoReview on your own data. A simulation from public publication records: the people listed were not invited and did not agree to review.
? Tutorial for this page

Neil D. Jones

dblp:j/NeilDJones · DBLP profile ↗
← Back
66ranked-venue papers
47as first author
0since 2021 · last 2018
0000-0002-3893-6168ORCID · corroborated

Domains — the database's venue-derived domains; a paper can count in several

Theory of computation · 34 · 29 first-authorSoftware engineering, systems software and programming languages · 29 · 17 first-authorApplied, interdisciplinary, general and emerging computing · 2 · 2 first-authorArtificial intelligence and machine learning · 1Databases, data management, data science and information retrieval · 1 · 1 first-authorHuman-computer interaction and ubiquitous computing · 1

Expertise — from the expertise taxonomy: the topics of the expert's papers under the CCF categories. A weight counts papers with recency: 1 for a paper about the topic, 0.3 when the topic is its context, halved every five years.

Software engineering, system software, and programming languages
15 papers
Compilers and program optimization · 40% Program verification · 32% Program analysis · 25%
Theoretical computer science
12 papers
Computational complexity · 79% Automata and formal languages · 18% Algorithms and data structures · 2%

Topics — the 30 heaviest of 49, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Program verification
termination analysis
0.122005
Termination analysis and specialization-point insertion in offline partial evaluation · ACM Trans. Program. Lang. Syst. 2005
The size-change principle for program termination · POPL 2001
Compilers and program optimization
partial evaluation
0.122005
Termination analysis and specialization-point insertion in offline partial evaluation · ACM Trans. Program. Lang. Syst. 2005
Partial Evaluation, Self-Application and Types · ICALP 1990
Program analysis
static analysis
0.152005
Termination analysis and specialization-point insertion in offline partial evaluation · ACM Trans. Program. Lang. Syst. 2005
Flow Analysis of Lambda Expressions (Preliminary Version) · ICALP 1981
Flow Analysis and Optimization of Lisp-Like Structures · POPL 1979
Compilers and program optimization › partial evaluation
binding-time analysis
0.112005
Termination analysis and specialization-point insertion in offline partial evaluation · ACM Trans. Program. Lang. Syst. 2005
Compilers and program optimization
compiler correctness
0.012002
Proving correctness of compiler optimizations by temporal logic · POPL 2002
Compilers and program optimization › compiler correctness
compiler optimization correctness
0.012002
Proving correctness of compiler optimizations by temporal logic · POPL 2002
Program verification
temporal logic verification
0.012002
Proving correctness of compiler optimizations by temporal logic · POPL 2002
Program verification › termination analysis
size-change termination
0.012001
The size-change principle for program termination · POPL 2001
Computational complexity › complexity classes › PSPACE
PSPACE-completeness
0.012001
The size-change principle for program termination · POPL 2001
Program analysis
data flow analysis
0.031994
Denotational Abstract Interpretation of Logic Programs · ACM Trans. Program. Lang. Syst. 1994
Data Flow Analysis of Applicative Programs Using Minimal Function Graphs · POPL 1986
Complexity of Flow Analysis, Inductive Assertion Synthesis and a Language Due to Dijkstra · FOCS 1980
Program analysis › static analysis
abstract interpretation
0.011994
Denotational Abstract Interpretation of Logic Programs · ACM Trans. Program. Lang. Syst. 1994
Program analysis › static analysis › abstract interpretation
denotational abstract interpretation
0.011994
Denotational Abstract Interpretation of Logic Programs · ACM Trans. Program. Lang. Syst. 1994
Program analysis › static analysis › abstract interpretation
groundness analysis
0.011994
Denotational Abstract Interpretation of Logic Programs · ACM Trans. Program. Lang. Syst. 1994
Computational complexity › structural complexity › complexity hierarchies
linear time hierarchy
0.011993
Constant time factors do matter · STOC 1993
Automata and formal languages › omega-automata
büchi automata
0.012001
The size-change principle for program termination · POPL 2001
Compilers and program optimization › partial evaluation
self-application
0.011990
Partial Evaluation, Self-Application and Types · ICALP 1990
Program analysis
flow analysis
0.021981
Flow Analysis of Lambda Expressions (Preliminary Version) · ICALP 1981
Complexity of Flow Analysis, Inductive Assertion Synthesis and a Language Due to Dijkstra · FOCS 1980
Programming languages and type systems
logic programming
0.011994
Denotational Abstract Interpretation of Logic Programs · ACM Trans. Program. Lang. Syst. 1994
Programming languages and type systems › logic programming
logic programming semantics
0.011994
Denotational Abstract Interpretation of Logic Programs · ACM Trans. Program. Lang. Syst. 1994
Programming languages and type systems › programming paradigms
imperative languages
0.011993
Constant time factors do matter · STOC 1993
Automata and formal languages
l systems
0.021981
A Note on the Complexity of General D0L Membership · SIAM J. Comput. 1981
Complexity of Some Problems Concerning L Systems · ICALP 1977
Computational complexity
complexity classes
0.031981
The Complexity of Finite Memory Programs with Recursion · J. ACM 1978
Even Simple Programs Are Hard To Analyze · J. ACM 1977
A Note on the Complexity of General D0L Membership · SIAM J. Comput. 1981
Computational complexity › space complexity
logarithmic space
0.021981
A Note on the Complexity of General D0L Membership · SIAM J. Comput. 1981
Recognition of Deterministic ETOL Languages in Logarithmic Space · Inf. Control. 1977
Computational complexity
space complexity
0.021981
A Note on the Complexity of General D0L Membership · SIAM J. Comput. 1981
Recognition of Deterministic ETOL Languages in Logarithmic Space · Inf. Control. 1977
Program analysis › data flow analysis
interprocedural dataflow analysis
0.011982
A Flexible Approach to Interprocedural Data Flow Analysis and Programs with Recursive Data Structures · POPL 1982
Programming languages and type systems
type systems
0.011990
Partial Evaluation, Self-Application and Types · ICALP 1990
Software testing › test oracle › test oracle generation
assertion generation
0.011980
Complexity of Flow Analysis, Inductive Assertion Synthesis and a Language Due to Dijkstra · FOCS 1980
Program verification › invariant generation
inductive assertions
0.011980
Complexity of Flow Analysis, Inductive Assertion Synthesis and a Language Due to Dijkstra · FOCS 1980
Programming languages and type systems › type systems › static typing
static type checking
0.011980
Complexity of Flow Analysis, Inductive Assertion Synthesis and a Language Due to Dijkstra · FOCS 1980
Program analysis › static analysis › pointer analysis
shape analysis
0.011979
Flow Analysis and Optimization of Lisp-Like Structures · POPL 1979

Methods — techniques the papers use, named apart from their topics

size-change graphs · 0.1bounded anchoring · 0.1data flow analysis · 0.0temporal logic · 0.0rewrite rules · 0.0turing machine model · 0.0storage modification machine · 0.0pointer machine · 0.0denotational semantics · 0.0abstract interpretation · 0.0reduction · 0.0space-bounded computation · 0.0turing machine · 0.0satisfiability · 0.0first-order formula with equality · 0.0complexity bounds · 0.0complexity analysis · 0.0
YearPublicationVenuePosition
2018 On Modeling and Programming
Neil D. Jones
ISoLA (1)1
2017 Compiling untyped lambda calculus to lower-level code by game semantics and partial evaluation (invited paper)
abstract
Any expression M in ULC (the untyped λ-calculus) can be compiled into a rather low-level language we call LLL, whose programs contain none of the traditional implementation devices for functional languages: environments, thunks, closures, etc. A compiled program is first-order functional and has a fixed set of working variables, whose number is independent of M. The generated LLL code in effect traverses the subexpressions of M.
Daniil Berezun, Neil D. Jones
PEPM2
2012 Obfuscation by partial evaluation of distorted interpreters
abstract
How to construct a general program obfuscator? We present a novel approach to automatically generating obfuscated code P2 from any program P whose source code is given. Start with a (program-executing) interpreter interp for the language in which P is written. Then "distort" interp so it is still correct, but its specialization P2 w.r.t. P is transformed code that is equivalent to the original program, but harder to understand or analyze. Potency of the obfuscator is proved with respect to a general model of the attacker, modeled as an approximate (abstract) interpreter. A systematic approach to distortion is to make program P obscure by transforming it to P2 on which (abstract) interpretation is incomplete. Interpreter distortion can be done by making residual in the specialization process sufficiently many interpreter operations to defeat an attacker in extracting sensible information from transformed code. Our method is applied to: code flattening, data-type obfuscation, and opaque predicate insertion. The technique is language independent and can be exploited for designing obfuscating compilers.
Roberto Giacobazzi, Neil D. Jones, Isabella Mastroeni
PEPM2
2012 Distillation with labelled transition systems
abstract
In this paper, we provide an improved basis for the "distillation" program transformation. It is known that superlinear speedups can be obtained using distillation, but cannot be obtained by other earlier automatic program transformation techniques such as deforestation, positive supercompilation and partial evaluation. We give distillation an improved semantic basis, and explain how superlinear speedups can occur.
Geoff W. Hamilton, Neil D. Jones
PEPM2
2011 Preface to a special section on verification, model checking, and abstract interpretation
Neil D. Jones, Markus Müller-Olm
Int. J. Softw. Tools Technol. Transf.1
2010 Size-Change Termination and Transition Invariants
Matthias Heizmann, Neil D. Jones, Andreas Podelski
SAS2
2009 A flow calculus of mwp-bounds for complexity analysis
abstract
We present a method for certifying that the values computed by an imperative program will be bounded by polynomials in the program's inputs. To this end, we introducemwp-matrices and define a semantic relation ⊧ C :M, where C is a program andMis anmwp-matrix. It follows straightforwardly from our definitions that there existsMsuch that ⊧ C :Mholds iff every value computed by C is bounded by a polynomial in the inputs. Furthermore, we provide a syntactical proof calculus and define the relation ⊢ C :Mto hold iff there exists a derivation in the calculus where C :Mis the bottom line. We prove that ⊢ C :Mimplies ⊧ C :M. By means of exhaustive proof search, an algorithm can decide if there existsMsuch that the relation ⊢ C :Mholds, and thus, our results yield a computational method.
Neil D. Jones, Lars Kristiansen
ACM Trans. Comput. Log.1
2008 Linear, Polynomial or Exponential? Complexity Inference in Polynomial Time
Amir M. Ben-Amram, Neil D. Jones, Lars Kristiansen
CiE2
2008 CTL as an Intermediate Language
Neil D. Jones, René Rydhof Hansen
VMCAI1
2008 Call-by-Value Termination in the Untyped lambda-Calculus
abstract
A fully-automated algorithm is developed able to show that evaluation of a given untyped lambda-expression will terminate under CBV (call-by-value). The ``size-change principle'' from first-order programs is extended to arbitrary untyped lambda-expressions in two steps. The first step suffices to show CBV termination of a single, stand-alone lambda;-expression. The second suffices to show CBV termination of any member of a regular set of lambda-expressions, defined by a tree grammar. (A simple example is a minimum function, when applied to arbitrary Church numerals.) The algorithm is sound and proven so in this paper. The Halting Problem's undecidability implies that any sound algorithm is necessarily incomplete: some lambda-expressions may in fact terminate under CBV evaluation, but not be recognised as terminating. The intensional power of the termination algorithm is reasonably high. It certifies as terminating many interesting and useful general recursive algorithms including programs with mutual recursion and parameter exchanges, and Colson's ``minimum'' algorithm. Further, our type-free approach allows use of the Y combinator, and so can identify as terminating a substantial subset of PCF.
Neil D. Jones, Nina Bohr
Log. Methods Comput. Sci.1
2007 The Semantics of "Semantic Patches" in Coccinelle: Program Transformation for the Working Programmer
Neil D. Jones, René Rydhof Hansen
APLAS1
2007 Flow analysis of lazy higher-order functional programs
Neil D. Jones, Nils Andersen
Theor. Comput. Sci.1
2006 Redundant Call Elimination via Tupling
Wei-Ngan Chin, Siau-Cheng Khoo, Neil D. Jones
Fundam. Informaticae3
2005 Termination Analysis of Higher-Order Functional Programs
Damien Sereni, Neil D. Jones
APLAS2
2005 The Flow of Data and the Complexity of Algorithms
Lars Kristiansen, Neil D. Jones
CiE2
2005 Termination analysis and specialization-point insertion in offline partial evaluation
abstract
Recent research suggests that the goal of fully automatic and reliable program generation for a broad range of applications is coming nearer to feasibility. However, several interesting and challenging problems remain to be solved before it becomes a reality. Solving them is alsonecessary,if we hope ever to elevate software engineering from its current state (a highly developed handiwork) into a successful branch of engineering, capable of solving a wide range of new problems by systematic, well-automated and well-founded methods.A key problem in all program generation isterminationof the generation process. This article focuses on off-line partial evaluation and describes recent progress towards automatically solving the termination problem, first for individual programs, and then for specializers and “generating extensions,” the program generators that most offline partial evaluators produce.The technique is based onsize-change graphsthat approximate the changes in parameter sizes at function calls. We formulate a criterion,bounded anchoring,for detecting parameters known to be bounded during specialization: a bounded parameter can act as ananchorfor other parameters. Specialization points necessary for termination are computed by adding a parameter that tracks call depth, and then selecting a specialization point in every call loop where it is unanchored. By generalizing all unbounded parameters, we compute a binding-time division which together with the set of specialization pointsguaranteestermination.Contributions of this article include a proof, based on the operational semantics of partial evaluation with memoization, that the analysis guarantees termination; and an in-depth description of safety of the increasing size approximation operator required for termination analysis in partial evaluation.Initial experiments with a prototype shows that the analysis overall yields binding-time divisions that can achieve a high degree of specialization, while still guaranteeing termination.The article ends with a list of challenging problems whose solution would bring the community closer to the goal of broad-spectrum, fully automatic and reliable program generation.
Arne J. Glenstrup, Neil D. Jones
ACM Trans. Program. Lang. Syst.2
2004 Termination Analysis of the Untyped lamba-Calculus
Neil D. Jones, Nina Bohr
RTA1
2004 Transformation by interpreter specialisation
Neil D. Jones
Sci. Comput. Program.1
2002 Program Generation, Termination, and Binding-Time Analysis
Neil D. Jones, Arne J. Glenstrup
GPCE1
2002 Program generation, termination, and binding-time analysis
abstract
Recent research suggests that the goal of fully automatic and reliable program generation for a broad range of applications is coming nearer to feasibility. However, several interesting and challenging problems remain to be solved before it becomes a reality.We first discuss the relations between problem specifications and their solutions in program form, and then narrow the discussion to an important special case: program transformation. Although the goal of fully automatic program generation is still far from fully achieved, there has been some success in a special case: partial evaluation, also known as program specialization.A key problem in all program generation is termination of the generation process. This paper (See the GPCE'02 proceedings for the full paper.} describes recent progress towards automatically solving the termination problem, first for individual programs, and then for specializers and "generating extensions," the program generators that most offline partial evaluators produce.
Neil D. Jones, Arne J. Glenstrup
ICFP1
2002 Proving correctness of compiler optimizations by temporal logic
abstract
Many classical compiler optimizations can be elegantly expressed using rewrite rules of form: I ⇒ I ′ if φ , where I , I ′ are intermediate language instructions and φ is a property expressed in a temporal logic suitable for describing program data flow. Its reading: If the current program π contains an instruction of form I at some control point p , and if flow condition φ is satisfied at p , then replace I by I ′.The purpose of this paper is to show how such transformations may be proven correct. Our methodology is illustrated by three familiar optimizations, dead code elimination, constant folding and code motion. The meaning of correctness is that for any program π, if Rewrite (π, π′, p , I ⇒ I ′ if φ) then [[π]] = [[π′]], i.e. π and π′ have exactly the same semantics.
David Lacey, Neil D. Jones, Eric Van Wyk, Carl Christian Frederiksen
POPL2
2002 Abstract and conclusions of PLI invited paper: program generation, termination, and binding-time analysis
abstract
Recent research suggests that the goal of fully automatic and reliable program generation for a broad range of applications is coming nearer to feasibility. However, several interesting and challenging problems remain to be solved before it becomes a reality. .We first discuss the relations between problem specifications and their solutions in program form, and then narrow the discussion to an important special case: program transformation. Although the goal of fully automatic program generation is still far from fully achieved, there has been some success in a special case: partial evaluation, also known as program specialization.A key problem in all program generation is termination of the generation process. This paper describes recent progress towards automatically solving the termination problem, first for individual programs, and then for specializers and "generating extensions," the program generators that most offline partial evaluators produce.
Neil D. Jones, Arne J. Glenstrup
PPDP1
2001 The size-change principle for program termination
abstract
The "size-change termination" principle for a first-order functional language with well-founded data is: a program terminates on all inputs if every infinite call sequence (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 from program syntax. The set of infinite call sequences that follow program flow and can be recognized as causing infinite descent is an ω-regular set, representable by a Büchi automaton. Algorithms for such automata can be used to decide size-change termination. We also give a direct algorithm operating on "size-change graphs" (without the passage to automata).Compared to other results in the literature, termination analysis based on the size-change principle is surprisingly simple and general: lexical orders (also called lexicographic orders), indirect function calls and permuted arguments (descent that is not in-situ) are all handled automatically and without special treatment, with no need for manually supplied argument orders, or theorem-proving methods not certain to terminate at analysis time.We establish the problem's intrinsic complexity. This turns out to be surprisingly high, complete for PSPACE, in spite of the simplicity of the principle. PSPACE hardness is proved by a reduction from Boolean program termination. An ineresting consequence: the same hardness result applies to many other analyses found in the termination and quasitermination literature.
Chin Soon Lee, Neil D. Jones, Amir M. Ben-Amram
POPL2
2001 The expressive power of higher-order types or, life without CONS
abstract
Compare first-order functional programs with higher-order programs allowing functions as function parameters. Can the the first program class solve fewer problems than the second? The answer is no: both classes are Turing complete , meaning that they can compute all partial recursive functions. In particular, higher-order values may be first-order simulated by use of the list constructor ‘cons’ to build function closures. This paper uses complexity theory to prove some expressivity results about small programming languages that are less than Turing complete. Complexity classes of decision problems are used to characterize the expressive power of functional programming language features. An example: second-order programs are more powerful than first-order, since a function f of type [Bool]-〉Bool is computable by a cons-free first-order functional program if and only if f is in PTIME , whereas f is computable by a cons-free second-order program if and only if f is in EXPTIME . Exact characterizations are given for those problems of type [Bool]-〉Bool solvable by programs with several combinations of operations on data: presence or absence of constructors; the order of data values: 0, 1, or higher; and program control structures: general recursion, tail recursion, primitive recursion.
Neil D. Jones
J. Funct. Program.1
2000 Computational complexity via programming languages: constant factors do matter
Amir M. Ben-Amram, Neil D. Jones
Acta Informatica2
1999 A Precise Version of a Time Hierarchy Theorem
abstract
Using a simple programming language as a computational model, Neil Jones has shown that a constant-factor time hierarchy exists: thus a constant-factor difference in time makes a difference in problem-solving power, unlike the situation with Turing m
Amir M. Ben-Amram, Neil D. Jones
Fundam. Informaticae2
1999 LOGSPACE and PTIME Characterized by Programming Languages
Neil D. Jones
Theor. Comput. Sci.1
1997 Combining Abstract Interpretation and Partial Evaluation (Brief Overview)
Neil D. Jones
SAS1
1996 A Positive Supercompiler
abstract
Abstract We introduce a positive supercompiler , a version of Turchin's supercompiler maintaining only positive information during transformation, and using folding without generalization. The positive supercompiler can also be regarded as a variant of Wadler's deforestation maintaining an increased amount of information. We compare our algorithm to deforestation and, in less detail, to partial evaluation, Turchin's supercompiler, Generalized Partial Computation (GPC), and partial deduction by classifying these transformers by the amount of information they maintain during transformation. This factor is significant, as a differentiating example reveals: positive supercompilation, Turchin's supercompiler, GPC and partial deduction can specialize a general pattern matcher with respect to a fixed pattern to obtain an efficient matcher very similar to the Knuth–Morris–Pratt algorithm. Deforestation and traditional partial evaluation achieve this effect only after a non-trivial hand rewriting of the general matcher.
Morten Heine Sørensen, Robert Glück, Neil D. Jones
J. Funct. Program.3
1995 Special Address: MIX ten years after
abstract
The first article reporting a running nontrivial self-applicable
Neil D. Jones
PEPM1
1994 Towards Unifying Partial Evaluation, Deforestation, Supercompilation, and GPC
Morten Heine Sørensen, Robert Glück, Neil D. Jones
ESOP3
1994 Denotational Abstract Interpretation of Logic Programs
abstract
Logic-programming languages are based on a principle of separation “logic” and “control.”. 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 view, it makes sound, efficient implementation of logic-programming languages difficult. The lack of “control information” in programs calls for complex data-flow analysis techniques to guide execution. Since data-flow analysis furthermore finds extensive use in error-finding and transformation tools, there is a need for a simple and powerful theory of data-flow analysis of logic programs. This paper offers such a theory, based on F. Nielson's extension of P. Cousot and R. Cousot's abstract interpretation . We present a denotational definition of the semantics of definite logic programs. This definition is of interest in its own right because of its compactness. Stepwise we develop the definition into a generic data-flow analysis that encompasses a large class of data-flow analyses based on the SLD execution model. We exemplify one instance of the definition by developing a provably correct groundness analysis to predict how variables may be bound to ground terms during execution. We also discuss implementation issues and related work.
Kim Marriott, Harald Søndergaard, Neil D. Jones
ACM Trans. Program. Lang. Syst.3
1993 Constant time factors do matter
abstract
The constant speedup theorem, so well known from Turing machine based complexity theory, is shown false for a natural imperative programming language I that manipulates tree-structured data. This relieves a tension between general programming practice, where linear factors are essential, and complexity theory, where linear time changes are traditionally regarded as trivial. Specifically, there is a constant b such that for any a > 0 there is a set X recognizable in time a · b · n but not in time a · n. Thus LIN, the collection of all sets recognizable in linear time by deterministic I-programs, contains an infinite hierarchy ordered by constant coefficients. Constant hierarchies also exist for larger time bounds T (n), provided they are time-constructable. Second, a problem is exhibited which is complete for the nondeterministic linear time sets NLIN with respect to a natural notion of deterministic linear-time reduction. Third, Kleene’s Second Recursion Theorem in essence shows that for any program p defined with self-reference, there is an equivalent nonreflexive program q. This is proven for an extension I↑ of I. Further, q can be simulated by an I program at most constantly slower than p. Language I↑ allows calls to the language’s own interpretation function, and even to its running time function (without the usual high costs for nested levels of interpretation). The results all hold as well for a stronger language I allowing selective updating of tree-structured data. The results are robust in that classes LIN and NLIN are identical for I , Isu↑, Schonhage’s Storage Modification Machines, Knuth/Tarjan’s pointer machines, and successor RAMs [13,14,11]. where n is the size of the input. DIKU, Department of Computer Science, University of Copenhagen, Universitetsparken 1, DK-2100 Copenhagen East, Denmark, E-mail: [email protected]. If the “more realistic and precise measure” of SMM computation time is used [13], and similarly for the other models.
Neil D. Jones
STOC1
1991 A Partial Evaluator for the Untyped lambda-Calculus
abstract
Abstract This article describes theoretical and practical aspects of an implemented self-applicable partial evaluator for the untyped lambda-calculus with constants and a fixed point operator. To the best of our knowledge, it is the first partial evaluator that is simultaneously higher-order, non-trivial, and self-applicable. Partial evaluation produces a residual program from a source program and some of its input data. When given the remaining input data the residual program yields the same result that the source program would when given all its input data. Our partial evaluator produces a residual lambda-expression given a source lambda-expression and the values of some of its free variables. By self-application, the partial evaluator can be used to compile and to generate stand-alone compilers from a denotational or interpretive specification of a programming language. An essential component in our self-applicable partial evaluator is the use of explicit binding time information. We use this to annotate the source program, marking as residual the parts for which residual code is to be generated and marking as eliminable the parts that can be evaluated using only the data that is known during partial evaluation. We give a simple criterion, well-annotatedness, that can be used to check that the partial evaluator can handle the annotated higher-order programs without committing errors. Our partial evaluator is simple, is implemented in a side-effect free subset of Scheme, and has been used to compile and to generate compilers and a compiler generator. In this article we examine two machine-generated compilers and find that their structures are surprisingly natural.
Carsten K. Gomard, Neil D. Jones
J. Funct. Program.2
1991 Foreword (Selected Papers of ESOP '90)
Neil D. Jones
Sci. Comput. Program.1
1991 Static Semantics, Types, and Binding Time Analysis
Neil D. Jones
Theor. Comput. Sci.1
1990 Partial Evaluation, Self-Application and Types
Neil D. Jones
ICALP1
1986 Data Flow Analysis of Applicative Programs Using Minimal Function Graphs
abstract
Data or program flow analysis is concerned with the static analysis of programs, to obtain as much information as possible about their possible run time behavior without actually having to run the programs. Due to the unsolvability of the halting problem (and nearly any other question concerning program behavior), such analyses are necessarily only approximate whenever the analysis algorithm is guaranteed to terminate. Further, exact analysis may be impossible due to the lack of knowledge of input data values, so the analysis can at best yield information about sets of possible computations.
Neil D. Jones, Alan Mycroft
POPL1
1985 An Experiment in Partial Evaluation: The Generation of a Compiler Generator
Neil D. Jones, Peter Sestoft, Harald Søndergaard
RTA1
1984 A method for detecting structure in polyhedra
Peter Johansen, Neil D. Jones, Jens Clausen
Pattern Recognit. Lett.2
1982 A Flexible Approach to Interprocedural Data Flow Analysis and Programs with Recursive Data Structures
abstract
A new approach to data flow analysis of procedural programs and programs with recursive data structures is described. The method depends on simulation of the interpreter for the subject programming language using a retrieval function to approximate a program's data structures.
Neil D. Jones, Steven S. Muchnick
POPL1
1981 Flow Analysis of Lambda Expressions (Preliminary Version)
Neil D. Jones
ICALP1
1981 A Note on the Complexity of General D0L Membership
abstract
In [Math. Systems Theory, 13 (1979), pp. 29–43], the authors obtained a number of upper and lower bounds for various problems concerning L-systems. In most cases the bounds were rather close; however, for general $D0L$ membership the upper bound was $\mathcal{P}$, and the lower was deterministic log space. In this note we show that membership can be decided deterministically in $\log ^2 n$ space, which makes it very unlikely that the problem is complete for $\mathcal{P}$. We also show that nonmembership is as hard as any problem solvable in nondeterministic log n space. This is an improved lower bound unless ${\textbf{DSPACE}}(\log n) = {\textbf{NSPACE}}(\log n)$, which is also thought to be very unlikely.
Neil D. Jones, Sven Skyum
SIAM J. Comput.1
1980 Complexity of Flow Analysis, Inductive Assertion Synthesis and a Language Due to Dijkstra
abstract
Two different methods of flow analysis are discussed, one a significant generalization of the other. It is shown that the two methods have significantly different intrinsic computational complexities. As an outgrowth of our observations it is shown that a feature of the programming language used by Dijkstra in A Discipline of Programming makes it unsuitable for compile-time type checking, thus suggesting that flow analysis is applicable to the design of programming languages, as well as to their implementation. It is also shown that program verification by the method of inductive assertions is very likely to lead to assertions whose lengths and proofs are not polynomially bounded in the size of the program being verified, even for very simple programs. This last observation casts further doubt on the practicality and relevance of mechanized verification of arbitrary programs.
Neil D. Jones, Steven S. Muchnick
FOCS1
1979 Flow Analysis and Optimization of Lisp-Like Structures
abstract
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 program, and describe a number of uses to which that information may be put to improve storage allocation in compilers and interpreters for advanced programming languages.We are concerned chiefly with finding, for each program point and variable a finite description of a set of graphs which includes all the shapes of values the variable could assume at that point during the execution of a program. If this set is small or regular in structure, this information can be used to optimize the program's execution, mainly by use of more efficient storage allocation schemes.In the first part we show how to construct from a program without selective updating a tree grammar whose nonterminals generate the desired sets of graphs; in this case they will all be trees. The tree grammars are of a more general form than is usually studied [8, 19], so we show that they may be converted to the usual form. The resulting tree grammar could naturally be viewed as a recursive type definition [11] of the values the variables may assume. Further, standard algorithms may be employed to test for infiniteness, emptiness or linearity of the tree structure.In the second part selective updating is allowed, so an alternate semantics is introduced which more closely resembles traditional LISP implementations, and which is equivalent to the tree model for programs without selective updating. In this model data objects are directed graphs. We devise a finite approximation method which provides enough information to detect cell sharing and cyclic structures whenever they can possibly occur. This information can be used to recognize when the use of garbage collection or of reference counts may be avoided.The work reported in the second part of this paper extends that of Schwartz [17] and Cousot and Cousot [7]. They have developed methods for determining whether the values of two or more variables share cells, while we provide information on the detailed structure of what is shared. The ability to detect cycles is also new. It also extends the work of Kaplan [13], who distinguishes only binary relations among the variables of a program, does not handle cycles, and does not distinguish selectors (so that his analysis applies to nodes representing sets rather than ordered tuples).
Neil D. Jones, Steven S. Muchnick
POPL1
1979 Complexity of Some Problems Concerning L Systems
Neil D. Jones, Sven Skyum
Math. Syst. Theory1
1978 The Complexity of Finite Memory Programs with Recursion
abstract
In order to study the effects of recurston on the complexity of program analysis, a fimte memory machme wtth recurstve calls is defined, as well as two parameter passmg mechamsms whmch extend the power of the language Close upper and lower bounds on the complexity of determmmg whether a program accepts the empty language are gtven for each of the three program models It ts shown that such questtons as acceptance of the empty set, eqmvalence, and so on are retractable even for these relatively simple programs
Neil D. Jones, Steven S. Muchnick
J. ACM1
1978 Corrigendum: Context Free Languages and Rudimentary Attributes
Neil D. Jones
Math. Syst. Theory1
1977 Complexity of Some Problems Concerning L Systems
Neil D. Jones, Sven Skyum
ICALP1
1977 Recognition of Deterministic ETOL Languages in Logarithmic Space
Neil D. Jones, Sven Skyum
Inf. Control.1
1977 A Note on Linear Time Simulation of Deterministic Two-Way Pushdown Automata
Neil D. Jones
Inf. Process. Lett.1
1977 Even Simple Programs Are Hard To Analyze
abstract
A simple programming language which corresponds in computational power to the class of generalized sequential machines with final states is defined. It is shown that a variety of questions of practical programming interest about the language are of nondeterministic linear space complexity. Extensions to the language are defined (adding arithmetic and array data structures) and their complexity properties are explored. It is concluded that questions about halting, equivalence, optimization, and so on are intractable even for very simple programming languages.
Neil D. Jones, Steven S. Muchnick
J. ACM1
1977 Corrigendum: Space-Bounded Reducibility among Combinatorial Problems
Neil D. Jones
J. Comput. Syst. Sci.1
1977 Complexity of Some Problems in Petri Nets
Neil D. Jones, Lawrence H. Landweber, Y. Edmund Lien
Theor. Comput. Sci.1
1976 Binding Time Optimization in Programming Languages: Some Thoughts Toward the Design of an Ideal Language
abstract
A new approach to the design of a programming language and its processor is proposed and some of the techniques necessary to realize the design are investigated. The language would have a precisely specified syntax and semantics, with both designed to provide the programmer maximal expressive power and to be as easily understood as possible. The semantics would be based on extremely late binding times, which provide great power to the programmer and are consistent with ease of understanding of the execution process. It would be the responsibility of the processor to implement each program in the most efficient manner consistent with its being correctly executed. Implications of this design philosophy and some of the techniques to be used are discussed in greater detail, focusing particularly on data types and storage allocation.
Neil D. Jones, Steven S. Muchnick
POPL1
1976 New Problems Complete for Nondeterministic Loc Space
Neil D. Jones, Y. Edmund Lien, William T. Laaser
Math. Syst. Theory1
1976 Complete Problems for Deterministic Polynomial Time
Neil D. Jones, William T. Laaser
Theor. Comput. Sci.1
1975 Even Simple Programs are Hard to Analyze
abstract
It has long been known that most questions of interest about the behavior of programs are recursively undecidable. These questions include whether a program will halt, whether two programs are equivalent, whether one is an optimized form of another, and so on. On the other hand, it is possible to make some or all of these questions decidable by suitably restricting the computational ability of the programming language under consideration. The Loop language of Meyer and Ritchie [MR], for example, has a decidable halting problem, but undecidable equivalence. Restricting the computational ability still further, virtually all of these questions are decidable for finite automata and generalized sequential machines (except that Griffiths [Gri] has shown equivalence undecidable for nondeterministic gsms).A natural question to ask is how hard it is to solve these problems for programming languages for which they are decidable, and it is with this area that we are concerned in this paper. In particular we describe a programming language modeled on current higher-level languages which has exactly the computational power of deterministic finite state transducers with final states, and analyze the space and time required to decide various questions of programming interest about the language. We find that questions about halting, equivalence, and optimization are already intractable for this very simple language. We also study extensions to the language such as simple arithmetic capabilities, arrays, and recursive subroutines with both call-by-value and call-by-name parameter passing mechanisms, some of which extend the capabilities of the language and/or increase the complexity of its decidable problems. In one case, that of recursion with call-by-name, the previously decidable questions are seen to become undecidable.
Neil D. Jones, Steven S. Muchnick
POPL1
1975 Space-Bounded Reducibility among Combinatorial Problems
Neil D. Jones
J. Comput. Syst. Sci.1
1974 Complete Problems for Deterministic Polynomial Time
abstract
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—whether deterministic and nondeterministic polynomial-time-bounded Turing machines are equivalent in power—was seen to be exactly equivalent to determining whether any of several familiar combinatorial problems can be solved by polynomial-time algorithms. Second, the existence of complete problems for NP1 made it possible to replace an entire class of questions by a question about a single representative.Thus all of these combinatorial and automata-theoretic problems were essentially restatements of a single problem, such as: can satisfiability of a propositional formula be decided in polynomial time.
Neil D. Jones, William T. Laaser
STOC1
1974 Turing Machines and the Spectra of First-Order Formulas
abstract
H. Scholz [11] defined the spectrum of a formula φ of first-order logic with equality to be the set of all natural numbers n for which φ has a model of cardinality n. He then asked for a characterization of spectra. Only partial progress has been made. Computational aspects of this problem have been worked on by Gunter Asser [1], A. Mostowski [9], and J. H. Bennett [2]. It is known that spectra include the Grzegorczyk class and are properly included in . However, no progress has been made toward establishing whether spectra properly include , or whether spectra are closed under complementation. A possible connection with automata theory arises from the fact that contains just those sets which are accepted by deterministic linear-bounded Turing machines (Ritchie [10]). Another resemblance lies in the fact that the same two problems (closure under complement, and proper inclusion of ) have remained open for the class of context sensitive languages for several years. In this paper we show that these similarities are not accidental—that spectra and context sensitive languages are closely related, and that their open questions are merely special cases of a family of open questions which relate to the difference (if any) between deterministic and nondeterministic time or space bounded Turing machines. In particular we show that spectra are just those sets which are acceptable by nondeterministic Turing machines in time 2cx, where c is constant and x is the length of the input. Combining this result with results of Bennett [2], Ritchie [10], Kuroda [7], and Cook [3], we obtain the “hierarchy” of classes of sets shown in Figure 1. It is of interest to note that in all of these cases the amount of unrestricted read/write memory appears to be too small to allow diagonalization within the larger classes.
Neil D. Jones, Alan L. Selman
J. Symb. Log.1
1973 Discrete structures in the undergraduate computer science curriculum
abstract
A course in discrete mathematical structures has been included as a necessary component of a program in all major curriculum studies in computer science. This paper discusses this type of course with respect to problems encountered in its implementation due to its central position in the curriculum. Recommendations are made regarding the level, content, and handling of the course, based on several years' experience in teaching the material.
Gerald L. Engel, Neil D. Jones
SIGCSE2
1972 Turing Machines and the Spectra of First-Order Formulas with Equality
abstract
In this paper we show that these similarities are not accidental - that spectra and context sensitive languages are closely related, and that their open questions are merely special cases of a family of open questions which relate to the difference (if any) between deterministic and non-deterministic time-or space-bounded Turing machines.
Neil D. Jones, Alan L. Selman
STOC1
1970 A Note on the Index of a Context-Free Language
Neil D. Jones
Inf. Control.1
1969 Context-Free Languages and Rudimentary Attributes
Neil D. Jones
Math. Syst. Theory1
1968 Classes of Automata and Transitive Closure
Neil D. Jones
Inf. Control.1