Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1 int modulo(int a) {
I Rama negativa:
2 int b =0; No se cumple la condición
3 if( a > 0 ) { {a = A0 ∧ b = 0 ∧ ¬B} ≡ {a = A0 ∧ b = 0 ∧ A0 ≤ 0}
4 b = a;
5 } else {
b = -a;
6 b = −a; {a = A0 ∧ b = −A0 ∧ A0 ≤ 0}
7 } ⇒ {b = |a|}
8 return b;
9 } I En ambos casos vale b = |a|
I Por lo tanto, esta condición vale al salir de la instrucción
I Verificamos ahora que b = |a| después de la alternativa. alternativa.
I Observación: Luego de cada iteración vale que: I Por ejemplo, otros invariantes para este ciclo son:
I I 0 ≡ i 6= 0
i−1
X I I 00 ≡ s ≥ 0
s= k I i ≥1
k=1 I ...etc
Ejemplo Ejemplo
El predicado I ≡ s = i−1
P
k=1 k (por sı́ solo) no es un invariante
I
I Si se salió del ciclo fue porque no se cumplió i ≤ n, y entonces I Si se cumplen estas condiciones ...
estamos en un estado que satisface: 1. PC ⇒ I,
2. {I ∧ B} cuerpo del ciclo {I },
i−1
X 3. I ∧ ¬B ⇒ QC ,
n ≥0∧I ∧ i >n ≡ n ≥0∧i ≥1∧s= k ∧ i >n
k=1 I ... entonces el ciclo es parcialmente correcto respecto de su
especificación (si termina, termina en QC ).
Teorema del invariante Ejemplo
I Verifiquemos estas tres condiciones con el ejemplo anterior, y
con ...
I Teorema del invariante. Si existe un predicado I tal que ...
1. PC ≡ n ≥ 0 ∧ i = 1P∧ s = 0
1. PC ⇒ I, 2.
n
QC ≡ n ≥ 0 ∧ s = k=1 k
2. {I ∧ B} S {I }, 3. BC ≡ i ≤ n
3. I ∧ ¬B ⇒ QC , 4.
Pi−1
I ≡ i ≥ 1 ∧ s = k=1 k
entonces el ciclo while(B) S es parcialmente correcto
I En primer lugar, debemos verificar que PC ⇒ I :
respecto de la especificación (PC , QC ).
I Ya probamos anteriormente que:
I Este teorema es la herramienta principal para argumentar la
i−1
corrección de ciclos. X
n ≥0∧i =1∧s =0 ⇒ i ≥1∧s= k.
I El teorema del invariante se puede demostrar formalmente k=1
(más detalle en las próximas teóricas!).
I Por lo tanto, podemos concluir que se cumple la condición
PC ⇒ I
Ejemplo Ejemplo
Pi−1
I Finalmente, Sean: I I ≡1≤i ≤n+1∧s= k=1 k.
1. PC ≡ n ≥ 0 ∧ i = 1P∧ s = 0
n 1. En general, un buen invariante debe incluir el rango de la(s)
2. QC ≡ n ≥ 0 ∧ s = k=1 k
variable(s) de control del ciclo.
3. BC ≡ i ≤ n Pi−1 2. Además, debe incluir alguna afirmación sobre el acumulador
4. I ≡ i ≥ 1 ∧ s = k=1 k
del ciclo.
I Ya que demostramos que se cumplen las siguientes I Cuando tenemos un invariante I que permite demostrar la
condiciones:
corrección parcial del ciclo, nos referimos a I como el
1. PC ⇒ I invariante del ciclo.
2. {I ∧ B} cuerpo del ciclo {I }
3. I ∧ ¬B ⇒ QC 1. El invariante de un ciclo caracteriza las acciones del ciclo, y
representa al algoritmo que el ciclo implementa.
I Entonces, por el Teorema del Invariante podemos concluir que
el ciclo while(B) S es parcialmente correcto respecto de la I En general, es sencillo argumentar informalmente la
especificación PC , QC . terminación del ciclo (más detalles en las próximas teóricas).
Bibliografı́a