Coq -Coq
Entwickler | Das Coq-Entwicklungsteam |
---|---|
Erstveröffentlichung | 1. Mai 1989 | (Version 4.10)
Stabile Version | |
Repository | github |
Geschrieben in | OCaml |
Betriebssystem | Plattformübergreifend |
Verfügbar in | Englisch |
Typ | Beweisassistent |
Lizenz | LGPLv2.1 |
Webseite | coq |
Coq ist ein interaktiver Theorembeweiser, der erstmals 1989 veröffentlicht wurde. Er ermöglicht das Ausdrücken mathematischer Behauptungen, überprüft mechanisch Beweise dieser Behauptungen, hilft beim Auffinden formaler Beweise und extrahiert ein zertifiziertes Programm aus dem konstruktiven Beweis seiner formalen Spezifikation . Coq arbeitet innerhalb der Theorie des Kalküls induktiver Konstruktionen , einer Ableitung des Konstruktionskalküls . Coq ist kein automatisierter Theorembeweiser, beinhaltet aber automatische Theorembeweistaktiken ( Prozeduren ) und verschiedene Entscheidungsverfahren .
Die Association for Computing Machinery zeichnete Thierry Coquand , Gérard Huet , Christine Paulin-Mohring , Bruno Barras, Jean-Christophe Filliâtre, Hugo Herbelin, Chetan Murthy, Yves Bertot und Pierre Castéran mit dem ACM Software System Award 2013 für Coq aus.
Der Name „Coq“ ist ein Wortspiel mit dem Namen Thierry Coquand, Calculus of Constructions oder „CoC“, und folgt der französischen Informatiktradition, Software nach Tieren zu benennen (coq bedeutet auf Französisch Hahn ) .
Überblick
Als Programmiersprache betrachtet, implementiert Coq eine abhängig typisierte funktionale Programmiersprache ; Wenn es als logisches System betrachtet wird, implementiert es eine Typentheorie höherer Ordnung . Die Entwicklung von Coq wird seit 1984 von INRIA unterstützt , jetzt in Zusammenarbeit mit der École Polytechnique , der Universität Paris-Süd , der Universität Paris Diderot und dem CNRS . In den 1990er Jahren war auch ENS Lyon Teil des Projekts. Die Entwicklung von Coq wurde von Gérard Huet und Thierry Coquand initiiert, und mehr als 40 Personen, hauptsächlich Forscher, haben seit seiner Einführung Funktionen zum Kernsystem beigetragen. Das Implementierungsteam wurde nacheinander von Gérard Huet, Christine Paulin-Mohring, Hugo Herbelin und Matthieu Sozeau koordiniert. Coq ist hauptsächlich in OCaml mit etwas C implementiert . Das Kernsystem kann über einen Plug-in- Mechanismus erweitert werden.
Der Name coq bedeutet auf Französisch „ Hahn “ und stammt aus einer französischen Tradition, Forschungs- und Entwicklungsinstrumente nach Tieren zu benennen. Bis 1991 implementierte Coquand eine Sprache namens Calculus of Constructions , die damals einfach CoC genannt wurde. 1991 wurde eine neue Implementierung basierend auf dem erweiterten Kalkül der induktiven Konstruktionen gestartet und der Name wurde von CoC in Coq geändert, in einem indirekten Hinweis auf Coquand, der den Konstruktionskalkül zusammen mit Gérard Huet entwickelte und zum Kalkül der induktiven Konstruktionen beitrug mit Christine Paulin-Mohring.
Coq bietet eine Spezifikationssprache namens Gallina (" Henne " auf Latein, Spanisch, Italienisch und Katalanisch). In Gallina geschriebene Programme haben die schwache Normalisierungseigenschaft , was bedeutet, dass sie immer terminieren. Dies ist eine charakteristische Eigenschaft der Sprache, da Endlosschleifen (nicht terminierende Programme) in anderen Programmiersprachen üblich sind, und eine Möglichkeit darstellt, das Halteproblem zu vermeiden .
Als Beispiel ein Beweis der Kommutativität der Addition auf natürliche Zahlen in Coq:
plus_comm =
fun n m : nat =>
nat_ind (fun n0 : nat => n0 + m = m + n0)
(plus_n_0 m)
(fun (y : nat) (H : y + m = m + y) =>
eq_ind (S (m + y))
(fun n0 : nat => S (y + m) = n0)
(f_equal S H)
(m + S y)
(plus_n_Sm m y)) n
: forall n m : nat, n + m = m + n
nat_ind
steht für mathematische Induktion , eq_ind
für Substitution von Gleichen und f_equal
für die Übernahme der gleichen Funktion auf beiden Seiten der Gleichheit. Frühere Theoreme werden referenziert und zeigen und .
Bemerkenswerte Verwendungen
Vierfarbensatz und SSReflect-Erweiterung
Georges Gonthier von Microsoft Research in Cambridge , England , und Benjamin Werner von INRIA verwendeten Coq, um einen überschaubaren Beweis des Vierfarbensatzes zu erstellen , der 2002 fertiggestellt wurde. Ihre Arbeit führte zur Entwicklung des Pakets SSReflect ("Small Scale Reflection") , was eine bedeutende Erweiterung von Coq war. Trotz seines Namens sind die meisten von SSReflect zu Coq hinzugefügten Funktionen Allzweckfunktionen und nicht auf den rechnerischen Reflexionsstil des Beweises beschränkt. Zu diesen Funktionen gehören:
- Zusätzliche praktische Notationen für unwiderlegbare und widerlegbare Mustererkennung auf induktiven Typen mit einem oder zwei Konstruktoren
- Implizite Argumente für Funktionen, die auf Nullargumente angewendet werden, was beim Programmieren mit Funktionen höherer Ordnung nützlich ist
- Prägnante anonyme Argumente
- Eine verbesserte
set
Taktik mit stärkerem Matching - Unterstützung für Reflexion
SSReflect 1.11 ist frei verfügbar, doppelt lizenziert unter der Open-Source- Lizenz CeCILL-B oder CeCILL-2.0 und kompatibel mit Coq 8.11.
Andere Anwendungen
- CompCert : ein optimierender Compiler für fast alle C-Programmiersprachen , die weitgehend in Coq programmiert und nachweislich korrekt sind.
- Disjunkte Datenstruktur : Korrektheitsbeweis in Coq wurde 2007 veröffentlicht.
- Feit-Thompson-Theorem : Der formale Beweis mit Coq wurde im September 2012 abgeschlossen.
Siehe auch
- Konstruktionsrechnung
- Curry-Howard-Korrespondenz
- Intuitionistische Typentheorie
- Liste der Beweisassistenten
Verweise
Externe Links
- The Coq Proof Assistant – die offizielle englische Website
- coq/coq – das Quellcode-Repository des Projekts auf GitHub
- JsCoq Interactive Online System – ermöglicht die Ausführung von Coq in einem Webbrowser, ohne dass eine Softwareinstallation erforderlich ist
- Alectryon – eine Bibliothek zur Verarbeitung von Coq-Snippets, die in Dokumente eingebettet sind und Ziele und Botschaften für jeden Coq-Satz anzeigen
- Coq-Wiki
- Bibliothek für mathematische Komponenten – weit verbreitete Bibliothek mathematischer Strukturen, zu der auch die SSReflect-Beweissprache gehört
- Konstruktives Coq-Lager in Nijmegen
- Mathe-Klassen
- Coq bei Open Hub
- Lehrbücher
- The Coq'Art – ein Buch über Coq von Yves Bertot und Pierre Castéran
- Zertifizierte Programmierung mit abhängigen Typen – Online- und gedrucktes Lehrbuch von Adam Chlipala
- Software Foundations – Online-Lehrbuch von Benjamin C. Pierce et al.
- Eine Einführung in die Reflexion im kleinen Maßstab in Coq – ein Tutorial zu SSReflect von Georges Gonthier und Assia Mahboubi
- Tutorials
- Einführung in den Coq Proof Assistant – Videovortrag von Andrew Appel am Institute for Advanced Study
- Video-Tutorials für den Coq-Proof-Assistenten von Andrej Bauer.