Aを静的に型付けされることになっているチューリング完全言語とし、A'を型チェックを削除したときにAから取得する言語とします(ただし、他の目的にも役立つため、型注釈は使用しません)。Aの受け入れられたプログラムは、A'の受け入れられたプログラムのサブセットになります。したがって、特に、A'もチューリング完全になります。
翻訳者PがBからAに(およびその逆に)与えられます。それは何をすることになっていますか?次の2つのいずれかを実行できます。
まず、BのすべてのプログラムyをAのプログラムに変換できます。この場合、Aのプログラムは定義上正しく入力されているため、LPyは常にTrueを返します。
第二に、PはBのすべてのプログラムyをA'のプログラムに変換できます。この場合、LPyはPyがAのプログラムである場合はTrueを返し、そうでない場合はFalseを返します。
最初のケースでは興味深いものは何も得られないので、2番目のケースに固執しましょう。これはおそらくあなたが言っていることです。Bのプログラムで定義された関数LPは、Bのプログラムについて何か面白いことを教えてくれますか?Pの変化の下で不変ではないので、私はノーと言います。Aはチューリング完全であるため、2番目の場合でも、そのイメージがたまたまAにあるようにPを選択できます。LPは常にTrueになります。一方、Pは、一部のプログラムがA'のAの補集合にマップされるように選択できます。この場合、LPはBの一部の(おそらくすべての)プログラムに対してFalseを吐き出します。ご覧のとおり、yのみに依存するものは何も得られません。
私はそれをより数学的に次のように言うこともできます:オブジェクトがプログラミング言語であり、射が1つのプログラミング言語から別のプログラミング言語への翻訳者であるプログラミング言語のカテゴリーCがあります。特に、射P:X-> Yがある場合、Yは少なくともXと同じくらい表現力があります。チューリング完全言語の各ペアの間には、両方向に射があります。CのオブジェクトXごとに(つまり、プログラミング言語ごとに)、Xのプログラムによって計算できる部分的に定義された関数の{X}(悪い表記、私は知っています)などの関連するセットがあります。各射P:X- > Yは、セットの包含{X}->{Y}を誘導します。アイデンティティ{X}->{Y}を誘発するすべての射P:X->Yを正式に反転させましょう。結果のカテゴリを呼び出します(数学的には、C'によるC)のローカリゼーション。ここで、包含A->A'はC'の射です。ただし、A'の自己同型では保存されません。つまり、射A->A'はC'のA'の不変量ではありません。言い換えると、この抽象的な観点から、「静的に型付けされた」属性は定義できず、言語に任意に付加できます。
私の主張をより明確にするために、C'は、たとえば、射としてのユークリッド運動とともに、3次元空間の幾何学的形状のカテゴリーと考えることもできます。その場合、A'とBは2つの幾何学的形状であり、PとQはBをA'に、またはその逆にもたらすユークリッド運動です。たとえば、A'とBは2つの球である可能性があります。ここで、A'のサブセットAを表すA'上の点を修正しましょう。この点を「静的型付け」と呼びましょう。Bのポイントが静的に型付けされているかどうかを知りたいです。したがって、そのような点yを取り、Pを介してA'にマッピングし、それがA'上のマークされた点であるかどうかをテストします。簡単にわかるように、これは選択したマップPに依存します。言い換えると、球上のマークされた点は、その球の自己同型(球をそれ自体にマップするユークリッド運動)によって保持されません。