diff --git a/Advanced/Lambda Calculus/main.tex b/Advanced/Lambda Calculus/main.tex index 697a8fb..c331a35 100755 --- a/Advanced/Lambda Calculus/main.tex +++ b/Advanced/Lambda Calculus/main.tex @@ -2,12 +2,11 @@ % use [solutions] flag to show solutions. \documentclass[ solutions, - singlenumbering, - shortwarning + singlenumbering ]{../../resources/ormc_handout} -\usepackage{url} \usepackage{mathtools} % for \coloneqq +\usepackage{hyperref} % An invisible marker, used to % draw arrows in equations. @@ -37,7 +36,7 @@ \uptitlel{Advanced 2} -\uptitler{Fall 2022} +\uptitler{Fall 2023} \title{Lambda Calculus} \subtitle{Prepared by Mark on \today{}} diff --git a/Advanced/Lambda Calculus/parts/00 intro.tex b/Advanced/Lambda Calculus/parts/00 intro.tex index a28e14e..10b74b0 100755 --- a/Advanced/Lambda Calculus/parts/00 intro.tex +++ b/Advanced/Lambda Calculus/parts/00 intro.tex @@ -114,7 +114,13 @@ Reduce the following expressions: \generic{Currying:} In lambda calculus, functions are only allowed to take one argument. -However, we can emulate multivariable functions through \textit{currying}. +However, we can emulate multivariable functions through \textit{currying}\footnotemark{}\hspace{-1ex}. + +\footnotetext{After Haskell Brooks Curry\footnotemark{}\hspace{-1ex}, a logician that contributed to the theory of functional computation.} +\footnotetext{ + There are three programming languages named after him: Haskell, Brook, and Curry. \par + Two of these are functional, and one is an oddball GPU language last released in 2007. +} \vspace{1ex} diff --git a/Advanced/Lambda Calculus/parts/02 boolean.tex b/Advanced/Lambda Calculus/parts/02 boolean.tex index cca5457..b4b051b 100755 --- a/Advanced/Lambda Calculus/parts/02 boolean.tex +++ b/Advanced/Lambda Calculus/parts/02 boolean.tex @@ -1,6 +1,7 @@ \section{Boolean Algebra} -The Kestrel selects its first argument, and the Kite selects its second. This \say{choosing} behavior is similar to something you may have already seen... +The Kestrel selects its first argument, and the Kite selects its second. \par +Maybe we can somehow put this \say{choosing} behavior to work... \vspace{1ex} @@ -18,6 +19,14 @@ Write a function $\text{NOT}$ so that $(\text{NOT} ~ T) = F$ and $(\text{NOT}~F) \vfill +\problem{} +How would \say{if} statements work in this model of boolean logic? \par +Say we have a boolean $B$ and two expressions $E_T$ and $E_F$. +Can we write a function that evaluates to $E_T$ if $B$ is true, and to $E_F$ otherwise? + +\vfill +\pagebreak + \problem{} Write functions $\text{AND}$, $\text{OR}$, and $\text{XOR}$ that satisfy the following table. @@ -62,5 +71,7 @@ What inputs should it take? What outputs should it produce? $\text{EQ} = \lm ab . [\text{NOT}~(\text{XOR}~a~b)]$ \end{solution} + \vfill + \pagebreak \ No newline at end of file diff --git a/Advanced/Lambda Calculus/parts/04 recursion.tex b/Advanced/Lambda Calculus/parts/04 recursion.tex index 309d081..d7a1bf4 100755 --- a/Advanced/Lambda Calculus/parts/04 recursion.tex +++ b/Advanced/Lambda Calculus/parts/04 recursion.tex @@ -1,4 +1,77 @@ \section{Recursion} + + +%\iftrue +\iffalse + + You now have a choice. Choose wisely --- there's no going back. + + \begin{tcolorbox}[ + breakable, + colback=white, + colframe=gray, + arc=0pt, outer arc=0pt + ] + \raggedright + \textbf{Take the red pill:} You stay on this page and try to solve \ref{thechallenge}. \par + This will take a while, and it's very unlikely you'll finish before class ends. + + + \vspace{4mm} + + I strongly prefer this option. It's not easy, but you'll be very happy if you solve it yourself. + This is a chance to build your own solution to a fundamental problem in this field, just as + Curry, Church, and Turing did when first developing the theory of lambda calculus. + + - Mark + \end{tcolorbox} + + \begin{tcolorbox}[ + breakable, + colback=white, + colframe=gray, + arc=0pt, outer arc=0pt + ] + \textbf{Take the blue pill:} You skip this problem and turn the page. + Half of the answer to \ref{thechallenge} will be free, and the rest will be + broken into smaller steps. This is how we usually learn out about interesting + mathematics, both in high school and in university. + + \vspace{2mm} + + This path isn't as rewarding as the one above, but it is well-paved + and easier to traverse. + \end{tcolorbox} + + \problem{} + Can you find a way to recursively call functions in lambda calculus? \par + Find a way to define a recursive factorial function. \par + + \note{$A = (\lm a. A~a)$ doesn't count. You can't use a macro inside itself.} + + \vfill + \pagebreak +\fi + + + + + + + + + + + + + + + + + + + + Say we want a function that computes the factorial of a positive integer. Here's one way we could define it: $$ @@ -30,7 +103,7 @@ They're just shorthand that simplifies notation. \problem{} Write an expression that resolves to itself. \par -\note{Your answer should be quite short.} +\hint{Your answer should be quite short.} \vspace{1ex} @@ -45,12 +118,13 @@ $\Omega$ useless on its own, but it gives us a starting point for recursion. \pa An uninspired mathematician might call the Mockingbird $\omega$, \say{little omega}. \end{solution} - \vfill \pagebreak + + \definition{} This is the \textit{Y-combinator}. You may notice that it's just $\Omega$ put to work. $$ @@ -62,26 +136,27 @@ What does this thing do? \par Evaluate $Y f$. -\vfill -\definition{} -We say $x$ is a \textit{fixed point} of a function $f$ if $f(x) = x$. +%\vfill -\problem{} -Show that $Y F$ is a fixed point of $F$. +%\definition{} +%We say $x$ is a \textit{fixed point} of a function $f$ if $f(x) = x$. -\vfill +%\problem{} +%Show that $Y F$ is a fixed point of $F$. -\problem{} -Let $\theta = (\lm xy . y(xxy))$ and $\Theta = \theta \theta$. \par -Let $N = \Theta F$ for an arbitrary lambda expression $F$. \par +%\vfill -Show that $F N = N$. +%\problem{} +%Let $b = (\lm xy . y(xxy))$ and $B = b ~ b$. \par +%Let $N = B F$ for an arbitrary lambda expression $F$. \par -\vfill +%Show that $F N = N$. -\problem{Bonus} -Find a fixed-point combinator that isn't $Y$ or $\Theta$. +%\vfill + +%\problem{Bonus} +%Find a fixed-point combinator that isn't $Y$ or $\Theta$. \vfill \pagebreak \ No newline at end of file diff --git a/Advanced/Lambda Calculus/parts/05 challenges.tex b/Advanced/Lambda Calculus/parts/05 challenges.tex index e08e0a8..e1a3497 100755 --- a/Advanced/Lambda Calculus/parts/05 challenges.tex +++ b/Advanced/Lambda Calculus/parts/05 challenges.tex @@ -39,7 +39,8 @@ Design a non-recursive factorial function. \par \problem{} -Solve \ref{decrement} without using $H$. +Solve \ref{decrement} without using $H$. \par +In \ref{decrement}, we created the \say{decrement} function. \begin{solution} One solution is below. Can you figure out how it works? \par @@ -118,7 +119,7 @@ Write a lambda expression that evaluates to $T$ if a number $n$ is prime, and to \vfill \problem{} -Write a MOD $a$ $b$ function that reduces to the remainder of $a \div b$. +Write a function MOD so that $(\text{MOD}~a~b)$ reduces to the remainder of $a \div b$. \vfill