Eine Sache, die Sie meiner Meinung nach interessant finden werden, ist, dass der Begriff "Theorem Beweis" sehr unterschiedlich ist, je nachdem, in welchem Bereich Sie sich befinden (siehe ausführlich im Handbuch des automatisierten Denkens) hat weniger mit Coq oder Isabelle zu tun, als man denkt.
Als ich mich zum ersten Mal auf den Weg machte, um etwas über das Prüfen von Theoremen zu lernen, war das erste Buch, das ich las (obwohl es jetzt ziemlich alt ist?), Melvin Fittings ausgezeichnete Logik erster Ordnung und automatisierte Theoremprüfung. Dieses Buch war wirklich exzellent und behandelte die Arten von Themen, die Sie im Zusammenhang mit der Logik niedrigerer Ordnung sehen werden, wo Sie tatsächlich ein gutes Maß an Automatisierung erhalten können. Die Art von Logik, die Sie lernen, sollte von dem diktiert werden, worüber Sie argumentieren möchten, und nicht so sehr von dem Satz, der sich dafür als nützlich erweist. Zum Beispiel, während Logik erster Ordnung Ihnen ein gutes Maß an Ausdruckskraft und Denkvermögen verleiht, hat sich der Großteil der Programmiersprachen-Community (in der ich in diesen Tagen gelandet bin) von der älteren Schule der Theorembeweisung und Modellprüfung (auf die wir eingehen) verabschiedet der Eimer mit Dingen, die entscheidender, aber weniger aussagekräftig sind).
Das soll jedoch nicht heißen, dass Dinge wie Argumentation erster Ordnung und Modellprüfung in der Praxis nicht besonders nützlich waren. Sie waren! Sie können sich ACL2 als Beispiel für einen Prover ansehen, der auf Logik erster Ordnung aufgebaut ist und im industriellen Bereich erstaunliche Erfolge erzielt hat. Daneben hat sich auch das Lösen von SMT erstaunlich stark weiterentwickelt. Moderne SMT-Solver bauen auf sehr leistungsfähigen SAT-Solvern auf (meistens durch Entdeckungen in den letzten zwanzig Jahren zur Verbesserung von DPLL) und haben in Dingen wie der symbolischen Ausführung eine große Verwendung erfahren.
Wie ich bereits sagte, macht das traditionellere "Theorem-Beweisen" zwar Spaß, aber es gibt noch viel mehr zu lernen. Das Erlernen von Coq zum Beispiel hat wenig mit dem Erlernen der Automatisierungswerkzeuge zu tun, die es Ihnen gibt, und hat viel mehr mit dem Erlernen der Typentheorie zu tun, auf der es basiert (der prädikativen Berechnung von coinduktiven Konstruktionen). Wenn Sie nicht an konstruktive Logik, Curry-Howard-Isomorphismus oder Typentheorie gewöhnt sind, werden Sie eine aufregende Zeit damit verbringen, diese Werkzeuge zu erlernen, aber ich kann kaum glauben, dass sie zu eng mit den Dingen zusammenhängen, die Sie im ersten Band sehen des Handbuchs.
Entscheiden Sie also, was Sie tun möchten: Überprüfen Sie Modelle und Theoreme in der Logik erster Ordnung oder verwenden Sie eine leistungsstarke Typentheorie, um über die Richtigkeit Ihrer Programme (oder Theoreme in der konstruktiven Logik) zu urteilen. Wenn es das erste ist, lernen Sie mehr über automatisierte deduktionsbasierte Techniken, wenn es das zweite ist, lernen Sie mehr über Coq, HOL, etc ... Übrigens, wenn Sie Coq lernen möchten, während die obigen Referenzen gut sind, denke ich, dass Es gibt zwei wirklich wichtige Referenzen für das Lernen von Coq:
Benjamin Pierces Software-Grundlagenbuch (Dr. Pierce ist ein ausgezeichneter Autor, und ich würde empfehlen, dass Sie sich auch sein populäreres "Ziegelbuch" ansehen, wenn Sie es noch nicht getan haben).
Zertifizierte Programmierung mit abhängigen Typen (Adam Chlipala schreibt auch recht gut, obwohl seine Bücher etwas reifer und intelligenter sind als Pierces vielleicht einfachere Einführung.)