1. Corrección de un programa TEMA 2: ESPECIFICACIÓN Y CORRECCIÓN DE ALGORITMOS. 1. Corrección de un programa. 1. Corrección de un programa

Documentos relacionados
Programación II Sesión 2: Especificación de problemas

Programación 2. Lección 1. Introducción a la especificación formal de algoritmos

Verificación de programas. Algoritmos y Estructuras de Datos I. Semánticas formales: Primer cuatrimestre de 2016

Tema 3 Concepto y Especificación de Tipos Abstractos de Datos

Objetivos. Contenidos. Revisar los principales conceptos de la lógica de primer orden

UE#03 PROBLEMAS DE SOLUCIÓN DIRECTA FUNCIONES

Especificación y uso de módulos en Java(II)

Pregunta 1: Sea α el predicado ( I [0, n b[i] 0 : ( J [0, m : c[j] b[i])). Entonces:

Introducción a c++ Introducción a la programación EIS Informática III

Especificación y uso de módulos en C++(II)

2. Tipos abstractos de datos TEMA 3: SEMÁNTICA AXIOMÁTICA. 2. Tipos abstractos de datos. 2. Tipos abstractos de datos. 2. Tipos abstractos de datos

Programación Lógica. Programación Lógica

FORMATO DEL FICHERO CON LA TABLA DE SÍMBOLOS

Lenguajes de Programación

Técnicas de prueba y corrección de algoritmos

Lenguajes de programación. Algoritmos y Estructuras de Datos I. Lenguajes compilados. Lenguajes compilados

Especificación Clase 2

Bloque 1. Conceptos y técnicas básicas en programación

Lenguajes funcionales: λ-cálculo

Tipos de Datos Abstractos TDA

Variables, expresiones y sentencias

Contenido. Prólogo... Prólogo a la edición en español Argumentos y proposiciones lógicas Introducción

Bloque 1. Conceptos y técnicas básicas en programación

Práctica 4 Especificación de problemas

Introducción a la programación: Contenido. Introducción

Tecnología de la Programación

Etapa 1: El Dialogo. Etapa 2: Las Especificaciones

Términos LÓGICA COMPUTACIONAL CÁLCULO DE PREDICADOS. Variables libres y ligadas. Fórmulas. Tenemos dos conjuntos básicos.

CAPÍTULO IV: 4.1 Introducción a la. Programación Funcional

Computación I (CI-2125) Clase 2. Prof. Mireya Morales

Una clasificación de los tipos de datos existentes en los diferentes lenguajes de programación se presenta a continuación:

Introducción a los Tipos Abstractos de Datos

Tema: Estructuras de Selección en C#.

UNIVERSIDAD SIMÓN BOLÍVAR Vicerrectorado Académico

Ejercicios Tema 6. Funciones

Elementos de un programa en C

Resolución de Problemas y Algoritmos

Concurrencia Prácticas 1 y 2

1/1. Diseño Modular. 18 de febrero de 2017

Estructura de un programa en Java. Tipos de datos básicos. class miprimerprograma{ // comentario, no es parte del programa

Informática de 1 o de Matemáticas. Ejercicios de Introducción a Haskell. Ejercicio 1 Consideremos la siguiente definición:

TEMA 4: Programación estructurada

Especificación de algoritmos 1

La Programación Imperativa

Planificaciones LENGUAJES DE PROGRAMACIÓN. Docente responsable: KUHN MONICA. 1 de 13

Conceptos. Generales ALGORITMOS

Inteligencia Artificial

Introducción a la programación. Proyecto de Robótica Educativa

Programación 2. Lección 3. Introducción a la recursividad

Lenguaje de Diseño. Primera Parte. Segundo Cuatrimestre 2017

Guía práctica de estudio 05: Pseudocódigo

Lógica Lógica de Predicados

Lógica Lógica de Predicados. Motivación

Algoritmos y Estructuras de Datos I. Algoritmos y Estructuras de Datos I. Algoritmos y Estructuras de Datos I. Algoritmos y Estructuras de Datos I

LÓGICA FORMAL TEORIAS DE PRIMER ORDEN. Sintaxis y semántica

OPERADORES ARITMÉTICOS EN PHP: OPERADORES BÁSICOS Y RESTO (MÓDULO). INCREMENTO Y DECREMENTO. (CU00819B)

VGOC"6<"Rtqitcocekôp"guvtwevwtcfc

Programación imperativa. Algoritmos y Estructuras de Datos I. Ciclos

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

Tema 01: Abstracción en los lenguajes de programación y tipo abstracto de dato (TAD)

Análisis lógico Cálculo de proposiciones

Lenguaje TIMBA. Fundamentos de la Informática Int. a la Programación Resolución de Problemas y Algoritmos

Lógica de proposiciones (5)

Especificación de TAD. Lección 2

1/10. Diseño Modular III. 25 de febrero de 2017

Tema 2. Concepto de Algoritmo

Programación 2. Lección 4. Metodología de diseño de algoritmos recursivos

Tema 1. Abstracciones y Especificaciones

Programación 1 Tema 5. Instrucciones simples y estructuradas

INTRODUCCION A LA PROGRAMACION (C.U.) PROGRAMACION (T.I.G.)

Axiomas del Cálculo de Predicados

TRABAJO PRACTICO Nº4 AÑO 2018 CÁLCULO DE PREDICADOS

5. ESTRUCTURAS DE REPETICIÓN

Tema 9: Cálculo Deductivo

Concurrencia Monitores. Guillermo Román Díez

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Lección 2 Introducción al lenguaje C

Bloque 1. Conceptos y técnicas básicas en programación

GUÍA BÁSICA DE SCHEME v.4

Tema: Estructuras de Selección en C#.

1. Explorando la ventana Python

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

RELACIÒN ENTRE LA PROGRAMACIÒN ORIENTADA A OBJETOS Y LA ESTRUCTURADA

CIENCIAS FORMALES CIENCIAS FÁCTICAS

Capítulo 2 El Método de Resolución

Datos Elementales y formato de un programa en Java

Introducción a la programación: Algoritmos

Programación 2. Lección 11. Análisis de la corrección de un algoritmo: primera parte

UNIDAD 2 Descripción de un programa

TÍTULO: MATEMÁTICA DISCRETA Y LÓGICA Disponibilidad

INFORMATICA TECNICATURA DE NIVEL SUPERIOR ALGUNOS EJERCICIOS DE SELECCIÓN E ITERACION

Pruebas de Validez (Correctness) de Algorithmos.

Curso de Java Introducción a la Programación II

Tema 4.- Recursión e iteración

Transcripción:

Uno de los grandes problemas de la programación es la escritura de programas totalmente correctos. Al implementar un programa siempre se introducen errores. Técnicas de detección de errores: Mediante pruebas: Casos de prueba. Métodos formales Verificación formal Derivación de programas Ej: Mult(a, b: Nat) dev m: Nat Metodología de la Programación 1 Metodología de la Programación 2 Problemas de la detección mediante pruebas: Elección de casos de prueba. Escasa información cuando se detecta un error. No es exhaustivo. No se garantiza que no hayan errores. Problemas de la detección con métodos formales: Únicamente aplicable a programas de tamaño reducido. No detecta errores de transcripción. -Def: Se define la corrección del programa como la coincidencia entre comportamiento deseado y comportamiento real. Para definir el comportamiento esperado harán falta 3 elementos: 1. Datos suministrados (parámetros de entrada). 2. Resultados esperados (parámetros de salida). 3. Relación entre ellos. Al conjunto de estos elementos se le denominará especificación. Metodología de la Programación 3 Metodología de la Programación 4 1.1. Semántica Para definir el comportamiento real hará falta conocer el comportamiento exacto de cada instrucción: Semántica del lenguaje. Tipos de semánticas en informática: Semántica operacional: Expresa cómo se ejecuta cada instrucción (utiliza para expresarlo transiciones entre estados). Se utiliza sobre todo para la definición de lenguajes y construcción de compiladores. 1.1. Semántica Semántica denotacional: Expresa el resultado de ejecutar una o varias instrucciones mediante el uso de funciones matemáticas. Es útil para razonar sobre programas o analizarlos, con objeto por ejemplo de optimizarlos o detectar errores. Basado en el calculo Lambda. Semántica axiomática: Expresa propiedades específicas que se cumplen al ejecutar instrucciones mediante asertos lógicos. Muchos aspectos de la ejecución son ignorados, por lo que es útil para razonar a alto nivel de abstracción sobre el programa. Por ejemplo, si un programa es correcto y hace lo que debería de hacer. Metodología de la Programación 5 Metodología de la Programación 6

Def (Estado): Es una aplicación (σ) que asocia a cada identificador de variable un valor correspondiente a su dominio de datos. σ: ID D Descripción completa de los valores asociados a todas las variables de un programa en un momento determinado de su ejecución. Ejecutar una instrucción supone modificar el estado de un programa. Algoritmo Intercambia(x,y: Ent) dev x, y: Ent Auxiliar: z: Ent z x x y y z FIntercambia Metodología de la Programación 7 Metodología de la Programación 8 Estado del programa Intercambia(1,3) x y z 1 3? z x 1 3 1 x y 3 3 1 y z 3 1 1 FIntercambia Def (Aserto): Predicado que expresa un conjunto de estados de un programa. Cuando colocamos un aserto en un punto del programa, estamos indicando que en ese punto sólo son válidos los estados que hacen cierto el aserto. Cuando un estado hace cierto un aserto, decimos que satisface el aserto. Ej. si x >= 1 entonces {x >= 1} Representa todos los estados del programa donde x es mayor o igual que 1. x x 1 {x >= 0} Metodología de la Programación 9 Metodología de la Programación 10 2.1. Propiedades de los asertos Def (Equivalencia): Dos asertos P y Q son equivalentes (P Q) si los satisfacen los mismos estados, es decir, si los conjuntos de estados de P y Q son iguales: estados(p) = estados(q) La equivalencia de asertos es similar a la doble implicación (P Q). Ej: c = (a + b) * (a b) (diferencia de cuadrados) c = a 2 b 2 2.1. Propiedades de los asertos Def (Relación de fuerza): Dados dos asertos P y Q, se dice que P es más fuerte que Q (P Q) si todo estado que satisface P también satisface Q. O dicho de otra forma, estados(p) estados(q). El conjunto de asertos está parcialmente ordenado, ya que existen asertos entre los que no existe la relación. La relación de fuerza es similar a la implicación (P Q). Elemento máximo? Elemento mínimo? Ej: A1 n >=1 A2 n >=0 A1 n >=1 A2 n <=0 Metodología de la Programación 11 Metodología de la Programación 12

2.1. Propiedades de los asertos Ejercicio: Establecer la relación de orden (si la hay) entre cada uno de los asertos siguientes: Un cuantificador es una abreviatura para una secuencia de operaciones análogas. x > 0, (x > 0) (y > 0) x > 0, (x > 0) (y > 0) x > 0, y >= 0 x > 0, (x >= 0) (y >= 0) (x > 0) (y > 0), (x > 0) (y > 0) (x > 0) (y > 0), y >= 0 (x > 0) (y > 0), (x >= 0) (y >= 0) Los cuantificadores los escribiremos utilizando la siguiente sintáxis: Σα : dominio: E(α) donde α es una variable ligada al cuantificador, que toma valores en el conjunto definido por dominio. Σα : 1 <= α <= 4 : α 10 Metodología de la Programación 13 Metodología de la Programación 14 Los cuantificadores que vamos a utilizar son los siguientes: Σα : dominio: E(α) Πα : dominio: E(α) α : dominio: B(α) α : dominio: B(α) Να : dominio: B(α) Max α : dominio: E(α) Min α : dominio: E(α) Dominio nulo Un cuantificador con un dominio nulo es igual al elemento neutro de la operación asociada al cuantificador. Los cuantificadores Min y Max no están definidos para un dominio nulo. Σα : 1 <= α <= 0 : α 0 E(x) es una expresión numérica y B(x) una expresión booleana. Metodología de la Programación 15 Metodología de la Programación 16 Separación de un elemento del cuantificador: Un cuantificador con un dominio no nulo, se puede separar uno de los elementos del cuantificador. El elemento separado se combina con el cuantificador con la correspondiente operación asociada. Separación de un elemento en el cuantificador de conteo: c = Nα : 1 <= α <= N : B(α) (para N > 0) [c = 1 + Nα : 2 <= α <= N : B(α) B(1)] [c = Nα : 2 <= α <= N : B(α) -B(1)] Para N > 0 Σα : 1 <= α <= N: 2 * α 2 * 1 + Σα : 2 <= α <= N: 2 * α Metodología de la Programación 17 Metodología de la Programación 18

2.3. Variables Las variables de los asertos pueden ser de los siguientes tipos: Ligadas (griegas) Libres de programa (Minúsculas) iniciales (Mayúsculas) Ejemplo 1: {x = X y = Y} P {x = Y y = X} Ejemplo 2: Σα : 1 <= α <= n : v[α] = A 2.3. Sustituciones Operación definida sobre asertos. Útil para razonar sobre asignaciones. Def (Sustitución simple): Sea A un aserto, x una variable y E una expresión del mismo tipo que x, entonces se define A[x E] como el aserto que se obtiene al sustituir todas las apariciones de x en A por la expresión E. x = y + 2 [x x * 2] NO deben existir variables ligadas que se llamen igual que la variable de programa a sustituir. Metodología de la Programación 19 Metodología de la Programación 20 2.3. Sustituciones Def (Sustitución múltiple): Sea A un aserto, x1,..., xn variables y E1,..., En expresiones del mismo tipo que las respectivas variables, entonces se define el aserto A[x1,...,xn E1,..., En] como el aserto que se obtiene al sustituir todas las apariciones de xi en A por Ei para todo i. x = y [x, y x + y, y + 1] Metodología de la Programación 21 Metodología de la Programación 22 Especificación de un conjunto de instrucciones: Consta de dos asertos: Precondición y Postcondición. La precondición indica las condiciones que debe cumplir el estado inicial del programa. La postcondición indica las condiciones que ha de cumplir el estado final del programa. Ejemplo de especificación: {x > 0} P {x > 2} Programas que podrían cumplir esta especificación: x := 3; x := x + 2;... Significado de la especificación: Si al empezar a ejecutarse el conjunto de instrucciones se cumple la precondición, al acabar necesariamente tiene que cumplirse la postcondición. Metodología de la Programación 23 Metodología de la Programación 24

Verificar un programa consistirá en demostrar, a partir de la semántica de las instrucciones y de la precondición, que se cumple la postcondición. Derivar un programa consistirá en, a partir únicamente de la especificación (precondición y postcondición), calcular un programa que la cumple. Especificación de funciones: Cabecera: Nombre de la función, nombre y tipo de los parámetros de entrada y nombre y tipo de los resultados (parámetros de salida). Precondición: Aserto a cumplir para que la función se pueda ejecutar. Sólo puede hacer referencia a los parámetros de entrada. Postcondición: Aserto que se cumplirá cuando la función acabe, y que relaciona los resultados con los parámetros de entrada. Sintaxis de cabecera: func Nombre(parámetros entrada) dev resultados Metodología de la Programación 25 Metodología de la Programación 26 Especificación informal Especificación informal // Ejemplo de especificaciones const int N = 10; typedef int Vector[N]; /********************************************************** * Funcion Inicializa * Pone el valor inicial de todos los elementos del vector a 0 * * Parametros: * v E y S vector **********************************************************/ void Inicializa(Vector v) { int i; for(i = 0; i < N; i++) v[i] = 0; } /********************************************************** * Funcion Suma * Suma dos vectores * * Parametros: * v1 E vector a sumar * v2 E vector a sumar * vres S vector resultado * **********************************************************/ void Suma(Vector v1, Vector v2, Vector vres) { int i; for(i = 0; i < N; i++) vres[i] = v1[i] + v2[i]; } Especificación formal de las funciones: func Inicializa(v: Vector) dev v: Vector {Pre: cierto} {Post: α: 0 <= α < N: v[α] = 0} func Suma(v1, v2: Vector) dev vres: Vector {Pre: cierto} {Post: α: 0 <= α < N: vres[α] = v1[α] + v2[α] } Ejercicios: 1. Especificación de una función que calcule el cociente y resto de una división entera. 2. Especificación de una función que devuelva el máximo de un vector. 3. Especificación de una función que devuelva la posición del máximo de un vector. Metodología de la Programación 28 3.1. Propiedades de especificaciones Sean la siguiente especificación y programa correctos: {A1} P {A2} Si A1 A1 entonces {A1 } P {A2} es correcto. Esto se denomina reforzar la precondición. Si A2 A2 entonces {A1} P {A2 } es correcto. Esto se denomina debilitar la postcondición. 3.2. Precondición más débil El concepto de precondición / postcondición se puede formalizar mediante lógica de predicados. Para ello definiremos el predicado pmd(p, A) (precondición más débil). Este predicado transforma el aserto A en otro aserto que es la pmd que garantiza que tras ejecutar P se cumplirá A. Una especificación se reescribe en lógica de predicados de la siguiente manera: {A1} P A1 pmd(p, A2) {A2} Metodología de la Programación 29 Metodología de la Programación 30

3.2. Precondición más débil El predicado pmd debe cumplir los siguientes 4 axiomas: 1. pmd(p, falso) falso 2. pmd(p, A1) pmd(p, A2) pmd(p, A1 A2) 3. Si A1 A2 entonces pmd(p, A1) pmd(p, A2) 4. [ pmd(p, A1) pmd(p, A2) ] pmd(p, A1 A2) Mediante estos axiomas se pueden demostrar diferentes propiedades de la pmd. Para cada instrucción de nuestro lenguaje deberemos definir la pmd. Metodología de la Programación 31 Metodología de la Programación 32