CoqにPropがあるのはなぜですか?


35

Coqには、関係のない命題のProp型があり、抽出中に破棄されます。Coqを証明にのみ使用する場合、これがある理由は何ですか。Propは命令型であるため、Prop:Propですが、Coqは自動的にユニバースインデックスを推測し、代わりにType(i)をどこでも使用できます。Propはすべてを複雑にしているようです。

Luoの本にはSetとPropを分離する哲学的な理由があると読みましたが、本にはそれらが見つかりませんでした。彼らは何ですか?


6
「Coqを証明にのみ使用する場合」:ここで重要な点を特定したと思います。Coqは、証明だけに使用されるわけではありません。
ジル「SO-悪であるのをやめる」

回答:


34

は、プログラムの抽出に非常に役立ちます。これは、役に立たないコード部分を削除できるためです。たとえば、私たちは「すべてのリストのための声明証明するソートアルゴリズム抽出する ℓをリストがある kのように kを命じたとされ、kはのpermutatiomある ℓを」。これをCoqに書き留め、 P r o pを使用せずに抽出すると、次のようになります。PropkkkProp

  1. 「すべてのためありkは私たちにマップ与えるだろう」リストにリストを取り、ksort
  2. が順序付けられるように」は、kを実行して、ソートされていることを確認する機能を提供します。kverifyk
  3. の順列である順列与える」かかりℓのKを。これは単なるマッピングではなく、2つのマップが実際に逆であることを検証するプログラムと一緒の逆マッピングでもあります。kpikpi

余分なものはまったく役に立たないわけではありませんが、多くのアプリケーションではそれを取り除き、そのままにしておきたいと思っていますsort。これは、我々が使用している場合は、達成することができます状態に「kが」注文され「とkはの順列である」、しかしない「すべてのためありK」。Propkkk

一般的には、エキスコードへの一般的な方法は、フォームの声明を検討することであるxが入力され、 yは出力であり、 φ X Yはのためにそれが何を意味するかを説明し、Yは正しい出力します。(上記の例では A及び Bリストのタイプであり、 φ kはされている「 kは順序付けされ、 kはの順列である場合。」) φは、である PのR oをP次いで抽出マップを与える fはx:A.y:B.ϕ(x,y)xyϕ(x,y)yABϕ(,k)kkϕPropように φ X F xは全てに当てはまるのx A。場合 φは、であり、 SのEのT我々はまた、機能取得 gがあるよう G xはことの証拠である φ X F xは全てについて、保持 X Af:ABϕ(x,f(x))xAϕSetgg(x)ϕ(x,f(x))xA。多くの場合、証明は計算上役に立たないので、特に他のステートメントの内部に深くネストされている場合は、それを取り除くことを好みます。はそうする可能性を与えてくれます。Prop

2015-07-29を追加:「無駄な抽出コード」を自動的に最適化することで、完全に回避できるかどうかという疑問があります。ある程度はできます。たとえば、ロジックのネガティブフラグメント(空の型、ユニット型、製品から構築されたもの)から抽出されたすべてのコードは、ユニットをシャッフルするだけなので役に立たない。しかし、P r o pを使用する際には、真正な設計上の決定が必要です。ここでsimpe例であり、ここで、Σの手段我々はであることTのY用のp E我々はであることを意味PのR O P。から抽出する場合 PropPropΣTypeProp 我々が分解プログラム取得する n個の最下位ビットに Bと残りのビットの Kすなわち、それはすべてを計算します。我々は、から抽出する場合 Π N N ΣのB { 0 1 }K N

Πn:NΣb:{0,1}Σk:Nn=2k+b
nbk その後、プログラムは、最下位ビット計算する Bを。マシンはどちらが正しいかを判断できず、ユーザーは自分が何を望んでいるかを伝える必要があります。
Πn:NΣb:{0,1}k:Nn=2k+b
b

1
私は少し混乱しています。がなければ、抽出されたプログラムでg x が出力に寄与しない(つまり、単に検証する)ことを認識することは不可能だと言っていますか?コードオプティマイザーが利用できる通常の手段では、このような役に立たないコードを引き出すことができないシナリオはありますか?Propg(x)
ユーザー

1
抽出されたプログラムから、「私は欲しい」と言うことができ、そこからバックトラックできます。私は、交絡を計算するために実際に必要でない限り、順列の決定に直接貢献しないものを最適化することができないほど絡み合ったシナリオを思い付くことができませんでした(とにかくグローバルな最適化の観点から)。k
ユーザー

1
欲しい」という情報がありません。それは追加の仮定であり、明らかに、彼らがどの特定の結果を望んでいるのかを教えたら、デッドコードを最適化することができます。実際、私はもっと良い答えを考えました。それは設計上の質問であり、P r o pに入れるべきものです。ユーザーが何を望んでいるかを知る必要があり、彼はP r o pを使用して何を望んでいるかを伝えます。いくつかのオプションがある例は簡単に思いつきます。回答に1つ追加します。kPropProp
アンドレイバウアー

2
私の知る限り、 -types から何かを抽出する方法を誰も実際に知ることはできません。計算内容が含まれいることは明らかですが、これが何であるかはわかりません。(1)
アンドレイバウアー

3
あ、そう。設計上の決定を指定する方法としてを使用することは、無駄なコードを削除する方法としてよりもはるかに理にかなっています。Prop
ユーザー

19

impredicativeであり、非常に表現力のある証明システムを作成します。ただし、次の意味では「あまりにも」表現力があります。Prop

impredicative Prop+large elimination+excluded middle

一貫性がありません。通常、除外されたミドルを追加する可能性を維持するため、1つの解決策は、大規模な除去を維持し、Propを述語にすることです。もう1つは、大規模な消去を抑制することです。

Coqは両方を行いました!彼らは述語のPropをSetに改名し、Propの大規模な消去を無効にしました。

不可逆性によって得られる表現力は、「合理的な」数学の99%を定式化できるという意味で「安心」であり、集合論に関連して一貫していることが知られています。これにより、予測可能なユニバースのみを持つAgdaのようなものに弱体化しない可能性が高くなります。


8
ああ、私は言及するのを忘れました:それはそうではありません、それはProp : Prop矛盾するでしょう。すべての命題に対するむしろ定量化は再び命題です。
コーディ14

これに関する他のリソースを教えていただけますか?私が見つけることができるものはすべて非常に散らばっているようです。
user833970

1
@ user833970ポインタが必要な特定のものはありますか?私は、依存型のメタ理論に関するすべてを網羅した参考文献が実際に存在しないことを恐れています。このディスカッション(ここで戻ってきます!)は役に立つかもしれません:github.com/FStarLang/FStar/issues/360
cody

ありがたいことに、私は現在Berardiのパラドックスペーパーに取り組んでいます。これで混乱が解消されると思います。
user833970

14

プログラムの抽出に興味がなくても、Prop命令的であるという事実により、予測不可能な宇宙の塔を使用して構築できないモデルを構築できます。IIRC Thorsten Altenkirchには、Coqの不可逆性を使用したSystem Fのモデルがあります。

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