130 likes | 205 Views
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. State.
E N D
Curso Práticode 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
State ST == SYM VAL st: ST Update NotPresent D State s?: SYM v?: VAL X State s?: SYM rep!: Report s? dom st st’ = st {s? v?} s? Ï dom(st) rep!=Symbol_not_present ^ Success = [rep!:Report | rep!=Ok] ^ StDelete = (Delete Ù Success) Ú NotPresent Exemplo: A Tabela de Símbolos [VAL,SYM] Delete Report ::= Ok | Symbol_not_present D State s?: SYM s? Î dom(st) st’={s?} st
Disjunções: Ú - or. Por exemplo, considere StDelete: pre StDelete º pre Delete Ú pre NotPresent Pré-condição: Estruturando 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)
Delete StDelete ??? 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 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.
State1 Retrieve1 State State1 st1: seq(SYM ´ VAL) st = ran st1 Update1 D State1 s?: SYM v?: VAL s? dom(ran st1) st1’ = st1 ^ á(s?, v?)ñ Refinamento de Dados(Exemplo 1) 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.
preUpdateRes preUpdate1Res State s?: SYM v?: VAL State1 s?: SYM v?: VAL s? dom st s? dom (ran st1) 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
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
State State1 b: bag IN s: seq IN find1 find State1 n?: IN rep!: Report State n?: IN rep!: Report n? dom b rep! = Yes n? ran s rep! = Yes Refinamento de Dados(Exemplo 2) Report ::= Yes | No Especificação Concreta Especificação Abstrata
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})