En ciencias de la computación , la síntesis de programas es la tarea de construir un programa que demuestre ser...Satisface una especificación formal de alto nivel dada . A diferencia de la verificación de programas , el programa se construye en lugar de darse; sin embargo, ambos campos utilizan técnicas de prueba formal y comprenden enfoques con diferentes grados de automatización. A diferencia de las técnicas de programación automática , las especificaciones en la síntesis de programas suelen ser enunciados no algorítmicos en un cálculo lógico apropiado . [ 1 ]
La principal aplicación de la síntesis de programas es liberar al programador de la carga de escribir código correcto y eficiente que cumpla con una especificación. Sin embargo, la síntesis de programas también tiene aplicaciones en la superoptimización y la inferencia de invariantes de bucle . [ 2 ]
Origen
Durante el Instituto de Verano de Lógica Simbólica de la Universidad de Cornell en 1957, Alonzo Church definió el problema de sintetizar un circuito a partir de requisitos matemáticos. [ 3 ] Si bien el trabajo se refiere únicamente a circuitos y no a programas, se considera una de las primeras descripciones de la síntesis de programas, y algunos investigadores la denominan «el problema de Church». En la década de 1960, investigadores en inteligencia artificial exploraron una idea similar para un «programador automático».
Desde entonces, diversas comunidades de investigación han abordado el problema de la síntesis de programas. Entre los trabajos más destacados se encuentran el enfoque basado en la teoría de autómatas de Büchi y Landweber ( 1969) [ 4 ] y los trabajos de Manna y Waldinger (hacia 1980). El desarrollo de los lenguajes de programación de alto nivel modernos también puede entenderse como una forma de síntesis de programas.
Desarrollos del siglo XXI
A principios del siglo XXI se ha observado un auge del interés práctico en la idea de la síntesis de programas en la comunidad de verificación formal y campos relacionados. Armando Solar-Lezama demostró que es posible codificar problemas de síntesis de programas en lógica booleana y utilizar algoritmos para el problema de satisfacibilidad booleana para encontrar programas automáticamente. [ 5 ]
Síntesis guiada por sintaxis
En 2013, investigadores de UPenn , UC Berkeley y MIT propusieron un marco unificado para problemas de síntesis de programas llamado Síntesis Guiada por Sintaxis (estilizada como SyGuS). [ 6 ] La entrada a un algoritmo SyGuS consiste en una especificación lógica junto con una gramática de expresiones libre de contexto que restringe la sintaxis de las soluciones válidas. [ 7 ] Por ejemplo, para sintetizar una función f que devuelva el máximo de dos enteros, la especificación lógica podría ser la siguiente:
( f ( x , y ) = x ∨ f ( x , y ) = y ) ∧ f ( x , y ) ≥ x ∧ f ( x , y ) ≥ y
y la gramática podría ser:
< Exp > ::= x | y | 0 | 1 | < Exp > + < Exp > | ite( < Cond > , < Exp > , < Exp > ) < Cond > ::= < Exp > <= < Exp >donde "ite" significa "si-entonces-si no". La expresión
iterar(x <= y, y, x)
Sería una solución válida, porque se ajusta a la gramática y a la especificación.
Desde 2014 hasta 2019, la Competencia Anual de Síntesis Guiada por Sintaxis (o SyGuS-Comp) comparó los diferentes algoritmos para la síntesis de programas en un evento competitivo. [ 8 ] La competencia utilizó un formato de entrada estandarizado, SyGuS-IF, basado en SMT-Lib 2 . Por ejemplo, el siguiente SyGuS-IF codifica el problema de sintetizar el máximo de dos enteros (como se presentó anteriormente):
(lógica de conjunto LIA) (synth-fun f ((x Int) (y Int)) Int ((i Entero) (c Entero) (b Booleano)) ((i Int (cxy (+ ii) (ite bii))) (c Int (0 1)) (b Booleano ((<= ii))))) (declarar-var x Int) (declarar-variable y Int) (restricción (>= (fxy) x)) (restricción (>= (fxy) y)) (restricción (o (= (fxy) x) (= (fxy) y))) (verificar-síntesis)
Un solucionador compatible podría devolver el siguiente resultado:
((define-fun f ((x Int) (y Int)) Int (ite (<= xy) yx)))
Síntesis inductiva guiada por contraejemplos
La síntesis inductiva guiada por contraejemplos (CEGIS) es un enfoque eficaz para construir sintetizadores de programas de sonido. [ 9 ] [ 10 ] CEGIS implica la interacción de dos componentes: un generador que genera programas candidatos y un verificador que comprueba si los candidatos satisfacen la especificación.
Dado un conjunto de entradas I , un conjunto de programas posibles P y una especificación S , el objetivo de la síntesis de programas es encontrar un programa p en P tal que para todas las entradas i en I , se cumpla S ( p , i ). CEGIS está parametrizado sobre un generador y un verificador:
- El generador toma un conjunto de entradas T y produce un programa candidato c que es correcto en todas las entradas de T , es decir, un candidato tal que para todas las entradas t de T , se cumple S ( c , t ).
- El verificador toma un programa candidato c y devuelve verdadero si el programa satisface S en todas las entradas, y de lo contrario devuelve un contraejemplo , es decir, una entrada e en I tal que S ( c , e ) falla.
CEGIS ejecuta el generador y el verificador en un bucle, acumulando contraejemplos:
El algoritmo cegis es la entrada : Generador de programas generar , verificador verificar , especificación spec , salida : Programa que satisface spec o falla entradas := conjunto vacío bucle candidato := generar ( especificación , entradas ) si verificar ( especificación , candidato ) entonces devolver candidato sino verificar produce un contraejemplo e agregar e a entradas fin si
Las implementaciones de CEGIS suelen utilizar solucionadores SMT como verificadores.
CEGIS se inspiró en el refinamiento de abstracción guiado por contraejemplos (CEGAR). [ 11 ]
El marco de Maná y Waldinger
El marco de Manna y Waldinger , publicado en 1980, [ 12 ] [ 13 ] parte de una fórmula de especificación de primer orden dada por el usuario . Para esa fórmula, se construye una demostración, sintetizando así también un programa funcional a partir de sustituciones unificadoras .
El marco se presenta en un formato de tabla, cuyas columnas contienen:
- Un número de línea ("Nr") para fines de referencia.
- Fórmulas que ya han sido establecidas, incluyendo axiomas y precondiciones ("Afirmaciones").
- Fórmulas aún por demostrar, incluyendo postcondiciones, ("Objetivos"), [ nota 1 ]
- Términos que denotan un valor de salida válido ("Programa") [ nota 2 ]
- Una justificación para la línea actual ("Origen")
Inicialmente, se introducen en la tabla los conocimientos previos, las precondiciones y las postcondiciones. A continuación, se aplican manualmente las reglas de demostración adecuadas. El marco se ha diseñado para mejorar la legibilidad humana de las fórmulas intermedias: a diferencia de la resolución clásica , no requiere la forma normal clausal , sino que permite razonar con fórmulas de estructura arbitraria y que contienen cualquier junctor (" resolución no clausal "). La demostración está completa cuandose ha derivado en la columna de Objetivos , o, equivalentemente,en la columna de Aserciones . Los programas obtenidos mediante este enfoque están garantizados para satisfacer la fórmula de especificación de la que parten; en este sentido, son correctos por construcción . [ 14 ] Solo se admite un lenguaje de programación funcional minimalista, pero Turing-completo , [ 15 ] que consta de operadores condicionales, recursivos, aritméticos y otros [ nota 3 ] . Los estudios de caso realizados dentro de este marco sintetizaron algoritmos para calcular, por ejemplo, división , resto , [ 16 ] raíz cuadrada , [ 17 ] unificación de términos , [ 18 ] respuestas a consultas de bases de datos relacionales [ 19 ] y varios algoritmos de ordenación . [ 20 ] [ 21 ]
Reglas de demostración
Las reglas de demostración incluyen:
- Resolución no clausal (véase la tabla).
- Por ejemplo, la línea 55 se obtiene resolviendo fórmulas de aserción.desde el 51 yde 52 que comparten alguna subfórmula común. La resolvente se forma como la disyunción de, conreemplazado por, y, conreemplazado por. Esta resolvente se deduce lógicamente de la conjunción dey. En términos más generales,yEs necesario tener solo dos subfórmulas unificables.y, respectivamente; su resolvente se forma entonces a partir deycomo antes, dondees el unificador más general dey. Esta regla generaliza la resolución de cláusulas . [ 22 ]
- Los términos del programa de las fórmulas principales se combinan como se muestra en la línea 58 para formar la salida de la resolvente. En el caso general,También se aplica a este último. Dado que la subfórmulaaparece en la salida, se debe tener cuidado de resolver solo en subfórmulas que correspondan a propiedades computables .
- Transformaciones lógicas.
- Por ejemplo,puede transformarse en) tanto en las afirmaciones como en los objetivos, ya que ambos son equivalentes.
- Separación de afirmaciones conjuntivas y de objetivos disyuntivos.
- Un ejemplo se muestra en las líneas 11 a 13 del siguiente ejemplo ilustrativo.
- Esta regla permite la síntesis de funciones recursivas . Para una pre- y postcondición dadas "Dadode tal manera que, encontrarde tal manera que", y un ordenamiento adecuado proporcionado por el usuariodel dominio de, siempre es recomendable añadir una aserción "". [ 23 ] Resolver con esta aserción puede introducir una llamada recursiva aen el plazo del programa.
- Un ejemplo se encuentra en Manna, Waldinger (1980), págs. 108-111, donde se sintetiza un algoritmo para calcular el cociente y el resto de dos enteros dados, utilizando el método del bien ordenado.definido por(pág. 110).
Murray ha demostrado que estas reglas son completas para la lógica de primer orden . [ 24 ] En 1986, Manna y Waldinger añadieron reglas generalizadas de resolución E y paramodulación para manejar también la igualdad; [ 25 ] posteriormente, estas reglas resultaron ser incompletas (pero no obstante correctas ). [ 26 ]
Ejemplo
Como ejemplo sencillo, un programa funcional para calcular el máximode dos númerosyse puede derivar de la siguiente manera.
Partiendo de la descripción del requisito " El máximo es mayor o igual que cualquier número dado, y es uno de los números dados ", la fórmula de primer ordense obtiene como su traducción formal. Esta fórmula debe ser demostrada. Mediante la skolemización inversa , [ nota 4 ] se obtiene la especificación en la línea 10, donde una letra mayúscula y una minúscula denotan una variable y una constante de Skolem , respectivamente.
Después de aplicar una regla de transformación para la ley distributiva en la línea 11, el objetivo de la demostración es una disyunción y, por lo tanto, se puede dividir en dos casos, a saber, las líneas 12 y 13.
En cuanto al primer caso, al resolver la línea 12 con el axioma de la línea 1 se produce la instanciación de la variable del programa.en la línea 14. Intuitivamente, el último conjuntivo de la línea 12 prescribe el valor quedebe tomarse en este caso. Formalmente, la regla de resolución no clausal que se muestra en la línea 57 anterior se aplica a las líneas 12 y 1, con
- p es la instancia común x=x de A=A y x=M , obtenida al unificar sintácticamente las últimas fórmulas,
- F[ p ] siendo verdadero ∧ x=x , obtenido de la línea 1 instanciada (apropiadamente rellena para hacer visible el contexto F[⋅] alrededor de p ), y
- G[ p ] siendo x ≤ x ∧ y ≤ x ∧ x = x , obtenido de la línea instanciada 12,
flexible verdadero ∧ falso ) ∧ ( x ≤ x ∧ y ≤ x ∧ verdadero, que se simplifica a.
De manera similar, la línea 14 produce la línea 15 y luego la línea 16 por resolución. Además, el segundo caso,En la línea 13, se maneja de manera similar, lo que finalmente da como resultado la línea 18.
En un último paso, ambos casos (es decir, las líneas 16 y 18) se unen, utilizando la regla de resolución de la línea 58; para que esa regla sea aplicable, fue necesario el paso preparatorio 15 → 16. Intuitivamente, la línea 18 podría leerse como "en caso, la salidaes válido (con respecto a la especificación original), mientras que la línea 15 dice "en caso, la salidaes válido; el paso 15 → 16 estableció que ambos casos 16 y 18 son complementarios. [ nota 5 ] Dado que tanto la línea 16 como la 18 vienen con un término de programa, una expresión condicional da como resultado la columna del programa. Dado que la fórmula objetivoSe ha derivado, la prueba está hecha y la columna del programa de la ""La línea contiene el programa.
Véase también
Notas
- ↑ La distinción "Afirmaciones" / "Objetivos" es solo por conveniencia; siguiendo el paradigma de la prueba por contradicción , un Objetivoes equivalente a una afirmación.
- ↑ Cuandoyes la fórmula del objetivo y el término del programa en una línea, respectivamente, entonces en todos los casos dondesostiene,es una salida válida del programa que se va a sintetizar. Esta invariante se mantiene en todas las reglas de prueba. Una fórmula de aserción generalmente no está asociada con un término del programa.
- ↑ Solo se admite el operador condicional ( ?: ) desde el principio. Sin embargo, se pueden agregar nuevos operadores y relaciones arbitrarios proporcionando sus propiedades como axiomas. En el ejemplo de juguete a continuación, solo las propiedades deyLos elementos que realmente se necesitan en la demostración se han axiomatizado, en las líneas 1 a 3.
- ↑ Mientras que la skolemización ordinaria preserva la satisfacibilidad, la skolemización inversa, es decir, reemplazar las variables cuantificadas universalmente por funciones, preserva la validez.
- ↑ El axioma 3 era necesario para eso; de hecho, siNo era un pedido total , no se podía calcular un máximo para entradas no comparables..
Referencias
- ↑ Basin, D.; Deville, Y.; Flener, P.; Hamfelt, A.; Fischer Nilsson, J. (2004). "Síntesis de programas en lógica computacional". En M. Bruynooghe y K.-K. Lau (eds.). Desarrollo de programas en lógica computacional . LNCS. Vol. 3049. Springer. pp. 30– 65. CiteSeerX 10.1.1.62.4976 .
- ↑ ( Alur, Singh y Fisman ) error de harv: no hay objetivo: CITEREFAlurSinghFisman ( ayuda )
- ↑ Alonzo Church (1957). "Aplicaciones de la aritmética recursiva al problema de la síntesis de circuitos". Resúmenes del Instituto de Verano de Lógica Simbólica . 1 : 3–50 .
- ↑ Richard Büchi, Lawrence Landweber (abril de 1969). "Resolución de condiciones secuenciales mediante estrategias de estados finitos" . Transactions of the American Mathematical Society . 138 : 295–311 . doi : 10.2307/1994916 . JSTOR 1994916 .
- ↑ ( Solar-Lezama ) error de harv: no hay objetivo: CITEREFSolar-Lezama ( ayuda )
- ↑ Alur, Rajeev; et al., et (2013). "Síntesis guiada por sintaxis". Actas de Métodos Formales en Diseño Asistido por Computadora . IEEE. pág. 8.
- ↑ ( David & Kroening ) error de harv: sin destino: CITEREFDavidKroening ( ayuda )
- ↑ SyGuS-Comp (Competencia de síntesis guiada por sintaxis)
- ↑ ( Solar-Lezama ) error de harv: no hay objetivo: CITEREFSolar-Lezama ( ayuda )
- ↑ ( David & Kroening ) error de harv: sin destino: CITEREFDavidKroening ( ayuda )
- ↑ ( Solar-Lezama ) error de harv: no hay objetivo: CITEREFSolar-Lezama ( ayuda )
- ↑ Zohar Manna, Richard Waldinger (enero de 1980). "Un enfoque deductivo para la síntesis de programas". ACM Transactions on Programming Languages and Systems . 2 : 90–121 . doi : 10.1145/357084.357090 . S2CID 14770735 .
- ↑ Zohar Manna y Richard Waldinger (dic. 1978). Un enfoque deductivo para la síntesis de programas (PDF) (Nota técnica). SRI International. Archivado (PDF) del original el 27 de enero de 2021.
- ↑ Véase Manna, Waldinger (1980), pág. 100 para comprobar la corrección de las reglas de resolución.
- ↑ Boyer, Robert S.; Moore, J. Strother (mayo de 1983). Una prueba mecánica de la completitud de Turing de Pure Lisp (PDF) (Informe técnico). Instituto de Ciencias de la Computación, Universidad de Texas en Austin. 37. Archivado (PDF) del original el 22 de septiembre de 2017.
- ↑ Maná, Waldinger (1980), págs. 108-111
- ↑ Zohar Manna y Richard Waldinger (agosto de 1987). "El origen de un paradigma de búsqueda binaria". Science of Computer Programming . 9 (1): 37– 83. doi : 10.1016/0167-6423(87)90025-6 .
- ↑ Daniele Nardi (1989). "Síntesis formal de un algoritmo de unificación mediante el método deductivo-tablero". Journal of Logic Programming . 7 : 1–43 . doi : 10.1016/0743-1066(89)90008-3 .
- ↑ Daniele Nardi y Riccardo Rosati (1992). «Síntesis deductiva de programas para la respuesta a consultas». En Kung-Kiu Lau y Tim Clement (eds.). Taller internacional sobre síntesis y transformación de programas lógicos (LOPSTR) . Talleres en computación. Springer. págs. 15–29 . doi : 10.1007/978-1-4471-3560-9_2 . ISBN 978-3-540-19806-2.
- ↑ Jonathan Traugott (1986). "Síntesis deductiva de programas de ordenación". Actas de la Conferencia Internacional sobre Deducción Automatizada . LNCS . Vol. 230. Springer. págs. 641–660 .
- ↑ Jonathan Traugott (junio de 1989). "Síntesis deductiva de programas de ordenación". Journal of Symbolic Computation . 7 (6): 533– 572. doi : 10.1016/S0747-7171(89)80040-9 .
- ↑ Maná, Waldinger (1980), pág. 99
- ↑ Maná, Waldinger (1980), pág. 104
- ↑ Manna, Waldinger (1980), p. 103, refiriéndose a: Neil V. Murray (febrero de 1979). Un procedimiento de prueba para lógica de primer orden no clausal sin cuantificadores (informe técnico). Universidad de Syracuse, 2-79.
- ↑ Zohar Manna, Richard Waldinger (enero de 1986). "Relaciones especiales en la deducción automatizada" . Journal of the ACM . 33 : 1–59 . doi : 10.1145/4904.4905 . S2CID 15140138 .
- ↑ Zohar Manna, Richard Waldinger (1992). "Las reglas de relaciones especiales son incompletas". Actas de CADE 11. LNCS. Vol. 607. Springer. págs. 492–506 .
- David, Cristina; Kroening, Daniel (13 de octubre de 2017). "Síntesis de programas: desafíos y oportunidades" . Philosophical Transactions of the Royal Society A: Mathematical, Physical and Engineering Sciences . 375 (2104) 20150403. Bibcode : 2017RSPTA.37550403D . doi : 10.1098 / rsta.2015.0403 . ISSN 1364-503X . PMC 5597726. PMID 28871052 .
- Alur, Rajeev; Singh, Rishabh; Fisman, Dana; Solar-Lezama, Armando (2018-11-20). "Síntesis de programas basada en búsqueda". Communications of the ACM . 61 (12): 84– 93. doi : 10.1145/3208071 . ISSN 0001-0782 .
- Zohar Manna, Richard Waldinger (1975). "Conocimiento y razonamiento en la síntesis de programas". Inteligencia artificial . 6 (2): 175– 208. doi : 10.1016/0004-3702(75)90008-9 .
- Solar-Lezama, Armando (2008). Síntesis de programas mediante bocetos (PDF) (Doctorado). Universidad de California, Berkeley.
- paradigmas de programación