Введение

ACL2 (A Computational Logic for Applicative Common Lisp) – это программная система, состоящая из языка программирования, расширяемой теории в логике первого порядка и автоматического доказателя теорем. ACL2 разработан для поддержки автоматизированного рассуждения в индуктивных логических теориях, главным образом для верификации программного и аппаратного обеспечения. Язык ввода и реализация ACL2 написаны на Common Lisp. ACL2 является свободным программным обеспечением с открытым исходным кодом.

Обзор

Язык программирования ACL2 является аппликативным (не имеющим побочных эффектов) вариантом Common Lisp. ACL2 не имеет строгой типизации. Все функции ACL2 являются тотальными, то есть каждая функция отображает каждый объект во вселенной ACL2 в другой объект этой же вселенной. Базовая теория ACL2 аксиоматизирует семантику языка программирования и его встроенных функций. Пользовательские определения в языке программирования, удовлетворяющие принципу определимости, расширяют теорию таким образом, чтобы сохранить её логическую непротиворечивость. Ядро доказателя теорем ACL2 основано на переписывании термов, и это ядро расширяемо: теоремы, открытые пользователями, могут использоваться как ad hoc методы доказательства для последующих утверждений. ACL2 задуман как версия теоремы Бойера — Мура, NQTHM, обладающая «индустриальной надёжностью». С этой целью ACL2 имеет множество средств, поддерживающих разработку интересных математических и вычислительных теорий с соблюдением принципов чистого проектирования. ACL2 также выигрывает в эффективности благодаря тому, что построен на Common Lisp: например, одна и та же спецификация, лежащая в основе индуктивной верификации, может быть скомпилирована и запущена непосредственно. В 2005 году авторы семейства систем доказательства теорем Boyer — Moore, в которое входит ACL2, получили премию ACM Software System Award «за новаторскую разработку и создание высокоэффективного доказателя теорем ( ) как инструмента формальных методов для верификации критически важных аппаратных и программных средств».

Доказательства

ACL2 нашла широкое применение в промышленности. В 1995 году J. Strother Moore, Matt Kaufmann и Tom Lynch использовали ACL2 для доказательства корректности операции деления чисел с плавающей точкой в микропроцессоре AMD K5 после обнаружения ошибки Pentium FDIV. Обзор некоторых применений системы представлен на странице "Интересные приложения" в документации ACL2. Среди промышленных пользователей ACL2 — компании AMD, Arm, Centaur Technology, IBM, Intel, Oracle и Collins Aerospace.