Curso Prático de Métodos Formais
description
Transcript of Curso Prático de Métodos Formais
Curso PráticoCurso Práticode Métodos Formaisde Métodos Formais
Revisando Pré-Condições e Provando Refinamentos de Especificações em Z
(Alexandre Mota e Augusto Sampaio)
Tópicos AbordadosTópicos Abordados
Exemplo: A Tabela de Símbolos (TS) Pré-condições: Estruturando Provando Refinamentos
– Mesmo Estado– Estados Diferentes
Exemplo: A Tabela de SímbolosExemplo: A Tabela de Símbolos
[VAL,SYM]State
st: ST
DeleteStates?: SYMs? dom(st)st’={s?} st
ST == SYM VAL
NotPresentStates?: SYMrep!: Report
s? dom(st)rep!=Symbol_not_present
Report ::= Ok | Symbol_not_present
Success = [rep!:Report | rep!=Ok]^
StDelete = (Delete Success) NotPresent^
Update States?: SYMv?: VAL
s? dom stst’ = st {s? v?}
Pré-condição: EstruturandoPré-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 Refinamento de Operações (Mesmo Estado)(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 corrMesmoEstadopre Delete StDelete Delete
Estratégia para RefinamentoEstraté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 DadosRefinamento de Dados(funcional)(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)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 DadosRefinamento de Dados(Exemplo 1)(Exemplo 1)
Retrieve1StateState1
st = ran st1
State1st1: seq(SYM VAL)
Update1 State1s?: SYMv?: VAL
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 DadosRefinamento de Dados(Exemplo 1 - continuação)(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
preUpdateResStates?: SYMv?: VAL
s? dom st
preUpdate1ResState1s?: SYMv?: VAL
s? dom (ran st1)
Refinamento de DadosRefinamento de Dados(Exemplo 1 - continuação)(Exemplo 1 - continuação)
theorem inicializacaoInit1 \land Retr1 \implies Init
theorem aplicacaopreUpdateRes \land Retr1 \implies Update1
theorem corretudepreUpdateRes \landRetr1 \landUpdate1 \landRetr1’ \implies Update
Refinamento de DadosRefinamento de Dados(Exemplo 2)(Exemplo 2)
Stateb: bag IN
find Staten?: INrep!: Report
n? dom brep! = Yes
State1s: seq IN
find1 State1n?: INrep!: Report
n? ran srep! = Yes
EspecificaçãoAbstrata
EspecificaçãoConcreta
Report ::= Yes | No
Refinamento de DadosRefinamento de Dados(Exemplo 2 - Escolha do Retr)(Exemplo 2 - Escolha do Retr)
Retr1StateState1
Alternativa 1:
b = items s
Retr2StateState1
Alternativa 2:
dom b = ran s n dom b b(n) = #(s |` {n})