私が学ぶことができる最も直感的な依存型理論は何ですか?


46

依存型付けについて本当にしっかりと把握することに興味があります。私はTaTaのほとんどを読み、ATTaPLの「依存型」を(完全に吸収されていなければ)読みました。また、依存型付けに関する多くの記事を読み、読みました。

型理論の議論の多くは、「型システムXの次の大規模な一般化とは何か」ではなく、以前の型システムにインクリメンタル機能を追加することに焦点を当てているようです。依存型はSystem Fの次の大規模な一般化のようですが、直感的で標準的な依存型付き言語はまだ見つかっていません。(帰納的)構造の微積分への多くの言及は、CoCがその言語であると思うようにさせますが、私が見た言語の説明は、私にはあまり明確でも直観的でもないようです。

私はそのような言語が次のような機能を持っていると期待/推測しています(そして、特に何かが混乱したり非現実的なものとして飛び出したりしたら教えてください)

  • 一般化された抽象化(型階層内の任意のドメインから他のドメイン、種類->用語、用語->型 '' 'などへの機能を持つことができます)
  • タイピングの無限の階層があります(用語:タイプ:タイプ ':タイプ' ':...)
  • 基本要素の最小数。私は、言語が各レベルに対して単一の要素のみを主張することを想像しています。たとえば、(():Unit:Type:Type ':...)と断定できます。他の要素は、これらの要素から構築されます。
  • 合計および製品タイプは導出可能です。

私はまた、理想的に議論するその言語の説明を探しています:

  • その言語での抽象化と定量化の関係。統一されていない場合は、なぜ統一されていないのかを説明してください。
  • 無限の型階層を明示的に

依存型理論を学びたいだけでなく、CSのバックグラウンドを少し仮定して、証明アシスタントと依存型言語の使用方法を理解する方法を教えるガイドをまとめたいので、この質問をしています。

(クロスがRedditに投稿)

回答:


35

これにアプローチする方法はいくつかあります。

  1. 依存型理論。これはおそらく、依存型について学ぶ最も簡単な方法ではありませんが、たとえば、Calculus of Constructionsの論文とその変形、Pure Type Systems、およびMartin HofmannのDependent TypesのSyntax and Semanticsに関する記事を見ることができます。

  2. 定理証明。まず、関連する質問への私の答えを見てください。Coq証明アシスタントの基礎となる理論をどのように学習しますか?

  3. ΠΣ、とりわけ。そしてもちろん、Marc Hamannの答えにあるAdam Chlipalaの本もあります。

定理証明の使用に移る前に、プログラミングから始めて、より理論的な問題の調査を開始したいと思います。


Epigramの論文を見つけることはできますが、Epigramの実際のダウンロードは見つかりません。まだ完成していないEpigram 2だけです。
ジョンサルバティエ

1
e-pig.org/darcs/Pig09/webを見つけましたか?エピグラムはページの下部にあります。
デイブクラーク

3
Epigram 1はかなり長い間、本質的にメンテナンスされていません。著者は最近、Agdaを使用しています(Epigram 2の側で作業中)。
ブレイザーブレード14年

2019年には、Epigram 2が起こるとは思いませんが、今はIdris(およびIdris 2!)があります。
xrq

14

λπ

Twelfは、LFに基づく優れた定理証明システムです。Frank Pfenningが提供する高度なコースノートを見ると、LFの理論と実践の良い入門書です。

そうは言っても、型理論の本質ではなく建設的な数学に興味があるかどうかを学ぶのはおそらく最初のシステムではありません:LFは論理フレームワークを意味し、理論を公理化するために使用されるシステムであり、ターゲットシステムに直接。Martin-Loefの型理論に基づいたシステムを使用することは、おそらく最良の導入です-デイブはAgdaに言及していますが、これがあなたの目標であれば、おそらくより良い出発点です。フレームワーク。


10

CoCが最も可能性が高い方法です。Coqに飛び込み、Software Foundations(Pierce of TaPLおよびATTaPLが関係している)のような素晴らしいチュートリアルを実行してください。

依存型付けの実用的な側面を理解したら、理論的な情報源に戻ります。それは、それよりもはるかに理にかなっています。

機能のリストは基本的に正しいように聞こえますが、実際にどのように機能するかを確認することは、1000の機能ポイントの価値があります。

(もう少し高度なチュートリアルは、Adam Chlipalaの依存型を使用した認定プログラミングです


「直観的」がここでの固定点かもしれません。CoC/ CICには、単なる依存型入力よりもはるかに多くの直観が飛び交っています。それは良い最終目標です-私の考えでは、選択は本当にCoqとTwelfの間です-しかし、おそらく「依存型付けを本当にしっかりと把握する」ための最良の最初のステップではありません。
チャールズスチュワート

@チャールズ:あなたのポイントが取られます。私はまだ実用的な観点からそれが良い賭けだと思います。CoC / CICを完全に理解することはより複雑な仕事かもしれませんが、Coq(およびそれに適した基本レベルのチュートリアルの存在)により、プログラミングの側面または基本的な証明支援の側面の学習に集中することが容易になります(すべての複雑さを把握する前であっても、あなたの興味が決定します)。これは、理論的背景から来ていない人にとっては「直感的」だと思う。
マークハーマン


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