El demostrador Rocq (anteriormente llamado Coq ) es un demostrador de teoremas interactivo lanzado por primera vez en 1989. Permite la expresión de afirmaciones matemáticas, la verificación mecánica de las pruebas de estas afirmaciones, ayuda a encontrar pruebas formales mediante rutinas de automatización de pruebas y la extracción de un programa certificado a partir de la prueba constructiva de su especificación formal .
Rocq se basa en la teoría del cálculo de construcciones inductivas, una derivación del cálculo de construcciones . Rocq no es un demostrador automático de teoremas , pero incluye tácticas ( procedimientos ) de demostración automática de teoremas y diversos procedimientos de decisión .
La Association for Computing Machinery otorgó a Thierry Coquand , Gérard Huet , Christine Paulin-Mohring , Bruno Barras, Jean-Christophe Filliâtre, Hugo Herbelin, Chetan Murthy, Yves Bertot y Pierre Castéran el premio ACM Software System Award 2013 por Rocq (cuando se llamaba Coq).
Descripción general
Considerado como un lenguaje de programación , Rocq implementa un modelo de programación funcional con tipos dependientes ; [ 2 ] considerado como un sistema lógico, implementa una teoría de tipos de orden superior . El desarrollo de Rocq ha sido apoyado desde 1984 por el Instituto Francés de Investigación en Ciencias de la Computación y Automatización (INRIA), en colaboración con muchas otras instituciones de investigación francesas e internacionales. El desarrollo de Rocq fue iniciado por Gérard Huet y Thierry Coquand, y más de 200 personas, [ 3 ] principalmente investigadores, han contribuido con funcionalidades al sistema central desde su creación. El equipo de implementación ha sido coordinado sucesivamente por Gérard Huet, Christine Paulin-Mohring, Hugo Herbelin y Matthieu Sozeau. Rocq está implementado principalmente en OCaml con algo de C. El sistema central puede extenderse mediante un mecanismo de complementos . [ 4 ]
Rocq proporciona un lenguaje de especificación llamado Gallina. [ 5 ] Los programas escritos en Gallina tienen la propiedad de normalización débil , lo que implica que siempre terminan. Esta es una propiedad distintiva del lenguaje, ya que los bucles infinitos (programas que no terminan) son comunes en otros lenguajes de programación. [ 6 ]
Como ejemplo de una demostración escrita en Rocq, consideremos la demostración de un lema que establece que tomar el sucesor de un número natural invierte su paridad. La táctica de plegado-desplegado introducida por Danvy [ 7 ] se utiliza para simplificar la demostración.
Desde Stdlib Require Importar Arith Nat Bool .Fixpoint is_even ( n : nat ) : bool := match n with | 0 => true | S n' => negb ( is_even n' ) end .Lema is_even_0 : is_even 0 = verdadero . Prueba . reflexividad . Qed .Lema is_even_S n : is_even ( S n ) = negb ( is_even n ). Demostración . reflexividad . Qed .Lema successor_flips_evenness n : is_even n = negb ( is_even ( S n )). Prueba . reescribe is_even_S . destruct ( is_even n ). * simpl . reflexividad . * simpl . reflexividad . Qed .Esta demostración primero importa la definición de booleanos y números naturales de la biblioteca estándar, y luego define una is_evenfunción que devuelve si un número es par. A continuación, se demuestran tres lemas sobre esta función. El primero simplemente reitera las ecuaciones que la definen is_even, y como Rocq conoce dichas ecuaciones, su demostración es muy breve. El último lema se demuestra con una distinción de casos tras aplicar primero el segundo lema; el asterisco *indica que comienza un nuevo subcaso.
Usos notables
Teorema de los cuatro colores y extensión SSReflect
Georges Gonthier de Microsoft Research en Cambridge , Inglaterra , y Benjamin Werner de INRIA utilizaron Rocq para crear una demostración revisable del teorema de los cuatro colores , que se completó en 2002. [ 8 ] Su trabajo condujo al desarrollo del paquete SSReflect ("Small Scale Reflection"), que fue una extensión significativa de Rocq. [ 9 ] A pesar de su nombre, la mayoría de las características añadidas a Rocq por SSReflect son características de propósito general y no se limitan al estilo de programación reflexiva computacional de demostración. Estas características incluyen:
- Se agregaron notaciones convenientes para la coincidencia de patrones irrefutable y refutable , en tipos inductivos con uno o dos constructores.
- Argumentos implícitos para funciones aplicadas a cero argumentos, lo cual es útil al programar con funciones de orden superior.
- Argumentos anónimos concisos
- Una táctica mejorada
setcon una correspondencia más potente. - Apoyo a la reflexión
SSReflect se distribuye como parte de la distribución principal de Rocq desde Coq 8.7. [ 10 ]
Otras aplicaciones
- CompCert : un compilador optimizador para casi todo el lenguaje de programación C , programado y probado en gran medida en Rocq.
- Estructura de datos de conjuntos disjuntos : la prueba de corrección en Rocq se publicó en 2007. [ 11 ]
- Teorema de Feit-Thompson : la demostración formal utilizando Rocq se completó en septiembre de 2012. [ 12 ]
- Busy beaver : El valor del busy beaver ganador de 5 estados fue descubierto por Heiner Marxen y Jürgen Buntrock en 1989, pero solo se demostró que era el quinto busy beaver ganador —estilizado como BB(5) — en 2024 usando una demostración en Rocq. [ 13 ] [ 14 ]
Lenguaje táctico
Además de construir explícitamente términos de Gallina, Rocq admite el uso de tácticas escritas en el lenguaje integrado Ltac o en OCaml. Estas tácticas automatizan la construcción de pruebas, llevando a cabo pasos triviales u obvios en las mismas. [ 15 ] Varias tácticas implementan procedimientos de decisión para diversas teorías. Por ejemplo, la táctica "ring" decide la teoría de la igualdad módulo axiomas de anillo o semianillo mediante reescritura asociativa - conmutativa . [ 16 ] Por ejemplo, la siguiente prueba establece una igualdad compleja en el anillo de enteros en una sola línea de prueba: [ 17 ]
Require Import ZArith . Open Scope Z_scope . Goal forall a b c : Z , ( a + b + c ) ^ 2 = a * a + b ^ 2 + c * c + 2 * a * b + 2 * a * c + 2 * b * c . intros ; ring . Qed .También se encuentran disponibles procedimientos de decisión integrados para la teoría vacía ("congruencia"), la lógica proposicional ("tauto"), la aritmética lineal entera sin cuantificadores ("lia") y la aritmética lineal racional/real ("lra"). [ 18 ] [ 19 ] Se han desarrollado otros procedimientos de decisión como bibliotecas, incluyendo una para álgebras de Kleene [ 20 ] y otra para ciertos objetivos geométricos . [ 21 ]
Nombre

