Escolar Documentos
Profissional Documentos
Cultura Documentos
Metodologia de Dijkstra
Metodos semi-informais baseados na Axiomatica de Hoare para o desenvolvimento de comandos corretos
face a` sua especificaca o.
Versao de 2015/2016
1 / 15
Versao de 2015/2016
2 / 15
Ideia Chave
Especificaca o CD c {CO}: equaca o onde a variavel e o (bloco de) comando(s) c
Para concretizar o(s) comando(s) c podemos usar as regras de Hoare mas em sentido inverso: da
conclusao para as premissas
Exemplos de Especificaco es
? Especificaca o para um programa que estabelece o resto da divisao inteira de dois numeros naturais
Versao de 2015/2016
3 / 15
Dada uma especificaca o {CD} c {CO}, caso c seja uma estrutura iterativa, ENTAO:
1 Usar uma estrutura de ciclo while com inicializaca o:
cada
o comando aca o deve garantir que a condica o invariante CI e satisfeita APOS
iteraca o do ciclo
Versao de 2015/2016
4 / 15
99
X
= 0 + 1 + 2 + + 99}
i=0
Versao de 2015/2016
5 / 15
Versao de 2015/2016
6 / 15
4. Estrutura Final(izada):
adicao { k = 0; s = 0; while(k != 99) { s = s + (k + 1);
k = k + 1; } }
Versao de 2015/2016
7 / 15
Ciclo - aca o seguida de progresso - com progresso a variar de LI ate ao limite superior
(LS):
a` Guarda
LI, . . . , k, k + 1, . . . , LS = ATENC
AO
{s = s + (k + 1); k = k + 1; }
No exemplo anterior:
adica o { k = 0; s = 0; while(k != 99){ s = s + (k + 1); k = k ++;}}
Versao de 2015/2016
8 / 15
No exemplo anterior:
adica o { k = 99; s = 99; while(k != 0){ s = s + (k - 1); k = k - - ;}}
Versao de 2015/2016
9 / 15
No exemplo anterior:
adica o { k = 1; s = 0; while(k != 100){ s = s + k ; k = k ++;}}
Versao de 2015/2016
10 / 15
No exemplo anterior:
adica o { k = 98; s = 99; while(k != -1){ s = s + (k - 1); k = k - - ;}}
Versao de 2015/2016
11 / 15
CO[30 n] 1 n 30
b = ( 0 j n F(j) > 0) 1 n 30
Versao de 2015/2016
12 / 15
Se a negaca o da condica o favoravel decide a resposta final do ciclo, este deve terminar imediatamente . . .
Versao de 2015/2016
13 / 15
(CI C) CO .
Recorde que CO b = j = 0, . . . , 30 F(j) > 0
e ainda que, CI b = j = 0, . . . , n (F(j) > 0 1 n 30)
Guarda G: n != 30
a primeira negaca o da CF (ser positivo) determina a resposta final como false:, portanto,
C b porque, se b se tornou falso, entao,
a
b = j = 0, . . . , n F(j) > 0 1 n 30 b
b = j = 0, . . . , 30 F(j) > 0
b falso
Algoritmos e Estruturas de Dados
Versao de 2015/2016
14 / 15