Programas e Refinamento
Programming from Specifications
Carroll Morgan Prentice-Hall, 1994
[Capítulo 1]
Equipe:
Klaus Cavalcante
Tarcísio Quirino
Raquel Monteiro
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.
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
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.
Programas como Contratos:
Refinamento



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
resistente a chuva

precisa de 4Mb

saída de 220/110V
resistente a 50m de
profundidade
precisa de 2Mb
Programas Abstratos

Estados inicial e final
estado
inicial

estado
final
Estado




ação
do
programa
variáveis são nomes
valores
mapeamentos de variáveis para valores
Um programa imperativo realiza modificações de
estado
Programas Abstratos

Descrições de estado

Exemplo de estado
Variáveis x, y, e z


x
y
z
2
17
3
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
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)]
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 verdadeiro
F2, significa: F1 verdadeiro SSE
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
Programas Abstratos
Lei 1.1 Fortalecimento da pós-condição
Se pos’
pos,
então
w :[ pre , pos]
w :[ pre , pos’]
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 ]
refina
y : [0 x  9 , y ^ 2 = x]
 (1.2) é melhor do que (1.1) pela lei 1.1

(1.2)
(1.1)
Programas Abstratos
Lei 1.2 Enfraquecimento da pré-condição
Se pre
pre’,
então
w :[ pre , pos]
w :[ pre’ , pos]
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  ]
refina
y : [0 x  9 , y ^ 2 = x y ]
 (1.3) é melhor do que (1.2) pela lei 1.2

(1.3)
(1.2)
Exercício
1.
Quais destes refinamentos são válidos? (Use
enfraquecimento da pré-condição e fortalecimento da
pós-condição)
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
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
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 ]
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]
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
Programas Extremos

Abort
w :[ false , true ]

Choice
w :[ true , true ]

skip
Mágica (inexequível)
w :[ true , false ]

choose w
Skip
:[ true , true ]

abort
magic
A maioria destes programas não são escritos
deliberadamente
Programas e Refinamento
Programming from Specifications
Carroll Morgan Prentice-Hall, 1994
[Capítulo 1]
Equipe:
Klaus Cavalcante
Tarcísio Quirino
Raquel Monteiro
Download

01-ProgramasERefinamento