El antiguo nombre Coq significa ' gallo ' en francés y es un juego de palabras con el nombre de Thierry Coquand, cálculo de construcciones o CoC , y proviene de una tradición francesa de nombrar las herramientas de desarrollo de investigación en honor a animales. [ 22 ] Hasta 1991, Coquand estaba implementando un lenguaje llamado cálculo de construcciones y entonces simplemente se llamaba CoC . En 1991, se inició una nueva implementación basada en el cálculo extendido de construcciones inductivas y el nombre cambió de CoC a Coq en una referencia indirecta a Coquand, quien desarrolló el cálculo de construcciones junto con Gérard Huet y contribuyó al cálculo de construcciones inductivas con Christine Paulin-Mohring. [ 23 ] El 11 de octubre de 2023, el equipo de desarrollo anunció que Coq pasaría a llamarse The Rocq Prover en los meses siguientes y comenzó a actualizar la base de código, el sitio web y las herramientas relacionadas. [ 24 ] El cambio de nombre oficial se produjo con el lanzamiento de Rocq 9.0 en marzo de 2025. [ 25 ] El nuevo nombre hace referencia a Inria Rocquencourt , donde se desarrolló el sistema por primera vez, y está relacionado con el ave mítica Roc , lo que permite mantener las referencias a las aves del nombre anterior. [ 26 ]
Premios
- Premio de Ciencia Abierta 2022 para software de investigación de código abierto en la categoría "Científico y Técnico" [ 27 ]
Véase también
Referencias
- ↑ "Rocq 9.2.0" . 27 de marzo de 2026.
- ↑ Un recorrido por Rocq
- ↑ Breve historia
- ↑ Avigad, Jeremy; Mahboubi, Assia (3 de julio de 2018). Demostración interactiva de teoremas: 9.ª Conferencia Internacional, ITP 2018, celebrada como... Springer. ISBN 9783319948218Consultado el 21 de octubre de 2018 .
- ↑ Chlipala, Adam (7 de junio de 2022). «Universos de biblioteca». Programación certificada con tipos dependientes: una introducción pragmática al asistente de pruebas Coq . MIT Press . ISBN 978-0262026659.
- ↑ Adam Chlipala. "Programación certificada con tipos dependientes": "Biblioteca GeneralRec" . "Biblioteca InductiveTypes" .
- ↑ Danvy, Olivier (2022). "Lemas de plegado-desplegado para el razonamiento sobre programas recursivos utilizando el asistente de pruebas Coq" . Journal of Functional Programming . 32. doi : 10.1017/S0956796822000107 . ISSN 0956-7968 .
- ↑ Gonthier, Georges (2008). "Demostración formal: el teorema de los cuatro colores" (PDF) . Notices of the American Mathematical Society . 55 (11): 1382–1393 . MR 2463991 .
- ↑ Gonthier, Georges; Mahboubi, Assia (2010). "Una introducción a la reflexión a pequeña escala en Coq" . Journal of Formalized Reasoning . 3 (2): 95– 152. doi : 10.6092/ISSN.1972-5787/1979 .
- ↑ "Resumen de cambios de la versión 8.7" . rocq-prover.org .
- ↑ Conchon, Sylvain; Filliâtre, Jean-Christophe (2007). «Una estructura de datos persistente de unión-búsqueda». En Russo, Claudio V.; Dreyer, Derek (eds.). Actas del Taller ACM sobre ML, 2007, Friburgo, Alemania, 5 de octubre de 2007. Association for Computing Machinery. pp. 37–46 . doi : 10.1145/1292535.1292541 . ISBN 978-1-59593-676-9.
- ↑ "El teorema de Feit-Thompson ha sido totalmente comprobado en Coq" . Msr-inria.inria.fr. 20 de septiembre de 2012. Archivado del original el 19 de noviembre de 2016. Consultado el 25 de septiembre de 2012 .
- ↑ " [ 2 de julio de 2024 ] Hemos demostrado que "BB(5) = 47.176.870"" . El desafío del castor ocupado . 2 de julio de 2024 . Consultado el 2 de julio de 2024 .
- ↑ "El desafío del castor ocupado" . bbchallenge.org . Consultado el 2 de julio de 2024 .
- ↑ Kaiser, Jan-Oliver; Ziliani, Beta; Krebbers, Robbert; Régis-Gianas, Yann; Dreyer, Derek (30 de julio de 2018). "Mtac2: tácticas tipadas para el razonamiento hacia atrás en Coq" . Actas de la ACM sobre lenguajes de programación . 2 (ICFP): 78:1–78:31. doi : 10.1145/3236773 . hdl : 21.11116/0000-0003-2E8E-B .
- ↑ Grégoire, Benjamin; Mahboubi, Assia (2005). "Proving Equalities in a Commutative Ring Done Right in Coq". En Hurd, Joe; Melham, Tom (eds.). Theorem Proving in Higher Order Logics: 18th International Conference, TPHOLs 2005, Oxford, Reino Unido, 22-25 de agosto de 2005, Actas . Lecture Notes in Computer Science. Berlín, Heidelberg: Springer. pp. 98-113 . doi : 10.1007/11541868_7 . ISBN 978-3-540-31820-0.
- ↑ "Las familias de tácticas de anillo y campo — Documentación de Rocq Prover 9.0.0" . rocq-prover.org . Consultado el 7 de mayo de 2025 .
- ↑ Besson, Frédéric (2007). «Tácticas aritméticas reflexivas rápidas: el caso lineal y más allá» . En Altenkirch, Thorsten; McBride, Conor (eds.). Types for Proofs and Programs: International Workshop, TYPES 2006, Nottingham, Reino Unido, 18-21 de abril de 2006, Revised Selected Papers . Lecture Notes in Computer Science. Vol. 4502. Berlín, Heidelberg: Springer. pp. 48-62 . doi : 10.1007/978-3-540-74464-1_4 . ISBN 978-3-540-74464-1.
- ↑ "Micromega: solucionadores para objetivos aritméticos sobre anillos ordenados — Documentación de Rocq Prover 9.0.0" . rocq-prover.org . Consultado el 7 de mayo de 2025 .
- ↑ Braibant, Thomas; Pous, Damien (2010). Kaufmann, Matt; Paulson, Lawrence C. (eds.). Una táctica Coq eficiente para decidir álgebras de Kleene . Demostración interactiva de teoremas: Primera Conferencia Internacional, ITP 2010 Edimburgo, Reino Unido, 11-14 de julio de 2010, Actas. Lecture Notes in Computer Science. Berlín, Heidelberg: Springer. pp. 163–178 . doi : 10.1007/978-3-642-14052-5_13 . ISBN 978-3-642-14052-5. S2CID 3566183 .
- ↑ Narboux, Julien (2004). "Un procedimiento de decisión para la geometría en Coq" . En Slind, Konrad; Bunker, Annette; Gopalakrishnan, Ganesh (eds.). Demostración de teoremas en lógicas de orden superior: 17.ª Conferencia Internacional, TPHOLS 2004, Park City, Utah, EE. UU., 14-17 de septiembre de 2004, Actas . Lecture Notes in Computer Science. Vol. 3223. Berlín, Heidelberg: Springer. pp. 225-240 . doi : 10.1007/978-3-540-30142-4_17 . ISBN 978-3-540-30142-4. S2CID 11238876 .
- ↑ "Preguntas frecuentes" . GitHub . Consultado el 8 de mayo de 2019 .
- ↑ "Introducción al cálculo de construcciones inductivas" . Consultado el 21 de mayo de 2019 .
- ↑ "Hoja de ruta de Coq 069" . GitHub .
- ↑ "Resumen de cambios de la versión 9.0" . rocq-prover.org .
- ↑ "Una visión general de la evolución del nombre" . rocq-prover.org .
- ↑ "Premios de Ciencia Abierta para Software de Investigación de Código Abierto" . Ouvrir la Science . 7 de febrero de 2022. Consultado el 4 de diciembre de 2025 .
Enlaces externos
- Asistentes de corrección
- Demostradores de teoremas gratuitos
- Lenguajes con tipado dependiente
- Software educativo de matemáticas
- Software que utiliza la Licencia Pública General Reducida de GNU.
- Software libre programado en OCaml
- Lenguajes funcionales
- Lenguajes de programación creados en 1984
- Software de 1989
- Lenguajes de programación con sintaxis extensible