Одна вещь, которая, я думаю, вам покажется интересной, состоит в том, что термин «доказательство теорем» сильно различается в зависимости от того, в какой области вы находитесь. В то время как они - в абстрактной форме - несколько связаны, практические доказательства теорем (как и те см. подробности, изложенные в «Руководстве по автоматическому рассуждению», имеет меньшее отношение к Кок или Изабель, чем вы думаете.
Когда я впервые начал изучать теорию, связанную с доказательством теорем, первой книгой, которую я прочитал (хотя и довольно устарел?), Была отличная логика Мелвина Фиттинга первого порядка и автоматическое доказательство теорем. Эта книга была действительно превосходной, в ней были рассмотрены темы, которые вы увидите, связанные с логикой низшего порядка, где вы действительно можете получить достаточную автоматизацию. Тип логики, которую вы изучаете, должен быть продиктован тем, о чем вы хотите рассуждать, а не столько теоремой, доказывающей ради этого. Например, в то время как логика первого порядка дает вам достаточную выразительность и способность к рассуждению, большинство сообщества языков программирования (где я попал в эти дни) отошло от более старой школы доказательства теорем и проверки моделей (которые входят в ведро вещей, которые более разрешимы, но менее выразительны).
Однако не следует понимать, что такие вещи, как рассуждения первого порядка и проверка моделей, не были чрезвычайно полезны на практике. Они были! Вы можете взглянуть на ACL2 как на пример испытателя, построенного на основе логики первого порядка, который добился удивительного успеха в промышленной сфере. Наряду с этим, было также удивительное количество развития в решении SMT. Современные решатели SMT построены на основе очень мощных решателей SAT (в основном, благодаря открытиям в течение последних двадцати лет для улучшений DPLL) и нашли широкое применение в таких вещах, как символьное выполнение.
Однако, как я уже сказал, хотя более традиционное «доказательство теорем» - это весело, есть еще много чего нужно выучить. Например, изучение Coq имеет мало общего с изучением инструментов автоматизации, которые оно дает вам, и имеет гораздо больше общего с изучением теории типов, на которой она основана (исчисление предикатов коиндуктивных конструкций). Если вы не привыкли к конструктивной логике, изоморфизму Карри Ховарда или теории типов, вам будет интересно изучать эти инструменты, но я с трудом могу подумать, что они слишком тесно связаны с тем, что вы видите в первом томе. из справочника.
Так что решайте, что вы хотите сделать: проверяйте модели и теоремы в логике первого порядка или используйте мощную теорию типов, чтобы рассуждать о правильности ваших программ (или теорем в конструктивной логике). Если это первое, узнайте о более автоматизированных методах, основанных на дедукции, если это второе, узнайте больше о Coq, HOL и т. Д. Кстати, если вы хотите изучить Coq, хотя приведенные выше ссылки хороши, я думаю, что Есть две действительно основные ссылки для изучения Coq:
Книга Бенджамина Пирса по основам программного обеспечения (доктор Пирс - отличный писатель, и я бы посоветовал вам также взглянуть на его более популярную "кирпичную книгу", если вы еще этого не сделали).
Сертифицированное программирование с зависимыми типами (Адам Члипала также неплохо пишет, хотя его книги предполагают немного большую зрелость и интеллект, чем, возможно, более простое введение Пирса).