私の質問が理にかなっているといいのですが、型付けされていない微積分は、チューリングマシンと同等の能力であるという前提から始めて、チューリングマシンで微積分に型を追加することは何に対応しますか?静的でも動的でも、タイピングに似たオートマトンのようなものはありますか?
私の質問が理にかなっているといいのですが、型付けされていない微積分は、チューリングマシンと同等の能力であるという前提から始めて、チューリングマシンで微積分に型を追加することは何に対応しますか?静的でも動的でも、タイピングに似たオートマトンのようなものはありますか?
回答:
オートマトンについて直接答えることはできませんが、数値に関する関数についてはです。
型付きシステムの場合、システムによって当然異なります。
興味深いものは、システムFです。これは、多形ラムダ計算としても知られています。という定理があります
関数(自然数)は、関数が合計であることを2次ペアノ演算で証明できる場合にのみ、システムFで表現できます。
つまり、システムFでは、基本的に考えられるすべての合計関数を表現できます。
少し弱いシステム、ゲーデルのシステムTがあります。これには、1次ペアノ演算の非常によく似た定理があります。(ただし、このシステムはシステムFほど優れていません。システムFでは、自然数、ブール値などをネイティブに表すことができます。一方、システムTは、単純に型付けされたラムダ計算として外部から追加されたナチュラルおよびブール値として構築されます。また、システムFにはタイプ多型があります。 、多くの場合それをはるかにエレガントにします。)
以下も参照してください。
タイピングマシンでは、タイピングは何にも対応していません。ここに私の推論があります。タイピングは実際には計算とは関係なく、Turing Machinesは計算のみをモデル化します。
ほとんどの場合、プログラムのタイプは実際にはそのプログラムの実行方法に影響を与えません。むしろ、これらは2つの理由のいずれかで使用されるコンパイル時のツールです。1つは、型が正しくないプログラムをコンパイルしないようにすることです。これは純粋にコンパイル時の操作であり、結果の計算の実行方法には影響しません。
2つ目は、複数の関数に同じ名前を付けることです。これは、基礎となる計算に実際に影響を与えているのではなく、理解しやすい方法でプログラムを記述できるようにしているだけです。
型は計算のツールではありません。これらは、証明、プログラムの理解、理解しやすい方法での構造化に使用できますが、それらの存在は、計算を実行する基本的な方法を変更しません。