La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

TPPSFVerificación de programas funcionales - 1 7. Verificación de programas funcionales.

Presentaciones similares


Presentación del tema: "TPPSFVerificación de programas funcionales - 1 7. Verificación de programas funcionales."— Transcripción de la presentación:

1

2 TPPSFVerificación de programas funcionales - 1 7. Verificación de programas funcionales

3 TPPSFVerificación de programas funcionales - 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:  i 1  Input 1...  i n  Input n.  (i 1... i n )   o  Output.  (i 1,...,i n,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

4 TPPSFVerificación de programas funcionales - 3 Especificaciones en Coq En Coq: (i 1 :Input 1 )... (i n :Input n )  (i 1... i n )  {o:Output |  (i 1,...,i n,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’) }

5 TPPSFVerificación de programas funcionales - 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ón ló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

6 TPPSFVerificación de programas funcionales - 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]

7 TPPSFVerificación de programas funcionales - 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 f P : 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

8 TPPSFVerificación de programas funcionales - 7 Existenciales en Coq con contenido computacional 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). 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 : T |  (x) &  (x) } { x : T &  (x) } { x : T &  (x) &  (x) }

9 TPPSFVerificación de programas funcionales - 8 Existenciales en Coq sin contenido computacional Inductive ex [A:Set, P:A  Prop ] : Prop := ex_intro : (x:A) (P x)  (ex A P). (EX x : T |  (x) ) Inductive ex2 [A:Set, P,Q:A  Prop ] : Prop := ex2_intro : (x:A) (P x)  (Q x)  (ex2 A P). (EX x : T |  (x) &  (x) )

10 TPPSFVerificación de programas funcionales - 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)   

11 TPPSFVerificación de programas funcionales - 10 Mecanismo de extracción en Coq Extracción del programa Fw Extract lema_de_corrección Extracción a un lenguaje de programación (Ocaml, CamlLight, Haskell): Require Extraction Write lenguaje File “nombrefile” [ id1... Idn ] Extract Constant id coq  id leng Extract Inductive type coq  type leng [c1 ml... cn leng ] Link parameterId coq := parameterValue coq

12 TPPSFVerificación de programas funcionales - 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 verificar programas Quisiéramos verificar programas más que sintentizarlos

13 TPPSFVerificación de programas funcionales - 12 Verificación de programas Es el proceso inverso al de extracción P: Spec Programa Programa Spec P:Spec fPfP

14 TPPSFVerificación de programas funcionales - 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.

15 TPPSFVerificación de programas funcionales - 14 Ejemplo: División Sean a y b  N, b  0. Calculamos a div b y a mod b simultáneamente haciendo recursión en a: 0 divmod b = (n+1) divmod b = let = n divmod b in if r < b-1 then else

16 TPPSFVerificación de programas funcionales - 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 divmod b =  (n+1) divmod b = let = n divmod b in if r < b-1 then else supongamos n=b.q+r y r < b. luego, si r < b - 1 entonces n+1 = b.q+(r+1) y r+1<b sino n+1 = b.(q+1)+0 y 0<b 0 = b.0 + 0 y 0 < b 

17 TPPSFVerificación de programas funcionales - 16 Verificación de programas en Coq - Tácticas - Realizer term –term puede ser una constante de Coq o un programa escrito en el lenguaje Real Program Program_all

18 TPPSFVerificación de programas funcionales - 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

19 TPPSFVerificación de programas funcionales - 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

20 TPPSFVerificación de programas funcionales - 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 ssi f (x) R f(y) entonces R* es bien fundada

21 TPPSFVerificación de programas funcionales - 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 R A  AxA es bien fundada y R B  BxB es bien fundada entonces R A+B  (A+B) x (A+B) tal que a R A+B b ssi ( a,b  A y aR A b  a,b  B y aR B b ) es bien fundada

22 TPPSFVerificación de programas funcionales - 21 Operadores de buena fundación Producto Lexicográfico Si R A  AxA es bien fundada y R B  BxB es bien fundada entonces R ALexB  (AxB) x (AxB) tal que (a,b) R ALexB (a’,b’) ssi ( aR A a’  a=a’  bR B b’ ) 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 R ALexB   x:A B(x) x  x:A B(x) Este producto general es el que está definido en Coq.

23 TPPSFVerificación de programas funcionales - 22 Operadores de buena fundación Exponenciación lexicográfica Sea W el conjunto de secuencias de elementos de A, para todo a 1...a n  W definimos Dec(a 1...a n ) ssi a 1 R A a 2... A n-1 R A a n Si R A  AxA es bien fundada entonces R LexExp  (  x:A Dec(x) x  x:A Dec(x) ) tal que (a,d a ) R LexExp (b,d b ) ssi aR A b es bien fundada

24 TPPSFVerificación de programas funcionales - 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)

25 TPPSFVerificación de programas funcionales - 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.

26 TPPSFVerificación de programas funcionales - 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 Omega de 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.


Descargar ppt "TPPSFVerificación de programas funcionales - 1 7. Verificación de programas funcionales."

Presentaciones similares


Anuncios Google