A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Programas e Refinamento Programming from Specifications Carroll Morgan Prentice-Hall, 1994 [Capítulo 1] Equipe: Klaus Cavalcante Tarcísio Quirino Raquel."— Transcrição da apresentação:

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


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

Apresentações semelhantes


Anúncios Google