Existem situações em que a regra B-INV não se pode aplicar
directamente. Por exemplo, considere que se pretendia provar, também
para o programa da figura 4.2, a validade da seguinte
fórmula:
Para contornar estas situações podem ser usadas duas estratégias:
A primeira estratégia baseia-se na regra da monotonia da invariância (denominada MON-I) que é definida como:
![]() |
![]() |
![]() |
Esta regra indica que, para provar a invariância de uma propriedade
q é suficiente provar a invariância de uma propriedade p que a
implique. Tendo em atenção esta regra, a primeira estratégia pode ser
apresentada da seguinte forma: caso se pretenda provar a invariância
de uma propriedade p que não seja indutiva é suficiente provar a
invariância de uma propriedade mais "forte" (i.é, que a implique) que
seja inductiva. Esta estratégia consiste na combinação da regra
B-INV com a regra MON-I e é sintetizada numa nova
regra designada G-INV (de general invariance)
apresentada na figura .
De notar que esta estratégia pode, em princípio, ser sempre adoptada,
pois existe um teorema que afirma que, se p é um invariante de um
programa, então existe sempre uma fórmula inductiva
mais "forte"
que p.
Para utilizarmos esta estratégia para provar a propriedade
é necessário encontar uma propriedade indutiva mais forte que a
implique. Uma estratégia que resulta em muitas situações consiste em
fazer uma conjunção da propriedade a provar com a fórmula que impedia
a sua prova com a regra B-INV, neste caso
.
Assim,
iremos assumir
como:
Aplicando a regra G-INV temos que a primeira premissa é
definida pela fórmula
A segunda estratégia para provar a invariância de uma propriedade não inductiva p consiste em encontrar um invariante auxiliar q e utilizar depois a propriedade q como hipótese na prova de p usando a regra B-INV. Esta estratégia é exemplificada pela seguinte regra:
![]() |
![]() |
![]() |
![]() |
No caso do exemplo anterior, para aplicar esta estratégia é necessário
definir primeiro qual o invariante auxiliar a usar. Assumindo que
é esse invariante (fica como exercício fazer a sua prova),
resta provar que
A principal vantagem da segunda estratégia é a sua modularidade, i.é, em cada momento temos objectivos de prova mais simples e é possível reutilizar os invariantes já verificados noutras provas. No entanto nem sempre é possível proceder a uma prova incremental devido à dificuldade de encontrar invariantes auxiliares inductivos. Nestes casos a única hipótese é utilizar a primeira estratégia. De referir que uma prova incremental pode sempre ser substituída por uma prova com a regra G-INV, embora o contrário não seja sempre verdade.