Curso Prático
de Métodos Formais
Revisando Pré-Condições e Provando
Refinamentos de Especificações em Z
(Alexandre Mota e Augusto Sampaio)
Tópicos Abordados



Exemplo: A Tabela de Símbolos (TS)
Pré-condições: Estruturando
Provando Refinamentos
– Mesmo Estado
– Estados Diferentes
Exemplo: A Tabela de Símbolos
[VAL,SYM]
Update
D State
s?: SYM
v?: VAL
s? dom st
st’ = st  {s?  v?}
Delete
D State
s?: SYM
s?  dom(st)
st’={s?} st
ST == SYM
VAL
State
st: ST
NotPresent
X State
s?: SYM
rep!: Report
s?  dom(st)
rep!=Symbol_not_present
Report ::= Ok
| Symbol_not_present
^ [rep!:Report | rep!=Ok]
Success =
StDelete ^
= (Delete  Success)  NotPresent
Pré-condição: Estruturando
Disjunções:  - or. Por exemplo, considere StDelete:
pre StDelete  pre Delete  pre NotPresent
A estruturação é realizada a partir do cálculo intermediário
das pré-condições envolvidas. Para o exemplo acima temos:
theorem preStDelete
" State; s?:SYM; v?: VAL  pre Delete  pre NotPresent
Passos da prova:
1. try lemma preStDelete;
2. cases; (cálculos intermediários)
3. prove by reduce;
4. next; (próximo predicado)
5. prove by reduce; (2 objetivo)
6. next; (objetivo OU)
7. prove by reduce; (objetivo final)
Refinamento de Operações
(Mesmo Estado)



Verificar se operações compostas refinam operações
simples;
As obrigações são: a aplicabilidade e a corretude.
Há simplificação dos teoremas pois o esquema Retrieve
é a relação identidade
Delete
StDelete ???
theorem aplicMesmoEstado
pre Delete  pre StDelete
theorem corrMesmoEstado
pre Delete  StDelete  Delete
Estratégia para Refinamento





Os teoremas de refinamento usam as pré-condições
mais de uma vez;
Portanto, neste caso é interessante guardar o resultado;
Desta forma, deve-se calcular as pré-condições;
Armazenar os resultados obtidos como esquemas;
Introduzir estes resultados nas obrigações de prova.
\begin{schema}{Delete}
...
\end{schema}
\begin{schema}{preDeleteRes}
...
\end{schema}
\begin{theorem}{aplicacao}
... preDeleteRes ...
\end{theorem}
Refinamento de Dados
(funcional)


No caso geral, é necessário estabelecer uma relação
entre os dois estados (abstrato e concreto);
Aqui, consideraremos que esta relação é sempre
funcional.
Inicialização:
Cinit  Retr’  Ainit
Aplicabilidade:
pre Aop  Retr  pre Cop
Corretude:
pre Aop  Retr  Cop  Retr’ Aop
Refinamento de Dados (Geral)
Propor um novo estado;
 Propor um esquema Retrieve;
 Propor refinamentos para as operações;
 Construir as obrigações de prova como
teoremas;
 Provar os teoremas.

Refinamento de Dados
(Exemplo 1)
State1
st1: seq(SYM  VAL)
Retrieve1
State
State1
Update1
D State1
s?: SYM
v?: VAL
st = ran st1
s? dom(ran st1)
st1’ = st1 ^ (s?, v?)
A estratégia geral para o cálculo de refinamento é calcular
as pré-condições envolvidas e usar estes resultados nos
teoremas de aplicabilidade e corretude.
Refinamento de Dados
(Exemplo 1 - continuação)



Calcular a pré-condição de Update e de Update1;
Armazenar como esquemas;
Usar esquema em teoremas.
Exemplo: Calcular SymtabA SymtabC, considerando
simplesmente as operações Update e Update1
preUpdateRes
State
s?: SYM
v?: VAL
preUpdate1Res
State1
s?: SYM
v?: VAL
s?  dom st
s?  dom (ran st1)
Refinamento de Dados
(Exemplo 1 - continuação)
theorem inicializacao
Init1 \land Retr1’ \implies Init
theorem aplicacao
preUpdateRes \land Retr1 \implies preUpdate1
theorem corretude
preUpdateRes \land
Retr1 \land
Update1 \land
Retr1’ \implies Update
Refinamento de Dados
(Exemplo 2)
Report ::= Yes | No
Especificação
Abstrata
Especificação
Concreta
State
b: bag IN
State1
s: seq IN
find
X State
n?: IN
rep!: Report
find1
X State1
n?: IN
rep!: Report
n?  dom b
rep! = Yes
n?  ran s
rep! = Yes
Refinamento de Dados
(Exemplo 2 - Escolha do Retr)
Alternativa 1:
Retr1
State
State1
b = items s
Alternativa 2:
Retr2
State
State1
dom b = ran s
" n  dom b  b(n) = #(s |` {n})
Download

Document