Coqには、関係のない命題のProp型があり、抽出中に破棄されます。Coqを証明にのみ使用する場合、これがある理由は何ですか。Propは命令型であるため、Prop:Propですが、Coqは自動的にユニバースインデックスを推測し、代わりにType(i)をどこでも使用できます。Propはすべてを複雑にしているようです。
Luoの本にはSetとPropを分離する哲学的な理由があると読みましたが、本にはそれらが見つかりませんでした。彼らは何ですか?
Coqには、関係のない命題のProp型があり、抽出中に破棄されます。Coqを証明にのみ使用する場合、これがある理由は何ですか。Propは命令型であるため、Prop:Propですが、Coqは自動的にユニバースインデックスを推測し、代わりにType(i)をどこでも使用できます。Propはすべてを複雑にしているようです。
Luoの本にはSetとPropを分離する哲学的な理由があると読みましたが、本にはそれらが見つかりませんでした。彼らは何ですか?
回答:
は、プログラムの抽出に非常に役立ちます。これは、役に立たないコード部分を削除できるためです。たとえば、私たちは「すべてのリストのための声明証明するソートアルゴリズム抽出する ℓをリストがある kのように kを命じたとされ、kはのpermutatiomある ℓを」。これをCoqに書き留め、 P r o pを使用せずに抽出すると、次のようになります。
sort
verify
pi
pi
余分なものはまったく役に立たないわけではありませんが、多くのアプリケーションではそれを取り除き、そのままにしておきたいと思っていますsort
。これは、我々が使用している場合は、達成することができます状態に「kが」注文され「とkはの順列であるℓ」、しかしない「すべてのためℓありK」。
一般的には、エキスコードへの一般的な方法は、フォームの声明を検討することであるxが入力され、 yは出力であり、 φ (X 、Yは)のためにそれが何を意味するかを説明し、Yは正しい出力します。(上記の例では A及び Bリストのタイプであり、 φ (ℓ 、kは)されている「 kは順序付けされ、 kはの順列である ℓ場合。」) φは、である PのR oをP次いで抽出マップを与える fは:ように φ (X 、F (xは))全てに当てはまるのx ∈ A。場合 φは、であり、 SのEのT我々はまた、機能取得 gがあるよう G (xは)ことの証拠である φ (X 、F (xは))全てについて、保持 X ∈ A。多くの場合、証明は計算上役に立たないので、特に他のステートメントの内部に深くネストされている場合は、それを取り除くことを好みます。はそうする可能性を与えてくれます。
2015-07-29を追加:「無駄な抽出コード」を自動的に最適化することで、完全に回避できるかどうかという疑問があります。ある程度はできます。たとえば、ロジックのネガティブフラグメント(空の型、ユニット型、製品から構築されたもの)から抽出されたすべてのコードは、ユニットをシャッフルするだけなので役に立たない。しかし、P r o pを使用する際には、真正な設計上の決定が必要です。ここでsimpe例であり、ここで、Σの手段我々はであることTのY用のp Eと∃我々はであることを意味PのR O P。から抽出する場合 我々が分解プログラム取得する n個の最下位ビットに Bと残りのビットの Kすなわち、それはすべてを計算します。我々は、から抽出する場合 Π N :N ΣのB :{ 0 、1 } ∃ K :N
はimpredicativeであり、非常に表現力のある証明システムを作成します。ただし、次の意味では「あまりにも」表現力があります。
一貫性がありません。通常、除外されたミドルを追加する可能性を維持するため、1つの解決策は、大規模な除去を維持し、Propを述語にすることです。もう1つは、大規模な消去を抑制することです。
Coqは両方を行いました!彼らは述語のPropをSetに改名し、Propの大規模な消去を無効にしました。
不可逆性によって得られる表現力は、「合理的な」数学の99%を定式化できるという意味で「安心」であり、集合論に関連して一貫していることが知られています。これにより、予測可能なユニバースのみを持つAgdaのようなものに弱体化しない可能性が高くなります。
Prop : Prop
矛盾するでしょう。すべての命題に対するむしろ定量化は再び命題です。