let Y    := map f to 
              let g := map x to f(map z to (x(x))(z));
	    in g(g);
    FACT := map f to 
	      map n to if n = 0 then 1 else n * f(n - 1);
in (Y(FACT))(3)
