Coqで証明の無関係性を証明しますか?


18

Coqで次の定理を証明する方法はありますか?

Theorem bool_pirrel : forall (b : bool) (p1 p2 : b = true), p1 = p2.

編集:「証拠の無関係性」とは何かについて簡単な説明をしようとする試み(間違っているか不正確な場合は誰かを修正する)

基本的な考え方は、命題の世界(またはPropCoq の種類)で、あなたが本当に気にするのは、命題の証明ではなく、命題の証明可能性であり、多くの(またはまったくない)かもしれないということです。証明可能性の観点から複数の証明がある場合、それらは同じ命題を証明するという意味で同等です。したがって、それらの区別はまったく関係ありません。これは、あなたが実際には2つの用語の違いを気に計算の観点からは異なり、例えば、基本的に、あなたは二住民たくないタイプ(またはすなわちコックの言葉で)、と等しくなるように。しかし、それらを入れると、それらは等しく扱われます。boolSettruefalseProp


興味深い。Coqメーリングリストで数分以内に回答が得られるはずです。(そうする場合は、必ずここに回答を投稿してください。)
デイブクラーク

2
あなたの質問が何であるか興味がありますがCoqに精通していない私たちにとって、その定理が英語で何を意味するのかを説明する文章を1つか2つ追加できますか?(そして、おそらく「証明無関連」とは何ですか?)
ジョシュアグロチョウ

@ジョシュア、詳細を説明するのは適切ではありません。それは私にとっても新しいことであり、それがかなり長い間私を困惑させた理由でもあります。とにかく、ここに私の試みがあります(質問の部分を参照)。
11

6
@Joshua、IIRCは、建設的な数学で、のような含意の証明変換する機能/プロセス/アルゴリズム/構造である証拠のに証明の、及び構成は無関係プルーフ得プルーフ場合のは、に対してどの証明が与えられるかに依存しません。A B B AABABBA
カヴェー

回答:


28

Coqの背後にある理論によって、一般に無意味な証明は暗示されません。平等との証拠の無意味さも意味されません。ストライヒャーの公理Kと同等です。どちらも公理として追加できます

証明オブジェクトについて推論することが有用な開発がありますが、証明の無関連性により、これはほとんど不可能になります。おそらくこれらの開発には、構造が重要なすべてのオブジェクトが含まれているはずですがSet、基本的なCoq理論では可能性があります。

常に当てはまる証明の無関係性の重要なサブケースがあります。Streicherの公理Kは、常に決定可能ドメインを保持します。つまり、決定可能セットの等式証明は一意です。一般的な証明はEqdep_dec、Coq標準ライブラリのモジュールにあります。当然の結果としての定理は次のとおりです(ここでの私の証明は、必ずしも最もエレガントではありません)。

Require Bool.
Require Eqdep_dec.
Theorem bool_pirrel : forall (b : bool) (p1 p2 : b = true), p1 = p2.
Proof.
  intros; apply Eqdep_dec.eq_proofs_unicity; intros.
  destruct (Bool.bool_dec x y); tauto.
Qed.

この特別な場合のために、ここに直接的な証明があります(の一般的な証明に触発されたEqdep_dec.v)。最初に、定義の正準証明を定義しますtrue=b(Coqで通常のように、定数を最初に持つ方が簡単です)。その後、我々は、のいずれかの証拠があることを示すtrue=bことがありますrefl_equal true

Let nu b (p:true = b) : true = b :=
  match Bool.bool_dec true b with
    | left eqxy => eqxy
    | right neqxy => False_ind _ (neqxy p)
  end.
Lemma bool_pcanonical : forall (b : bool) (p : true = b), p = nu b p.
Proof.
  intros. case p. destruct b.
  unfold nu; simpl. reflexivity.
  discriminate p.
Qed.

Coqに古典的なロジックを追加すると、証拠とは無関係になります。直観的に言えば、古典的なロジックは命題の決定オラクルを提供し、それは公理Kにとって十分なものです。Coq標準ライブラリモジュールには証明がありますClassical_Prop

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