This answer says
Here is a basic y-combinator in lambda calculus:
Y f = (\x -> f (x x)) (\x -> f (x x))
Ie Something like this in Clojure:
(defn Y [f]
((fn [x] (x x))
(fn [x]
(f (fn [& args]
(apply (x x) args))))))
(def fac
(fn [f]
(fn [n]
(if (zero? n) 1 (* n (f (dec n)))))))
(def fib
(fn [f]
(fn [n]
(condp = n
0 0
1 1
(+ (f (dec n))
(f (dec (dec n))))))))
Here is another expression of the y-Combinator (step 2 of the argument)
We have encoded a Turing complete language (since we used the y-Combinator) (step 3 of the argument)
My question is: Why does the y-combinator provide Turing equivalence? It seems it was just an assumption of the argument.