編碼的方式是找一個只有兩個物件 1,T
的 category M
,讓 lambda calculus 的 terms 是 M
-morphisms,這些技巧在 Categorical semantic 領域內相當常見。
到這裡必須檢查 lambda calculus 確實存在 point-surjective,歡迎自行嘗試。
按此編碼後可以得到 ev∘⟨ϕ∘p,p⟩encodeϕ(p)(p)
。套到等式上
f∘ev∘⟨ϕ∘p,p⟩=ev∘⟨ϕ∘p,p⟩
可以得到以下編碼
f(ϕ(p)(p))=ϕ(p)(p)
把 ϕ(p)
改寫成 q
,於是等式可以寫成 q(p)=f(ϕ(p)(p))
,而函數套用語法可以用 λ
退化,於是得到
q=λx.f(ϕ(x)(x))
注意到 q
的定義是非遞迴的,因此一定是可定義的。
計算即可發現確實 q(p)=ϕ(p)(p)=f(ϕ(p)(p))
。因為所有的 λ
-term 都屬於 T
,所以現在我們知道任何 lambda calculus 的函數都有不動點。