このような質問に対する1つのアプローチは、エンコーディングを使用することです。
言語と言語あり、それらが何らかの形で「同じ」であることを示すには、エンコーディングを見つけることでこれを行うことができます。L 2L1L2
[[⋅]]:L1→L2
そして、すべてのプログラム、次のことが成り立つことを示します。 M 、NL1M,N
M≅1Niff[[M1]]≅2[[M2]]
ここで、はのプログラム同等性の選択された概念です。型付き言語でこれを行うには、通常、次のようなものが当てはまるような型付け環境に拡張された関数を介してタイプをマップします。≅iLiL1L2┌⋅┐
Γ⊢1M:αimplies┌Γ┐⊢2[[M]]:┌α┐
ここで、は入力判断です。アプローチ全体を
完全抽象化と呼びます。
⊢iLi
「Church-Turingの普遍性の呪い」を回避するために、通常はに条件を課します。たとえば、構成的である、または単射的な名前変更の下で閉じられるなどです。が満たす条件が多いほど、完全な抽象化結果が強くなります。[[⋅]][[⋅]]
これもオーチャードと吉田がやろうとしていることです(定理1〜5)。