let IDENTITY = \x.x ;
let TRUE = \x.\y.x;
let FALSE = \x.\y.y;
let NOT = \t. t FALSE TRUE;
let IFTHENELSE = \x.\y.\z. x y z;
let AND = \x.\y. x y FALSE;
let FST = \x. x TRUE;
let SND = \x. x FALSE;
let PAIR= \x.\y.\p. p x y;
let SUC = \n.\f.\x. n f (f x);
let SUM = \m.\n.\f.\x. m f (n f x);
let PRODUCT = \m.\n.\f.\x. m (n f) x;
let ISZERO = \n. n (\x. FALSE) TRUE;
let PREFN = \f.\p.(PAIR FALSE (IFTHENELSE (FST p) (SND p) (f (SND p))));
let PREC = \n.\f.\x. SND (n (PREFN f) (PAIR TRUE x));
let Y = \f.(\x. f (x x)) (\x.f (x x));
let T = (\x.(\y. y (x x y))) (\x.(\y. y (x x y)));
let FACT = T (\f.\n.  (IFTHENELSE (ISZERO n) 1 (PRODUCT n (f (PREC n)))));



let 0 = \f.\x. x;
let 1 = \f.\x. f x;
let 2 = \f.\x. f (f x);
let 3 = \f.\x. f (f (f x));
let 4 = \f.\x. f (f (f (f x)));
let 5 = \f.\x. f (f (f (f (f x))));
let 6 = \f.\x. f (f (f (f (f (f x)))));
let 7 = \f.\x. f (f (f (f (f (f (f x))))));
let 8 = \f.\x. f (f (f (f (f (f (f (f x))))))); 
let 9 = \f.\x. f (f (f (f (f (f (f (f (f x))))))));
let 10 = \f.\x. f (f (f (f (f (f (f (f (f (f x)))))))));
let 11 = \f.\x. f (f (f (f (f (f (f (f (f (f (f x))))))))));
let 12 = \f.\x. f (f (f (f (f (f (f (f (f (f (f (f x)))))))))));
let 13 = \f.\x. f (f (f (f (f (f (f (f (f (f (f (f (f x))))))))))));
let 14 = \f.\x. f (f (f (f (f (f (f (f (f (f (f (f (f (f x)))))))))))));
let 15 = \f.\x. f (f (f (f (f (f (f (f (f (f (f (f (f (f (f x))))))))))))));
let 16 = \f.\x. f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f x)))))))))))))));
let 17 = \f.\x. f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f x))))))))))))))));
let 18 = \f.\x. f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f x)))))))))))))))));
let 19 = \f.\x. f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f x))))))))))))))))));
let 20 = \f.\x. f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f x)))))))))))))))))));