Improved intro

This commit is contained in:
Mark 2023-10-17 09:15:31 -07:00
parent 59498a9bc6
commit a7dfe2728a
Signed by: Mark
GPG Key ID: AD62BB059C2AAEE4

View File

@ -1,18 +1,82 @@
\section{Definitions} \section{Introduction}
\textit{Lambda calculus} is a model of computation, much like the Turing machine.
As we're about to see, it works in a fundamentally different way, which has a few
practical applications we'll discuss at the end of class.
\generic{$\lm$ Notation:} \vspace{2mm}
$\lm$ notation is used to define functions, and looks like $(\lm ~ \text{input} ~ . ~ \text{output})$. \par
Consider the following statement:
$$
I = \lm a . a
$$
This tells us that $I$ is a function that takes its input, $a$, to itself. We'll call this the \textit{identity function}.
To apply functions, put them next to their inputs. We'll omit the usual parentheses to save space.
A lambda function starts with a lambda ($\lm$), followed by the names of any inputs used in the expression,
followed by the function's output.
For example, $\lm x . x + 3$ is the function $f(x) = x + 3$ written in lambda notation.
\vspace{4mm}
Let's disect $\lm x . x + 3$ piece by piece:
\begin{itemize}[itemsep=3mm]
\item \say{$\lm$} tells us that this is the beginning of an expression. \par
$\lm$ here doesn't have a special value or definition; \par
it's just a symbol that tells us \say{this is the start of a function.}
\item \say{$\lm x$} says that the variable $x$ is \say{bound} to the function (i.e, it is used for input).\par
Whenever we see $x$ in the function's output, we'll replace it with the input of the same name.
\vspace{1mm}
This is a lot like normal function notation: In $f(x) = x + 3$, $(x)$ is \say{bound}
to $f$, and we replace every $x$ we see with our input when evaluating.
\item The dot tells us that what follows is the output of this expression. \par
This is much like $=$ in our usual function notation: \par
The symbols after $=$ in $f(x) = x + 3$ tell us how to compute the output of this function.
\end{itemize}
\problem{}
Rewrite the following functions using this notation:
\begin{itemize}
\item $f(x) = 7x + 4$
\item $f(x) = x^2 + 2x + 1$
\end{itemize}
\vfill
\pagebreak
To evaluate $\lm x . x + 3$, we need to input a value:
$$ $$
(I~\star) = (\lm x . x + 3)~5
(\lm \tzm{b}a. a)~\tzmr{a}\star = $$
\star This is very similar to the usual way we call functions: we usually write $f(5)$. \par
Above, we define our function $f$ \say{in-line} using lambda notation, \par
and we ommit the parentheses around 5 for the sake of simpler notation.
\vspace{2mm}
We evaluate this by removing the \say{$\lm$} prefix and substituting $3$ for $x$ wheverever it appears:
$$
(\lm x . \tzm{b}x + 3)~\tzmr{a}5 =
5 + 3 = 8
\begin{tikzpicture}[ \begin{tikzpicture}[
overlay, overlay,
remember picture, remember picture,
@ -24,10 +88,89 @@ $$
(a.center) to (b.center); (a.center) to (b.center);
\end{tikzpicture} \end{tikzpicture}
$$ $$
Functions are left-associative: If $A$ and $B$ are functions, $(A~B~\star)$ is equivalent to $((A~B)~\star)$.
As usual, we'll use parentheses to group terms if we want to override this order: $(A~(B~\star)) \neq (A~B~\star)$ \par
In this handout, all types of parentheses ( $(), [~],$ etc ) are equivalent.
\problem{}
Evaluate the following:
\begin{itemize}[itemsep = 2mm]
\item $(\lm x. 2x + 1)~4$
\item $(\lm x. x^2 + 2x + 1)~3$
\item $(\lm x. (\lm y. 9y) x + 3)~2$ \par
\hint{
This function has a function inside, but the evaluation process doesn't change. \\
Replace all $x$ with 2 and evaluate again.
}
\end{itemize}
\vfill
As we saw above, we denote function application by simply putting functions next to their inputs. \par
If we want to apply $f$ to $5$, we write \say{$f~5$}, without any parentheses around the function's argument.
\vspace{4mm}
You may have noticed that we've been using arithmetic in the last few problems.
This isn't fully correct: addition is not defined in lambda calculus. In fact, nothing is defined:
not even numbers!
In lambda calculus, we have only one kind of object: the function.
The only action we have is function application, which works by just like the examples above.
\vspace{2mm}
Don't worry if this sounds confusing, we'll see a few examples soon.
\pagebreak
\definition{}
The first \say{pure} functions we'll define are $I$ and $M$:
\begin{itemize}
\item $I = \lm x . x$
\item $M = \lm x . x x$
\end{itemize}
Note that $I$ and $M$ don't have a meaning on their own. They are not formal functions. \par
Rather, it's notation that says \say{write $\lm x.x$ whenever you see $I$.}
\problem{}
Reduce the following expressions.
\begin{itemize}[itemsep=2mm]
\item $I~I$
\item $(I~I)~I$
\item $\Bigl(~ \lm a .(a~(a~a)) ~\Bigr) ~ I$
\item $\Bigl(~(\lm a . (\lm b . a)) ~ M~\Bigr) ~ I$
\end{itemize}
\vfill
In lambda calculus, functions are left-associative: \par
$(f~g~h)$ is equivalent to $((f~g)~h)$, not $(f~(g~h))$
As usual, we use parentheses to group terms if we want to override this order: $(f~(g~h)) \neq ((f~g)~h)$ \par
In this handout, all types of parentheses ( $(), [~],$ etc ) are equivalent.
\problem{} \problem{}
Rewrite the following expressions with as few parentheses as possible, without changing their meaning or structure. Rewrite the following expressions with as few parentheses as possible, without changing their meaning or structure.
@ -53,63 +196,6 @@ Remember that lambda calculus is left-associative.
\generic{$\beta$-Reduction:}
$\beta$-reduction is a fancy name for \say{simplifying an expression.} We've already done it once above,
while evaluating $(I \star)$. Let's make another function:
$$
M = \lm f . f f
$$
The function $M$ simply repeats its input. What is $(M~I)$?
$$
(M~I) =
((\lm \tzm{b}f.f f)~\tzmr{a}I) =
(I~I) =
((\lm \tzm{d}a.a)~\tzmr{c}I) =
I
\begin{tikzpicture}[
overlay,
remember picture,
out=225,
in=315,
distance=0.5cm
]
\draw[->,gray,shorten >=5pt,shorten <=3pt]
(a.center) to (b.center);
\draw[->,gray,shorten >=5pt,shorten <=3pt]
(c.center) to (d.center);
\end{tikzpicture}
$$
We cannot go any further, so we stop. Our expression is now in \textit{$\beta$-normal} or \say{reduced} form.
\problem{}
Reduce the following expressions:
\begin{itemize}
\item $I~I$
\item $I~I~I$
\item $(\lm a .(a~a~a)) ~ I$
\item $(\lm a . (\lm b . a)) ~ M ~ I$
\end{itemize}
\vfill
\pagebreak
\generic{Currying:} \generic{Currying:}