Lambda calculus challenges for ASU Undergrads
TL;DR
This was a challenge written for a programming languages and compilers course at ASU. This is meant to test your skill in lambda calculus.Rules
This challenge is broken into three parts, each with growing difficulty. To complete these challenges you ARE NOT expected to re-write common lambda calculus functions such as:
pred
succ
pair
fst
snd
tru
fls
church numerals
...
You get the idea. All common lambda functions are game and do not need to be expanded to lambda header form. For a more expansive list of common Lambda functions check out the CSE340 lectures. TODO: Add an external link here, open to suggestions.
Challenge Description
Consider a stack implementation in \(\lambda\)-calculus using pairs:
(a, (b, (c, (d, fls) ) ) )
We define a stack to recursively have the form:
stack = (element, stack_body)
To put this in a legitimate syntax, we can say:
stack = pair element stack_body
A stack body is empty if it is fls
. Otherwise, the stack_body
will follow
the same form.
Part 1
Any good stack should have a basic function, poping! Write a pop
function that
gets the element on the top of the stack.
For instance:
pop (a, (b, (c, (d, fls) ) ) ) -> a
If a stack is empty, return fls
.
Part 2
How can we pop things if we can’t push things! Write a push
function that,
when given a stack and element, pushes the element on the stack.
For instance:
push a (b, (c, (d, fls) ) ) ) -> (a, (b, (c, (d, fls) ) ) )
If a stack is empty, return (pair element fls)
.
Part 3
Time to turn up the heat! Now that we have a working stack, let’s get a little
creative with it. Write a reverse
function that reverses the entire stack.
For instance:
reverse (a, (b, (c, (d, fls) ) ) ) -> (d, (c, (b, (a, fls) ) ) )
If a stack is empty, return fls
.
Part 4
This will be the holy grail of the challenges. Write a sort
function that
fully sorts a stack, assuming the stack is full of church numerals.
For instance:
sort (7, (3, (1, (3, fls) ) ) ) -> (1, (3, (3, (7, fls) ) ) )
If a stack is empty, return fls
.
Solutions
The solutions will be provided on request, or posted here if it becomes too pain staking to give everyone the solution. Good luck!