Wie funktioniert die Taktik bei Proofassistenten?
Ich vermute, dass diese Antwort ein bisschen verwirrend sein wird.
Erstens ist es nicht genug zu fragen, "wie Taktiken in Proof-Assistenten funktionieren", weil sie in verschiedenen Proof-Assistenten unterschiedlich funktionieren. Heutzutage werden zwei Hauptklassen von Assistenten verwendet: die vom ursprünglichen LCF abgeleiteten wie Isabelle, HOL und HOL light und typentheoretische Proof-Assistenten wie Coq und Matita. In diesen zwei verschiedenen Klassen von Proof-Assistenten funktioniert die Taktik auf unterschiedliche Art und Weise. Ein Spiegelbild dessen, was unter der Motorhaube in z. B. Isabelle vor sich geht, unterscheidet sich erheblich von dem, was unter der Motorhaube in z. B. Matita vor sich geht.
Fragen Sie sich: Was ist los, wenn wir versuchen, einen Satz P in Matita zu beweisen? Wir führen ein metavariables X mit Typ P ein. Wir spielen dann sozusagen ein Spiel, in dem wir X verfeinern und dem unvollständigen Term mehr und mehr Struktur hinzufügen, bis wir einen vollständigen Lambda-Term erhalten (dh der keine Metavariablen mehr enthält). Sobald wir im Besitz eines vollständigen Lambda-Terms sind, überprüfen wir diesen in Bezug auf P und stellen sicher, dass er den erforderlichen Typ aufweist. Wir sehen dann, dass in Coq und Matita eine Taktik lediglich eine Funktion von unvollständigen Beweisbegriffen zu unvollständigen Beweisbegriffen ist, was dem Begriff nach der Anwendung hoffentlich eine gewisse Struktur hinzufügt (diese Beobachtung hat einige der jüngsten Arbeiten von z. B. Jojgov motiviert) , Pientka und andere).
Zum Beispiel führt die Matita-Taktik "Intro" eine Lambda-Abstraktion über den vorhandenen Begriff ein, "Cases" führt einen Übereinstimmungsausdruck in den Begriff ein und "Apply" führt eine Anwendung eines Begriffs auf den anderen ein. Diese grundlegenden Taktiken können mithilfe von Funktionen höherer Ordnung zu komplexeren zusammengefügt werden. Die Grundidee ist jedoch immer dieselbe: Eine Taktik zielt immer darauf ab, einem unvollständigen Beweisbegriff ein wenig Struktur zu verleihen.
Beachten Sie, dass Implementierer versuchen, einen Begriff zurückzugeben, der nach jeder taktischen Anwendung erneut überprüft wird. Genau genommen müssen sie dies nicht tun, da für typentheoretische Beweisassistenten nur gilt, dass wir, wenn der Benutzer den Beweis vorlegt, über einen Beweisbegriff verfügen, der den Satz P erfüllt. Wie wir bei diesem Beweis Begriff angekommen ist weitgehend unerheblich. Sowohl Coq als auch Matita sind jedoch bestrebt, dem Benutzer einen (möglicherweise unvollständigen) Beweisbegriff zurückzugeben, der nach jeder taktischen Anwendung überprüft wird. Diese Invariante kann (und tut es oft) jedoch scheitern, insbesondere im Hinblick auf die beiden syntaktischen Prüfungen, die CIC-basierte Proof-Assistenten durchführen müssen.
Insbesondere können wir einen scheinbar gültigen Beweis erbringen, indem wir eine Reihe von Taktiken anwenden, bis keine offenen Ziele mehr übrig sind. Wir kommen dann zu Qed, dem vermeintlichen Beweis, nur um herauszufinden, dass sich Matitas Termination Checker oder sein strenger Positivitätsprüfer beschwert, da der durch die Taktik erzeugte Beweisbegriff eine dieser syntaktischen Prüfungen ungültig gemacht hat (dh eine Metavariable in der Argumentposition zu Ein rekursiver Aufruf wurde mit einem Ausdruck instanziiert, der syntaktisch nicht kleiner als das ursprüngliche Argument ist. Dies ist ein Hinweis darauf, dass die CIC-Typentheorie in gewissem Sinne nicht "stark genug" ist und die syntaktischen Anforderungen an die Positivität oder Größe in ihren Typen nicht widerspiegelt (eine Beobachtung, die Abels Größentypen motiviert, und einige neuere Arbeiten zu Positivitätstypen ).
Auf der anderen Seite sind Proof-Assistenten im LCF-Stil ganz anders. Hier besteht der Kernel aus einem Modul (normalerweise in einer Variante von ML implementiert), das einen abstrakten Typ "thm" enthält, und Funktionen, die die Inferenzregeln der Logik des Proofassistenten implementieren, "thm" auf "thm" abbilden und so her. Wir verlassen uns auf die Typisierungsdisziplin von ML, um sicherzustellen, dass die einzige Möglichkeit, einen Wert vom Typ "thm" zu konstruieren, über diese Inferenzregeln (grundlegende Taktik) besteht. Isabelles Kernel ist da .
Beweise bestehen dann aus einer Reihe von Anwendungen dieser Basistaktiken (oder komplexeren, größeren Taktiken, die wiederum durch Aneinanderreihen einfacherer Taktiken mit Funktionen höherer Ordnung hergestellt werden - in Isabelle können die Funktionen höherer Ordnung, die Taktiken genannt werden) hier gesehen werden ). Im Gegensatz zu typentheoretischen Beweisassistenten muss ein Assistent im LCF-Stil keinen expliziten Zeugenausdruck behalten. Die Korrektheit des Beweises wird durch die Konstruktion und unser Vertrauen in die Schreibdisziplin von ML garantiert (viele Assistenten, z. B. Isabelle, generieren jedoch Beweisbedingungen für ihre Beweise).