Разработчики) | Команда разработчиков Coq |
---|---|
Начальная версия | 1 мая 1989 г . | (версия 4.10)
Стабильный выпуск | 8.13.1 [1] / 22 февраля 2021 г . |
Предварительный выпуск | 8.13 + beta1 [2] / 7 декабря 2020 г . |
Репозиторий | github |
Написано в | OCaml |
Операционная система | Кроссплатформенность |
Доступно в | английский |
Тип | Помощник доказательства |
Лицензия | LGPLv2.1 |
Веб-сайт | coq |
Coq - это интерактивное средство доказательства теорем, впервые выпущенное в 1989 году. Оно позволяет выражать математические утверждения, механически проверяет доказательства этих утверждений, помогает находить формальные доказательства и извлекает сертифицированную программу из конструктивного доказательства ее формальной спецификации . Coq работает в рамках теории исчисления индуктивных построений , производной от исчисления построений . Coq не является автоматическим средством доказательства теорем, но включает в себя тактику ( процедуры ) автоматического доказательства теорем и различные процедуры принятия решений .
Ассоциация вычислительной техники награждена Тьерри Кокана , Gérard HUET , Кристин Паулина-Möhring , Бруно Баррас, Жан-Кристоф Filliâtre Уго Herbelin, Четан Мурти, Ив Берто, и Пьер Castéran с 2013 годом премией ACM Software System для Coq.
Coq - это игра слов от имени Тьерри Коквана, Calculus of Constructions или «CoC», которая следует французской традиции называть инструменты в честь животных ( coq по-французски означает петух). [3]
Если рассматривать как язык программирования, Coq реализует функциональный язык программирования с зависимой типизацией ; [4], если рассматривать ее как логическую систему, она реализует теорию типов более высокого порядка . Разработка Coq с 1984 года поддерживается INRIA , теперь в сотрудничестве с École Polytechnique , Университетом Париж-Юг , Парижским университетом Дидро и CNRS . В 1990-х годах ENS Lyon также был частью проекта. Разработка Coq была инициирована Жераром Юэ и Тьерри Коканом, и с момента ее создания более 40 человек, в основном исследователи, внесли свой вклад в основную систему. Группу внедрения последовательно координировали Жерар Юэ, Кристин Полен-Моринг, Уго Эрбелен и Матье Созо. Coq в основном реализуется в OCaml с небольшим количеством C . Ядро система может быть расширена путем в плагин механизма. [5]
Название coq по- французски означает « петух » и происходит от французской традиции называть инструменты разработки в честь животных. [6] Вплоть до 1991 года Кокванд реализовывал язык под названием « Исчисление конструкций», а в то время он назывался просто CoC. В 1991 году была начата новая реализация, основанная на расширенном исчислении индуктивных построений, и название было изменено с CoC на Coq в косвенной ссылке на Кокванда, который разработал Исчисление конструкций вместе с Жераром Хуэ и внес свой вклад в Исчисление индуктивных построений. с Кристин Полин-Моринг. [7]
Coq предоставляет язык спецификаций под названием Gallina [8] (« курица » на латыни, испанском, итальянском и каталонском языках). Программы, написанные на Gallina, обладают слабым свойством нормализации , что означает, что они всегда завершаются. Это отличительное свойство языка, поскольку бесконечные циклы (программы без завершения) распространены в других языках программирования [9], и это один из способов избежать проблемы остановки .
Доказательство коммутативности сложения натуральных чисел в Coq. |
---|
plus_comm = fun n m : nat => nat_ind ( fun n0 : nat => n0 + m = m + n0 ) ( plus_n_0 m ) ( fun ( y : nat ) ( H : y + m = m + y ) => eq_ind ( S ( m + y )) ( забава n0 : nat => S ( y + m ) = n0 ) ( f_equal S H ) ( m + S y ) ( plus_n_Sm m y )) n : для всех n m : nat , n + m = m + n |
nat_ind означает математическую индукцию , eq_ind замену равных и f_equal взятие одной и той же функции по обе стороны от равенства. Ссылки на более ранние теоремы показывают и . |
Джорджес Гонтье из Microsoft Research в Кембридже , Англия, и Бенджамин Вернер из INRIA использовали Coq для создания проверяемого доказательства теоремы о четырех цветах , которое было завершено в 2002 году. [10] Их работа привела к разработке SSReflect («Small Scale Reflection»). "), который был значительным расширением Coq. [11] Несмотря на название, большинство функций, добавленных в Coq с помощью SSReflect, являются функциями общего назначения и не ограничиваются вычислительным стилем доказательства. Эти функции включают:
set
тактика с более мощным соответствиемSSReflect 1.11 находится в свободном доступе, имеет двойную лицензию по лицензии CeCILL-B или CeCILL-2.0 с открытым исходным кодом и совместим с Coq 8.11. [12]
Викискладе есть медиафайлы по теме Coq . |