Gibt es eine Möglichkeit, den folgenden Satz in Coq zu beweisen?
Theorem bool_pirrel : forall (b : bool) (p1 p2 : b = true), p1 = p2.
BEARBEITEN : Ein Versuch, eine kurze Erklärung für "Was ist der irrelevante Beweis" zu geben (korrigiere mich, wenn ich falsch oder ungenau bin)
Die Grundidee ist, dass in der Propositionswelt (oder der Prop
Art in Coq) die Beweisbarkeit einer Proposition, nicht die Beweise dafür, für Sie (und Sie sollten) wirklich wichtig ist. Es kann viele (oder keine) geben. Falls Sie mehrere Beweise haben, sind diese aus Sicht der Beweisbarkeit gleich, da sie den gleichen Satz beweisen . Ihre Unterscheidung spielt also keine Rolle. Dies unterscheidet sich von der Rechen Sicht , wo man wirklich über die Unterscheidung von zwei Begriffen kümmern, zum Beispiel, im Grunde, Sie wollen nicht die beiden Bewohner des bool
Typs (oder Set
in Coq Worte), nämlich true
und false
gleich zu sein. Aber wenn Sie sie eingeben Prop
, werden sie gleich behandelt.
Antworten:
Der Beweis der Irrelevanz im Allgemeinen wird von der Theorie hinter Coq nicht impliziert. Sogar der Beweis der Irrelevanz für die Gleichheit ist nicht impliziert. es ist äquivalent Streicher Axiom K . Beide können als Axiome hinzugefügt werden .
Es gibt Entwicklungen, in denen es nützlich ist, über Beweisobjekte zu argumentieren, und Beweisunrelevanz macht dies nahezu unmöglich. Möglicherweise sollten diese Entwicklungen alle Objekte enthalten, deren Struktur neu
Set
formuliert werden soll, aber mit der grundlegenden Coq-Theorie ist die Möglichkeit gegeben.Es gibt eine wichtige Untergruppe von Beweisen, die immer irrelevant ist. Streichers Axiom K gilt immer für entscheidbare Bereiche, dh Gleichheitsnachweise für entscheidbare Mengen sind eindeutig. Der allgemeine Beweis befindet sich im
Eqdep_dec
Modul in der Coq-Standardbibliothek. Hier ist Ihr Theorem als Konsequenz (mein Beweis hier ist nicht unbedingt der eleganteste):Für diesen speziellen Fall ist hier ein direkter Beweis (inspiriert durch den allgemeinen Beweis in
Eqdep_dec.v
). Zuerst definieren wir einen kanonischen Beweis vontrue=b
(wie in Coq üblich, ist es einfacher, die Konstante zuerst zu haben). Dann zeigen wir, dass jeder Beweistrue=b
dafür sein mussrefl_equal true
.Wenn Sie Coq mit klassischer Logik erweitern, erhalten Sie den Beweis der Irrelevanz. Intuitiv ausgedrückt gibt Ihnen die klassische Logik ein Entscheidungsorakel für Aussagen, und das ist gut genug für Axiom K. Das Coq-Standardbibliotheksmodul enthält einen Beweis
Classical_Prop
.quelle