Cleanup
This commit is contained in:
parent
18a6856380
commit
dfadd23e63
@ -29,7 +29,7 @@ $$
|
||||
|
||||
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.
|
||||
In this handout, all types of parentheses ( $(), [~],$ etc ) are equivalent.
|
||||
|
||||
\vfill
|
||||
|
||||
|
@ -38,20 +38,20 @@ Write functions $\text{AND}$, $\text{OR}$, and $\text{XOR}$ that satisfy the fol
|
||||
\end{center}
|
||||
|
||||
\begin{solution}
|
||||
There's more than one way to do this, of course, but make sure the kids understand how the solutions below work.
|
||||
There's more than one way to do this, of course.
|
||||
\begin{align*}
|
||||
\text{AND} &= \lm ab . (a~b~F) = \lm ab . aba \\
|
||||
\text{OR} &= \lm ab . (a~T~b) = \lm ab . aab \\
|
||||
\text{XOR} &= \lm ab . (a~ (\text{NOT}~b) ~b)
|
||||
\end{align*}
|
||||
|
||||
It may be worth mentioning that OR $= \lm ab.(M~a~b)$ is also a solution.
|
||||
Another clever solution is $\text{OR} = \lm ab.(M~a~b)$
|
||||
\end{solution}
|
||||
|
||||
\vfill
|
||||
|
||||
\problem{}
|
||||
To complete our boolean algebra, write the boolean equality check EQ. \par
|
||||
To complete our boolean algebra, construct the boolean equality check EQ. \par
|
||||
What inputs should it take? What outputs should it produce?
|
||||
|
||||
\begin{solution}
|
||||
|
@ -1,6 +1,6 @@
|
||||
\section{Numbers}
|
||||
|
||||
Since the only objects we have in $\lm$-calculus are functions, it's natural to think of quantities as \textit{adverbs} (once, twice, thrice,...) rather than \textit{nouns} (one, two, three ...)
|
||||
Since the only objects we have in $\lm$ calculus are functions, it's natural to think of quantities as \textit{adverbs} (once, twice, thrice,...) rather than \textit{nouns} (one, two, three ...)
|
||||
|
||||
\vspace{1ex}
|
||||
|
||||
@ -9,7 +9,7 @@ Here's our \textit{don't} function: given a function and an input, don't apply t
|
||||
$$
|
||||
0 = \lm fa.a
|
||||
$$
|
||||
If you look closely, you'll find that $0$ is $\alpha$-equivalent to the false function $F$.
|
||||
If you look closely, you'll find that $0$ is equivalent to the false function $F$.
|
||||
|
||||
\problem{}
|
||||
Write $1$, $2$, and $3$. We will call these \textit{Church numerals}.\hspace{-0.5ex}\footnotemark{} \\
|
||||
@ -29,16 +29,8 @@ Write $1$, $2$, and $3$. We will call these \textit{Church numerals}.\hspace{-0.
|
||||
|
||||
\vspace{1ex}
|
||||
|
||||
The round parentheses are \textit{essential}. Our lambda calculus is left-associative!
|
||||
|
||||
\vspace{2ex}
|
||||
|
||||
Also, notice that $1$ is very similar to $I$:
|
||||
$$
|
||||
I~\heartsuit~\star = 1~\heartsuit~\star
|
||||
$$
|
||||
|
||||
Zero is false, and one is the identity. Isn't that wonderful?
|
||||
The round parentheses are \textit{essential}. Our lambda calculus is left-associative! \par
|
||||
Also, note that zero is false and one is the (two-variable) identity.
|
||||
\end{solution}
|
||||
|
||||
\vfill
|
||||
@ -111,7 +103,6 @@ Define a function ADD that adds two Church numerals.
|
||||
\vfill
|
||||
|
||||
\problem{}
|
||||
Adding is nice, but we can do better. \par
|
||||
Design a function MULT that multiplies two numbers. \par
|
||||
\hint{The easy solution uses ADD, the elegant one doesn't. Find both!}
|
||||
|
||||
@ -139,10 +130,9 @@ $NZ$ does the opposite. $Z$ and $NZ$ should look fairly similar.
|
||||
\vfill
|
||||
|
||||
\problem{}
|
||||
Data structures will be useful. Design an expression PAIR that constructs two-value tuples. \par
|
||||
Design an expression PAIR that constructs two-value tuples. \par
|
||||
For example, say $A = \text{PAIR}~1~2$. Then, \par
|
||||
$(A~T)$ should reduce to $1$ \par
|
||||
$(A~F)$ should reduce to $2$
|
||||
$(A~T)$ should reduce to $1$ and $(A~F)$ should reduce to $2$.
|
||||
|
||||
\begin{solution}
|
||||
$\text{PAIR} = \lm ab . \lm i . (i~a~b) = \lm abi.iab$
|
||||
@ -150,7 +140,7 @@ $(A~F)$ should reduce to $2$
|
||||
|
||||
\vfill
|
||||
From now on, I'll write (PAIR $A$ $B$) as $\langle A,B \rangle$. \par
|
||||
Like currying, this is only notation. The underlying $\lm$ logic remains the same.
|
||||
Like currying, this is only notation. The underlying logic remains the same.
|
||||
|
||||
\pagebreak
|
||||
|
||||
@ -160,7 +150,7 @@ It does exactly what it says on the tin:
|
||||
|
||||
\vspace{1ex}
|
||||
|
||||
Given an input pair, it should shift its right argument left, then add one. \par
|
||||
Given an input pair, it should shift its second argument left, then add one. \par
|
||||
$H~\langle 0, 1 \rangle$ should reduce to $\langle 1, 2\rangle$ \par
|
||||
$H~\langle 1, 2 \rangle$ should reduce to $\langle 2, 3\rangle$ \par
|
||||
$H~\langle 10, 4 \rangle$ should reduce to $\langle 4, 5\rangle$
|
||||
@ -176,7 +166,7 @@ $H~\langle 10, 4 \rangle$ should reduce to $\langle 4, 5\rangle$
|
||||
|
||||
\vfill
|
||||
|
||||
\problem{}
|
||||
\problem{}<decrement>
|
||||
Design a function $D$ that un-does $S$. That means \par
|
||||
$D(1) = 0$, $D(2) = 1$, etc. $D(0)$ should be zero. \par
|
||||
\hint{$H$ will help you make an elegant solution.}
|
||||
|
@ -8,12 +8,13 @@ $$
|
||||
\end{cases}
|
||||
$$
|
||||
|
||||
We cannot re-create this in lambda notation. Functions in lambda calculus are \textit{anonymous}, which means we can't call them before they've been fully defined.
|
||||
We cannot re-create this in lambda calculus, since we aren't given a way to recursively call functions.
|
||||
|
||||
\vspace{1ex}
|
||||
\vspace{2mm}
|
||||
|
||||
As an example, consider the statement $A = \lm a. A~a$ \par
|
||||
This means \say{write $(\lm a.A~a)$ whenever you see $A$.} However, $A$ is \textit{inside} what we're rewriting. We'd fall into infinite recursion before even starting our $\beta$-reduction!
|
||||
One could think that $A = \lm a. A~a$ is a recursive function. In fact, it is not. \par
|
||||
Remember that such \say{definitions} aren't formal structures in lambda calculus. \par
|
||||
They're just shorthand that simplifies notation.
|
||||
|
||||
\begin{instructornote}
|
||||
We're talking about recursion, and \textit{computability} isn't far away. At one point or another, it may be good to give the class a precise definition of \say{computable by lambda calculus:}
|
||||
@ -29,12 +30,12 @@ This means \say{write $(\lm a.A~a)$ whenever you see $A$.} However, $A$ is \text
|
||||
|
||||
\problem{}
|
||||
Write an expression that resolves to itself. \par
|
||||
\note{Your answer should be short and sweet.}
|
||||
\note{Your answer should be quite short.}
|
||||
|
||||
\vspace{1ex}
|
||||
|
||||
This expression is often called $\Omega$, after the last letter of the Greek alphabet. \par
|
||||
$\Omega$ useless on its own, but gives us a starting point for recursion.
|
||||
$\Omega$ useless on its own, but it gives us a starting point for recursion.
|
||||
|
||||
\begin{solution}
|
||||
$\Omega = M~M = (\lm x . xx) (\lm x . xx)$
|
||||
|
@ -9,7 +9,7 @@ Design a recursive factorial function using $Y$.
|
||||
|
||||
\problem{}
|
||||
Design a non-recursive factorial function. \par
|
||||
\note{This one is a lot easier than \ref{Yfac}, but I don't think it will help you solve it.}
|
||||
\note{This one is easier than \ref{Yfac}, but I don't think it will help you solve it.}
|
||||
|
||||
\problem{}
|
||||
Using pairs, make a \say{list} data structure. Define a GET function, so that $\text{GET}~L~n$ reduces to the nth item in the list.
|
||||
@ -17,7 +17,7 @@ $\text{GET}~L~0$ should give the first item in the list, and $\text{GET}~L~1$, t
|
||||
Lists have a defined length, so you should be able to tell when you're on the last element.
|
||||
|
||||
\problem{}
|
||||
Write POW $a$ $b$, which raises $b$ to the $a$th power.
|
||||
Solve \ref{decrement} without using $H$.
|
||||
|
||||
\problem{}
|
||||
Write a MOD $a$ $b$ function that reduces to the remainder of $a \div b$.
|
||||
@ -66,7 +66,7 @@ Write a MOD $a$ $b$ function that reduces to the remainder of $a \div b$.
|
||||
\say{item} is the thing you're storing \par
|
||||
\say{next...} is another one of these list fragments.
|
||||
|
||||
It doesn't matter what \say{next} is in the last list fragment. A dedicated \say{is last} slot allows us to store ANY function in this list.
|
||||
It doesn't matter what \say{next} is in the last list fragment. A dedicated \say{is last} slot allows us to store arbitrary functions in this list.
|
||||
|
||||
\vspace{1ex}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user