Vielleicht möchten Sie eine halbautomatische Proof-Methode ausprobieren. Nur um etwas anderes zu erreichen;) Wenn Sie zum Beispiel eine Java-Spezifikation von Prims und Kruskals Algorithmen haben, die optimal auf demselben Graphenmodell aufbauen, können Sie die KeY Prover verwenden, um die Äquivalenz des Algorithmus zu beweisen.
Der entscheidende Teil besteht darin, Ihre Beweispflicht in Dynamic Logic zu formalisieren (dies ist eine Erweiterung der Logik erster Ordnung mit Arten und Mitteln der symbolischen Ausführung von Java-Programmen). Die Formel zu beweisen, könnte die folgenden (skizzenhaft) Muster entspricht:
\forall Graph g. \exists Tree t.
(<{KRUSKAL_CODE_HERE}>resultVar1=t) <-> (<{PRIM_CODE_HERE}>resultVar2=t)
Dies drückt aus, dass für alle Graphen, beide Algorithmen beenden und das Ergebnis ist der gleiche Baum.
Wenn Sie Glück haben und Ihre Formel (und Algorithmusimplementierungen) richtig sind, kann KeY es automatisch für Sie beweisen. Falls nicht, müssen Sie möglicherweise einige quantifizierte Variablen instanziieren, was es erforderlich macht, den vorherigen Beweisbaum zu untersuchen.
Nachdem Sie die Sache mit KeY bewiesen haben, können Sie entweder froh sein, etwas gelernt zu haben oder einen manuellen Beweis aus dem KeY-Beweis zu rekonstruieren - das kann eine langwierige Aufgabe sein, da KeY viele Java-spezifische Regeln kennt sind nicht leicht zu verstehen. Vielleicht können Sie jedoch etwas wie das Extrahieren einer Herbrand-Disjunktion aus den Begriffen ausführen, die KeY verwendet hat, um existenzielle Quantoren auf der rechten Seite von Sequenzen im Beweis zu instanziieren.
Nun, ich denke, dass KeY ist ein interessantes Tool und mehr Menschen gewöhnen sollten kritischen Java-Code mit Tool wie das beweisen;)
versuchen mathoverflow.com. Ich denke, du wirst mehr Glück dort haben. – Toad
Ich denke nicht, dass diese Art von Frage ist, wofür matheflow.com ist. –