Yコンビネータ?

このスレより関数型言語スレの話題だと思うけど、

fact(x) = ... fact(x - 1) ...

みたいな感じで、再帰がある関数は、自分自身の定義の中に自分自身を使うわけだよね?
で、数学的に厳密な「定義」が必要な場合とか、循環定義は困るので、

fact_norec(f)(x) = ... f(x - 1) ...

みたいにして、

Y(fun) = fun(Y(fun))
(↑この定義ではここで循環定義を使っちゃってるけど、λ計算という理論では
循環定義のないものを定義できる。)
という「Yコンビネータ」を使って、

fact(x) = Y(fact_norec)

みたいに定義できる、という仕掛け。