System Fが計算できないのはどの関数ですか?


28

チューリング完全性について、このWikipediaの記事には、と述べています:

型付けされていないラムダ計算はチューリング完全ですが、システムFを含む多くの型付けされたラムダ計算はそうで​​はありません。型付きシステムの価値は、より多くのエラーを検出しながら、最も典型的なコンピュータープログラムを表す能力に基づいています。

システムFで計算できない合計計算可能関数の例は何ですか?

さらに、hindley-milnerは次のとおりです。

System Fの制限

以下の事実のため:

System FのCurryスタイルのバリアント、つまり明示的なタイピングアノテーションのないタイプでは、タイプチェックは決定できません。

これは、ヒンドレー・ミルナー型システムの基礎となるラムダ計算が完全にチューリングされていないことを意味していますか?

これが本当なら、haskellは明らかに完全なチューリングであり、その基礎はラムダ計算とhindley-milner型システムであることがわかっているので、λ計算に存在しない機能はhaskellチューリングを完了するために追加されますか?


4
同様:http
cody

Haskellのチューリングを完全にする機能の例は、ネイティブコードインターフェイスです。
トリメジストス

@cody、コメントありがとう。私はそれがあると仮定してシステムT.アムIの右側に慣れていないよTは、ここに記載のシステム?システムTはシステムFとどのように比較対照されますか?
マイクHR

NOTE、のためにグーグルにsystem T vs. system F私は私の最後の設問に答える何か見つけ方法は、HaskellのシステムFにチューリング完全性を追加しました:として、ここで言い換えている
マイクHR

1
@Trismegistosは興味深い哲学的問題を提起していると思います:Haskellとは正確には何ですか、その境界はどこですか?
マーティンバーガー

回答:


45

FNNNX. X(XX)XNNHA2

TFeval:NNtFt。証明には、停止問題の決定不能性に使用される対角化トリックの変形が含まれます。Andrejがここで美しく説明します

λF λ

YY

Haskell Turingを完全にする他の機能がありますが、それらは通常、コア言語の一部とは見なされません。たとえば、関数への参照、無制限のデータ型などです。


1
うわー、これは驚くべき答えであり、すべてに完璧に答えます。ありがとうございました!
マイクHR

「すべてのプログラミング言語については...」これはまったく正しくありません。私の理解では、終了しないプログラムを不正なタイプとして除外することで機能する、全言語用のいくつかの自己通訳があります。参照してください。このホワイトペーパー
jmite

述べたように、@ jmite、私の主張は正しいです。その論文はリンクされた議論で言及されており、Andrejは彼のブログでいくつかのフォローアップのコメントを持っています:math.andrej.com/2016/01/04/…–
cody

11

Haskellのタイピングシステムが「hinley-milnerタイプシステム」であると言うのはやや誤解を招きます。Haskellの型ははるかに強力で、他の種類よりも種類が多くなっています。実際、タイピングシステムは非常に強力なので、チューリング完全なプログラミング言語をタイピングシステムに組み込むことができますこちらを参照してください。これがHaskellの力の唯一の理由ではない、コーディは他のいくつかに言及した。


ありがとう。hindley-milnerへの私の主な露出はhaskellを介して行われたので、より高い種類の型がその一部であると推測したかもしれません。hindley-milnerは単純に型推論を参照していますか(アルゴリズムWの可能性が最も高いですか)。それとももっと何か?私はラムダ計算にそれの数学的な基礎があることを理解しています、私はhaskellの強力な型システムと「hindley-milner型システム」の最小限の実装との間の論理的境界がどこにあるかを理解しようとしています。
マイクHR

注:haskell型システムのパワーに興味がある人は、haskell型システムを使用してカテゴリ理論を掘り下げ(深く)する、haskに関するEdward Kmettのビデオをお勧めします。
マイクHR

1
λW
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.