Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Triplas de Hoare: Verificación de Programas, Resúmenes de Matemáticas

esto te ayudara en aprender cosas muy importnates que te serviran en un futuro no muy lejano

Tipo: Resúmenes

2021/2022

Subido el 06/06/2022

stiven-alexis-alvarez-pineda
stiven-alexis-alvarez-pineda 🇨🇴

1 documento

1 / 16

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Palabras clave: programa, especificación de programas, corrección de programas, triplas de Hoare.
Contenido
1
2
3
4
5
Programa y estado de programa
Triplas de Hoare
Resumen
Especificación de un programa
Ejemplos de triplas de Hoare
Triplas de Hoare
Unidad 1 / Escenario 1
Lectura fundamental
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff

Vista previa parcial del texto

¡Descarga Triplas de Hoare: Verificación de Programas y más Resúmenes en PDF de Matemáticas solo en Docsity!

Palabras clave : programa, especificación de programas, corrección de programas, triplas de Hoare.

Contenido

Programa y estado de programa Triplas de Hoare Resumen Especificación de un programa Ejemplos de triplas de Hoare

Triplas de Hoare

Unidad 1 / Escenario 1

Lectura fundamental

Introducción

Cuando se desea verificar si un programa es correcto, i. e., sus salidas son las esperadas, una estrategia es construir un conjunto de casos de prueba suficientemente exhaustivo para escrutar todos los posibles errores que pudiese tener el programa. Esta estrategia es aplicada ampliamente en la industria, principalmente por su bajo costo. No obstante, el uso de casos de prueba no garantiza en un 100% la corrección del programa, ya que es posible que el equipo encargado de las pruebas haya pasado por alto alguna situación en la que el programa pudiera comportarse de manera distinta a la esperada. En la mayor parte de las aplicaciones computacionales, una probabilidad pequeña de fallo puede ser tolerada, e. g., si un Xbox se bloquea en medio de un juego, esto no genera mayor costo y el problema seguramente se resolverá reiniciando la consola; además, dado que la probabilidad de que el problema se presente es baja, difícilmente causará una demanda al fabricante. Por otra parte, en aplicaciones críticas, un error, por simple que sea, puede tener costos incalculables. Suponga, por ejemplo, que el controlador de un avión no tripulado calcula con un error mayor al tolerable el ángulo que debe virar; las consecuencias de este error incluyen la pérdida total de la aeronave (y posiblemente también de la confidencialidad de su diseño). Cuando se requiere una garantía absoluta de la corrección de un programa, se debe hacer una demostración formal de la misma. En esta lectura se introducen los conceptos de especificación de programas y triplas de Hoare, que brindarán el lenguaje suficiente para realizar dichas demostraciones. La sección 1 repasa conceptos fundamentales de la programación, en una forma adecuada para abordar los temas subsiguientes. La sección 2 explica qué son la precondición y poscondición de un programa, elementos que forman su especificación. Luego, en la sección 3 se presentan las triplas de Hoare, elementos del lenguaje fundamentales para poder demostrar formalmente la corrección de programas. Finalmente, en la sección 4 se exponen ejemplos de triplas de Hoare correspondientes a programas que resuelven tareas sencillas encontradas frecuentemente en aplicaciones reales.

2. Especificación de un programa

La precondición es un predicado que define el conjunto de estados iniciales válidos de un programa, i. e., restringe los valores iniciales de las variables de entrada. De manera similar, la poscondición es un predicado que define el conjunto de estados finales aceptados del programa, i. e., restringe los valores finales de las variables de salida y enuncia las relaciones entre estos valores y los valores iniciales de las variables de entrada. En adelante, la precondición y poscondición se expresarán como {Pre Q: <precondición> } y {Pos R: <poscondición>}. Dado que en la poscondición se hará referencia a los valores iniciales de las variables de entrada, una práctica común es representar estos valores mediante variables semánticas en la precondición. Las variables semánticas no hacen parte del programa y por tanto no pueden ser modificadas por este. Comúnmente, se distinguen las variables semánticas de las variables del programa denotando las primeras con letras mayúsculas y las segundas con letras minúsculas. Ejemplo 2. Considerando el programa del ejemplo 1, puede observarse que en su descripción se indica que sus valores de entrada deben ser no negativos. Adicionalmente, dado que MCD(0, 0) no está definido, los valores de entrada no pueden ser simultáneamente 0. La precondición para el programa sería entonces la siguiente: {Pre Q: a ≥ 0 ^ b ≥ 0 ∧ a + b > 0 ∧ a = A ∧ b = B} De igual forma, el valor final de a debe corresponder a MCD(A, B). Esto se indica en la poscondición como {Pos R: a = MCD(A, B)} o, usando cuantificación, como {Pos R: a = (max m : m|A ∧ m|B : m)} La pareja formada por la precondición y la poscondición de un programa es llamada la especificación del programa. Note que la especificación establece qué debe hacer el programa, mas no el cómo debe hacerlo.

