「依存型」を持つことで何が得られますか?


13

依存型(DT)を適切に理解していると思いましたが、この質問への回答:https : //cstheory.stackexchange.com/questions/30651/why-was-there-a-need-for-martin-l%C3% B6f-to-create-intuitionistic-type-theoryは、そうでなければ考えさせられました。

DTを読み、それらが何であるかを理解しようとした後、このDTの概念によって何が得られるのだろうかと考えています。「方法/理由」を正確に理解することはできませんが、単純に型付けされたラムダ計算(STLC)よりも柔軟で強力なようです。

STLCではできないDTでできることは何ですか?DTを追加すると理論がより複雑になりますが、どのような利点がありますか?

上記の質問に対する答えから:

依存型は、BruijnとHowardによって提案され、Courry-Howardの対応を命題論理から1次論理に拡張したいと考えました。

これはあるレベルでは理にかなっているように見えますが、それでも「どうして/なぜ」という大局を理解することはできません。たぶん、FOロジックへのCHの対応のこの拡張を明示的に示す例は、DTで何が大事なのかを理解する上で重要なポイントを見つけるのに役立つでしょうか?これを理解すべきかどうかは定かではありません。


1
それらをグーグルで検索しましたか?依存型で構築された定理証明者Coqのことを聞いたことがありますか?Coqを使用して4色の定理が証明されていることをご存知ですか?
デイブクラーク

2
実際にやった。Googleにとって難しいのは、DTが直感的にタイプ理論に役立つ余分な「パワー」(より良い単語がないため)なのですか?
PhD

1
どうして?依存型を使用すると、タイプセーフでありながら、より多くのプログラムを入力できます。どうやって?プログラムで型をパラメーター化する。
マーティンバーガー

@MartinBerger-「その他のプログラム」について詳しく説明してください。理論的な観点から、「もっと」できることは何ですか?
PhD

2
@DaveClarkeその派手なタイプのCoqが派手なことをするために使用されたことは、それらの派手なものがそれらの派手なタイプを必要とすることを意味しません。たとえば、Twelfは(SMLの正確性の証明など)大成功を収めており、高次ではなく2 次にすぎません。いくつかの非常に大きなシステムが1次論理のみで証明されているのを見ました。
ジル 'SO-悪であるのをやめる'

回答:


22

コメントの拡張:依存型はより多くのプログラムを入力できます。「もっと」とは、単に、依存型で入力可能なプログラムのセットが、単純に入力された計算(STLC)で入力可能なプログラムの適切なスーパーセットであることを意味します。例は次のようになり、L 、I 、S 、T 2 * 3 + 4α 、長さのリスト10型の要素を運ぶ、αを。式2 3 + 4は、同時にプログラムであり、型の一部です。STLCでこれを行うことはできません。λList23+4(α)10α23+4

依存型と非依存型を区別する重要なルールはアプリケーションです:

ΓM:ABΓN:AΓMN:BΓM:ΠxA.BΓN:AΓMN:B{N/x}

左側には、構内のプログラムが結論のプログラムにのみ「流れる」STLCがあります。対照的に、右側の依存アプリケーションルールでは、右側の前提からのプログラムが結論1のタイプに「流れ込み」ます。N1

プログラムによって型をパラメーター化できるようにするには、依存型の構文をより豊かにする必要があり、型が整形式であることを確認するために、型を制約するkindと呼ばれる2番目の「型付けシステム」を使用します。この分類システムは基本的にSTLCですが、「1レベル上」です。

依存型には多くの説明があります。いくつかの例。


色に関して:非依存型では、結論の黒の表現は構内の黒の表現から構築され、結論の赤の表現は構内の赤の表現から構築されます。依存型では、前提の赤と黒の部分から結論の黒の部分を構築することで、色を混ぜることができます。1


今、それは非常に理にかなっています。それは明白だったかもしれませんが、何らかの理由で私はそれに指を置くことができませんでした。コメントから回答への移行を評価してください。残念ながら、この質問は締め切りに投票されましたが、答えがうれしいです:)
PhD

1
Arr nArr 0=natArr (n+1)=natArr n

PVerase(P)erase(V)

FωCoC

@codyこのタイプを消去と呼ぶのは珍しいと思います。より良い名前は何ですか?たぶん型の単純化?
マーティンバーガー

2

型宣言はアサーションにすぎないと考えてください。現在、言えるのは、isInt32()、isCharPtr()などです。これらのさまざまなアサーションは、コンパイル時にチェック可能になるように選択されています。ただし、この概念は、isCharPtr()&& isNotNull()などのように拡張できます。Nullableポインターは大きな問題です。ポインターは、デフォルトのスタンスとしてNULL可能であってはなりません。NULL可能ポインターは、NULLであるかどうかを知らずに逆参照できないタイプです。同様の問題は、isPositiveInteger()またはisEvenNaturalNumber()のようなものです。

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