:type let f : (a -> a) -> a -> a = \g. (\x. g (g x)) in f (\x. x+x) :type let f : (a -> a) -> a -> a = \g. (\x. g (g x)) in f (\x. x-x) :type let f : (a -> a) -> a -> a = \g. (\x. g (g x)) in f (\x. x/x) :type let f : (a -> a) -> a -> a = \g. (\x. g (g x)) in f (\x. -x/x) :type \x.x :type \x, y. x :type \x, y, z. x + y + z :type \x, (y:Nat). x - y :type \w, (x:Nat), y, (z : Frac). w - x + y + z \x, (y:Bool). x - y