1 / 25

7. Verificaci ón de programas funcionales

7. Verificaci ón de programas funcionales. Especificación de programas. iInput. (i) oOutput.  (i,o) donde Input y Output son tipos de datos y  es la proposici ón que expresa la relación que debe cumplirse entre el valor de entrada y el valor de salida En general:

wattan
Download Presentation

7. Verificaci ón de programas funcionales

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 7. Verificación de programas funcionales TPPSF

  2. Especificación de programas • iInput. (i) oOutput. (i,o) donde Input y Output son tipos de datos y  es la proposición que expresa la relación que debe cumplirse entre el valor de entrada y el valor de salida En general: • i1Input1... i nInputn. (i1... in)  oOutput. (i1,...,in,o) Ejemplo: Para todos a,b N tq. b0 existen q y r tq. a=b.q+r y r < b. (a,b N) b0   (q,r)NN. a=b.q+r  r < b TPPSF

  3. Especificaciones en Coq En Coq: (i1:Input1)... (i n:Inputn) (i1... in)  {o:Output | (i1,...,in,o) } Ejemplos: • (a,b:nat) b0  { qr:N*N | Cases qr of (q,r) => a=b.q+r  r < b end} • ¿Especificación de la función que ordena una lista? (l:list) { l’:list | (sorted l’)  (perm l l’) } TPPSF

  4. Extracción de programas Si la prueba del existencial iInput. (i) {oOutput | (i,o) } es constructiva, el programa que calcula el resultado a partir de la entrada se encuentra necesariamente embebido en la prueba. • Qué diferencia el programa de la prueba? • La prueba es el programa más la informaciónlógica necesaria para demostrar la especificación • Para obtener el programa hay que extraer de la prueba la información computacional y olvidar la información lógica TPPSF

  5. Extracción de programas Información computacional : objetos que viven en Set Información lógica : objetos que viven en Prop Mecanismo de extracción : • recorre el término de prueba recuperando los datos que viven en Set, olvidando los que viven en Prop y manteniendo la estructura. • Se extrae hacia Fw, un lenguaje de programación no dependiente. • Las dependencias en los objetos computacionales se olvidan. [Paulin-Mohring 89] TPPSF

  6. Extracción de programas Dada una prueba P : iInput. (i) { oOutput | (i,o) } el contenido computacional de P será una función fP: Input  Output Para ello deberá ocurrir que : Input : Set Output : Set (i),(i,o) : Prop Observar que los sorts de los tipos que intervienen en la especificación indican al procedimiento de extracción qué recorrer y qué olvidar durante la recorrida TPPSF

  7. Existenciales en Coq con contenido computacional { x : T |  (x) } Inductive sig [A:Set, P:A Prop ] : Set := exist : (x:A) (P x)  (sig A P). Inductive sig2 [A:Set, P,Q:A Prop ] : Set := exist2 : (x:A) (P x)  (Q x) (sig2 A P Q). { x : T |  (x) &  (x) } { x : T &  (x) } Inductive sigS [A:Set, P:A Set ] : Set := existS : (x:A) (P x)  (sigS A P). Inductive sigS2 [A:Set, P,Q:A Set ] : Set := existS: (x:A) (P x)  (Q x) (sigS2 A P Q). { x : T &  (x) &  (x) } TPPSF

  8. Existenciales en Coq sin contenido computacional (EX x : T |  (x) ) Inductive ex [A:Set, P:A Prop ] : Prop := ex_intro : (x:A) (P x)  (ex A P). (EX x : T |  (x) &  (x) ) Inductive ex2 [A:Set, P,Q:A Prop ] : Prop := ex2_intro : (x:A) (P x)  (Q x)  (ex2 A P). TPPSF

  9. Sumas en Coq { }+{ } Inductive sumbool [A, B: Prop ] : Set := left : A  (sumbool A B) | right : B  (sumbool A B)  +{ } Inductive sumor [A:Set, B: Prop ] : Set := left : A  (sumor A B) | right : B  (sumor A B) Inductive or [A, B: Prop ] : Prop := or_introl : A  (or A B) | or_intror : B  (or A B)  TPPSF

  10. Mecanismo de extracción en Coq • Extracción del programa Fw Extractlema_de_corrección • Extracción a un lenguaje de programación(Ocaml, CamlLight, Haskell): Require Extraction Write lenguaje File “nombrefile” [ id1 ... Idn ] Extract Constant idcoqidleng Extract Inductive typecoqtypeleng [c1ml... cnleng ] Link parameterIdcoq := parameterValuecoq TPPSF

  11. Mecanismo de extracción (síntesis) • Metodología para obtener programas correctos: • especificar en Coq el programa como un lema • extraer el programa de la prueba del lema • Desventaja de esta metodología: • la estructura del programa está oculta en el término de prueba hasta el final del proceso • dificultad de lectura del programa final • dificultad para optimizar el programa Quisiéramos verificar programas más que sintentizarlos TPPSF

  12. P: Spec Programa ProgramaSpec P:Spec Verificación de programas Es el proceso inverso al de extracción fP TPPSF

  13. Verificación de programas • Dado el programa y la especificación hay que probar que el programa cumple con la especificación: • justificar la terminación del programa • probar los objetivos ligados con la especificación particular. • La síntesis de esta información no es automática (a excepción de casos sencillos). • Para simpilficar el proceso de verificación los programas pueden tener anotaciones lógicas, que son directivas que guían la síntesis. TPPSF

  14. Ejemplo: División Sean a y b N, b0. Calculamos adivb y a mod b simultáneamente haciendo recursión en a: • 0 divmodb = <0,0> • (n+1) divmod b = let <q,r> = n divmod b inif r < b-1 then <q,r+1> else<q+1,0> TPPSF

  15. División: especificación • Especificación: Para todos a,b N tq. b0 existen q y r tq. a=b.q+r y r < b. • Prueba de que el programa es correcto: por inducción en a: • 0 divmodb = <0,0> • (n+1) divmod b = let <q,r> = n divmod b inif r < b-1 then <q,r+1> else <q+1,0> 0 = b.0 + 0 y 0 < b supongamosn=b.q+r y r < b. luego, sir < b - 1 entoncesn+1 = b.q+(r+1) y r+1<b sinon+1 = b.(q+1)+0 y 0<b  TPPSF

  16. Verificación de programas en Coq - Tácticas - • Realizerterm • term puede ser una constante de Coq o un programa escrito en el lenguaje Real • Program • Program_all TPPSF

  17. Pruebas de Terminación • Si el programa no es recursivo el programa termina de forma trivial. • Si el programa es recursivo hay que justificar: • que los llamados recursivos decrecen según cierto orden R • que la relación R es bien fundada(o sea que no existen cadenas descendentes infinitas). • En general, el programa debe tener como anotación la relación R con la cual hay que comparar los llamados recursivos TPPSF

  18. Pruebas de buena fundación Ciertos órdenes pueden obtenerse de a través de operadores de composición de relaciones que garantizan que si las relaciones iniciales son bien fundadas, el resultado de la composición también lo es [Paulson86]. Ejemplo típico de orden bien fundado: <  NxN TPPSF

  19. Operadores de buena fundación Subrelación : Si R AxA es bien fundada y R´ R entonces R´ es bien fundada Imagen Inversa: Sean • f : A  B • R BxB bien fundada Definimos • R* AxA como x R*y ssif (x) R f(y) entonces R*es bien fundada TPPSF

  20. Operadores de buena fundación Clausura transitiva Si R AxA es bien fundada, entonces R+ AxA tal que x R+y ssi ( xRy zA tq. xRz  zR+y ) es bien fundada Suma disjunta Si RA AxA es bien fundada y RB BxB es bien fundada entonces RA+B (A+B) x (A+B) tal que a RA+Bb ssi ( a,b  A y aRAb a,b  B y aRBb ) es bien fundada TPPSF

  21. Operadores de buena fundación Producto Lexicográfico Si RA AxA es bien fundada y RB BxB es bien fundada entonces RALexB (AxB) x (AxB) tal que (a,b) RALexB(a’,b’) ssi (aRAa’ a=a’  bRBb’ ) es bien fundada Nota: el producto lexicográfico se generaliza para el caso en el que B es una familia de tipos indizada por A (o sea B: ASet). En ese caso el orden RALexB x:A B(x) x x:A B(x) Este producto general es el que está definido en Coq. TPPSF

  22. Operadores de buena fundación Exponenciación lexicográfica Sea W el conjunto de secuencias de elementos de A, para todo a1...anW definimos Dec(a1...an) ssi a1RAa2... An-1RAan Si RA AxA es bien fundada entonces RLexExp ( x:A Dec(x) x x:A Dec(x) ) tal que (a,da) RLexExp(b,db) ssi aRAb es bien fundada TPPSF

  23. Operadores de buena fundación en Coq • En las bibliotecas se encuentran: • Ordenes de base bien fundados • por ejemplo lt en nat está en theories\ARITH\Wf_nat • Operadores para construir órdenes bien fundados • theories\RELATIONS\WELLFOUNDED(con la prueba respectiva de que construyen órdenes bien fundados) TPPSF

  24. Bibliografía Extracción y síntesis de Programas en Coq: • [Paulin-Mohring&Werner] Synthesis of ML programs in the system Coq. Journal of symbolic Computation 15:607- 640, 1993. • [Paulin-Mohring 89] Extracting Fw´s programs from proofs in the Calculus of Constructions. Sixteenth anual ACM Symposium on Principles of programming Languages, pgs. 32-49. Austin, 1999. • [Parent94] Developing certified programs in the system Coq. In H. Barendregt and T. Nipkow, eds, Types for Proofs and Programs, LNCS nr. 806, pages 291-312. Otros enfoques • [Berardi 96] Pruning simply typed lambda-terms. Journal of Logic and Computation 6(5)663-681, 1996. • [Poll 94] A programming logic based on type theory. Ph.D. Thesis, Eindhoven University of Thechnology, 1994 • [Szasz 97] A theory of specifications programs and proofs. Ph.D. Thesis, Chalmers University of Thechnology, 1997 Ordenes bien fundados • [Paulson86] Constructing Recursion Operators in Intuitionistic Type Theory. J. Symbolic Computation Vol2, 325-355, 1986. TPPSF

  25. Apéndice • El módulo ARITH de Coq permite escribir naturales con la sintaxis usual a condición poner los naturales entre paréntesis ( ) . Ejemplo: (2) en lugar de (S (S O)). • El módulo Omegade Coq permite trabajar con expresiones aritméticas enteras en sintaxis usual a condición de escribirlas entre comillas simples invertidas` `. Ejemplo `x+x <= 2*x`. Con este módulo la táctica Omega resuelve en forma automática las metas de la aritmética de Presburger. TPPSF

More Related