>>> # ===== Standard Library =====
# SK Pack
S = λx. λy. λz. x z (y z)
K = λx. λy. x
I = S K K
ι = λf. (f S) K
# Boolean Pack
T = λx. λy. x
F = λx. λy. y
IfThenElse = λe. λu. λv.e u v
# List Pack
Nil = λc. λn. n
Cons = λh. λt. λc. λn. c h (t c n)
# Natural Number Pack
0 = λf. λs. s
1 = λf. λs. f s
2 = λf. λs. f (f s)
3 = λf. λs. f (f (f s))
IsZero = λn. n (λx. F) T
Succ = λn. λf. λs. f (n f s)
Plus = λn. λm. n Succ m
Mul = λn. λm. n (Plus m) 0
Prev = λn. λf. λx. n (λg. λh. h (g f)) (λu. x) λu. u
# High Order Functions
# TODO
# Recursion
Ω = λx. x x
Y = λf. (λx. f (x x)) λx. f (x x)
Z = λf. (λx. f (λy. (x x) y)) (λx. f (λy. (x x) y))
Fact = λf. λn. IfThenElse (IsZero n) 1 (Mul n (f (Prev n)))
# ===== Test =====
@eval write_your_expr_here