Teoria leżąca u podstaw Coq nie sugeruje dowodu na brak znaczenia w ogóle. Nie sugeruje się nawet dowodu nieistotności dla równości; jest to równoważne z aksjomatowi K Streichera . Oba można dodać jako aksjomaty .
Istnieją udoskonalenia, w których warto uzasadniać obiekty dowodowe, a nieistotność dowodu sprawia, że jest to prawie niemożliwe. Prawdopodobnie w tych zmianach powinny zostać przekształcone wszystkie obiekty, których struktura ma znaczenie Set
, ale przy podstawowej teorii Coq istnieje taka możliwość.
Istnieje ważna podgrupa nieistotności dowodów, która zawsze obowiązuje. Aksjomat K Streichera zawsze dotyczy domen rozstrzygalnych, tzn. Dowody równości zbiorów rozstrzygalnych są unikalne. Ogólny dowód znajduje się w Eqdep_dec
module w standardowej bibliotece Coq. Oto twoje twierdzenie jako następstwo (mój dowód tutaj niekoniecznie jest najbardziej elegancki):
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.
W tym specjalnym przypadku oto bezpośredni dowód (zainspirowany ogólnym dowodem w Eqdep_dec.v
). Po pierwsze, zdefiniuj definiujemy kanoniczny dowód true=b
(jak zwykle w Coq, łatwiej jest mieć stałą na początku). Następnie pokazujemy, że każdy dowód true=b
musi być 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.
Jeśli dodasz klasyczną logikę do Coq, otrzymasz dowód nieistotności. Intuicyjnie mówiąc, klasyczna logika daje wyrocznię decyzyjną dla propozycji, co jest wystarczające dla aksjomatu K. W standardowym module bibliotecznym Coq znajduje się dowód Classical_Prop
.