verificação de programas

27
Verifica¸c˜ ao de Programas Adolfo Neto (DAINF-UTFPR) http://www.dainf.ct.utfpr.edu.br/ ~ adolfo November 6, 2012 Adolfo Neto (DAINF-UTFPR) Verifica¸ ao de Programas

Upload: adolfo-neto

Post on 18-Dec-2014

510 views

Category:

Education


4 download

DESCRIPTION

Slides sobre Verificação de Programas baseados no livro de Silva, Finger e Melo

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

Referencias

I SILVA, Flavio S. C. da; FINGER, Marcelo; MELO, Ana C. V.de. Logica para Computacao. Sao Paulo: ThomsonLearning, 2006.

Adolfo Neto (DAINF-UTFPR) Verificacao de Programas