110 lines
3.2 KiB
TeX
Executable File
110 lines
3.2 KiB
TeX
Executable File
% use [nosolutions] flag to hide solutions.
|
|
% use [solutions] flag to show solutions.
|
|
\documentclass[
|
|
solutions,
|
|
singlenumbering
|
|
]{../../resources/ormc_handout}
|
|
\usepackage{../../resources/macros}
|
|
|
|
|
|
\usepackage{mathtools} % for \coloneqq
|
|
|
|
% An invisible marker, used to
|
|
% draw arrows in equations.
|
|
\newcommand{\tzmr}[1]{
|
|
\tikz[
|
|
overlay,
|
|
remember picture,
|
|
right = 0.25ex
|
|
] \node (#1) {};
|
|
}
|
|
\newcommand{\tzm}[1]{
|
|
\tikz[
|
|
overlay,
|
|
remember picture
|
|
] \node (#1) {};
|
|
}
|
|
|
|
\newcommand{\lm}{\lambda}
|
|
|
|
|
|
|
|
% TODO:
|
|
% Lazy evaluation (alternate Y)
|
|
% Add a few theorems
|
|
% Better ending -> applications?
|
|
% - nix, comparison to imperative
|
|
|
|
|
|
|
|
\uptitlel{Advanced 2}
|
|
\uptitler{\smallurl{}}
|
|
\title{Lambda Calculus}
|
|
\subtitle{Prepared by Mark on \today{}}
|
|
|
|
\begin{document}
|
|
|
|
\maketitle
|
|
|
|
\hfill
|
|
\begin{minipage}{8cm}
|
|
Beware of the Turing tar pit, in which everything is possible but nothing of interest is easy.
|
|
|
|
\vspace{2ex}
|
|
|
|
Alan Perlis, \textit{Epigrams of Programming}, \#54
|
|
\end{minipage}
|
|
\hfill\null
|
|
|
|
\vspace{4mm}
|
|
|
|
\makeatletter
|
|
\if@solutions
|
|
\begin{instructornote}
|
|
\textbf{Context \& Computability:} (or, why do we need lambda calculus?)\par
|
|
\note{From Peter Selinger's \textit{Lecture Notes on Lambda Calculus}}
|
|
|
|
\vspace{2mm}
|
|
|
|
In the 1930s, several people were interested in the question: what does it mean for
|
|
a function $f : \mathbb{N} \mapsto \mathbb{N}$ to be computable? An informal definition of computability
|
|
is that there should be a pencil-and-paper method allowing a trained person to
|
|
calculate $f(n)$, for any given $n$. The concept of a pencil-and-paper method is not
|
|
so easy to formalize. Three different researchers attempted to do so, resulting in
|
|
the following definitions of computability:
|
|
|
|
\begin{itemize}
|
|
\item Turing defined an idealized computer we now call a Turing machine, and
|
|
postulated that a function is \say{computable} if and only
|
|
if it can be computed by such a machine.
|
|
|
|
\item G\"odel defined the class of general recursive functions as the smallest set of
|
|
functions containing all the constant functions, the successor function, and
|
|
closed under certain operations (such as compositions and recursion). He
|
|
postulated that a function is \say{computable} if and only
|
|
if it is general recursive.
|
|
|
|
\item Church defined an idealized programming language called the lambda calculus,
|
|
and postulated that a function is \say{computable} if and only if it can be written as a lambda term.
|
|
\end{itemize}
|
|
|
|
It was proved by Church, Kleene, Rosser, and Turing that all three computational
|
|
models were equivalent to each other --- each model defines the same class
|
|
of computable functions. Whether or not they are equivalent to the \say{intuitive}
|
|
notion of computability is a question that cannot be answered, because there is no
|
|
formal definition of \say{intuitive computability.} The assertion that they are in fact
|
|
equivalent to intuitive computility is known as the Church-Turing thesis.
|
|
\end{instructornote}
|
|
\vfill
|
|
\pagebreak
|
|
\fi
|
|
\makeatother
|
|
|
|
\input{parts/00 intro}
|
|
\input{parts/01 combinators}
|
|
\input{parts/02 boolean}
|
|
\input{parts/03 numbers}
|
|
\input{parts/04 recursion}
|
|
\input{parts/05 challenges}
|
|
|
|
\end{document} |