Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouLuís Vilaverde Estrela Alterado mais de 7 anos atrás
1
Programas e Refinamento Programming from Specifications Carroll Morgan Prentice-Hall, 1994 [Capítulo 1] Equipe: Klaus Cavalcante Tarcísio Quirino Raquel Monteiro
2
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.
3
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
4
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.
5
Se para o cliente, o programa prog2 é melhor do que o programa prog1, então nós dizemos prog1 prog2 ou 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
6
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ção do programa estado inicial
7
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 estado x = 2 x + z < y z 4 x = 2 y = 17 z = 3 Um estado satisfaz uma fórmula se aquela fórmula o descreve xyzxyz 2 17 3
8
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)]
9
Cálculo de predicados Os Operadores Vínculo A declaração F1 F2, significa: em qualquer estado, se F1 é verdade então F2 é verdade A 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
10
Programas Abstratos Especificações: A especificação é a principal característica dos programas abstratos w: [ 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
11
Programas Abstratos Lei 1.1 Fortalecimento da pós-condição Se pos’ pos, então w :[ pre, pos] w :[ pre, pos’]
12
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
13
Programas Abstratos Lei 1.2 Enfraquecimento da pré-condição Se pre pre’, então w :[ pre, pos] w :[ pre’, pos]
14
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
15
Exercício 1.Quais destes refinamentos são válidos? (Use enfraquecimento da pré-condição e fortalecimento da pós-condição)
16
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ção w := E Lei 1.3 Atribuição Se pre pos[w\E], então w,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
17
Programas Viáveis Definição 1.4 Viabilidade A especificação w :[pre,pos] é viável se e somente se pre 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
18
Algumas abreviações comuns Abreviação 1.5 Pré-condição default w :[pos] é uma abreviação para w :[ true, pos] Abreviação 1.6 Suposição (Assumption) {pre} é uma abreviação para :[ pre, true ]
19
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]
20
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
21
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
22
Programas e Refinamento Programming from Specifications Carroll Morgan Prentice-Hall, 1994 [Capítulo 1] Equipe: Klaus Cavalcante Tarcísio Quirino Raquel Monteiro
23
Atribuição e Composição Sequencial Programming from Specifications Carroll Morgan Prentice-Hall, 1994 Capítulo 3 Grupo:João Collier de Mendonça Lucas Carneiro Leão Murillo Pontual
24
Atribuição Atribuição Múltipla w0,..., wn := E0,..., En Atribuição simultânea Exemplos: x,y := 1,0 x,y := y,x Atribuição Aberta: Lei de refinamento 3.1 Para qualquer Expressão F w,x := E,? w,x := E,F
25
O Comando skip skip Lei de refinamento Lei 3.2 Comando skip Se pre pos, então w :[ pre, pos] skip
26
Composição Sequencial Lei de refinamento Lei 3.3 Composição sequencial Para qualquer fórmula mid, w :[ pre, pos] w :[ pre, mid] ; w :[mid, pos] Exemplo: x,y :[true,x = 0 y = 1] x,y :[true,x = 0] ; (1) x,y :[x = 0, x = 0 y = 1]. (2) Pela lei de atribuição 1.3: (1) x,y :[true,x = 0] x:= 0 (2) x,y :[x = 0, x = 0 y = 1] y := 1.
27
Exercício:Composição Sequencial Exercício 3.3 x:[x = T, x= T 4 ] x := x 2 ; x := x 2 Primeiramente pela lei 3.3 w:[pre, pos] w:[pre, mid] ; w:[mid, pos]. Logo: w:[ pre, mid ]; (1) w:[ mid, pos ]; (2) x = X 2 x = Tx = T 2 x = T 4
28
Continuação Pela lei 1.3 em (1) tem-se: w:[x = T, x= T 2 ] x := x 2, prova: x = T x = T 2 [x / x 2 ] Pela lei 1.3 em (2) tem-se: w:[x= T 2, x= T 4 ] x := x 2, prova: x = T 2 x = T 4 [x / x 2 ] x2x2 x2x2
29
Composição Sequencial Composição com skip Lei 3.4 Composição com skip Para qualquer programa prog, prog ; skip = skip ; prog = prog
30
Atribuição e Composição Juntos Lei 3.5 Próxima atribuição Para qualquer termo E, w,x :[pre, pos] w,x :[pre, pos[x\E] ] ; x := E
31
Exercício de Próxima Atribuição x,y,t:[x = X ^ y=Y, x=Y ^ y=X] t:=y;y:=x;x:=t usando Na pos[x/t] pela lei da próxima atribuição Teremos: x,y,t:[x = X ^ y=Y, t=Y ^ y=X]; x:=t Utilizando a mesma regra teremos para y:=x Na pos[y/x] pela lei da próxima atribuição Teremos: x,y,t:[x = X ^ y=Y, t=Y ^ x=X]; y:=x; x:=t
32
Continuação Chegando na última especificação: x,y,t:[x = X ^ y=Y, t=Y ^ x=X]; y:=x; x:=t Utilizando a regra 1.3 (atribuição) para refinar x,y,t:[x = X ^ y=Y, t=Y ^ x=X] t:=y logo: Pre pos[t/y] então: x = X ^ y=Y t=Y ^ x=X [t/y] então: x = X ^ y=Y y=Y ^ x=X [t/y] assim: t:=y; y:=x; x:=t QED
33
Pensamentos... “Os erros não detectáveis são infinitos. Enquanto que, os detectáveis, são por definição, limitados.” “Aquele que tentou e nada conseguiu é superior àquele que não tentou.” Bud Wilkinson “Cuidado com o homem que se esforça muito para aprender alguma coisa. Aprende, e depois nota que não está mais inteligente do que antes. Ele é cheio de um resentimento assassino das pessoas que são ignorantes sem terem chegado a essa ignorância pelo caminho mais difícil.” Lei de Bokonon
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.