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

Slides:



Advertisements
Presentaciones similares
Capítulo 2 Algoritmos.
Advertisements

Teoría de Números Instructor: Luis Eduardo Falcón.
Introducción al Teorema de Gödel Eduardo Alejandro Barrio UBA - CONICET 2do Cuatrimestre de 2009 Eduardo Alejandro Barrio UBA.
Análisis Sintáctico Capítulo 4.
Diseño y análisis de algoritmos
Compiladores e intérpretes Análisis Sintáctico II
PROF. ING. JULIO CESAR CANO RAMIREZ
funciones Por: Carlos Alberto García Acosta
PROGRAMACIÓN.
OPERACIONES CON FUNCIONES
Una Introducción Básica a Sistemas de Tipos Estáticos
Técnico en programación de Software
1. Asistentes de Pruebas para Lógicos y Matemáticos I
Programación monádica
Tipo de Dato Abstracto Tipos de datos:
Módulo 5: Estructuras de Decisión y Bucles
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO FACULTAD DE INGENIERIA DIVISIÓN DE INGENIERÍA ELÉCTRICA COMPUTACIÓN PARA INGENIEROS NOTA IMPORTANTE: Para complementar.
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática
Traducción dirigida por la Sintaxis
3. INTRODUCCIÓN A LA PROGRAMACIÓN
Metodología para la Construcción de Programas
METODOLOGIA DE LA PROGRAMACION
MÓDULO DE PROCEDIMIENTOS Los módulos también pueden contener subrutinas y funciones → MÓDULO DE PROCEDIMIENTOS  PROCEDIMIENTOS → son compilados como parte.
ANALISIS SINTACTICO El análisis gramatical es la tarea de determinar la sintaxis, o estructura, de un programa. Por esta razón también se le conoce como.
PSEUDOCÓDIGO. DISEÑO ESTRUCTURADO USANDO HERRAMIENTAS DE REPRESENTACIÓN DE ALGORITMOS.
Teoría de lenguajes y compiladores
PROGRAMACIÓN LÓGICA.
Un lenguaje funcional avanzado:
Lenguaje C.
Programación en Matlab
CARACTERÍSTICAS DE LOS PROGRAMAS
Unidad III Elementos del lenguaje C++
Análisis de Algoritmos
Análisis de Algoritmos
TEMA Nº 1 Conjuntos numéricos.
ANALISIS SINTACTICO Parte I
Capítulo 1 “Elementos de Programación”
Inteligencia artificial
Sesión 5 Sentencias de Selección y repetición Prof:Eridan Otto Programación de Computadores Lenguaje Pascal.
ESTRUCTURA DE DATOS ESD-243
7 4 Enteros a. barriga.
Material de apoyo Unidad 4 Estructura de datos
Fórmulas y Funciones Básicas
Diseñando la arquitectura de aplicaciones empresariales. Acceso al SQL Server.- Autenticación de usuario:
2. Asistentes de Pruebas para Lógicos y Matemáticos II
Programación de Sistemas

CONCEPTOS BÁSICOS FUNDACIÓN UNIVERSITARIA LOS LIBERTADORES Fredys Alberto Simanca Herrera Programación Estructurada Semana Bogotá, D.C
Curso de Teoría del Autómata
TPPSFCálculo de Construcciones Inductivas Cálculo de Construcciones Inductivas Parte I: Inducción y Recursión.
Unidad 1: FUNDAMENTOS DE COMPUTACIÓN Y PSEUDOLENGUAJE
TPPSFAsistentes para programadores Asistentes de Pruebas para Programadores Cálculo de Construcciones.
1. Asistentes de Pruebas para Lógicos y Matemáticos I
EXCEL 2007 hoja de cálculo HOJAS: DESDE HASTA FILAS: VAN DESDE LA HASTA 1´048,576. COLUMNAS: VAN DESDE LA AA AA HASTA LA XFD XFD.
1 AFDAFN AF Gramáticas lineales derecha Expresiones regulares Tema 2 Método de los AF Método de las derivadas Sistemas de Ecuaciones Tema 1.
Ecuaciones Algebraicas
UNIVERSIDAD TECNOLÓGICA DE PANAMÁ
PRINCIPIOS DE PROGRAMACIÓN
Operaciones Algebraicas
Presente un cuestionario con los aspectos mas importantes sobre los
Capítulo 3: Conjuntos Autor: José Alfredo Jiménez Murillo.
Tipos de Datos.
LIC. JOSEPH RUITON RICRA
Lic. Carla Aguirre Montalvo
Conceptos Generales Programación I Docente: Ing. Marleny Soria M.
ACTIVIDADES FECHA: JULIO 6 AL 10 TEMA: FORMULAS Y FUNCIONES BÁSICAS EN LA HOJA DE CALCULO EXCEL PROPÓSITO: IDENTIFICAR LAS FORMULAS Y FUNCIONES BÁSICAS.
Programación de Sistemas
REGLAS PARA ELABORAR SEUDOCODIGOS Y DIAGRAMA DE FLUJO
ALGORITMOS Asignatura: Informática. Algoritmos Conjunto de instrucciones ordenadas de forma lógica y precisa, con un inicio y fin que permite resolver.
Transcripción de la presentación:

TPPSFVerificación de programas funcionales Verificación de programas funcionales

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

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’) }

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

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]

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

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) }

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) )

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)   

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

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

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

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.

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

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 y 0 < b 

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

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

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

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

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

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.

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

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)

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: , [Paulin-Mohring 89] Extracting Fw´s programs from proofs in the Calculus of Constructions. Sixteenth anual ACM Symposium on Principles of programming Languages, pgs Austin, [Parent94] Developing certified programs in the system Coq. In H. Barendregt and T. Nipkow, eds, Types for Proofs and Programs, LNCS nr. 806, pages Otros enfoques [Berardi 96] Pruning simply typed lambda-terms. Journal of Logic and Computation 6(5) , [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, , 1986.

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.