依存型と改良型


58

誰かが依存型と絞り込み型の違いを説明できますか?私が理解しているように、絞り込み型には、述語を満たす型のすべての値が含まれます。それらを区別する依存型の機能はありますか?

それが役立つ場合、Liquid Haskellプロジェクトを介して洗練された型、CoqおよびAgdaを介して依存型に出会いました。とはいえ、私は理論がどのように異なるかについての説明を探しています。

回答:


33

主な違いは、基礎となる理論と、それらの使用方法の2つの次元に沿っています。後者に焦点を当てましょう。

ユーザーとして、通常、LiquidHaskellおよびリファインメントタイプシステムの仕様の「ロジック」は決定可能なフラグメントに制限されているため、検証(および推論)は完全に自動化されます。依存する設定。これにより、大幅な自動化が実現します。たとえば、LHの挿入ソートを比較します。

http://ucsd-progsys.github.io/lh-workshop/04-case-study-insertsort.html#/ordered-lists

vs.イドリス

https://github.com/davidfstr/idris-insertion-sort/blob/master/InsertionSort.idr

ただし、自動化には代償が伴います。完全に依存する世界でできるように、仕様として任意の関数を使用することはできません。これにより、書き込むことができるプロパティのクラスが制限されます。

したがって、改良システムの目標の1つは、指定できるクラスを拡張することですが、完全に依存するシステムの目標は、 証明できるものを自動化することです。おそらく、両方の世界の最高を得ることができる幸せな出会いの場があるでしょう!


洗練タイプベースの仕様から依存タイプベースの仕様に何らかの形で機械的にマッピングする方法はありますか?または、そのような「同型」はまだ十分に研究されていませんか?
エリックアリク

1
私の知る限り、このような「同型」はあまり研究されていません。いくつかの最近の仕事はしかしあり、以下を参照してください。レーマンとTanterで「Coqの中にシンプルな洗練タイプを定式化」(すぐに表示される...ここGHレポです:github.com/pleiad/Refinementsは
ランジットJhala

Scalaのパス依存型はどうですか?
ヤンボー

1
@RanjitJhala最終段落の目標を間違って間違って取得したと思いますか?
ノルドリン

1
@Noldorin Ranjitが最後の段落を正しく書いたと思います。「精製タイプ...検証(および推論)が完全に自動化されるように決定可能なフラグメントに制限されている」vs「証明用語...で必要...依存する[タイプ]」。したがって、洗練タイプで働く人々は、洗練タイプでどれだけ指定できるかを拡張しながら、依然として自動的に推論/検証可能であり、依存タイプで働く人々は証明用語の生成を自動化しようとしています。
レイフ

22

絞り込みタイプは、述語を持つ単純な通常のタイプです。つまり、が通常のタイプであり、が述語である場合TPT

{v:TP(v)}
は絞り込みタイプです。この場合のは基本型と呼ばれます。T

私の知る限り、Liquid Haskellでは、いくつかの依存関数タイプ、つまりタイプ [1] も許可しています。完全に依存する型(シグマ型など)は許可されないことに注意してください。{x:T1T2P}

[1]で説明されている液体タイプシステムは確かに決定可能であり、液体HaskellはSMTソルバーを使用します。ただし、Liquid Haskellには証明用語(または非依存型言語で呼び出される値)も必要です。LiquidHaskellプログラムを作成するために座っている場合は、型だけでなく独自の関数を作成します。

[1] http://goto.ucsd.edu/~rjhala/liquid/liquid_types.pdf


1
シグマは教会のようなエンコードを使用してpiでエンコードできますが、AFAIKリキッドハスケルの改良関数タイプはpi(依存関数)タイプではありません。
fread2281

15

依存型は、何らかの方法で値に依存する型です。典型的な例は、「長さのベクトルのタイプnnです。ここで、は値です。質問で述べたように、絞り込みタイプは、特定の述語を満たす特定のタイプのすべての値で構成されます。例えば、正数のタイプ。これらの概念は特に関連しているわけではありません(私が知っていることです)。もちろん、「より大きなすべての数のタイプ」など、依存する絞り込みタイプを合理的に持つこともできますn


3
一方は他方のサブセットですか?...洗練タイプは、SMTを使用してsolveableように見えるが、依存タイプは、独自の証明の条件を必要とする
jmite

4
「一方は他方のサブセットですか?」いいえ。そのため、依存関係のない絞り込みタイプと絞り込みではない依存タイプの例を挙げました。
アレクセイ・ロマノフ14

8
絞り込みタイプをシグマでエンコードできませんか?
fread2281

3
あなたの例はあなたの主張を実証していないようです。正の数は、0より大きい数として定義されます。これは、「正の数のタイプ」が正確に「より大きいすべての数のタイプ」であることを意味しません0か?
-akdom

2
ベクトルの長さも強制する絞り込み述語が存在することはできませんか?
CMCDragonkai
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.