3. Triplas de Hoare

Una tripla de Hoare está compuesta por un programa junto con su precondición y poscondición (Hoare, 1969). Una tripla de Hoare se denota como {Q}S{R}, donde S representa el programa, Q su precondición y R su poscondición. La tripla {Q}S{R} es una expresión lógica que es válida cuando el programa S es correcto con respecto a su especificación Q y R. El programa S es correcto si y solo si al ser ejecutado sobre cualquier estado inicial que satisface la precondición, produce un estado final que satisface la poscondición. La tripla {Q}S{R} no es válida (y, por lo tanto, el programa incorrecto) si existe al menos un estado e que satisface Q tal que al ejecutar S sobre dicho estado:

  • El programa no termina correctamente, ya sea por un error en ejecución o porque queda estancado en un ciclo infinito.
  • El estado final alcanzado por el programa no satisface la poscondición R. Demostrar que un programa es correcto con respecto a su especificación es equivalente a demostrar que su correspondiente tripla de Hoare es válida. Las figuras 1.a y 1.b exhiben situaciones en las que el programa S no es correcto con respecto a su especificación, Q y R. La figura 1.c corresponde a una tripla de Hoare válida. Figura 1. Gráficas Gráfica 1a Gráfica 1b Gráfica 1c Q R Q R Q R

3.1.3. Fortalecimiento de precondición Si [P ⇒ Q] y {Q}S{R} es válida, entonces también es válida {P}S{R}. [P ⇒ Q] significa que el conjunto de estados que cumplen P es subconjunto del conjunto de estados que cumplen Q. {Q}S{R} implica que todo estado que satisface Q es transformado por S en un estado que satisface R. Por lo tanto, todo estado que satisface P es transformado por S en un estado que satisface R,i.e.,{P}S{R}. Figura 2. Ilustración de la propiedad de fortalecimiento de precondición Fuente : elaboración propia 3.1.4. Debilitamiento de poscondición Si [R ⇒ P] y {Q}S{R} es válida, entonces también es válida {Q}S{P}. [R ⇒ P] significa que el conjunto de estados que cumplen R es subconjunto del conjunto de estados que cumplen P.{Q}S{R} implica que todo estado que satisface Q es transformado por S en un estado que satisface R. Por lo tanto, todo estado que satisface Q es transformado por S en un estado que satisface P,i.e.,{Q}S{P}. Q P R

Figura 3. Ilustración de la propiedad de debilitamiento de poscondición Fuente : elaboración propia. 3.1.5. Conjunción de poscondiciones Si {Q}S{R} y {Q}S{P} son válidas, entonces también es válida {Q}S{R ∧ P}. {Q}S{R} implica que todo estado que satisface Q es transformado por S en un estado que satisface R.{Q}S{P} implica que todo estado que satisface Q es transformado por S en un estado que satisface P. Por lo tanto, todo estado que satisface Q es transformado por S en un estado que satisface tanto R como P,i.e.,{Q}S{R ∧ P}. Q (^) R P

Figura 6. Sir Charles Antony Richard Hoare dando una charla en el EPFL el 20 de junio de 2011. Fuente : Rama, (s.f.). ¿Sabía que...? Las triplas de Hoare deben su nombre a su creador, Tony Hoare, quien publicó en 1969 un artículo (Hoare, 1969) que describe un conjunto de reglas lógicas para razonar sobre la corrección de programas, llamado Lógica de Hoare. Entre sus valiosas contribuciones a las ciencias de la computación se encuentran también los algoritmos de ordenamiento Quicksort y de selección Quickselect. Hoare fue galardonado con el Premio A. M. Turing de la ACM (Association for Computing Machinery ), el más importante en ciencias de la computación, en el año 1980.

