Haskellよりも強力なタイプシステムを持つ研究言語はどれですか?


14

ここで私はそれを読みました:

Haskellには間違いなく最先端の型システムはありません(研究言語を数えたとしても近いものではありません)が、実稼働で実際に使用されるすべての言語のうちHaskellがおそらくトップです。

だから私は2つのことを求めています:

  1. どの研究言語がHaskellより強力な型システムを持っているか。
  2. 彼らは何を改善しますか。

私は単なるプログラマーなので、型理論で使用される多くの数学的なオブジェクトを知りません。できれば穏やかな説明を提供してください。


3
「より良い」とは何ですか?
デビッドリチャービー

2
私はその手段推測@DavidRicherby より強力な型システム
ВиталийОлегович

2
型システムがチューリング完全であることを証明したら、それは本当に重要ですか?;-)
DevSolar

7
チューリングマシンはチューリング完全です。日常のプログラミング作業に使用してみませんか。
-gallais

4
元のテキストは、より高度な型システムを備えた言語に言及しており、型システムの「より高度な」が良いか悪いかについては断言していないことに注意してください。
ペテルス

回答:


25

この質問は、「より良い」という主観的な定義に依存しているため、やや問題があります。

AgdaIdrisCoqなどの依存型付き言語は、Haskellよりも強力な型システムを持っています。つまり、これらの言語の型を使用して、Haskellよりもコードに関するプロパティを厳密に証明できます。つまり、キャッチされる不正確なプログラムがさらにあります。

ただし、これには代償が伴います。型の推論、および特定の型の値が存在するかどうかのテストは、もはや不可能です。つまり、これらの言語では、コードに型を明示的に注釈する必要があります。基本的に、これはコードの独自の正確性証明を書くことに要約されます。

では、これらの言語はHaskellよりも「優れている」のでしょうか?彼らはあなたのコードの正確さの高度な証明をチェックできますが、Haskellのようにコードに関するプロパティを自動的に証明することはできません。

Haskellよりも「優れた」別の研究言語はLiquidHaskellです。これは基本的にHaskellで、特殊なコメントから解析された絞り込みタイプが上にボルトで固定されています。

絞り込みタイプを使用すると、プロパティを使用してタイプを絞り込むことができます。たとえば、の代わりにをInt指定して{i : Int | i > 0}、すべての正の整数のタイプを指定できます。型の推論は絞り込み型で決定できますが、依存型でできるほど多くの正確性プロパティを証明することはできません。

他にも改良型のシステムがありますが、私はそれらのどれにもそれほど精通していません。


ありがとうございました!Haskell型システムが、型推論をまだ許可する最も強力なシステムであることを証明することは可能ですか?
ВиталийОлегович

3
Haskellの型推論は、型推論を可能にする最強のものではありません。私が言及した改良型は型推論を可能にし、Haskellに多くのGHC拡張が追加されており、わずかに強力な型システムを可能にします。
-jmite

4
これに加えて、多くの型システムがあり、それらの多くは比類のないものです。それらは、ある点でHaskellよりも強く、他の点ではHaskellよりも弱いでしょう。型システムの最強から最弱への線形順序付けはありません。
-jmite

5
ここで、型推論を許可する最強の型システムがないことを証明したいと思います。役に立たない事実の証明に抵抗しなければなりません。
アンドレイバウアー

1
事実は私には役に立たないようではありません。型の推論を備えた最強の型システムが存在するという知識は、特に実装が実現可能であることが判明した場合、非常に興味深いでしょう。
有理数

10

ML言語ファミリ(StandardML、OCaml)は、Haskellと同様の伝統から生まれたため、同様の型システムを持っています。しかし、それらはHaskellとまったく同じではなく、それらの機能のいくつかはあなたに合っているかもしれません(プログラミング言語のタイプシステムは人間を助けるために存在するため、客観的に優れたタイプシステムというものはありません)。以下は、Haskellにはない(しかし、対応する同様の概念を持つかもしれない)OCamlのいくつかの機能です。

  1. 多相バリアント
  2. 深さのサブタイプクラスを持つオブジェクト
  3. Functorsはモジュール間のマップ(Haskellにはモジュールがあります)、さらには一流のモジュールです

そして、これをML-Haskellの銃撃戦に変える必要はありません。さもなければ、Bob Harperのブログ投稿へのリンクを開始します;-)


9

研究言語Cleanには、一意性型があるため、Haskellよりも優れた型システムがあります。一意性タイプの背後にある考え方は、線形論理と密接に関連しています。線形論理は、古典的な論理よりもリソースに制限のある「現実世界」に近いものです。

反研究言語Rustには、古典的な純粋型システムよりも「現実世界」に近い独自の機能を持つ型システムもあります。型システムに影響を与えたアイデアのほとんどは、Rustが存在するずっと前から完全に独立して公開されています。しかし、これらの古いアイデアをまとめる方法は独特であり、既知の抜け穴や矛盾が存在する場合でも、実際の研究出版物に値するでしょう。


3
どういうわけか「公開」と「反研究」はうまくいかない。
アンドレイバウアー

1
一意性は確かに興味深い概念ですが、IMOは型システムの機能そのものではなく、セマンティクスに関するものです。そして、これは本当に型システムを厳密に改善しますか?Cleanは、Haskellが型システムや上位のポリモーフィズムなどに追加した新しいものを実行できますか?型システムが既に一意性に対処する必要がある場合でも、これらの一部は可能ですか?
左辺約

1
@leftaroundabout一意性タイプまたは線形論理にどの程度精通していますか?xに一意の型がある場合、たとえば、f(x、x)は適切に型付けされていません。Haskellを拡張して、一意性タイプもサポートすることが可能かもしれません。C ++の移動セマンティクスは、既存の型システム上でのuniquencess型のサポートの向上と見なされる場合もあります。
トーマスクリンペル

私はC ++の移動セマンティクスに精通しています。そのため、おそらく、一意性の印象は「型システムのことではない」と感じています。私が面白いと思うのは、完全に外側に伝播する一意性タイプが、高度なタイプシステムの他の機能を妨げているということです。
左辺約

1
@leftaroundabout右辺値参照は、私にとっては型システムのように聞こえます。一意性タイプが他の高度なタイプ機能を妨げるのはなぜですか?最悪の場合、これらの高度な機能は、一意性タイプには適用されません。もちろん、一意性タイプなどの「現実世界」の機能は、深さではなく広さを求めることを意味し、広範に費やす時間は深くなるために存在しなくなります。しかし、一意性タイプは理論と実践のバランスが取れているという印象があるので、時間は十分にかかると思います。
トーマスクリンペル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.