Você está na página 1de 10

FACULDADE DE COMPUTAÇÃO E INFORMÁTICA

BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO, SISTEMAS DE INFORMAÇÃO E


TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS
LICENCIATURA EM MATEMÁTICA
Matemática Discreta – Aula 03 – 1º SEMESTRE/2015

TEORIA: SISTEMAS AXIOMÁTICOS e LÓGICA DE FLOYD-HOARE

Nossos objetivos nesta semana são:

 apresentar o conceito de sistema axiomático


 conhecer e aplicar o sistema axiomático da Lógica de
Floyd-Hoare para provas de funcionamento de
programas imperativos

Para esta semana, usamos como referência o paper original de


C.A.R. Hoare:

HOARE, C.A.R. An Axiomatic Basis for Computer Programming.


In: Communications of the ACM, 12 (10), Outubro, 1969, pp.
576—583.

Não deixem de ler este paper depois desta aula!

SISTEMAS AXIOMÁTICOS

 Um axioma é uma proposição que não é provada ou demonstrada e é considerada como


óbvia ou como um consenso inicial necessário para a construção de uma teoria. Teorias
construídas com base em axiomas são chamadas teorias axiomáticas.

 Um exemplo clássico de axioma é o Axioma da Igualdade, que nos diz que 𝑥 = 𝑥. Não é
difícil nos convencermos que isto é uma coisa óbvia e não necessita de prova.

Definição (Sistema Axiomático). Um sistema axiomático é um conjunto de axiomas que


podem ser ligados em conjunção para provas de teoremas.

 Sistemas axiomáticos desempenham um papel fundamental em Computação, porque


permitem construir diversas teorias como a Teoria dos Números, a Teoria de Tipos, a
Teoria de Objetos, a Teoria das Categorias, a Teoria dos Conjuntos e a Teoria da
Concorrência, dentre outras.

1
LÓGICA DE FLOYD-HOARE

 A Lógica de Floyd-Hoare é um sistema axiomático para se provar o funcionamento de


programas imperativos.

 Um programa imperativo é descrito como uma tripla {𝑷} 𝑺 {𝑸}, onde 𝑃 é o estado inicial
(pré-condição), 𝑆 é o programa e 𝑄 é o estado final (pós-condição). Assim, um programa
imperativo permite transformar o estado inicial no estado final.

 O exemplo abaixo mostra um exemplo destas triplas:

 Neste exemplo, partindo-se do valor inicial X=1 (pré-condição), adicionamos 1 na variável


X (programa) e obtemos, como valor final, X=2 (pós-condição).

 Para que um programa esteja correto (CORRETUDE TOTAL), precisamos garantir duas
coisas:

o o programa realmente funciona (CORRETUDE PARCIAL)


o o programa para (ou seja, não entra em loop)

 O sistema axiomático de Floyd-Hoare nos garante apenas corretude parcial. As regras


deste sistema são mostradas abaixo:

2
AXIOMA DA ATRIBUIÇÃO

 Usado para provar que o comando de atribuição produz uma alteração correta de estado:

 O símbolo Q[E/V] significa que vamos substituir todas as ocorrências de E em Q por V.


Observe que a substituição é feita de trás para frente.

EXERCÍCIO TUTORIADO

(a) Verifique a corretude parcial do programa abaixo, utilizando o axioma axima:

(b) Usando somente o axioma acima, conseguiríamos verificar a correção parcial do programa
abaixo ?

3
AXIOMA DE FORTALECIMENTO DA PRÉ-CONDIÇÃO

 Usado para permitir fortalecimento do estado da pré-condição:

 Observem que, neste caso, temos que garantir a corretude de duas coisas: 𝑃 → 𝑃′ e
{𝑃′}𝐶 {𝑄}.

EXERCÍCIO TUTORIADO

Verifique a corretude parcial do programa abaixo, utilizando os dois axioma anteriores:

4
AXIOMA DE ENFRAQUECIMENTO DA PÓS-CONDIÇÃO

 Usado para permitir enfraquecimento do estado da pós-condição

 Observem que, neste caso, temos que garantir a corretude de duas coisas: {𝑃}𝐶 {𝑄} 𝑄 →
𝑄.

EXERCÍCIO TUTORIADO

Verifique a corretude parcial do programa abaixo, utilizando os dois axioma anteriores:

5
AXIOMA DO SEQUENCIAMENTO

 Usado para provar que uma sequencia de comandos C1 e C2 está correta:

 Observem que, neste caso, temos que garantir a corretude de duas coisas: {𝑃}𝐶1 {𝑄}
{𝑄}𝐶2 {𝑅} .

EXERCÍCIO TUTORIADO

Verifique a corretude parcial do programa abaixo, que troca o conteúdo de duas variáveis,
utilizando os axiomas anteriores:

6
AXIOMA DA CONDIÇÃO

 Usado para provar a corretude parcial do comando if-then-else:

 Observem que, neste caso, temos que garantir a corretude nos dois casos possíveis do
comando if: quando a condição S é verdadeira e quando a condição S é falsa.

 Quando não houver uma ação a ser feita para o comando C2 (if sem else), utilizamos a
palavra SKIP no seu lugar. Neste caso, temos o seguinte axioma para SKIP:

EXERCÍCIO TUTORIADO

Verifique a corretude parcial do programa abaixo, que calcula o máximo de duas variáveis,
utilizando os axiomas anteriores:

7
AXIOMA DA REPETIÇÃO

 Usado para provar a corretude parcial do laço while:

 O estado P é chamado invariante de laço (ou de loop). Trata-se de uma proposição que é
verdadeira antes da execução do laço, durante a sua execução e após a sua execução.
Normalmente, o invariante não é fornecido junto com o programa e deve-se achá-lo para
iniciar a prova de corretude.

EXERCÍCIO TUTORIADO

Considere o programa abaixo, que calcula o fatorial X! de uma variável X.

(a) Mostre que Y=Z! é um invariante do loop while.

(b) Verifique a corretude parcial deste programa, utilizando os axiomas anteriores e o


invariante do item (a).

8
EXERCÍCIOS EXTRA-CLASSE

1. Mostre, utilizando os axiomas estudados em aula, que os programas abaixo possuem


corretude parcial:

(a) { Y = 2 } X:=2 { Y = X }

(b) { Y = 2  X > 0 } Y:=Y+X { Y > 2 }

(c) { Y = a }
IF X > 0
THEN Y := Y + X
ELSE Y := Y – X
FI
{Ya}

(d) {T}
R:=X;
Q:=0;
WHILE YR DO
R:=R-Y
Q:=Q+1
OD
{ R < Y e X=R+YxQ }

Sugestão: use como invariante do loop while X=R+YxQ.

2. O sistema axiomático de Floyd-Hoare pode ser estendido para conter o comando FOR,
cujo axioma é mostrado abaixo:

a. Descreva, informalmente, o que devemos provar para o comando FOR esteja


correto.

b. Aplique este axioma para mostrar que o programa abaixo está correto
parcialmente.

9
3. O sistema axiomático de Floyd-Hoare pode ser estendido para atribuições com vetores,
cujo axioma é mostrado abaixo:

a. Descreva, informalmente, o que devemos provar para a atribuição com vetores esteja
correta.

b. Aplique este axioma para mostrar que o programa abaixo está correto parcialmente.

10

Você também pode gostar