1. Tema 8:
Verificaci´n de
o
programas.
Tema 8: Verificaci´n de programas.
o Introducci´n
o
Joaqu´ Borrego
ın
Introducci´n
o D´ıaz
Ciencias de la Computaci´n 2012-13
o Outline
Motivaci´n
o
Definiendo la
correcci´n
o
Formalismos y
problemas
Sem´ntica y
a
programaci´n
o
Ejemplos
Programas no
verificables
Joaqu´ Borrego D´
ın ıaz
Depto. de Ciencias de la Computaci´n
o
2. Tema 8:
Verificaci´n de
o
programas.
Motivaci´n
o Introducci´n
o
Joaqu´ Borrego
ın
D´ıaz
Definiendo la correcci´n
o Outline
Motivaci´n
o
Definiendo la
correcci´n
o
Formalismos y problemas
Formalismos y
problemas
Sem´ntica y
a
programaci´n
o
Sem´ntica y programaci´n
a o
Ejemplos
Programas no
verificables
Ejemplos
Programas no verificables
3. Tema 8:
Motivaci´n
o Verificaci´n de
o
programas.
Introducci´n
o
Objetivo: Matematizar, el problema de la correcci´n,
o Joaqu´ Borrego
ın
para poder obtener una soluci´n mecanizada
o D´ıaz
Primera formalizaci´n: Descripci´n del problema X (E :
o o Outline
entradas, S: salidas): Motivaci´n
o
Descripci´n funcional: fX : E → S
o Definiendo la
correcci´n
o
Descripci´n relacional RX ⊆ E × S
o
Formalismos y
Programa en un modelo de computaci´n, modo
o problemas
determinista: Produce funciones Sem´ntica y
a
programaci´n
o
Ejemplos
p → fp Programas no
verificables
Programa en un modelo de computaci´n, modo no
o
determinista: Produce relaciones entre estados,
fp ⊆ E × P(S)
4. Tema 8:
Dos cuestiones Verificaci´n de
o
programas.
Introducci´n
o
Correcci´n parcial:
o
Joaqu´ Borrego
ın
En la descripci´n funcional (modo determinista)
o D´ıaz
Outline
∀x ∈ E [fp (x) ↓=⇒ fp (x) = fX (x)]
Motivaci´n
o
En la descripci´n relacional (modo no determinista)
o Definiendo la
correcci´n
o
Formalismos y
∀x ∈ E [fp (x) ↓=⇒ ∀y ∈ fp (x) [xRX y ]] problemas
Sem´ntica y
a
Parada: programaci´n
o
Modo determinista, ∀x ∈ E [ fp (x) ↓] Ejemplos
Modo no determinista, condici´n fuerte:
o Programas no
verificables
∀x ∈ E [{↑} ∈ fp (x)]
/
Modo no determinista, condici´n d´bil:
o e
∀x ∈ E [{↓} ∈ fp (x)]
5. Tema 8:
Limitaciones computacionales: Irresolubilidad Verificaci´n de
o
programas.
algor´
ıtmica Introducci´n
o
Joaqu´ Borrego
ın
D´ıaz
Correcci´n parcial: dada f computable,
o
Outline
{p ∈ Programas : fp ⊆ f } Motivaci´n
o
Definiendo la
correcci´n
o
no es recursivo (ni siquiera recursivamente enumerable)
Formalismos y
Parada: problemas
Sem´ntica y
a
programaci´n
o
{p ∈ Programas : ∀x ∈ N fp (x) ↓} Ejemplos
Programas no
no es recursivo (ni recursivamente enumerable) verificables
Consecuencia: s´lo podemos esperar obtener
o
procedimientos de semidecisi´n y parciales
o
6. Tema 8:
Especificaci´n de un problema
o Verificaci´n de
o
programas.
Introducci´n
o
Especificaci´n: colecci´n de criterios que, si lo
o o Joaqu´ Borrego
ın
satisface el programa, lo calificamos de correcto D´ıaz
Se necesita un lenguaje de especificaci´n
o Outline
Motivaci´n
o
Calidad de la especificaci´n:
o
Definiendo la
Mayor abstracci´n posible (evitamos manejar
o correcci´n
o
propiedades de la m´quina donde se ejecuta)
a Formalismos y
problemas
Grado de detalle de la especificaci´n:
o Sem´ntica y
a
programaci´n
o
+ detalle =⇒ − manejable; − detalle =⇒ + manejable Ejemplos
(inconveniente: p´rdida de informaci´n, especificaci´n incorrecta)
e o o Programas no
verificables
Cuestiones acerca de las especificaciones: ¿Completa?
¿Aplicable? ¿Consistente?
Calidad de la implementaci´n: correcci´n con
o o
respecto a requerimientos, etc.
7. Tema 8:
Representaci´n
o Verificaci´n de
o
programas.
Introducci´n
o
Formalismos internos (p.e. la l´gica de Hoare)
o Joaqu´ Borrego
ın
D´ıaz
Analizan el comportamiento de instrucciones
Outline
Formalismos externos (p.e. la l´gica temporal)
o
Motivaci´n
o
Analizan el efecto de la ejecuci´n de m´dulos del
o o Definiendo la
sistema sobre el estado actual correcci´n
o
Formalismos y
Problemas de la representaci´n: o problemas
¿Podemos asegurar que la especificaci´n expresa
o Sem´ntica y
a
programaci´n
o
correctamente la intenci´n intuitiva?
o
¿Cu´l es el grado de especificaci´n aceptable?
a o Ejemplos
¿Se pueden especificar cualquier tipo de sistemas? Programas no
verificables
8. Tema 8:
Tres enfoques Verificaci´n de
o
programas.
Introducci´n
o
Teor´ Prueba = correcci´n
ıa: o Joaqu´ Borrego
ın
D´ıaz
Desarrollo matem´tico
a
Outline
Cient´
ıfico correcci´n experimental
o
Motivaci´n
o
Estudio matematizado de la relaci´n entrada/salida
o Definiendo la
correcci´n
o
Ingenier´ Dise˜o de sistemas correctos
ıa: n
Formalismos y
Programar a partir de la especificaci´n
o problemas
Sem´ntica y
a
programaci´n
o
Ejemplos
Programas no
verificables
9. Tema 8:
Enfoque te´rico
o Verificaci´n de
o
programas.
Introducci´n
o
Idea: seguir en la verificaci´n de programas el m´todo
o e Joaqu´ Borrego
ın
deductivo matem´tico,
a D´ıaz
Programar = Demostrar Outline
Motivaci´n
o
Aproximaci´n debida a R. Floyd y C.A.R. Hoare:
o
Definiendo la
Programaci´n
o Matem´ticas
a correcci´n
o
Leng. de programaci´n
o Leng. Matem´tico
a Formalismos y
problemas
Propiedades de instr. b´sicas
a Axiomas Sem´ntica y
a
Especificaci´n
o Teorema programaci´n
o
Ejemplos
Formalizaci´n (sintaxis):
o
Programas no
Lenguaje preciso de programaci´n
o verificables
Especificaci´n de las propiedades (L´gica)
o o
Sem´ntica:
a
Sem´ntica de los formalismos matem´ticos
a a
Expresi´n de la correcci´n
o o
10. Tema 8:
Enfoque cient´
ıfico-emp´
ırico Verificaci´n de
o
programas.
Introducci´n
o
Descubrir errores mediante un gran n´mero de
u Joaqu´ Borrego
ın
ejemplos-tests, una vez que se ha dise˜ado el
n D´ıaz
sistema Outline
Desventajas: Motivaci´n
o
No garantiza la ausencia de errores (errores no Definiendo la
correcci´n
o
descubiertos mediante tests)
Formalismos y
No es eficiente: es necesario generar muchos tests problemas
Una vez construido el sistema, se hacen adaptaciones Sem´ntica y
a
programaci´n
o
para resolver los nuevos errores, lo que lo hace m´s
a
complejo Ejemplos
Programas no
Conclusi´n:
o verificables
El testeo puede ser un m´todo muy efectivo para
e
mostrar la presencia de errores, pero es completamente
inadecuado para justificar la ausencia de ´stos
e
(E. Dijkstra)
Siempre existe un error m´s
a
11. Tema 8:
Enfoque Cient´
ıfico/Ingenier´
ıa Verificaci´n de
o
programas.
Introducci´n
o
Revisar junto a dise˜ar
n Joaqu´ Borrego
ın
Producir software integrando los procesos de D´ıaz
salvaguardia y calidad Outline
Coste econ´mico m´s reducido
o a Motivaci´n
o
Software m´s seguro
a Definiendo la
correcci´n
o
Inconveniente: complejidad formal
Formalismos y
Soluci´n: Mecanizar la verificaci´n
o o problemas
Sem´ntica y
a
Consecuencia: Es necesario dise˜ar sistemas de
n programaci´n
o
verificaci´n autom´tica
o a Ejemplos
Programas no
verificables
12. Tema 8:
Programaci´n verificable
o Verificaci´n de
o
programas.
Introducci´n
o
Joaqu´ Borrego
ın
D´ıaz
Outline
Motivaci´n
o
Definiendo la
correcci´n
o
Formalismos y
problemas
Sem´ntica y
a
programaci´n
o
Ejemplos
Programas no
verificables
13. Tema 8:
Sem´ntica
a Verificaci´n de
o
programas.
Introducci´n
o
Lenguaje de programaci´n: Lenguaje para la
o Joaqu´ Borrego
ın
descripci´n de procesos din´micos (variables en el
o a D´ıaz
tiempo), relacionados con la noci´n de ejecuci´n por
o o Outline
una m´quina
a Motivaci´n
o
Sem´ntica de los lenguajes:
a Definiendo la
correcci´n
o
Sem´ntica operacional: asociada a la descripci´n
a o Formalismos y
funcional problemas
Sem´ntica relacional: asociada a la descripci´n
a o Sem´ntica y
a
programaci´n
o
relacional
Ejemplos
Otros...
Programas no
Necesitamos Reglas que describen la correspondencia verificables
entre programas y especificaciones
14. Tema 8:
Problemas relacionados Verificaci´n de
o
programas.
Introducci´n
o
S´
ıntesis: Dada ϕ especificaci´n, construir un programa
o Joaqu´ Borrego
ın
p correcto seg´n ϕ (satisface ϕ)
u D´ıaz
An´lisis: Dado p, construir la especificaci´n
a o Outline
demostrable m´s adecuada para describir su
a Motivaci´n
o
comportamiento Definiendo la
correcci´n
o
Verificaci´n de propiedades: Dados p y ϕ, ¿p
o Formalismos y
problemas
satisface ϕ?
Sem´ntica y
a
Equivalencia: Dados p y p y una especificaci´n ϕ,
o programaci´n
o
Ejemplos
¿Son p y p equivalentes seg´n ϕ?
u
Programas no
verificables
Optimizaci´n: Dado p, dise˜ar un programa
o n
equivalente mejor, seg´n cierta medida de complejidad
u
Depuraci´n: Dado p que no satisface ϕ, modificar p
o
para satisfacer ϕ
15. Tema 8:
Observaciones Verificaci´n de
o
programas.
Introducci´n
o
Son problemas indecidibles, en general Joaqu´ Borrego
ın
D´ıaz
No estudiaremos eficiencia
Herramientas fundamentales: Outline
Motivaci´n
o
Inducci´n computacional (sobre la ejecuci´n)
o o Definiendo la
correcci´n
o
Inducci´n estructural (sobre la sintaxis de
o Formalismos y
programas/especificaciones) problemas
Dos situaciones de partida: Sem´ntica y
a
programaci´n
o
Caso a posteriori Ejemplos
Caso constructivo: construir el programa junto con la Programas no
especificaci´n.
o verificables
16. Tema 8:
Correcci´n constructiva versus a posteriori
o Verificaci´n de
o
programas.
Introducci´n
o
Algoritmo cl´sico A1 de la multiplicaci´n
a o Joaqu´ Borrego
ın
D´ıaz
Funci´n mult1 (x, y )
o
si y = 0 entonces devolver 0 Outline
si no Motivaci´n
o
i ←x
Definiendo la
j ←y correcci´n
o
mientras j > 1 hacer
Formalismos y
i ←i +x problemas
j ←j −1
Sem´ntica y
a
devolver i programaci´n
o
Viene de que la aplicaci´n f caracterizada por
o Ejemplos
Programas no
1. f (x, 0) = 0, ∀x ∈ N. verificables
2. f (x, y + 1) = f (x, y ) + x, ∀x, y ∈ N.
define el producto de dos n´meros naturales. A1 es
u
correcto, ya que ha sido dise˜ado mediante una definici´n
n o
“constructiva” de f .
17. Tema 8:
Multiplicaci´n rusa
o Verificaci´n de
o
programas.
Introducci´n
o
Joaqu´ Borrego
ın
D´ıaz
Funci´n mult2 (x, y )
o
Vector A, B Outline
si x = 0 entonces devolver 0 Motivaci´n
o
si x = 1 entonces devolver y Definiendo la
si no Para x = 52 e y = 27 correcci´n
o
A[1] ← x ; B[1] ← y
52 27 Formalismos y
i ←1 problemas
26 54
mientras A[i] > 1 hacer
→ 13 108 Sem´ntica y
a
A[i + 1] ← A[i]div2 programaci´n
o
B[i + 1] ← B[i] + B[i] 6 216
Ejemplos
i ←i +1 → 3 432
prod ← 0 → 1 864 Programas no
verificables
i ←i −1
mientras i > 0 hacer 52 · 27 = 108 + 432 + 864 =
si A[i] = A[i]div2 + A[i]div2 entonces = 1404
prod ← prod + B[i]
i ←i −1
devolver prod
18. Tema 8:
Correcci´n parcial
o Verificaci´n de
o
programas.
Introducci´n
o
Teorema: Si A2 para sobre (x, y ) ∈ N × N, entonces Joaqu´ Borrego
ın
devuelve x · y . Es decir, fA2 (x, y ) = x · y . D´ıaz
Demostraci´n:
o Outline
Motivaci´n
o
Si x = 0, trivial
Definiendo la
Si x > 0, entonces correcci´n
o
x = ak 2k + ak−1 2k−1 + · · · + a2 22 + a1 2 + a0 ai ∈ Formalismos y
problemas
{1, 0} ak = 1 Sem´ntica y
a
programaci´n
o
Obs´rvese que
e 2k
≤x < 2k+1 . Por tanto k = log2 x ,
Ejemplos
que notaremos por log2 (x).
Programas no
verificables
Las columnas A y B
A[1] = 2k + ak−1 2k−1 + · · · + a2 22 + a1 2 + a0 B[1] = y
A[2] = 2k−1 + ak−1 2k−2 + · · · + a2 2 + a1 B[2] = 2 · y
A[3] = 2k−2 + ak−1 2k−3 + · · · + a2 B[3] = 2 · B[2] = 22 · y
... ...
A[k] = 2 + ak−1 B[k] = 2k−1 y
A[k + 1] = 1 B[k + 1] = 2k y
19. Tema 8:
Correcci´n total: Parada
o Verificaci´n de
o
programas.
Introducci´n
o
Para cada j = 1, . . . , k + 1 se verifica: Joaqu´ Borrego
ın
D´ıaz
A[j] es impar ⇐⇒ aj−1 = 0 ⇐⇒ aj−1 = 1 Outline
Motivaci´n
o
Por tanto, Definiendo la
fA2 (x, y ) = B[j] = 2j−1 · y = correcci´n
o
A[j] impar aj−1 = 1 Formalismos y
problemas
1≤j ≤k +1 1≤j ≤k +1
Sem´ntica y
a
= aj−1 · 2j−1 y programaci´n
o
Ejemplos
1≤j ≤k +1
Programas no
=y· aj−1 · 2j−1 = y · x verificables
1≤j ≤k +1
Teorema (Prueba de parada): El algoritmo A2 para sobre
todo (x, y ) ∈ N × N.
Demostraci´n: Los dos bucles considerados constan, a lo
o
sumo, de k + 1 = 1 + log2 (x) pasos.
20. Tema 8:
Verificaci´n de
o
programas.
Introducci´n
o
Ejemplo: Error del procesador Pentium Joaqu´ Borrego
ın
D´ıaz
A˜o 1994, 67.000 millones de pesetas)
n Outline
p
Algoritmo de divisi´n del procesador (C´lculo de
o a d ):
Motivaci´n
o
Definiendo la
correcci´n
o
Division SRT4 (p, d) Formalismos y
p0 ← p problemas
Para cada k = 1, ... hacer Sem´ntica y
a
programaci´n
o
determinar qk ∈ {−2, −1, 0, 1, 2} tal que Ejemplos
8
si pk+1 = 4(pk − qk d), entonces |pk+1 | ≤ 3 d Programas no
verificables
p qi
Se verifica que =
d 4i
i∈N
8 2
Propiedad: |pk | ≤ 3 d =⇒|pk − qk d| ≤ 3
Para alg´n qk ∈ {−2, −1, 0, 1, 2}
u
21. Tema 8:
Ejemplo (cont.) Verificaci´n de
o
programas.
Introducci´n
o
Si pk+1 = 4(pk − qk d) y |pk+1 | ≤ 8 d, entonces
3
Joaqu´ Borrego
ın
D´ıaz
pk −k qk pk + 1 −(k+1)
4 = k + 4
d 4 d Outline
p pk Motivaci´n
o
Aplicando inducci´n
o d
= (q0 + · · · + qk−1 ) + d
4−k y por l´
ımite se
tiene la igualdad Definiendo la
correcci´n
o
Elecci´n del qk (unidad: d/3):
o
Formalismos y
problemas
Sem´ntica y
a
programaci´n
o
Ejemplos
Programas no
verificables
El algoritmo eleg´ 0 en vez de 2 para ciertos n´meros en [5/3, 8/3],
ıa u
debido a errores de precisi´n
o
22. Tema 8:
Otros ejemplos Verificaci´n de
o
programas.
Introducci´n
o
1985-87, Canad´: Fallo en el software de un emisor de
a Joaqu´ Borrego
ın
rayos para el tratamiento del c´ncer: cuatro muertos
a D´ıaz
Banco de Nueva York: En el contador de mensajes de Outline
compra/venta: Motivaci´n
o
32767 + 1 = 0 Definiendo la
correcci´n
o
P´rdida de la nave Phobos (U. Sovi´tica, 1988)
e e Formalismos y
problemas
Un s´
ımbolo: Explosi´n de la lanzadera espacial
o Sem´ntica y
a
programaci´n
o
Verificaci´n de propiedades para sistemas con n´mero
o u Ejemplos
finito de estados, pero existen 1010 estados o m´s
a Programas no
verificables
Ariane 5: mal env´ de la altitud correcta
ıo
Los errores tienen su causa en una deficiente verificaci´n
o
Costes en EEUU: 300.000 millones de pesetas en 2002
Costes en UK: 900 millones de pesetas (2002)
23. Tema 8:
Verificaci´n en la NASA
o Verificaci´n de
o
programas.
Introducci´n
o
Joaqu´ Borrego
ın
D´ıaz
Outline
Motivaci´n
o
Definiendo la
correcci´n
o
Formalismos y
problemas
Sem´ntica y
a
programaci´n
o
Ejemplos
Programas no
verificables
24. Tema 8:
Programas no verificables Verificaci´n de
o
programas.
Introducci´n
o
(Fijamos x > 1) Procedimiento 1: Dado n > 0, Joaqu´ Borrego
ın
apl´
ıquese recursivamente la siguiente regla: D´ıaz
Escribir n en base x, aumentar en 1 la base, y restarle 1 Outline
al nuevo n´mero
u Motivaci´n
o
Definiendo la
Ejemplo: si n = 20098, y x = 3, entonces correcci´n
o
Formalismos y
n = 39 + 35 + 34 + 32 + 30 problemas
Sem´ntica y
a
programaci´n
o
y el resultado es 49 + 45 + 44 + 42 + 40 −1 Ejemplos
(Goodstein) Procedimiento 2: similar al 1, pero se Programas no
verificables
aplica la regla al n´mero escrito en base x pura:
u
2 1
En el caso anterior, n = 33 + 33 +2 + 33+1 + 32 + 30
2 1
y el resultado es n = 44 + 44 +2 + 44+1 + 42 + 40 − 1
Teorema: Despu´s de un n´mero finito de pasos los pro-
e u
cedimientos anteriores paran, llegando a 0
25. Tema 8:
Programas no verificables (II) Verificaci´n de
o
programas.
Introducci´n
o
Consecuencia del teorema de la forma normal: Joaqu´ Borrego
ın
Cualquier programa aritm´tico se puede traducir a una
e D´ıaz
f´rmula Σ1 , esto es, f´rmulas del tipo
o o Outline
Motivaci´n
o
∃xϕ(y , x) Definiendo la
correcci´n
o
donde ϕ s´lo posee cuantificadores acotados
o Formalismos y
problemas
Existe traducci´n p ∈ Programas → ϕp tal que:
o Sem´ntica y
a
programaci´n
o
Es autom´tica (mecanizable)
a
Ejemplos
Se tiene que para cualesquiera x, y ∈ N
Programas no
verificables
[[p]](~) = y ⇐⇒ N |= ψp (~, y)
x x
26. Tema 8:
Imposibilidad de verificaci´n
o Verificaci´n de
o
programas.
Introducci´n
o
Teorema: Supongamos que la teor´ deıa Joaqu´ Borrego
ın
especificaciones s´lo admite inducci´n sobre f´rmulas
o o o D´ıaz
Σ1 . Entonces el sistema no puede demostrar que el Outline
procedimiento 1 para Motivaci´n
o
Potencia de ese sistema: Programas LOOP, funciones Definiendo la
correcci´n
o
primitivas recursivas Formalismos y
problemas
Teorema: Supongamos que la teor´ de ıa
Sem´ntica y
a
especificaciones admite inducci´n sobre cualquier
o programaci´n
o
f´rmula aritm´tica. Entonces el sistema no puede
o e Ejemplos
demostrar que el procedimiento 2 para Programas no
El sistema es la Aritm´tica de Peano.
e verificables
Para demostrar la parada se necesita usar t´cnicas de
e
teor´ de conjuntos
ıa