def LIST map suc(append 2(append 1 end))
def mknode (^a.^b.^u.u a b false)
def head (^n.n sel_1)
def tail (^n.n sel_2)
def is_end (^n.n sel_3)
def sel_1 (^p.^q.^r.p)
def sel_2 (^p.^q.^r.q)
def sel_3 (^p.^q.^r.r)
def nth ^n.^list.head((pred n) tail list)
def renda ^e.^&u.&u e e true
def rend (^x.renda(x x))(^x.renda(x x))
def nend ^u.u 0 0 true
def end ^&u.&u rend rend true
def Appenda ^h.^n.^list.(is_end list)(mknode n end)(mknode(head list)(h n(tail list)))
def append (^x.Appenda(x x))(^x.Appenda(x x))
def Mapa ^h.^f.^list.(is_end list)(end)(mknode(f (head list))(h f (tail list)))
def map (^x.Mapa(x x))(^x.Mapa(x x))
def mtriple ^a.^b.^c.^u.u a b c
def 1st ^a.^b.^c.a
def 2nd ^a.^b.^c.b
def 3rd ^a.^b.^c.c
def div_cond ^p.GE(p 1st)(p 2nd)
def div_body ^t.mtriple(sub (t 1st)(t 2nd))(t 2nd)(suc(t 3rd))
def div ^m.^n.while div_cond div_body (mtriple m n 0)3rd
def sub ^m.^n.n pred m
def force ^$.$
def pred_body ^p.mpair (suc(p true))(p true)
def do ^n.^b.^x.n b x
def c1 ^p.not(iszero(p true))
def btri ^p.mpair(pred(p true))(add(p true)(p false))
def tri ^k.while c1 btri(mpair k 0)false
def Wh ^f.^c.^b.^x.(c x) (f c b (b x)) x
def while (^x.Wh(x x))(^x.Wh(x x))
def G ^g.^f.f(g f)
def Y2d Y G
def Y2 (^x.G(x x))(^x.G(x x))
def Y3 Y2 G
def Y4 Y3 G
def Y5 Y4 G
def YC S(S(K PHI)I)(S(K PHI)I)
def PHI  S(K W)(S(K B)I)
def W ^f.^x.f x x
def S ^x.^y.^z.x z(y z)
def B ^x.^y.^z.x(y z)
def K ^x.^y.x
def I ^x.x
def true ^p.^q.p
def false ^p.^q.q
def and ^a.^b.a b false
def or ^a.^b.a true b
def not ^r.^p.^q.r q p
def mpair ^a.^b.^u.u a b
def iszero ^n. n (true false) true
def pred ^$k.$k(^p.(mpair(suc(p true))(p true)))(mpair 0 0)false
def add ^m.^n.m suc n
def mul ^m.^n.m(add n)0
def exp ^m.^n.n(mul m)1
def Y ^f.(^x.f(x x))(^x.f(x x))
def F ^h.^n.(iszero n) 1 (mul n (h(pred n)))
def fact (^x.F(x x))(^x.F(x x))
def H ^h.or(not h)A
def ADD ^m.^n.^x.^y.m x(n x y)
def MUL ^m.^n.^f.m(n f)
def EXP ^m.^n.n m
def GT ^m.^n.not(iszero (n pred m))
def EQ ^m.^n.and (iszero (m pred n)) (iszero (n pred n))
def LT ^m.^n.not(iszero(m pred n))
def GE ^m.^n.not(LT m n)
def YH ^f.(^x.f(^h.x x h))(^x.f(^h.x x h))
def YG ^f.(^x.^g.f(x x)g)(^x.^g.f(x x)g)
def S ^x.^y.^z.x z(y z)
def K ^x.^y.x
def I ^x.x
def triple ^x.^y.^z.^p.p x y z
def sel1 ^x.^y.^z.x
def sel2 ^x.^y.^z.y
def sel3 ^x.^y.^z.z
def isend ^t.t sel3
def lpair ^a.^b.triple a b false
def B ^x.^y.^z.x(y z)
def W ^f.^x.f x x
def 0 ^m.^n.n
def suc ^p.^m.^n.m(p m n)