4. Ejemplos de triplas de Hoare

Ejemplo 3. Note que a = A tiene como único fin asociar la variable semántica A al valor inicial de a pero no impone ninguna restricción sobre dicho valor, por lo que el programa acepta cualquier estado como inicial. Puede demostrarse por contraejemplo que la tripla no es válida (A = 0). {Pre Q: a = A} program ejemplo_ input : a:R var : b:R b := 1 / a return b {Pos R: Ab = 1} Ejemplo 4. El programa calcula el inverso multiplicativo de la entrada a. Dado que la precondición restringe el caso A = 0, puede verse (aunque no corresponda esto a una demostración formal) que el programa es correcto. {Pre Q: a > 0 ∧ a = A} program ejemplo_ input : a:R var: b:R b := 1 / a return b {Pos R: Ab = 1}

Ejemplo 7. El programa calcula AB. Posteriormente, se analizará su corrección. {Pre Q: b ≥ 0 ∧ a = A ∧ b = B} program ejemplo_ input: a:R, b:ℤ var: p:R p := 1 while b > 0 do p := p * a b := b - 1 return p {Pos R: p = Ab} Ejemplo 8. El programa calcula el máximo valor en el arreglo de entrada. Posteriormente, se analizará su corrección. {Pre Q: a = A} program ejemplo_ input: n:ℤ, a:ℝ[n] var: m:R m := -∞ k := 0 while k < n do if m < a[k] m := a[k] k := k + 1 return m {Pos ℝ: m = (max i | 0≤i<n : A[i])}

5. Resumen

Se denomina estado del programa al conjunto de valores de las variables del programa en un momento dado. Puede entenderse un programa entonces como un conjunto de transformaciones de su estado y, en particular, como una transformación de un estado inicial en un estado final. La precondición de un programa es un predicado que define el conjunto de estados iniciales válidos de un programa, i. e., restringe los valores iniciales de las variables de entrada. La poscondición de un programa es un predicado que define el conjunto de estados finales aceptados del programa, i. e., restringe los valores finales de las variables de salida y enuncia las relaciones entre estos valores y los valores iniciales de las variables de entrada. La precondición y poscondición de un programa forman su especificación. Las variables semánticas son variables que no hacen parte del programa, pero sí de su especificación. Estas variables son usadas para hacer referencia a los valores iniciales de las variables de entrada en la poscondición. Una convención común es nombrar las variables semánticas usando letras mayúsculas y las variables de programa usando letras minúsculas. Una tripla de Hoare es una expresión lógica compuesta por un programa y su especificación, denotada como{Q}S{R}, donde S corresponde al programa y Q y R a su especificación. Una tripla de Hoare es válida si y solo si el programa es correcto con respecto a la especificación. Un programa es correcto con respecto a su especificación si y solo si al ser ejecutado sobre cualquier estado inicial que satisface la precondición, produce un estado final que satisface la poscondición. Las triplas de Hoare satisfacen las siguientes propiedades:

  • {falso}S{R}^ es válida.
  • {Q}S{falso}^ si y solo si^ [Q ≡ falso].
  • Si^ [P^ ⇒^ Q]^ y^ {Q}S{R}^ es válida, entonces también es válida^ {P}S{R}.
  • Si^ [R^ ⇒^ P]^ y^ {Q}S{R}^ es válida, entonces también es válida^ {Q}S{P}.
  • Si^ {Q}S{R}^ y^ {Q}S{P}^ son válidas, entonces también es válida^ {Q}S{R^ ∧^ P}.
  • Si^ {Q}S{R}^ y^ {P}S{R}^ son válidas, entonces también es válida^ {Q^ ∨^ P}S{R}.

INFORMACIÓN TÉCNICA Módulo: Análisis y Verificación de Algoritmos Unidad 1: Verificación de programas Escenario 1: Triplas de Hoare Autor: Edwin Andrés Niño Asesor Pedagógico: Edwin Mojica Diseñador Gráfico: Andrés Felipe Figueroa Asistente: Eveling Patricia Peñaranda Este material pertenece al Politécnico Grancolombiano. Prohibida su reproducción total o parcial.