\documentclass{article}

\usepackage{hevea}

\oddsidemargin 0cm
\textwidth 17cm

\begin{document}


\title{CS 3100 -- Models of Computation -- Fall 2011}
\date{August 22, 2011}

\maketitle

\begin{center}
{\bf Notes 1, Handed out: August 21, 2011}
\end{center}

\section{General Announcements}

\begin{itemize}

\item This course covers concepts from Automata Theory, Computability, Logic, and
  Reasoning about Programs

\item We will use Python and Functional Programming heavily for much of the course

\item There will be other tools introduced in the course

\item Details about exams and grading are online

\item There will be a course project worth half of your final-exam points

\item The final exam will also examine your project to some extent; but generally
  each exam covers portions since the previous exam or the beginning of the
  course, whichever is more recent.
\end{itemize}

\section{Checklist}

\begin{itemize}

\item Send email to teach-cs3100 giving your preferred email addresses

\item Login to cade machines and make sure that you can run simple Python3 programs

\item TAs: Set up the score lookup facility

\item TAs: Set up handin for Assignment \#1, due 8/30/11
\end{itemize}

\section{Lecture}

% Introduce the basic topics

\subsection{Why study Computation?}

\begin{enumerate}
\item  We rely on computers for everything

\item  We need tools to reason about computers (hardware and software) to make sure
   that they are working correctly

\item  We need to understand the limits of computers and computation (and how to define these ideas)
\end{enumerate}

\subsection{Learning Objectives}

\begin{enumerate}
\item  Learn to design and experiment with various automata (prerequisite for
   your future classes such as Compilers)

\item  Become proficient in basic mathematical logic

\item  Learn how to write proofs and believe in proofs you write (and to learn first-hand
   how brittle proofs can be - much like programs can be - if you leave 'holes' in them)
\end{enumerate}

\subsection{Formal Notions of Computation}

\begin{itemize}

\item  Turing machines (will study)

\item  Lambda calculus (will study when you write functional programs)

\item  Other formal systems (Rewrite systems - aka Thue systems, Counter machines, etc.)
\end{itemize}

\subsection{Minimalist Approach}

Theoreticians seek the smallest number of concepts using which to state ideas

\begin{itemize}

\item  State (the "Control" memory)

\item  State Transition

\item  Alphabet

\item  Additional memory needed if you want more computing power

  \begin{itemize}
    \item One stack - gives you Push-down automata

    \item Two stacks - gives you Turing machines, or everything

  \end{itemize}
\end{itemize}

\subsection{Notions of Hardness}

\begin{itemize}

\item  How hard are very hard problems (programs that may even loop, or mathematical
  functions for which there can't exist programs to implement them.. )

  \begin{itemize}
  \item Non Recursively Enumerable (Non RE)

  \item RE (programs exist, but may loop)

  \item Recursive (halting programs guaranteed - may take too much time/space though)
  \end{itemize}

\item  How hard are problems within the Recursive family?

  \begin{itemize}
  \item NP-complete

  \item Polynomial
  \end{itemize}

\end{itemize}


\subsection{Correctness Checking and Computer-Aided Verification}

\begin{itemize}
\item  To express correctness, we need to employ mathematical logic

\item  Logics are intimately related to automata

\item  Logics are workhorses in the industry now - e.g. Decidable (Recursive) logic engines
  now routinely poke holes in browsers, and have even shown how to shop free online (a
  result that has caused patches in very reputed E-commerce sites)

\item  We will obtain a taste for logic through
 \begin{itemize}
 \item reading the above inspiring papers

 \item using some of these tools

 \item If time permits, writing a simple tool yourself (BDD-based)
 \end{itemize}
\end{itemize}

\subsection{Proof methods}


Reduction arguments:
   Gang up problems into a set so that when one day you solve one problem,
    you have a solution to all problems in that set

% If time permits, introduce functional programming in Python

% Give out a homework


\end{document}

