Skip to content
Snippets Groups Projects

Sammlung von Coq-Übungen

Beschreibung

Ich versuche bzw. habe hier versucht, eine Mini-Sammlung an Coq-Übungen zu erstellen. Diese sind teilweise bewusst einfach, um sich an die Standard-Taktiken zu gewöhnen.

Aufbau

Die Files bauen teilweise inhaltlich aufeinander auf, sodass es sinnvoll ist, diese in einer bestimmten Reihenfolge zu bearbeiten. Ich versuche das durch die Spalte "Abhängigkeiten" in der File-Liste darzustellen.

File-Liste

File Beschreibung Anmerkungen Abhängigkeiten
IntroElim Im Prinzip eine Sammlung der grundlegenden Einführungs- und Eliminierungsregeln, ähnlich zum Fitch-Kalkül.
Laws Eine Sammlung verschiedener Gesetze der klassischen Logik IntroElim
SomeExamples Verschiedene zusammengewürfelte Beispiele. Laws
Forall Simple Beispiele zu Allquantoren IntroElim
Exists Simple Beispiele zu Existenzquantoren IntroElim
Groups Anwendungsbeispiel für First-Order-Logic Die Darstellung von Gruppen, wie ich sie hier benutze, ist meinen Augen nicht wirklich praktisch für die Weiterverwendung. Vielmehr dient die Darstellung der expliziten Nutzung von möglichst vielen Elementen von FOL. Forall, Exists
Induction Der Versuch, Induktion anschaulich mit Hilfe von Coq an Beispielen zu zeigen. Könnte etwas komplex zum Einstieg sein. Verständnis von FOL in Coq hilfreich. LawsFOL

Installation

Dieses Projekt benötigt keine detailreiche Installationsanleitung, man kann es einfach auf Gitlab klonen:

git clone git@gitlab.cs.fau.de:oc59yqul/coq-exercises.git

Usage

Dieses Projekt dient zum Üben von Coq-Beweisen. Entsprechend sind die Beweise noch nicht vorhanden, sondern sollen aktiv eingefügt werden. Insbesondere stellt dieses Projekt also keine Library oder sonst etwas dar.

Tipps zur Bearbeitung

  • Die einzelne Theoreme sind jeweils noch nicht bewiesen. Um die Files sinnvoll zu bearbeiten, sollte man die Zeile Admitted. durch einen entsprechenden Beweis gefolgt von Qed. ersetzen.
  • Die Verwendung von tauto. ist hilfreich, um sich von der Beweisbarkeit eines Theorems zu überzeugen. Achtung: Wenn tauto. das aktuelle Goal nicht löst, heißt das nicht zwingend, dass es unlösbar ist. tauto. arbeitet nur auf rein logischen Aussagen.
  • Mit dem Befehl Restart. kann man den Beweis des aktuellen Theorems zurücksetzen. Das ist nützlich, um verschiedene Beweismethoden aufzuschreiben.
  • Mit unfold "~ _". kann man die Coq-Definition der Negation sichtbar machen.

Contributing

Ich freue mich über konkrete Verbesserungsvorschläge. Diese können

  • völlig unkonkret über Issues oder
  • konkret über Patches oder Merge Requests

eingebracht werden. Bei Bedarf füge ich einzelne Personen auch gerne als Developer dem Repo hinzu, falls dies den Workflow erleichtert.

Aktuelle TODO's

Eine (sicherlich nicht vollständige Liste) ist hier zu finden:

  • Alle Issues, die bisher nicht assigned sind.
  • Induction.v könnte man auf verschiedene Weisen erweitern:
    • Weitere Funktionen selbst definieren, dazu geben wir ein paar Tests (Beispiele und Theoreme) vor. Vermutlich ähnlich zu zu SemProg/Software Foundations vom Prinzip her, macht aber vermutlich auch Sinn, Beispiele für solche rekursiven Definition gibt es ja schon.
    • Weitere rekursive Datentypen, eventuell auch mal eine Struktur ohne irgendeinen größeren Hintergrund.

Feedback & Kritik

Auch mit Blick auf eine Erweiterung der Aufgaben hier freue ich mich über potenzielles Feedback, z.B. per Mail oder Issue. Es ist interessant zu wissen, welchen Nutzen dieses kleine Projekt hat.

Kontakt

Ich bin u.A. per E-Mail erreichbar.