These are a bunch of Lambda Calculus expressions visualized with John Tromp's diagrams (with the help of this tool by Cruz Godar), and adjusted to be more like emojis.
Download the whole pack, or read below to see them with explainations.
I release them as creative commons, and you can easily make your own with the linked tools and a bit of image editor.
For each one I'll give a preview at 20px (like on my mastodon), file name, lambda expression, what it represents, and maybe some notes.
Also they're sorted by category here.
| Emoji | File | Name | Expression | Notes |
|---|---|---|---|---|
![]() |
lambda_true.png | True | (λx.λy.x) | |
![]() |
lambda_false.png | False / 0 | (λx.λy.y) | |
![]() |
lambda_ifthenelse.png | If Then Else | (λi.λt.λe.ite) | It's more of a construct than something you'd explicitely use; see how the logic gates are built the same |
![]() |
lambda_not.png | NOT | (λa.a(λx.λy.y)(λx.λy.x)) | |
![]() |
lambda_and.png | AND | (λa.λb.ba(λx.λy.y)) | (λa.λb.ab(λx.λy.y)) would work too and be slightly different; I'm using the same as the web tool |
![]() |
lambda_or.png | OR | (λa.λb.a(λx.λy.x)b) | (λa.λb.b(λx.λy.x)a) would work too and be slightly different; I'm using the same as the web tool |
![]() |
lambda_xor.png | XOR | (λa.λb.a(b(λx.λy.y)(λx.λy.x))b) | (λa.λb.b(a(λx.λy.y)(λx.λy.x))a) would work too and be slightly different |
![]() |
lambda_nand.png | NAND | (λa.λb.a(b(λx.λy.y)(λx.λy.x))(λx.λy.x)) | (λa.λb.b(a(λx.λy.y)(λx.λy.x))(λx.λy.x)) would work too and be slightly different |
![]() |
lambda_nor.png | NOR | (λa.λb.a(λx.λy.y)(b(λx.λy.y)(λx.λy.x))) | (λa.λb.b(λx.λy.y)(a(λx.λy.y)(λx.λy.x))) would work too and be slightly different/td> |
![]() |
lambda_xnor.png | XNOR | (λa.λb.ab(b(λx.λy.y)(λx.λy.x))) | (λa.λb.ba(a(λx.λy.y)(λx.λy.x))) would work too and be slightly different |
I excluded predecessor, substraction, division, and equals because they were wayy too big.
| Emoji | File | Name | Expression | Notes |
|---|---|---|---|---|
![]() |
lambda_1.png | 1 | (λf.λx.f(x)) | 0 is omitted because it's the same expression as False (so no repeat images) |
![]() |
lambda_2.png | 2 | (λf.λx.f(f(x))) | |
![]() |
lambda_3.png | 3 | (λf.λx.f(f(f(x)))) | |
![]() |
lambda_4.png | 4 | (λf.λx.f(f(f(f(x))))) | That's kind of pushing it and the bigger numbers are basically unreadable |
![]() |
lambda_5.png | 5 | (λf.λx.f(f(f(f(f(x)))))) | |
![]() |
lambda_6.png | 6 | (λf.λx.f(f(f(f(f(f(x))))))) | |
![]() |
lambda_7.png | 7 | (λf.λx.f(f(f(f(f(f(f(x)))))))) | |
![]() |
lambda_8.png | 8 | (λf.λx.f(f(f(f(f(f(f(f(x))))))))) | |
![]() |
lambda_9.png | 9 | (λf.λx.f(f(f(f(f(f(f(f(f(x)))))))))) | Could have stopped earlier but wanted to be complete with the ones on the web tool |
![]() |
lambda_iszero.png | Is zero? | (λn.n(λx.(λx.λy.y))(λx.λy.x)) | |
![]() |
lambda_successor.png | Successor | (λn.λf.λx.f(nf(x))) | |
![]() |
lambda_addition.png | Addition | (λa.λb.λf.λx.(af)(bfx)) | |
![]() |
lambda_multiplication.png | Multiplication | (λa.λb.λf.b(af)) | |
![]() |
lambda_exponentiation.png | Exponentiation | (λa.λb.ba) | Really using the structure of Church numerals here |
![]() |
lambda_tetration.png | Tetration | (λa.a(λb.λc.bcc)(λx.λy.y)) |
I also had some recursive operations I found but they were also way too big for emojis.
| Emoji | File | Name | Expression | Notes |
|---|---|---|---|---|
![]() |
lambda_pairing.png | Pairing | (λx.λy.λi.ixy) | |
![]() |
lambda_pairfirst.png | First element of pair | (λp.p(λx.λy.x)) | |
![]() |
lambda_pairsecond.png | Second element of pair | (λp.p(λx.λy.y)) | |
![]() |
lambda_emptylist.png | Empty list | (λa.(λx.λy.x)) | |
![]() |
lambda_islistempty.png | Is list empty? | (λa.a(λw.λz.λx.λy.y)) | Meant to be detects pairs vs that Empty list above, for making linked lists |
These are to make recursion. At that size you can't tell any one of them apart, so maybe just keep the Y for completeness.
| Emoji | File | Name | Expression | Notes |
|---|---|---|---|---|
![]() |
lambda_ycombinator.png | Y Combinator | (λf.(λx.f(xx))(λx.f(xx))) | |
![]() |
lambda_turingcombinator.png | Turing Combinator | (λx.λy.y(xxy))(λx.λy.y(xxy)) | |
![]() |
lambda_zcombinator.png | Z Combinator | (λf.(λx.f(xx))(λx.f(xx))) | This one for strict languages apparently |