Computability and Complexity

From a Programming Perspective

Computability and complexity theory should be of central concern to practitioners as well as theorists. Unfortunately, however, the field is known for its impenetrability. Neil Jones's goal as an educator and author is to build a bridge between computability and complexity theory and other areas of computer science, especially programming. In a shift away from the Turing machine- and Gödel number-oriented classical approaches, Jones uses concepts familiar from programming languages to make computability and complexity more accessible to computer scientists and more applicable to practical programming problems.

According to Jones, the fields of computability and complexity theory, as well as programming languages and semantics, have a great deal to offer each other. Computability and complexity theory have a breadth, depth, and generality not often seen in programming languages. The programming language community, meanwhile, has a firm grasp of algorithm design, presentation, and implementation. In addition, programming languages sometimes provide computational models that are more realistic in certain crucial aspects than traditional models.

New results in the book include a proof that constant time factors do matter for its programming-oriented model of computation. (In contrast, Turing machines have a counterintuitive "constant speedup" property: that almost any program can be made to run faster, by any amount. Its proof involves techniques irrelevant to practice.) Further results include simple characterizations in programming terms of the central complexity classes PTIME and LOGSPACE, and a new approach to complete problems for NLOGSPACE, PTIME, NPTIME, and PSPACE, uniformly based on Boolean programs.

Foundations of Computing series

Table of Contents

  1. Series Forward
  2. Preface
  3. 1. Introduction
  4. 2. The WHILE Language
  5. 3. Programs as Data Objects
  6. 4. Self-interpretation: Universal Programs for WHILE and I
  7. 5. Elements of Computability Theory
  8. 6. Metaprogramming, Self-application, and Compiler Generation
  9. 7. Other Sequential Models of Computation
  10. 8. Robustness of Computability
  11. 9. Computability by Functional Languages
  12. 10. Some Natural Unsolvable Problems
  13. 11. Hilbert's Tenth Problem
  14. 12. Inference Systems and Gödel's Incompleteness Theorem
  15. 13. Computability Theory Based on Numbers
  16. 14. More Abstract Approaches to Computability
  17. 15. Overview of Complexity Theory
  18. 16. Measuring Time Usage
  19. 17. Time Usage of Tree-manipulating Programs
  20. 18. Robustness of Time-bounded Computation
  21. 19. Linear and Other Time Hierarchies for WHILE Programs
  22. 20. The Existence of Optimal Algorithms
  23. 21. Space-bounded Computations
  24. 22. Nondeterministic Computations
  25. 23. A Structure for Classifying the Complexity of Various Problems
  26. 24. Characterizations of LOGSPACE and PTIME by GOTO Programs
  27. 25. Completeness and Reduction of One Problem to Another
  28. 26. Complete Problems for PTIME
  29. 27. Complete Problems for NPTIME
  30. 28. Complete Problems for PSPACE
  31. A Mathematical Terminology and Concepts
  32. Bibliography
  33. List of Notations
  34. Index