代数的データによる制約ベースの型推論


11

私はML系図の表現ベースの言語に取り組んでいるので、当然、型推論が必要です> :)

現在、EOPL(Friedman and Wand)の単純な実装に基づいて、制約ベースのソリューションを型推論の問題に拡張しようとしていますが、それらはエレガントに代数的データ型を回避しています。

これまでのところ、スムーズに機能しています。式がある場合ea + be : Inta : Intb : Inte一致する場合、

match n with
  | 0 -> 1
  | n' -> n' * fac(n - 1)`, 

私は当然と推論することができt(e) = t(the whole match expression)t(n) = t(0) = t(n')t(match) = t(1) = t(n' * fac(n - 1)のように...

しかし、代数的データ型に関しては、私は非常に確信が持てません。filterのような関数を想定します。

let filter pred list =
  match list with
    | Empty -> Empty
    | Cons(e, ls') when pred e -> Cons (e, filter ls')
    | Cons(_, ls') -> filter 

リストのタイプが多態性を維持するためには、コンスはタイプである必要がありa * a list -> a listます。だから、これらの制約を確立するには、私は明らかに私の代数的コンストラクタのこれらのタイプをルックアップする必要がある-私が今持っている問題は、代数コンストラクタの複数の用途の「文脈感度」です-どのように私は私の制約式で表現しないことaでそれぞれのケースは同じである必要がありますか?

これに対する一般的な解決策を見つけるのに苦労しており、これに関する多くの文献を見つけることができません。私が似たようなものを見つけたときはいつでも-制約ベースの型推論を備えた式ベースの言語-代数的データ型とポリモーフィズムが足りなくなる。

どんな入力でも大歓迎です!


@Guy私は恩知らずに聞こえることを意味するわけではありませんが、既成の解決策を探していません-何か提案はありますか?私が見つけることができるほとんどの既存のドキュメント(ML、OCamlに関するINRIAの論文など)は、私が必要とするものよりもはるかに広範囲です(そして理解することができます)。
クリス

ATTAPLの推論の章から始めますが、アクセス可能なレベルで必要なすべてを説明していると思います。
Gilles「SO-邪悪なことをやめなさい」

@ギレスATTAPLは私が本棚に置いていない唯一の「クラシック」なPLブックだと思います:Pしかし、月曜日に見ていきます。オフィス全体におそらく10部が配られているUniのフロアに座っています。 )
クリス

@クリスは、この問題に取り組むアクセシブルなリソースを見つけたことがありますか?「ミニML」の私の実装は、まさにこの問題に固執しています... ATTAPL(pauillac.inria.fr/~fpottier/publis/emlti-final.pdf)から関連する章を見つけ、代数のセクションをざっと読んだと思いますデータ型ですが、少し頭上にあると思います。
michiakig 2017年

@spacemanakiはい、私はそれ以来、pdfs.semanticscholar.org / 8983 /…がまさにこのための優れたリソースであることを発見しました。
クリス

回答:


2

参照:ミニML、特に型推論のセクション。

これには、単純な関数型言語の完全なパーサーのF#のサンプルコードが含まれています。さらに重要なことに、型推論セクションは、ほとんどの型推論システムで見られるHindley-Milnerアルゴリズムを実装しています。著者はまた、Hindley-Milnerの理解に役立つ他の2つの重要なドキュメントへのリンクを提供しています。1つは一種の高レベルな導入であり、もう1つはアルゴリズムのコードでの実装を説明する論文です。


単一のリンクは一般的に答えではありません。そこで何が見つかり、なぜそれが役立つのか詳しく説明してください。
ラファエル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.