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
。