Hindley-Milnerアルゴリズムがt1-> t2のような型を生成しないのはなぜですか?


14

私が読んだヒンドリー-ミルナータイピングアルゴリズムの実装を書いている間、あなたは常に引数は、最終的なタイプを決定する原子の種類やタイプのいずれかを取得します、限り、すべての変数がバインドされると、それを見る、などt1 -> t1(t1 -> t2) -> (t1 -> t2)ここでt1およびt2は型変数です。

私はあなたのような何かを取得したい方法を考えることはできませんt1 -> t2か、単にt1私が表現の実際の型を判別する方法がないので、アルゴリズムが壊れている意味するであろう理解し、。すべての変数がバインドされている限り、これらの「壊れた」タイプのような型を決して取得しないことをどのように確認しますか?

私はアルゴリズムが変数を持つ型を生成することを知っていますが、関数に引数を渡すと、これらは常に解決されますが、typeを持つ関数ではそうではありませんt1 -> t2。これが、アルゴリズムがそのような型を決して生成しないことを確認する方法を知りたい理由です。

MLこれらの「壊れた」型を取得できるようですが、ラムダ計算について質問しています。)

回答:


16

Hindley-Milner型システムの定数を持たないラムダ計算では、関数の結果が未解決の型変数であるような型は取得できません。すべての型変数はどこかに「起源」を持たなければなりません。たとえば、型の用語はありませんですが、型の用語があり(恒等関数)。αβαβαααλバツバツ

直感的には、型の用語では、薄い空気から型の式を作成できる必要があります。そのような型を持つが存在しないことは簡単にわかります。より正確には、型変数が環境内のどの項変数の型にも現れない場合、標準の形式である型の項はありません。これは、項の構造帰納法で証明できます。先頭の変数の型はであるか、引数の1つがを含む主型である必要があります。つまり、より適切な項があります。 。αβαββββββ

特定のタイプの値がないからといって、そのタイプの用語が存在しないことを意味するわけではありません。そのような型のラムダ項がない理由は、すべての適切に型付けされたHM項が強く正規化されているためです。これは、単純に型指定されたラムダ計算が強く正規化されていることを示す結果の一般化です。これは、System Fが強く正規化されているという事実の結果です。SystemFはHMに似ていますが、トップレベルだけでなく、型のあらゆる場所で型限定子を使用できます。たとえば、システムFでは、のタイプは —ただし、=λバツバツバツαααα 型が正しくありません。

HMとシステムFは、カリー-ハワード対応の型システムの例です。適切に型付けされた用語は特定のロジックの証明に対応し、型は式に対応します。型システムが一貫した理論に対応している場合、その理論ではなどの定理を証明できません。したがって、対応する型の項はありません。型システムにより、データ構造上の関数について「無料の定理」を推測できます。ABABαβαβ

この結果は、計算に特定の定数を追加するとすぐに壊れます。たとえば、などの一般的な固定小数点コンビネータを許可すると、任意の型の項を作成できますの型は。Curry-Howardの対応における一般的な固定点コンビネーターに相当するものは、示す公理であり、これによりロジックが明らかに不明瞭になります。YYλバツバツααABAB

強力な正規化を保証する型システムとそうでない型システムの間の細かい境界線を見つけることは、困難で興味深い問題です。どの論理が健全であるか、つまりどのプログラムが定理の証明を具体化するかを決定するため、これは重要な問題です。System Fよりもさらに先に進むことができますが、ルールはより複雑になります。たとえば、Coq proof assistantの基礎である帰納的構築計算は、強力に正規化されていますが、一般的な帰納的データ構造とそれらのアルゴリズムなどを記述することができます。

実際のプログラミング言語に到達するとすぐに、通信が途切れます。実際のプログラミング言語には、一般的な再帰関数(終了しない場合があります)、例外(常に例外を発生させる式は値を返さないため、ほとんどの型システムで任意の型を持つことができます)、再帰型(非終了を許可する)忍び込む)など


「システムFが強く正規化しているという事実の結果です」。HMが強く正規化されていることは、System Fが強く正規化されている結果であることをどのように示すことができますか?
ラファエルカストロ

1
@RafaelCastro HMで適切に入力されたすべての用語は、System Fで適切に入力されます。SystemFですべての適切に入力された用語はSNです。したがって、HMでよく型付けされているすべての用語はSNです。
ジル 'SO-悪であるのをやめる'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.