All functions in lambda calculus could be reduced into following minimal functions, or combinators:
λx.xλx.cλx.yz
The first one returns its parameter unchanged. The second one returns a free variable captured from outer scope, which is considered as constant to the inner function itself. The third one provokes an application.
Don't verify these equations by hand. 会变得不幸。别问我怎么知道的。
Yes, it reach the top of minimalism! Only one combinator! Since iota calculus is so minimal, it is possible to transform it into a kind of binary tree, with iota as leaf node and application order (by functionality of parentheses) as internal node. Furthermore, the tree could be then encoded as pre-order, i. e.
iota := "1" | "0" iota iota
Which means an iota expression should be either 1 or 0, 1 stands for iota itself and 0 is followed by another two iota expressions. For example 0011011 denotes ((ιι)(ιι)), and 0101011 denotes ι(ι(ιι)).
Long long ago you might have been told that computer programs are all stored in binary form in computers. Well, now binary is here, where were you?