Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouStefany Bermudes Alterado mais de 9 anos atrás
2
Iteração – Capítulo 5 Programming from Specifications Carroll Morgan Prentice-Hall, 1994 Integrantes: Alex Motta Carlos Nascimento Paulo Maia
3
Descrição Operacional Iteração = repetição; Um comando é executado enquanto uma certa condição é válida; Estrutura: do G 0 → prog 0 ║G 1 → prog 1... ║ G n → prog n od.
4
Descrição Operacional “Loops” infinitos Ex : do true → skip od “Loop” infinito = abort Uma iteração finaliza quando todas as suas guardas forem falsas Pode não ocorrer em certos estados iniciais
5
Descrição Operacional Ex : Do 2 | n → n := n ÷ 2 od Iterações podem ser desmembradas sem afetar seu significado: do G 0 → prog = if G 0 then prog; do G 0 → prog od fi
6
Descrição Operacional = if G 0 then prog; if G 0 then prog; do G 0 → prog od fi
7
Definição de Invariante Abstrair o número de repetições Fórmula que, se inicialmente for verdadeira, também será verdadeira a cada iteração, inclusive no final A iteração mantém a invariante e estabelece adicionalmente a negação das guardas
8
Invariante - Exemplo do 2 | n -> n := n ÷ 2 od Qual a invariante? pt n = ( ∃ k : N n = 2 ^ k)
9
Invariante - Alguns Raciocínios Formalmente: inv é um invariante de do G prog od se w: [inv G, inv] prog Assumindo-se terminação: w: [inv, inv G] do G prog od
10
Lei de Refinamento: Informalmente Exemplo: n :[ pt n, pt n 2 | n)] do 2 | n n := n od
11
Lei de Refinamento: Informalmente Terminação tem que ser considerada Por causa disso w :[ true ^ true, true ] skip concluímos que w :[ true, true ^ false ] do true -> skip od >>>>>> absurdo!
12
Terminação de Iterações: Variantes Variante: Exemplo: do 2 | n n := n od termina porque Cada repetição decrementa n e n não pode se tornar negativo >>>>> n é o variante da iteração Expressão inteira que é decrementada por cada repetição, mas nunca abaixo de um limite inferior fixo (geralmente 0).
13
Especificando o Decréscimo do Variante Um comando que decrementa uma variável inteira n := n - 1 Especificação n :[n = n - 1] X n :[n < n] X n :[n = N, n < N]
14
Especificando o Decréscimo do Variante Variáveis com subscrito 0 (variáveis iniciais) n :[ n < n 0 ] Novas leis de refinamento Lei 5.1 Fortalecimento da pós-condição Se pre[w\w 0 ] pos’ pos, então w :[ pre, pos] w :[ pre, pos’] Lei 5.2 Atribuição Se (w = w 0 ) x = x 0 pre pos[w\E], então w,x:[ pre, pos] w := E
15
Especificando o Decréscimo do Variante Lei 5.3 Comando skip Se (w = w 0 ) pre pos, então w :[ pre, pos] skip As leis anteriores ainda valem
16
Variáveis Iniciais e o Quadro Se uma variável x não está no quadro, então ela pode ser referenciada na pós condição tanto como x quanto como x o Lei 5.4 Contração do quadro w,x :[ pre, pos] w :[ pre, pos[x 0 \ x] ]
17
Refinamento da Regra para Iteração Lei 5.5 - Iteração: seja inv, o invariante, qualquer fórmula; seja V, o variante, qualquer expressão inteira. Então se GG é a disjunção das guardas, w: [inv, inv Λ ¬ GG] do ( i. G i w: [inv, inv Λ G i, inv Λ (0 ≤ V < V 0 )]) od. inv e G i → não possuem variáveis iniciais. V = V[w\w 0 ].
18
Refinamento da Regra para Iteração Lei 5.5 – Iteração (abreviada): w: [inv, inv Λ ¬ GG] do ( i. G i w: [G i, inv Λ (0 ≤ V < V 0 )]) od. Lei 5.6 – Especificação do variante: seja inv, o invariante, qualquer fórmula; seja V, o variante, qualquer expressão inteira. Então se GG é a disjunção das guardas, w: [pre, inv, post] w: [pre Λ inv, inv Λ post].
19
Lista de Verificação da Iteração Características das iterações: A invariante é verdade inicialmente O invariante e a negação da guarda são suficientes. O corpo da iteração mantém a invariante, contanto que a guarda seja verdadeira O variante é decrementado pela execução do corpo da iteração, contanto que a guarda e a invariante sejam verdadeiras O variante não pode ficar menor que zero pelo corpo da iteração, contanto que a guarda e a invariante sejam verdadeiras
20
Exercício de Fixação Desenvolver o seguinte programa usando cálculo de refinamento: do 2 | n n := n od Invariante: pt n, onde pt n = ( ∃ k : N n = 2 ^ k) Variante: n
21
Exercício de Fixação n : [ pt n, n = 1 ] Lei 1.1 (Lei do Fortalecimento da pós) n : [ pt n, pt n ^ ¬ (2 | n )] Obrigação de Prova: pt n ^ ¬ (2 | n )] n = 1 Lei 5.5 (Lei da Iteração) do 2 | n n : [ 2|n ^ pt n, pt n ^ 0 ≤ n < n 0 ] od
22
Exercício de Fixação Lei 5.6 (Lei da especificação da invariante) do 2 | n n : [ 2|n, pt n, 0 ≤ n < n 0 ] od Lei 5.2 (Lei da atribuição com variável inicial) n := n 2 Obrigação de Prova: ( n = n 0 ) ^ (2 | n ) ^ pt n pt (n 2 ^ (0 ≤ n < n ) [ n\ n 2 ]
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.