Página web: td/lfyacs.uns.edu.ar/~td/lfya2013/downloads/TEORICAS/t01.2013.presenta… · técnicas...
Transcript of Página web: td/lfyacs.uns.edu.ar/~td/lfya2013/downloads/TEORICAS/t01.2013.presenta… · técnicas...
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
11
presentación
Cátedra:Profesora
Ana G. Maguitman consultas: viernes 10hs (oficina 205) email: [email protected]
AsistenteTelma Delladio
consultas: jueves 11hs (hall DCIC) email: [email protected]
AyudantesCecilia BaggioVirginia CardosoMariana EtcheberNicolás KomañskyMaría Virginia SabandoMaximiliano Vera
Página web: http://cs.uns.edu.ar/~td/lfya
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
22
presentación
Régimen de cursado:Dos parciales y un recuperatorio
Primer Parcial fecha: 30 de septiembreunidades 1, 2, 3
Segundo Parcialfecha: 11 de noviembre unidades 4, 5 y 6
Recuperatoriofecha: 27 de noviembre
CalificacionesA, B o C: aprobadoD: desaprobado
Para promocionar se necesitaobtener A en ambos parciales y aprobar un examen teórico el día 27 de noviembre
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
33
preguntas
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
44
técnicas de pruebas computacionales
CONTENIDOTeoremas y pruebas informales [G2.1]. Pruebas exhaustivas [G2.1]. Pruebas directas [G2.1]. Contraposición [G2.1]. Contradicción [G2.1]. Inducción [G2.2]. Primer principio de inducción [G2.2]. Pruebas por inducción matemática [G2.2]. Segundo principio de inducción [G2.2]. Pruebas de correctitud de un algoritmo [G1.6,G2.3].
GERSTING, JUDITH L. “Mathematical Structures forComputer Science: A Modern Approach to DiscreteMathematics”. W H Freeman & Co, 2006.
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
55
conjeturas
En la práctica o investigación observamos casos en los que Q es verdadero siempre que P es verdadero.
A partir de estas experiencias se puede formular la conjetura:
Si P es verdadero entonces Q es verdadero.
P→Q
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
66
conjeturas vs. teoremas
Sin embargo, es necesario utilizar algún tipo de razonamiento deductivo para verificar la verdad o falsedad de una conjetura. Cuando una conjetura es probada pasa a
ser un teorema. O podríamos encontrar un contraejemplo
para mostrar que la conjetura es falsa, un caso en que P sea verdadera y Q falsa.
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
77
técnicas de prueba
Existen diversas técnicas para probar que una conjetura es verdadera o mostrar que es falsa.• Mostrar que es falsa utilizando un
contraejemplo.• Prueba exhaustiva.• Prueba directa.• Contrapositiva.• Contradicción.• Prueba por inducción.
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
88
contraejemplos
Ejemplo:¿Es la siguiente conjetura un teorema?
“para cada entero positivo n, n! ≤ n2”
n =1, n! = 1, n2 = 1 SIn =2, n! = 2, n2 = 4 SIn =3, n! = 6, n2 = 9 SIn =4, n! = 24, n2 = 16 NO (contraejemplo)
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
99
6553712
25712
1712
512
312
4
3
2
1
0
2
2
2
2
2
más sobre conjeturas, teoremas y contraejemplos
=+
=+
=+
=+
=+En el siglo XVII Fermat conjeturóque los números de la forma son primos para todo entero positivo n.
122 +n
417,700,6641297,967,294,412
52
⋅==+
100 años más tarde Euler refutó esta conjetura mediante un contraejemplo:
no es primo
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
1010
pruebas exhaustivas
Los contraejemplos sirven para probar que algo es falso pero generalmente las pruebas basadas en ejemplos no son útiles para probar que algo es verdadero. Sin embargo, cuando las conjeturas se refieren a una colección finita podemos mostrar que la conjetura es verdadera para cada elemento de la colección. A esto se lo llama prueba exhaustiva.
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
1111
pruebas exhaustivas
Ejemplo:“si un entero entre 1 y 13 es divisible por
6 también es divisible por 3”Prueba
6 es divisible por 6, también es divisible por 3
12 es divisible por 6, también es divisible por 3
1, 2 ,3, 4, 5, 7, 8, 9, 10, 11, y 13: no son divisibles por 6.
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
1212
prueba directa
La manera más natural de probar P → Q (si P es verdadero, entonces Q es verdadero) es mediante la prueba directa:Asumiendo la hipótesis P deducir Q.
La prueba puede serFormal (construyendo un argumento válido
basado en la lógica).Menos formal.
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
1313
prueba directa
Ejemplo“si x e y son enteros pares, entonces el
producto xy es también un entero par”Prueba
Sean x = 2m, y=2n.Luego xy=2m2n=2(2mn).
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
1414
prueba por contrapositiva
A veces es difícil probar directamente la conjetura P → Q. Podría ser más fácil probar ¬Q → ¬P. A esto se lo conoce como prueba por contrapositiva. ¬Q → ¬P es la contrapositiva de P → Q.
Ejemplo“para un entero x, si x2 es impar, entonces
x es impar”Podemos probarlo mostrando que “si x es
par, entonces x2 es par” (lo cual ya fue realizado).
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
1515
prueba por contradicción
Las pruebas por contradicción se obtienen asumiendo que la conjetura es falsa y mostrando que esa suposición implica que una propiedad conocida es falsa.Para probar P→Q asumo PΛ¬Q y llego a una contradicción. Si no existe una premisa P, para probar Q, asumo ¬Q y llego a una contradicción.A esta técnica de prueba también se la conoce como prueba por el absurdo.
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
1616
prueba por contradicción
Ejemplo“Si x + x = x, entonces x = 0”.Prueba
Asumir x + x = x y x ≠ 0, entonces 2x = x y dado que x ≠ 0, podemos dividir ambos lados de 2x = x por x. Obtenemos 2 = 1 (contradicción).
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
1717
prueba por contradicción
EjemploProbar que no es racionalPruebaAsumamos que es racional.
Entonces =p/q donde q≠0 y p,q son enteros y no tienen factores comunes
2
22
2 = p2/q2
2 q2= p2
2 divide a p2
2 divide a p4 divide a p2
2 q2 = 4xq2 = 2x
2 divide a q2
2 divide a q 2 divide a p y q (contradicción)
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
1818
ejercicios
¿Dónde está el error?Sean a y b enteros no negativos tales
que a = b.a = ba2 = aba2 − b2 = ab − b2
(a + b)(a − b) = (a − b)ba + b = b2b = b2 = 1
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
1919
resumiendo
Técnica de prueba
Método para probar P→Q
Acotaciones
prueba exhaustiva Demostrar P → Q para todos los casos posibles
Sólo puede ser usado para probar un número finito de casos
prueba directa Asumir P y deducir Q Método más estándar
prueba por contrapositiva
Asumir ¬Q y deducir ¬P
Usar si ¬Q tiene más potencia como hipótesis que P.
prueba por contradicción
Asumir P∧¬Q, deducir una contradicción
Usar cuando ¬Q nos lleva a un absurdo.
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
2020 1. P(1)2. Para todo entero positivo k,
P(k) → P(k+1)
Entonces P(n) para todo entero n a partir de 1.
caso base
paso inductivo
primer principio de inducción
Sea P(n) una propiedad definida para el entero n y supongamos:
hipótesis inductiva
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
2121
primer principio de inducción
EjemploProbar para n > 0
Prueba Caso base: n = 1, es verdadero ya que
0+1 = 1(1+1)/2Hipótesis inductiva:
asumir que es verdadero para n=k, es decir,
Paso inductivo:probar que es verdadero para n=k+1, es decir
2/)1(0
+=∑=
nnin
i
2/)1(0
+=∑=
kkik
i
2/)2)(1(1
0++=∑
+
=
kkik
i
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
2222
primer principio de inducción
∑∑=
+
=
++=k
i
k
iiki
0
1
01
)1(2/)1( +++= kkk
2/)2)(1( ++= kk
usando hipótesis inductiva
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
2323
primer principio de inducción
EjemploLos números de Fibonacci se definen como:
Los primeros números de Fibonacci son:0, 1, 1, 2, 3, 5, 8, 13, 21,…
1,1,0
11
10
≥+===
−+ nfffff
nnn
Leonardo Fibonacci(1170 – 1250)
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
2424
primer principio de inducción
Mostrar que para todo n ≥ 1.
PruebaCaso base:
Probar
010201111 =⋅=⋅=⋅ +− ffff
011)1( 2121 =−=−+f
1211111 )1(−+=⋅ +− fff
nnnn fff )1(2
11 −+=⋅ +−
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
2525
primer principio de inducción
Paso inductivo:Asumamos
Probemos
kkkk fff )1(2
11 −+=⋅ +−
1212 )1( +++ −+=⋅ k
kkk fff
121
111
111
111
2112
)1()1(
)1()(
)1(
)(
++
+++
+−+
+−+
+++
−+=−+⋅=
−++=
−−⋅+⋅=
+⋅=+=⋅
kk
kkk
kkkk
kkkkk
kkkkkkkk
fff
fff
ffff
ffffffff
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
2626
seguimos con inducción …
Los métodos de inducción pueden ser aplicados a estructuras diferentes a los enteros. Por ejemplo matrices, árboles secuencias, etc.
La propiedad crucial es que exista un principio de buen ordenamiento: debe existir una noción de tamaño de tal manera que todos los objetos tengan un tamaño finito y cada conjunto de objetos deberácontener un objeto menor (el más chico de todos).
Ejemplos: profundidad de un árbol, dimensión de matrices o grillas, longitud de secuencias, etc.
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
2727
primer principio de inducción
Ejemplo¿Cuantos nodos tiene un árbol binario completo de altura n?
ProbarNodos(n)= 2n+1-1
PruebaTras realizar un análisis descubrimos la siguiente
definición recursiva:Nodos(0) = 1Nodos(n) = Nodos(n-1) + 2n
Caso base: n=1 es verdadero ya que 1 + 2 = 21+1-1
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
2828
primer principio de inducción
Paso inductivo:Asumamos: Nodos(k)= 2k+1-1Queremos probar:
Nodos(k+1)= 2k+2-1.
Nodos(k+1) = (Def)Nodos(k) +2k+1 = (HI)2k+1-1 + 2k+1= 2k+2-1
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
2929
primer principio de inducción
EjemploTomar un cuadrado de 2n×2n con una baldosa faltantePodemos cubrirlo con L’s?
ejemplo para 8×8
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
3030
primer principio de inducción
Caso base (2×2) es fácil.
Paso inductivo:Asumir que es posible para 2n×2n
Para un cuadradode 2n+1×2n+1
miramos los 4cuadrados menoresy usamos una L para cubrir los 3espacios indicadosen la figura.Aplicar hipótesisinductiva.
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
3131
BNF e inducción sobre derivaciones y secuencias
La forma normal de Backus-Naur(BNF) es una notación usada para describir lenguajes formales.
Una especificación de BNF es un sistema de reglas de derivación, de la forma
<simbolo> ::= <expresión>donde <símbolo> es un no-terminal, y <expresión> consiste en secuencias de símbolos y/o secuencias separadas por la barra vertical, '|' (indicando una opción). La secuencia de símbolos puede contener otros símbolos no-terminales, símbolos terminales, o ε (la cadena nula).
John Warner Backus (1924 –2007)
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
3232
BNF e inducción sobre derivaciones y secuencias
EjemploSea L={ab, aabb,aaabbb,…} el lenguaje de cadenas que contienen n a’s seguidas de n b’s con n ≥ 1. Este lenguaje también puede denotarse como L={anbn n ≥ 1}
La gramática G en notación BNF que usamos para describir L es la siguiente
<cadena> ::= ab | a<cadena>bProbar por inducción que L(G)=L
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
3333
BNF e inducción sobre derivaciones y secuencias
L(G) ⊆ LToda secuencia de símbolos que podemos derivar a partir de <cadenas> consiste en cadenas de la forma akbk. La prueba se realiza por inducción sobre el número de pasos en la derivación.
Caso base: n=1 <cadena> ⇒ ab, es de la forma a1b1
Hipótesis inductiva: Supongamos que derivaciones con n pasos producen cadenas de la forma akbk.
Paso inductivo: Consideremos una derivación con n+1 pasos
<cadena> ⇒ a<cadena>b ⇒ axbPor la hipótesis inductiva x es de la forma akbk y por lo tanto axb = ak+1bk+1.
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
3434
BNF e inducción sobre derivaciones y secuencias
L ⊆ L(G)Toda cadena de la forma akbk puede derivarse a partir de <cadena>. La prueba se realiza por inducción sobre la longitud de la cadena.
Caso base: |ω| = 2, <cadena>⇒ abHipótesis inductiva: Asumamos que anbn de longitud
2n puede ser derivada a partir de <cadena>Paso inductivo: Consideremos una cadena ω de
longitud 2(n+1). Entonces ω = an+1bn+1=aanbnb. Dado que |anbn|= 2n, puede derivarse a partir de <cadena> por la hipótesis inductiva. Por lo tanto <cadena> ⇒ a<cadena>b ⇒ aanbnb = ω. Concluimos que ω puede derivarse a partir de <cadena>.
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
3535 1. P(1)2. Si P(r) es verdadero para
todo entero positivo r,1≤r≤kimplica P(k+1) es verdadero
Entonces P(n) para todo entero n a partir de 1.
caso base
paso inductivo
segundo principio de inducción
Sea P(n) una propiedad definida para el entero n y supongamos:
hipótesis inductiva
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
3636
segundo principio de inducción
EjemploMostar que podemos sumar cualquier monto de 8¢ o
más utilizando sólo estampillas de 3¢ y 5¢.PruebaCaso base: P(8) 8 = 5+3También lo vemos para dos casos adicionales: P(9) 9=3+3+3 y P(10) 10=5+5
Hipótesis inductiva: P(r) vale para 8 ≤ r ≤ kPaso inductivo: Probemos P(k+1) donde k+1 es al
menos 11. Si k+1 ≥ 11, entonces k+1-3 = k-2≥8. Por hipótesis inductiva P(k-2) es verdadera y por lo tanto k-2 puede ser escrito como suma de 3’s y 5’s. Sumando 3 obtenemos k+1 como suma de 3’s y 5’s. Luego P(k+1) se verifica.
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
3737
segundo principio de inducción
EjemploSea L={ε,(),()(), (()),(()())…} el lenguaje
de los paréntesis bien balanceados.La gramática G en notación BNF que
utilizamos para describir L es la siguiente:
<pbb> ::= (<pbb>)<pbb> | ε
Probar que L(G)=L
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
3838
segundo principio de inducción
L(G) ⊆ LToda secuencia de símbolos que podemos derivar a partir de <pbb> consiste en cadenas de paréntesis bien balanceados. La prueba se realiza por inducción sobre el número de pasos en la derivación.
Caso base: n=1 <pbb> ⇒ ε, es balanceadoHipótesis inductiva: Supongamos que derivaciones
con n o menos pasos producen cadenas balanceadas.
Paso inductivo: Consideremos una derivación con n+1 pasos
<pbb> ⇒ (<pbb>)<pbb> ⇒ (x) <pbb> ⇒ (x)yLas cadenas x e y fueron derivadas en n o menos pasos. Por la hipótesis inductiva x e y son balanceadas y por lo tanto (x)y es balanceada.
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
3939
segundo principio de inducción
L ⊆ L(G)Toda cadena balanceada puede derivarse a partir de <pbb>. La prueba se realiza por inducción sobre la longitud de la cadena.
Caso base: |ω| = 0, <pbb> ⇒ εHipótesis inductiva: Asumamos que toda cadena
balanceada de longitud menor o igual que 2n puede ser derivada a partir de <pbb>
Paso inductivo: Consideremos una cadena balanceada ω de longitud 2(n+1) y sea (x) el prefijo más corto de ω que está bien balanceado. Entonces ω = (x)y, donde x e y están balanceados. Dado que |x|, |y| ≤ 2n, pueden derivarse a partir de <pbb> por la hipótesis inductiva. Por lo tanto <pbb> ⇒(<pbb>)<pbb> ⇒ (x)<pbb> ⇒ (x)y = ω. Concluimos que (x)y puede derivarse a partir de <pbb>.
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
4040
segundo principio de inducción
¿Dónde está el error?Todos los números naturales son pares (P(n) para todo n).
PruebaCaso base: n= 0 es par, entonces P(0) es verdadero.Hipótesis inductiva: asumamos que vale
P(0), P(1), . . . , P(n) Paso inductivo: probemos P(n + 1),Consideremos n + 1. De acuerdo a P(n), n es par, y de
acuerdo a P(1), 1 es par. Por lo tanto n+1 es par ya que la suma de dos números pares es par. Por lo tanto P(n+1) es verdadero.
De acuerdo al segundo principio de inducción podemos concluir que P(n) se verifica para todos los números naturales n.
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
4141
correctitud de algoritmos
Un algoritmo es correcto si para cualquier entrada (input) legal termina y produce la salida (output) deseada.
Las pruebas de correctitud no pueden ser automatizadas.
Pero existen técnicas prácticas y formalismos rigurosos que ayudan a razonar sobre la correctitud de los algoritmos.
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
4242
correctitud parcial y total
Correctitud parcial
entrada legal Algoritmo salida
Si este punto es alcanzado entonces esta es la salida deseada
Correctitud total
entrada legal Algoritmo salida
Este punto es alcanzado y esta es la salida deseada
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
4343
aserciones
Para probar correctitud parcial asociamos una serie de aserciones (sentencias sobre el estado de la ejecución) a puntos específicos del algoritmo.
Precondiciones: aserciones que deben ser válidas antes de ejecutarse un algoritmo o subrutina.
Poscondiciones: aserciones que deben ser válidas luego de ejecutarse un algoritmo o subrutina.
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
4444
aserciones
{Q}P{R} es llamada tripla de Hoare.Q: precondición para el programa PR: poscondición para el programa P
Anthony Hoare(nacido en 1934){Q}
S0{R1}S1
{R2}
Sn-1{R}
P es el programa compuesto por las sentencias S0,S1,…,Sn-1
M Para probar la correctitud de Pse debe probar que para toda entrada X:Q(X) implica R(X,P(X))
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
4545
aserciones
{Q}S0
{R1}S1
{R2}
Sn-1{R}
P es el programa compuesto por las sentencias S0,S1,…,Sn-1
M
{Q} S0 {R1} {R1} S1 {R2}{R2} S2 {R3}
{Rn-1} Sn-1{R}M
Para probar que Pes correcto
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
4646
regla de asignación
{Ri} x=e {Ri+1}
Ejemplo{x-1>0}
x=x-1{x>0} {x-1 > 0} x =x-1 {x>0}
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
4747
regla de condicional
if condición B thenP1
elseP2
end if
Ejemplo{n=5}
if n >= 10 theny =100
elsey=n+1
end if{y=6}
{Q} si {R}{Q ΛB} P1 {R}{Q Λ¬B} P2 {R}
{n = 5 Λ n >= 10} y=100 {y=6}{n = 5 Λ n < 10} y=n+1 {y=6}
{n = 5} y=n+1 {y=6}
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
4848
regla del ciclo (loop)
while condición B doP
end while
EjemploProducto(enteros no negativos x e y)variables locales: enteros i,j
i=0j=0while i<> x do
j=j+yi=i+1
end whilereturn j
{Q} si {QΛ ¬B}{QΛB} P {Q}
Q se llama invariante de ciclo
Q: j=i*y
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
4949
invariante de ciclo
Prueba de Q: j=i*y utilizando inducción Caso base:
Q(0): j0=i0*yHipótesis inductiva:
Asumamos Q(k): jk=ik*yPaso inductivo:Probemos Q(k+1): jk+1=ik+1*y
Por el programa jk+1=jk+y , ik+1=ik+1Luego jk+1 = jk+y (por programa)
= ik*y+y (por HI)= (ik+1)*y = ik+1*y (por programa)
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
5050
regla del ciclo (loop)
Producto(enteros no negativos x e y)variables locales: enteros i,j
i=0j=0while i<> x do
j=j+yi=i+1
end whilereturn j
Probamos que la invariante esQ: j=i*y.
Al finalizar el ciclo while se verificai=x.
Por lo tanto la función computaj = x* y.
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
5151
algoritmo de Euclides
¿Cómo encontrar el máximocomún divisor de dosenteros no negativos a y b, donde a y b no son simultáneamente 0?
El algoritmo de Euclides se basa en el siguiente hecho:
(∀ a, b, q, r) [(a=qb+r) (mcd(a,b)=mcd(b,r))]
Euclides(300 AC)
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
5252
algoritmo de Euclides (cont.)
//a,b son enteros no negativos y a>=bmcd(a,b){
i=aj=bwhile j <> 0 do
computar r tal que i=qj+r, 0<=r<ji=jj=r
end whilereturn i;
}
Q: mcd(i,j)=mcd(a,b)
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
5353
algoritmo de Euclides (cont.)
Probar que se verifica la invariante de ciclo Q: mcd(i,j)=mcd(a,b)
Caso baseQ(0): mcd(i0,j0)=mcd(a,b)
Hipótesis inductivaQ(k): mcd(ik,jk)=mcd(a,b)
Paso inductivoProbar Q(k+1): mcd(ik+1,jk+1)=mcd(a,b)
Por programa ik+1= jk ; jk+1= rk+1mcd(ik+1,jk+1) = mcd(jk,rk+1) (por programa)
= mcd(ik,jk) (por Euclides)= mcd(a,b) (por H. I)
técnicas de pruebas
computacionales
LENGUAJESLENGUAJESFORMALES FORMALES
YYAUTAUTÓÓMATASMATAS
5454
algoritmo de Euclides (cont.)
//a,b son enteros no negativos y a>=bmcd(a,b){
i=aj=bwhile j <> 0 do
computar r tal quei=qj+r, 0<=r<j
i=jj=r
end whilereturn i;
}
Probamos que la invariante esQ: mcd(i,j) = mcd(a,b)
Al finalizar el ciclo while se verificaj=0.
Luego mcd(i,j) = mcd(a,b). Sabemos además que mcd(i,0) =i.Por lo tanto la función computa
mcd(a,b)