Overview
Explores the theoretical foundations of computing What can and cannot be done by an algorithm Most of the material predates computers! Has direct application in digital design, programming languages, and compilers 2 CS Introduction
Symbolic computation (numbers are just bit strings)
Turing Machine ( ) von Neumann architecture ▪ fetch/store in memory ▪ led to creation of digital computers ▪ machine language Imperative programming paradigm ▪ assembly, procedural, object-oriented (FORTRAN, Pascal, C, C++, Java, C#, Python, Perl, PHP, Ruby, etc.) Covered in this course
Lambda Calculus (1936) based on mathematical functions ▪ higher-level than imperative programming ▪ no assignment statement! Functional programming paradigm ▪ Lisp, Scheme, ML, Haskell, Scala, Groovy, F#.NET ▪ Features creeping into C++, C#, Java, Python, Ruby, etc. Covered in CS 4450
What is “computation”? “The processing of ‘data’ according to an algorithm” Theory was fairly complete before computers existed Guided the development of computers and their use And still does…
Write a program that reads other programs and determines if they work correctly (e.g., halt without error) for all possible inputs Write a general-purpose sorting algorithm (i.e., that only uses comparisons of its elements to determine order) that has a time complexity less than O(n log n) Determine if a polynomial of arbitrary degree with integer coefficients has an integer root Given two arbitrary language grammars, determine if they describe the same language
360 BC Eudoxus (Method of Exhaustion) 350 Aristotle (Deductive Logic) 300 Euclid (The Axiomatic Method) 250 AD Diophantine (Number Theory) 628 Brahmasphuta (Carry/borrow decimals) 830 al-Khowarizmi (The Algorithm) 1614 Napier (Logarithms) 1666 Leibniz (Symbology of calculus) 1671 Newton (Approximations/infinitesimals) Fourier, Cauchy, Riemann (Formalization of Analysis) Babbage (Difference Engine) 1852 Boole (Symbolic Logic- “Laws of Thought”) 1874 Cantor (Cardinality) 1884 Frege (Foundations of Arithmetic) 1889 Peano (Axioms of Arithmetic) 1900 Hilbert (Foundations of Geometry; 10 Problems) 1908 Zermelo-Fränkel Set Theory 1910 Russell & Whitehead (Prinicipia Mathematica – Type Theory) 1931 Godel’s Incompleteness Theorem (Decidability) 1936 Church, Post, Kleene, Turing
“Formal” Languages Syntax only, not semantics Finite Automata Simple machines (state machines), regular languages Push-down Automata Automata with memory Context-free languages Turing Theory Universal abstract model for computation
Understand the concepts of Regular Languages and their relationship to finite state machines (automata) Understand the concepts of Context-Free Languages and their relationship to pushdown automata Understand the concepts of Computable Languages and their relationship to Turing machines Apply all of the above in computer programs Understand the limits of automatic computation Ultimate outcome: to grok the “big picture” of computation models
Visit chuckallison.com