22
Programas e Refinamento Programming from Specifications Carroll Morgan Prentice-Hall, 1994 [Capítulo 1] Equipe: Klaus Cavalcante Tarcísio Quirino Raquel Monteiro

Programas e Refinamento Programming from Specifications Carroll Morgan Prentice-Hall, 1994 [Capítulo 1] Equipe: Klaus Cavalcante Tarcísio Quirino Raquel

Embed Size (px)

Citation preview

Page 1: Programas e Refinamento Programming from Specifications Carroll Morgan Prentice-Hall, 1994 [Capítulo 1] Equipe: Klaus Cavalcante Tarcísio Quirino Raquel

Programas e RefinamentoProgramming from SpecificationsCarroll Morgan Prentice-Hall, 1994

[Capítulo 1]Equipe:Klaus CavalcanteTarcísio QuirinoRaquel Monteiro

Page 2: Programas e Refinamento Programming from Specifications Carroll Morgan Prentice-Hall, 1994 [Capítulo 1] Equipe: Klaus Cavalcante Tarcísio Quirino Raquel

Visão Tradicional Programa x Especificação

Programas são executáveis, mas de difícil compreensão.

Especificações são legíveis, de fácil entendimento, mas não são executáveis.

Page 3: Programas e Refinamento Programming from Specifications Carroll Morgan Prentice-Hall, 1994 [Capítulo 1] Equipe: Klaus Cavalcante Tarcísio Quirino Raquel

Uma Nova Visão Não há distinção entre especificações e

programas Tudo é programa Nem todos os programas são executáveis

Hierarquia de programação Programas abstratos Programas executáveis (código) Nível intermediário

Projetos Mistura de construtores abstratos e concretos

Page 4: Programas e Refinamento Programming from Specifications Carroll Morgan Prentice-Hall, 1994 [Capítulo 1] Equipe: Klaus Cavalcante Tarcísio Quirino Raquel

Programas como Contratos: Refinamento

Cliente Programador Negociação Cliente -> Deseja: programas com maior precisão,

rapidez e aplicabilidade em diferentes contextos. Programador -> Deseja: maior liberdade na

implementação, bem como folga na seleção e apresentação de resultados; deseja ainda, mais informação sobre condições de execução do programa, além do acesso a técnicas de implementação, baratas e padronizadas.

Page 5: Programas e Refinamento Programming from Specifications Carroll Morgan Prentice-Hall, 1994 [Capítulo 1] Equipe: Klaus Cavalcante Tarcísio Quirino Raquel

Se para o cliente, o programa prog2 é melhor do que o programa prog1, então nós dizemos prog1 prog2ou seja, prog2 “refina” prog1.

Visão do cliente Exemplos:

saída de 220V saída de 220/110V resistente a chuva resistente a 50m de profundidade precisa de 4Mb precisa de 2Mb

Programas como Contratos: Refinamento

Page 6: Programas e Refinamento Programming from Specifications Carroll Morgan Prentice-Hall, 1994 [Capítulo 1] Equipe: Klaus Cavalcante Tarcísio Quirino Raquel

Programas Abstratos Estados inicial e final

Estado variáveis são nomes valores mapeamentos de variáveis para valores

Um programa imperativo realiza modificações de estado

estado final

açãodo

programa

estadoinicial

Page 7: Programas e Refinamento Programming from Specifications Carroll Morgan Prentice-Hall, 1994 [Capítulo 1] Equipe: Klaus Cavalcante Tarcísio Quirino Raquel

Programas Abstratos Descrições de estado

Exemplo de estado Variáveis x, y, e z

Nós descrevemos estados ao invés de desenhá-los Dizemos que uma fórmula descreve um estado quando

ela se faz verdadeira pelos mapeamentos do estadox = 2x + z < y z 4x = 2y = 17 z = 3

Um estado satisfaz uma fórmula se aquela fórmula o descreve

xyz

2173

Page 8: Programas e Refinamento Programming from Specifications Carroll Morgan Prentice-Hall, 1994 [Capítulo 1] Equipe: Klaus Cavalcante Tarcísio Quirino Raquel

Cálculo de predicados Usamos o cálculo de predicados como linguagem de nossas

formulas. Isto inclui:

Termos ( variáveis, constantes, e funções ) Formulas atômicas ( uma composição entre termos e

operadores relacionais, Ex.: =, <, >=) Formulas proposicionais (uma composição entre

formulas atômicas e conectivos proposicionais, Ex.: , , ¬, , )

Quantificadores ( , ) Quantificadores tipados [ (x:T · A), (x:T · A)]

Page 9: Programas e Refinamento Programming from Specifications Carroll Morgan Prentice-Hall, 1994 [Capítulo 1] Equipe: Klaus Cavalcante Tarcísio Quirino Raquel

Cálculo de predicados Os Operadores Vínculo

A declaração F1 F2, significa: em qualquer estado, se F1 é verdade então F2 é verdadeA declaração F1 F2, significa: em qualquer estado, F1 é verdade se F2 é verdade

O Operador Equivalência

A declaração F1 F2, significa: F1 verdadeiro SSE F2 verdadeiro

Page 10: Programas e Refinamento Programming from Specifications Carroll Morgan Prentice-Hall, 1994 [Capítulo 1] Equipe: Klaus Cavalcante Tarcísio Quirino Raquel

Programas Abstratos Especificações: A especificação é a principal

característica dos programas abstratosw: [ pre , pos ]

quadro (w): valores que podem ser modificados pré-condição (pre): descreve estados iniciais pós-condição (pos): descreve estados finais Exemplo: faça y a raiz quadrada de x desde

que 0 x 9 y : [0 x 9 , y ^ 2 = x ] (1.1)

