Kanıt ilgisizliği genel olarak Coq'un arkasındaki teori tarafından ima edilmez. Eşitlik için kanıt ilgisizliği bile ima edilmez; Streicher'in K aksiyomuna eşdeğerdir . Her ikisi de aksiyom olarak eklenebilir .
Kanıt nesneler hakkında akıl yürütmenin faydalı olduğu gelişmeler vardır ve kanıt ilgisizliği bunu neredeyse imkansız kılar. Muhtemelen bu gelişmeler, yapısı önemli olan tüm nesnelere sahip olmalıdır Set
, ancak temel Coq teorisi ile olasılık var.
Her zaman sahip olunan önemli bir kanıt ilgisizliği alt kutusu vardır. Streicher'in aksiyomu K her zaman karar verilebilir alanlara sahiptir, yani karar verilebilir kümelerde eşitlik kanıtları benzersizdir. Genel kanıt Eqdep_dec
Coq standart kütüphanesindeki modülde bulunur. İşte bir sonuç olarak teoreminiz (buradaki kanıtım mutlaka en zarif değil):
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.
Bu özel durum için, burada doğrudan bir kanıt (genel kanıttan esinlenilmiştir Eqdep_dec.v
). İlk olarak, kanonik bir kanıtı tanımladığımızı tanımlayın true=b
(her zamanki gibi Coq'ta sabitin ilk olması daha kolaydır). Sonra herhangi bir kanıtın true=b
olması gerektiğini gösteriyoruz 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'a klasik mantık eklerseniz, kanıt ilgisizliği elde edersiniz. Sezgisel olarak konuşursak, klasik mantık size önermeler için bir karar kâhin verir ve bu aksiyom K için yeterince iyidir. Coq standart kütüphane modülünde bir kanıt vardır Classical_Prop
.