Binary Lambda Calculus, Binary Mode, 3 characters (ascii-encoded) ===== HR. Interpreted as incomplete segments of Binary Lambda Calculus, writing `\` for lambda, `*` for application and [De Bruijn indices](https://en.wikipedia.org/wiki/De_Bruijn_index) for variables: H = 01001000 = * \ 1 \ R = 01010010 = * * \ 1 . = 00101110 = \ 1 3 Suppose `x` and `y` are valid terms. Then, H x = * \ 1 \ x = \ x R x y = * * \ 1 x y = * x y R . = * . = * \ 1 3 = 3 Thus we can use `H` as `\`, `R` as `*`, and `R.` as `3`. For `2` and `1`, suppose we have any valid term `z`. Then, * \ 3 z = 2 * \ 2 z = 1 (Free variables get decremented in beta-reduction with De Bruijn indices) As for the choice of `z`, we can use `z = \ \ \ 3` (or if we allow free variables in our program, we can just use `3`). Finally, to show we don't need more than 3 variables, we can implement [SKI combinator calculus](https://en.wikipedia.org/wiki/SKI_combinator_calculus): I = \ 1 K = \ \ 2 S = \ \ \ * * 3 1 * 2 1 Written using our 3 characters, these are I = HRHRHR.HHHR.HHHR. K = HHRHR.HHHR. S = HHHRRR.RHRHR.HHHR.HHHR.RRHR.HHHR.RHRHR.HHHR.HHHR. Which can be applied to each other in arbitrary ways using `R`.