verificação de programas
Post on 18-Dec-2014
511 Views
Preview:
DESCRIPTION
TRANSCRIPT
Verificacao de Programas
Adolfo Neto (DAINF-UTFPR)http://www.dainf.ct.utfpr.edu.br/~adolfo
November 6, 2012
Adolfo Neto (DAINF-UTFPR) Verificacao de Programas
Uma linguagem de programacao
Sintaxe da linguagem:
I Expressoes Aritmeticas:E ::= n|x |(−E )|(E + E )|(E − E )|(E ∗ E )
I Expressoes Logicas:B ::= true|false|(!B)|(B&B)|(E < E )|(E == E )|(E ! = E )
I Comandos: C ::= x := E |C ; C |if B{C} else {C}|while B{C}
Adolfo Neto (DAINF-UTFPR) Verificacao de Programas
Semantica Operacional
I A semantica operacional “denota o efeito sobre o estado doprograma de cada comando da linguagem.”
I Representacao da execucao de um comando C :
〈C , σ〉 → σ′
onde σ e o estado antes da execucao do comando e σ′ e oestado depois da execucao do comando C .
I “A semantica operacional deve denotar os efeitos de todos oscomandos da linguagem e, para isso, deve ser definida sobretodos os comandos e expressoes da linguagem”
I Fonte: (SILVA; FINGER; MELO, 2006, p.189).
Adolfo Neto (DAINF-UTFPR) Verificacao de Programas
Regras da Semantica Operacional
Exemplo de regra (ex. 7.2.1 de (SILVA; FINGER; MELO, 2006,p.189)) – Atrib-Operacional:
〈E , σ〉 → m
〈x := E , σ〉 → σ[m/x ]
Adolfo Neto (DAINF-UTFPR) Verificacao de Programas
Exemplo
Exemplo 7.2.2 (SILVA; FINGER; MELO, 2006, p.190).E preciso definir a semantica operacional de todas as expressoesaritmeticas e logicas, alem dos comandos.
Adolfo Neto (DAINF-UTFPR) Verificacao de Programas
Mais sobre a Semantica Operacional
De (SILVA; FINGER; MELO, 2006, p.191):
I A semantica operacional nao faz uma representacao explıcitaentre assercoes que denotam as pre e pos-condicoes dosprogramas.
I 〈ϕ〉Prog〈ψ〉 (tripla de Hoare)
I Correcao parcial: para todo estado σ que satisfaz ϕ, se aexecucao de Prog a partir do estado σ termina, produzindoum estado σ′, entao σ′ satisfaz ψ.
I Queremos um sistema (calculo) de provas para provar avalidade da assercao “〈ϕ〉Prog〈ψ〉”:
` 〈ϕ〉Prog〈ψ〉
Adolfo Neto (DAINF-UTFPR) Verificacao de Programas
Mais sobre a Semantica Operacional
De (SILVA; FINGER; MELO, 2006, p.192):
I As precondicoes ϕ sao propriedades sobre o estado inicial doprograma Prog.
I Podemos ter um estado σ que satisfaca a assercao ϕ:
σ ` ϕ
I Portanto, apos a execucao de Prog sobre o estado σ, umestado σ′ e produzido. E σ′ satisfaz ψ:
σ ` ϕ→ dProgcσ ` ψ
onde Prog termina se executado sobre um estado que satisfazϕ e dProgcσ representa o estado produzido por Prog apos suaexecucao sobre o estado σ.
Adolfo Neto (DAINF-UTFPR) Verificacao de Programas
Mais sobre a Semantica Operacional
De (SILVA; FINGER; MELO, 2006, p.192):
I A assercao ` 〈ϕ〉Prog〈ψ〉 deve ser valida para TODOS osestados que satisfazem ϕ:
∀σ(σ ` ϕ)→ dProgcσ ` ψ
I Assumimos que Prog termina quando executado sobre osestados σ. Na pratica temos programas que nao param.
I As provas de programas podem ser divididas em:I provas quando assumimos que o programa para; eI provas que tem como tarefa tambem provar a terminacao do
programa.
Adolfo Neto (DAINF-UTFPR) Verificacao de Programas
Mais sobre a Semantica Operacional: Correcao Parcial
De (SILVA; FINGER; MELO, 2006, p.192), def. 7.3.1:
I Correcao parcial: A tripla
〈ϕ〉Prog〈ψ〉
e satisfeita sob correcao parcial se, para todos os estados quesatisfazem ϕ, o estado resultante da execucao do programaProg satisfaz a pos-condicao ψ, se Prog termina.
I Nesse caso, `par e a relacao de satisfazibilidade para correcaoparcial:
`par 〈ϕ〉Prog〈ψ〉
Adolfo Neto (DAINF-UTFPR) Verificacao de Programas
Mais sobre a Semantica Operacional: Correcao Parcial
De (SILVA; FINGER; MELO, 2006, p.192), def. 7.3.1:
I Correcao parcial e um requisito ineficiente, na pratica, porquenao garante a terminacao do programa.
I Qualquer programa que nao termina satisfaz a suaespecificacao.
I Na outra nocao de correcao (correcao total), asatisfazibilidade, bem como a terminacao do programa, deveser provada.
Adolfo Neto (DAINF-UTFPR) Verificacao de Programas
Mais sobre a Semantica Operacional: Correcao Total
De (SILVA; FINGER; MELO, 2006, p.193), def. 7.3.2:
I Correcao total: A tripla
〈ϕ〉Prog〈ψ〉
e satisfeita sob correcao total se, para todos os estados quesatisfazem ϕ, o estado resultante da execucao do programaProg satisfaz a pos-condicao ψ e Prog termina.
I Nesse caso, `tot e a relacao de satisfazibilidade para correcaototal:
`tot 〈ϕ〉Prog〈ψ〉
Adolfo Neto (DAINF-UTFPR) Verificacao de Programas
Mais sobre a Semantica Operacional: Correcao Total
De (SILVA; FINGER; MELO, 2006, p.193):
I Qualque programa que entra em um laco infinito de repeticaonao satisfaz sua especificacao sob a relacao de correcao total.
I Essa relacao e muito mais util na pratica.I Provar correcao total de programas pode ser dividido em:
1. provar correcao parcial2. provar que o programa termina
Adolfo Neto (DAINF-UTFPR) Verificacao de Programas
Exemplos
Demonstracoes informais:
I Exemplo 7.3.1 (SILVA; FINGER; MELO, 2006, p.193).
I Exemplo 7.3.2 (SILVA; FINGER; MELO, 2006, p.194-195).
Adolfo Neto (DAINF-UTFPR) Verificacao de Programas
Correcao Parcial de Programas
I O sistema de provas prova e definido sobre cada elementosintatico da linguagem
I As provas sao realizadas usando inducao sobre as estruturasdos programas
I Ou seja, as regras provam a correcao de uma assercao paraum comando mais complexo pela prova de correcao dasassercoes de seus subcomandos.
I Devemos distinguir dois elementos no sistema de provas:
1. as regras de inferencia sobre cada um dos elementos sintaticosdos programas
2. o mecanismo de prova usando as regras definidas
I As regras sao chamadas regras de Hoare. O conjunto dasregras forma a logica de Hoare.
Fonte: (SILVA; FINGER; MELO, 2006, p.195).
Adolfo Neto (DAINF-UTFPR) Verificacao de Programas
Regras da Semantica Operacional
Composicao:〈ϕ〉C 1〈η〉 〈η〉C 2〈ψ〉
〈ϕ〉C 1; C 2〈ψ〉
Adolfo Neto (DAINF-UTFPR) Verificacao de Programas
Regras da Semantica Operacional
Atribuicao:
〈ψ[E/x ]〉x := E 〈ψ〉
A propriedade a ser satisfeita antes da atribuicao e a propria ψ comtodas as ocorrencias de x substituıdas pela expressao E , ψ[E/x ].
Adolfo Neto (DAINF-UTFPR) Verificacao de Programas
Regras da Semantica Operacional
IfElse:〈φ ∧ B〉C 1〈ψ〉 〈φ ∧ ¬B〉C 2〈ψ〉〈φ〉if B{C 1}else {C 2}〈ψ〉
Adolfo Neto (DAINF-UTFPR) Verificacao de Programas
Regras da Semantica Operacional
WhileParcial:〈η ∧ B〉C 〈η〉
〈η〉while B{C}〈η ∧ ¬B〉
Obs.: η e um invariante que deve ser satisfeito antes e depois de ocomando C ser executado.
Adolfo Neto (DAINF-UTFPR) Verificacao de Programas
Regras da Semantica Operacional
Implicacao:
` ϕ′ → ϕ 〈ϕ〉C 〈ψ〉 ` ψ → ψ′
〈ϕ′〉C 〈ψ′〉
Observacoes:
I Esta regra faz a conexao entre as provas que podemos ter nalogica de predicados, usada na especificacao dos problemas,com a logica de programas aqui apresentada.
I Isto nos permite considerar as provas na logica de predicadoscomo parte das provas de programas
I Estabelece o elo de ligacao entre especificacao e programas
Adolfo Neto (DAINF-UTFPR) Verificacao de Programas
Regras da Semantica Operacional
〈E , σ〉 → m
〈x := E , σ〉 → σ[m/x ]
〈ϕ〉C 1〈η〉 〈η〉C 2〈ψ〉〈ϕ〉C 1; C 2〈ψ〉
〈ψ[E/x ]〉x := E 〈ψ〉〈φ ∧ B〉C 1〈ψ〉 〈φ ∧ ¬B〉C 2〈ψ〉〈φ〉if B{C 1}else {C 2}〈ψ〉
〈η ∧ B〉C 〈η〉〈η〉while B{C}〈η ∧ ¬B〉
` ϕ′ → ϕ 〈ϕ〉C 〈ψ〉 ` ψ → ψ′
〈ϕ′〉C 〈ψ′〉
Adolfo Neto (DAINF-UTFPR) Verificacao de Programas
Sistema de Provas
Provar que o programa P
C0;C1;C2;
...Cn
satisfaz a especificacao
Pre: ϕPos: ψ
`par 〈ϕ〉P〈ψ〉
corresponde a . . .
Adolfo Neto (DAINF-UTFPR) Verificacao de Programas
Sistema de Provas
Provar cada um dos comandos para as suas pre e pos-condicoesindividuais
〈ϕ〉C0;〈ϕ1〉C1;〈ϕ2〉
...〈ϕn〉Cn
〈ψ〉
O que corresponde a . . . Fonte: (SILVA; FINGER; MELO, 2006,p.199).
Adolfo Neto (DAINF-UTFPR) Verificacao de Programas
Sistema de Provas
O que corresponde a
`par 〈ϕ〉 C0 〈ϕ1〉`par 〈ϕ1〉 C1 〈ϕ2〉
...`par 〈ϕn〉 Cn 〈ψ〉
Fonte: (SILVA; FINGER; MELO, 2006, p.200).
Adolfo Neto (DAINF-UTFPR) Verificacao de Programas
Sistema de Provas
I A regra a ser aplicada para provar cada comando e detectadapela propria sintaxe do comando: se e uma Atribuicao, umIfElse, etc.
I Mas aqui foram introduzidas assercoes intermediarias entre oscomandos. Como encontrar tais assercoes quando temosapenas a especificacao das pre (ϕ) e pos-condicoes (ψ) doproblema?
I Exemplo 7.4.1 (SILVA; FINGER; MELO, 2006, p.200-201)
Fonte: (SILVA; FINGER; MELO, 2006, p.200-201).
Adolfo Neto (DAINF-UTFPR) Verificacao de Programas
Sistema de Provas
I Mas aqui foram introduzidas assercoes intermediarias entre oscomandos. Como encontrar tais assercoes quando temosapenas a especificacao das pre (ϕ) e pos-condicoes (ψ) doproblema?
I Olhamos o que queremos provar para, entao, introduzirassercoes intermediarias para verificar se a premissa esuficiente para provar a assercao do topo do programa.
Fonte: (SILVA; FINGER; MELO, 2006, p.201).
Adolfo Neto (DAINF-UTFPR) Verificacao de Programas
Proximos Passos
I Tablo de provas
I Exemplos de provas
I Correcao e completude do sistema de provas
I Correcao total de programas
I Notas bibliograficas
Adolfo Neto (DAINF-UTFPR) Verificacao de Programas
top related