일반적으로 증거 부적합은 Coq의 이론에 의해 암시되지 않습니다. 평등에 대한 증거 부적합도 암시되지 않습니다. Streicher의 공리 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에 충분합니다 Classical_Prop
. Coq 표준 라이브러리 모듈에는 증거가 있습니다 .