Ich versuche Coq zu lernen, indem sie durch die Online-Software Foundations Buch zu arbeiten: http://www.cis.upenn.edu/~bcpierce/sf/Coq-Fehler beim Versuch, Case zu verwenden. Beispiel von Software Foundations Buch
Ich coqtop
die interaktive Kommandozeile Coq-Interpreter.
Im Induktionskapitel (http://www.cis.upenn.edu/~bcpierce/sf/Induction.html) befolge ich genau die Anweisungen. Ich kompiliere Basics.v mit coqc Basics.v
. Ich fange dann coqtop
und gebe genau:
Require Export Basics.
Theorem andb_true_elim1 : forall b c : bool,
andb b c = true -> b = true.
Proof.
intros b c H.
destruct b.
Case "b = true".
Alles funktioniert, bis die letzte Zeile, an welcher Stelle ich die folgende Fehlermeldung:
Toplevel input, characters 5-15:
> Case "b = true".
> ^^^^^^^^^^
Error: No interpretation for string "b = true".
Ich bin zu neu zu Coq auspacken zu starten, warum das funktioniert nicht. Ich fand etwas online, das vorschlug, dass ich Require String.
zuerst tun musste, aber dieses funktionierte auch nicht. Hat jemand dieses Buch durchgearbeitet oder ist dieses Problem aufgetreten? Wie bekomme ich den Code richtig funktioniert?
Dieses Case-Schlüsselwort (Taktik?) Scheint von etwas anderem abhängig zu sein, das das SF-Buch nicht klar macht, aber ich kann nicht herausfinden, was.
Cool, danke, das funktioniert perfekt. Es ist auch sehr hilfreich, mich auf die Datei induction.v zu verweisen. Es war mir nicht in den Sinn gekommen, dass Code in der v-Datei enthalten sein würde, nicht im HTML-Code. Also, was bedeutet das, dass Case nicht etwas ist, das in die Sprache eingebaut ist, sondern etwas, das die SF-Autoren hinzugefügt haben, um einen Beweis zu kommentieren? Ist das eine gängige Praxis oder etwas, das SFs Art, Dinge zu tun, eigen ist? Außerdem bin ich mir nicht sicher, ob ich verstehe, warum das "Case" -Stück besser ist als nur ein einfacher Kommentar wie (* case b = true *). – jcb
@quadelirus Das 'Case'-Zeug wird einen Fehler werfen und dadurch das Debuggen erleichtern, wenn sich etwas ändert. Beispiel: Wenn Sie eine Induktion über 'nat's durchführen und Ihre Basis (' O') die Taktik nach einer Änderung nicht mehr löst, wird ein Fehler auf 'Case' n = S n '"' geworfen, anstatt weiterzugehen und Anwenden des "S" -Falls auf den (noch nicht abgeschlossenen) "O" -Fall. – nobody
@quadelirus Diese 'Case'-Marker können in anderen Entwicklungen als den Software-Grundlagen gefunden werden, aber es gibt auch andere Stile. Ich persönlich ziehe „Chlipala Stil“ beweisen (dh bis zu dem Punkt zu automatisieren, wo die Beweise kurz genug sind, dass man einfach keinen 'Case' Marker braucht.) - siehe http://adam.chlipala.net/cpdt/ für noch ein Coq-Buch. – nobody