You are previewing Theory of Computation.
O'Reilly logo
Theory of Computation

Book Description

Learn the skills and acquire the intuition to assess the theoretical limitations of computer programming

Offering an accessible approach to the topic, Theory of Computation focuses on the metatheory of computing and the theoretical boundaries between what various computational models can do and not do—from the most general model, the URM (Unbounded Register Machines), to the finite automaton. A wealth of programming-like examples and easy-to-follow explanations build the general theory gradually, which guides readers through the modeling and mathematical analysis of computational phenomena and provides insights on what makes things tick and also what restrains the ability of computational processes.

Recognizing the importance of acquired practical experience, the book begins with the metatheory of general purpose computer programs, using URMs as a straightforward, technology-independent model of modern high-level programming languages while also exploring the restrictions of the URM language. Once readers gain an understanding of computability theory—including the primitive recursive functions—the author presents automata and languages, covering the regular and context-free languages as well as the machines that recognize these languages. Several advanced topics such as reducibilities, the recursion theorem, complexity theory, and Cook's theorem are also discussed. Features of the book include:

  • A review of basic discrete mathematics, covering logic and induction while omitting specialized combinatorial topics

  • A thorough development of the modeling and mathematical analysis of computational phenomena, providing a solid foundation of un-computability

  • The connection between un-computability and un-provability: Gödel's first incompleteness theorem

  • The book provides numerous examples of specific URMs as well as other programming languages including Loop Programs, FA (Deterministic Finite Automata), NFA (Nondeterministic Finite Automata), and PDA (Pushdown Automata). Exercises at the end of each chapter allow readers to test their comprehension of the presented material, and an extensive bibliography suggests resources for further study.

    Assuming only a basic understanding of general computer programming and discrete mathematics, Theory of Computation serves as a valuable book for courses on theory of computation at the upper-undergraduate level. The book also serves as an excellent resource for programmers and computing professionals wishing to understand the theoretical limitations of their craft.

    Table of Contents

    1. Coverpage
    2. Titlepage
    3. Copyright
    4. Dedication
    5. Contents
    6. Preface
    7. 1 Mathematical Foundations
      1. 1.1 Sets and Logic; Naïvely
        1. 1.1.1 A Detour via Logic
        2. 1.1.2 Sets and their Operations
        3. 1.1.3 Alphabets, Strings and Languages
      2. 1.2 Relations and Functions
      3. 1.3 Big and Small Infinite Sets; Diagonalization
      4. 1.4 Induction from a User’s Perspective
        1. 1.4.1 Complete, or Course-of-Values, Induction
        2. 1.4.2 Simple Induction
        3. 1.4.3 The Least Principle
        4. 1.4.4 The Equivalence of Induction and the Least Principle
      5. 1.5 Why Induction Ticks
      6. 1.6 Inductively Defined Sets
      7. 1.7 Recursive Definitions of Functions
      8. 1.8 Additional Exercises
    8. 2 Algorithms, Computable Functions and Computations
      1. 2.1 A Theory of Computability
        1. 2.1.1 A Programming Framework for Computable Functions
        2. 2.1.2 Primitive Recursive Functions
        3. 2.1.3 Simultaneous Primitive Recursion
        4. 2.1.4 Pairing Functions
        5. 2.1.5 Iteration
      2. 2.2 A Programming Formalism for the Primitive Recursive Functions
        1. 2.2.1 PR vs. L
        2. 2.2.2 Incompleteness of PR
      3. 2.3 URM Computations and their Arithmetization
      4. 2.4 A Double Recursion that Leads Outside the Primitive Recursive Function Class
        1. 2.4.1 The Ackermann Function
        2. 2.4.2 Properties of the Ackermann Function
        3. 2.4.3 The Ackermann Function Majorizes All the Functions of PR
        4. 2.4.4 The Graph of the Ackermann Function is in PR
      5. 2.5 Semi-computable Relations; Unsolvability
      6. 2.6 The Iteration Theorem of Kleene
      7. 2.7 Diagonalization Revisited; Unsolvability via Reductions
        1. 2.7.1 More Diagonalization
        2. 2.7.2 Reducibility via the S-m-n Theorem
        3. 2.7.3 More Dovetailing
        4. 2.7.4 Recursive Enumerations
      8. 2.8 Productive and Creative Sets
      9. 2.9 The Recursion Theorem
        1. 2.9.1 Applications of the Recursion Theorem
      10. 2.10 Completeness
      11. 2.11 Unprovability from Unsolvability
        1. 2.11.1 Supplement: is Expressible in the Language of Arithmetic
      12. 2.12 Additional Exercises
    9. 3 A Subset of the URM Language; FA and NFA
      1. 3.1 Deterministic Finite Automata and their Languages
        1. 3.1.1 The Flow-Diagram Model
        2. 3.1.2 Some Closure Properties
        3. 3.1.3 How to Prove that a Set is Not Acceptable by a FA; Pumping Lemma
      2. 3.2 Nondeterministic Finite Automata
        1. 3.2.1 From FA to NFA and Back
      3. 3.3 Regular Expressions
        1. 3.3.1 From a Regular Expression to NFA and Back
      4. 3.4 Regular Grammars and Languages
        1. 3.4.1 From a Regular Grammar to a NFA and Back
        2. 3.4.2 Epilogue on Regular Languages
      5. 3.5 Additional Exercises
    10. 4 Adding a Stack to a NFA: Pushdown Automata
      1. 4.1 The PDA
      2. 4.2 PDA Computations
        1. 4.2.1 ES vs AS vs ES+AS
      3. 4.3 The PDA-acceptable Languages are the Context Free Languages
      4. 4.4 Non Context Free Languages; Another Pumping Lemma
      5. 4.5 Additional Exercises
    11. 5 Computational Complexity
      1. 5.1 Adding a Second Stack; Turing Machines
        1. 5.1.1 Turing Machines
        2. 5.1.2 NP-Completeness
        3. 5.1.3 Cook’s Theorem
      2. 5.2 Axt, Loop Program, and Grzegorczyk Hierarchies
      3. 5.3 Additional Exercises
    12. Bibliography
    13. Index