Uma especificação captura a intenção sem dar o método

Page 11: Programas e Refinamento Programming from Specifications Carroll Morgan Prentice-Hall, 1994 [Capítulo 1] Equipe: Klaus Cavalcante Tarcísio Quirino Raquel

Programas AbstratosLei 1.1 Fortalecimento da pós-condição

Se pos’ pos, então

w :[ pre , pos] w :[ pre , pos’]

Page 12: Programas e Refinamento Programming from Specifications Carroll Morgan Prentice-Hall, 1994 [Capítulo 1] Equipe: Klaus Cavalcante Tarcísio Quirino Raquel

Programas Abstratos Refinamento de especificações

Uma especificação é melhorada pelo fortalecimento de sua pós-condição

Exemplo: A especificação

y : [0 x 9 , y ^ 2 = x y ] (1.2) refina

y : [0 x 9 , y ^ 2 = x] (1.1) (1.2) é melhor do que (1.1) pela lei 1.1

Page 13: Programas e Refinamento Programming from Specifications Carroll Morgan Prentice-Hall, 1994 [Capítulo 1] Equipe: Klaus Cavalcante Tarcísio Quirino Raquel

Programas AbstratosLei 1.2 Enfraquecimento da pré-

condição

Se pre pre’, então

w :[ pre , pos] w :[ pre’ , pos]

Page 14: Programas e Refinamento Programming from Specifications Carroll Morgan Prentice-Hall, 1994 [Capítulo 1] Equipe: Klaus Cavalcante Tarcísio Quirino Raquel

Programas Abstratos Refinamento de especificações:

Uma outra forma de melhoria é conseguida pelo enfraquecimento da pré-condição

Exemplo: A especificação

y : [x 0 , y ^ 2 = x y ] (1.3) refina

y : [0 x 9 , y ^ 2 = x y ] (1.2) (1.3) é melhor do que (1.2) pela lei 1.2

Page 15: Programas e Refinamento Programming from Specifications Carroll Morgan Prentice-Hall, 1994 [Capítulo 1] Equipe: Klaus Cavalcante Tarcísio Quirino Raquel

Exercício1. Quais destes refinamentos são válidos? (Use

enfraquecimento da pré-condição e fortalecimento da pós-condição)

Page 16: Programas e Refinamento Programming from Specifications Carroll Morgan Prentice-Hall, 1994 [Capítulo 1] Equipe: Klaus Cavalcante Tarcísio Quirino Raquel

Programas Executáveis Código

Linguagem de especificação é muito expressiva Nenhum computador pode executar especificações Construtores executáveis (código)

O Comando de Atribuiçãow := E

Lei 1.3 Atribuição Se pre pos[w\E], entãow ,x:[ pre , pos] w := E

O refinamento total, da especificação para o código; é feito em passos, cada qual introduzindo um pouco mais de executabilidade ou eficiência

Page 17: Programas e Refinamento Programming from Specifications Carroll Morgan Prentice-Hall, 1994 [Capítulo 1] Equipe: Klaus Cavalcante Tarcísio Quirino Raquel

Programas ViáveisDefinição 1.4 Viabilidade

A especificação w :[pre,pos] é viável se e somente sepre w:T pos)onde T é o tipo da variável w.

Exemplo: y : [true , y ^ 2 = x y ] (1.4) Isso seria como tentar provar que:true (y:R ·(y ^ 2 = x y

Especificações inviáveis não podem ser implementadas

Page 18: Programas e Refinamento Programming from Specifications Carroll Morgan Prentice-Hall, 1994 [Capítulo 1] Equipe: Klaus Cavalcante Tarcísio Quirino Raquel

Algumas abreviações comuns

Abreviação 1.5 Pré-condição defaultw :[pos] é uma abreviação para w :[ true , pos]

Abreviação 1.6 Suposição (Assumption){pre} é uma abreviação para :[ pre , true ]

Page 19: Programas e Refinamento Programming from Specifications Carroll Morgan Prentice-Hall, 1994 [Capítulo 1] Equipe: Klaus Cavalcante Tarcísio Quirino Raquel

Programas Executáveis Abreviação

Exemplo: A especificação

{0 x 9} y := sqr(x) (1.5) refina

y : [0 x 9 , y ^ 2 = x y ] (1.2) (1.5) é melhor do que (1.2) pela Abreviação 1.6

Lei 1.7 Especificação simples w := E = w :[w = E]

Page 20: Programas e Refinamento Programming from Specifications Carroll Morgan Prentice-Hall, 1994 [Capítulo 1] Equipe: Klaus Cavalcante Tarcísio Quirino Raquel

Algumas abreviações comuns Lei 1.8 Absorção de suposição

{pre’} w :[pre , pos] = w :[ pre’ pre , pos] Assim, uma suposição antes de uma

especificação pode ser absorvida diretamente na pré-condição desta

Page 21: Programas e Refinamento Programming from Specifications Carroll Morgan Prentice-Hall, 1994 [Capítulo 1] Equipe: Klaus Cavalcante Tarcísio Quirino Raquel

Programas Extremos Abort

w :[ false , true ] abort Choice

w :[ true , true ] choose w Skip

:[ true , true ] skip Mágica (inexequível)

w :[ true , false ] magic

A maioria destes programas não são escritos deliberadamente

Page 22: Programas e Refinamento Programming from Specifications Carroll Morgan Prentice-Hall, 1994 [Capítulo 1] Equipe: Klaus Cavalcante Tarcísio Quirino Raquel

Programas e RefinamentoProgramming from SpecificationsCarroll Morgan Prentice-Hall, 1994

[Capítulo 1]Equipe:Klaus CavalcanteTarcísio QuirinoRaquel Monteiro