T x y := x F x y := y if b t e := (b t e) pair a b := \c.(c a b) left p := (p T) right p := (p F) print n := (n 0 1 end) fix f := (\x.(f (x x)) \x.(f (x x))) some x := (pair T x) none := \.F isfull := left unwrap := right nil := none push i l := (some (pair i l)) peek l := (left (unwrap l)) pop l := (right (unwrap l)) inc := (fix \self l.{ (if (isfull l) (if (peek l) (push F (self (pop l))) (push T (pop l)) ) (push T nil) ) }) print := (fix \self l.{ (if (isfull l) ((if (peek l) 1 0) (self (pop l))) END ) }) one := (push T nil) double N := (push F N) N := (double (double (double (double (double (double (double (double (double (double (double (double (double (double (double (double (double (double (double (double (double (double (double (double (double (double (double (double (double (double one)))))))))))))))))))))))))))))) (print N)