2. 2
Copyright c 2005 Carlos A. P. Campani.
´
E garantida a permiss˜o para copiar, distribuir e/ou
a
modificar este documento sob os termos da Licen¸a de
c
Documenta¸ao Livre GNU (GNU Free Documentation
c˜
License), Vers˜o 1.2 ou qualquer vers˜o posterior
a a
publicada pela Free Software Foundation; sem Se¸oes
c˜
Invariantes, Textos de Capa Frontal, e sem Textos de
Quarta Capa. Uma c´pia da licen¸a ´ inclu´ na se¸ao
o c e ıda c˜
intitulada “GNU Free Documentation License”.
veja: http://www.ic.unicamp.br/~norton/fdl.html.
3. 3
S´ mula
u
1. Introdu¸ao
c˜
2. Abordagens de semˆntica formal
a
3. Linguagem exemplo While
4. Sintaxe abstrata
4. 4
5. Revis˜o de Prova de Teoremas
a
(a) Prova de Implica¸ao
c˜
(b) Prova por Redu¸˜o ao Absurdo
ca
(c) Prova por Indu¸˜o
ca
i. Indu¸˜o Sobre os Naturais
ca
ii. Indu¸ao Sobre o Tamanho de uma Seq¨ˆncia
c˜ ue
iii. Indu¸ao Estrutural
c˜
5. 5
6. Semˆntica de express˜es
a o
(a) N´meros e Numerais
u
(b) Descrevendo Estados
(c) Express˜es aritm´ticas
o e
(d) Express˜es booleanas
o
7. Propriedades da Semˆntica
a
(a) Vari´veis Livres
a
(b) Substitui¸ao
c˜
6. 6
8. Semˆntica Operacional
a
(a) Semˆntica Natural
a
i. Propriedades da Semˆntica
a
ii. Fun¸˜o Semˆntica
ca a
(b) Semˆntica Operacional Estruturada
a
i. Propriedades da Semˆntica
a
ii. Fun¸˜o Semˆntica
ca a
(c) Um Resultado de Equivalˆncia
e
7. 7
9. Semˆntica Denotacional
a
(a) Composicionalidade
(b) Ponto Fixo
(c) Defini¸ao da Semˆntica
c˜ a
(d) Requisitos sobre o Ponto Fixo
(e) Teoria de Pontos Fixos
(f) Existˆncia
e
(g) Um Resultado de Equivalˆncia
e
8. 8
10. Semˆntica Axiom´tica
a a
(a) Provas Diretas de Corre¸˜o de Programas
ca
i. Semˆntica Natural
a
ii. Semˆntica Operacional Estruturada
a
iii. Semˆntica Denotacional
a
(b) Asser¸oes para Corre¸ao Parcial
c˜ c˜
(c) Corre¸ao e Completude do Sistema Formal
c˜
(d) Asser¸oes para Corre¸ao Total
c˜ c˜
9. 9
Bibliografia
• Nielson, H. & Nielson, F. Semantics with
Applications: a formal introduction. dispon´ em:
ıvel
http://www.daimi.au.dk/~bra8130/Wiley_book/
wiley.html;
• lˆminas para impress˜o: http:
a a
//www.ufpel.edu.br/~campani/semantica4.ps.gz.
10. 1 ¸˜
INTRODUCAO 10
1 Introdu¸˜o
ca
Semˆntica formal preocupa-se em especificar
a
rigorosamente o significado ou comportamento de
programas, partes de hardware, etc.
Sintaxe descreve as estruturas de uma linguagem;
Semˆntica descreve o significado destas estruturas.
a
11. 1 ¸˜
INTRODUCAO 11
A necessidade de uma semˆntica formal (matem´tica)
a a
para linguagens de programa¸ao justifica-se pois:
c˜
• pode revelar ambig¨idades na defini¸˜o da linguagem
u ca
(o que uma descri¸˜o n˜o formal n˜o permitiria
ca a a
revelar);
• ´ uma base para implementa¸ao (s´
e c˜ ıntese), an´lise e
a
verifica¸ao formal.
c˜
12. 2 ABORDAGENS 12
2 Abordagens
Semˆntica Operacional Significado de uma constru¸˜o
a ca
da linguagem ´ especificado pela computa¸ao que ela
e c˜
induz quando executada em uma m´quina hipot´tica
a e
(interessa como o efeito da computa¸ao ´ produzido);
c˜ e
Semˆntica Denotacional Significados modelados por
a
objetos matem´ticos que representam o efeito de
a
executar uma estrutura (somente o efeito interessa,
n˜o como ´ produzido);
a e
Semˆntica Axiom´tica Especifica propriedades do
a a
efeito da execu¸ao das estruturas como asser¸˜es
c˜ co
(alguns aspectos da execu¸ao s˜o ignorados).
c˜ a
13. 2 ABORDAGENS 13
Tipos de Semˆntica Operacional:
a
• Semˆntica Operacional Estruturada (especifica mais
a
detalhes da execu¸ao);
c˜
• Semˆntica Natural (simplifica a nota¸ao e esconde
a c˜
detalhes, ao tomar um passo maior).
14. 3 LINGUAGEM EXEMPLO WHILE 14
3 Linguagem Exemplo While
n ∈ Num
x ∈ Var
a ∈ Aexp
b ∈ Bexp
S ∈ Stm
15. 3 LINGUAGEM EXEMPLO WHILE 15
a ::= n|x|a1 + a2 |a1 ∗ a2 |a1 − a2
b ::= true|false|a1 = a2 |a1 ≤ a2 |¬b|b1 ∧ b2
S ::= x:=a|skip|S1 ; S2 |if b then S1 else S2 |while b do S
16. 3 LINGUAGEM EXEMPLO WHILE 16
ex1: z:=x; x:=y; y:=z
ex2: y:=1; while ¬(x = 1) do (y:=y∗x; x:=x−1)
17. 4 SINTAXE ABSTRATA 17
4 Sintaxe Abstrata
z:=x; x:=y; y:=z
S ƒƒƒƒƒ
ÐÐ ƒƒƒƒ
ÐÐ ƒƒƒA
S bb ; S www
Ò Ð www
ÐÒÒ b0
Ò b ÐÐÐ w8
z := a S bb ; S aa
ÑÑ bb1 ÑÑ a
a0
ÐÑÑ ÐÑ
x x := a y := a
y z
18. 4 SINTAXE ABSTRATA 18
S „„„„„
ÓÓ „„„„
ÑÓ „„„A
S ww ;
www S`
Ð
ÐÐÐ ww8 ÐÒÒÒ ``0
`
Sd ; S b y := a
ÐÐÐ dd1 ~
~~ b1
b
z := a x := a z
x y
20. 4 SINTAXE ABSTRATA 20
Exerc´ıcio: Construa a ´rvore sint´tica de
a a
y:=1; while ¬(x = 1) do (y:=y∗x; x:=x−1).
21. 5 ˜
REVISAO DE PROVA DE TEOREMAS 21
5 Revis˜o de Prova de Teoremas
a
5.1 Prova de Implica¸˜o
ca
Para provar A → B, assuma A (hip´tese) e deduza B.
o
A (hip´tese)
o
...
...
.
.
.
B
A→B
22. 5 ˜
REVISAO DE PROVA DE TEOREMAS 22
ex: Provar que se um n´mero inteiro ´ divis´ por 6
u e ıvel
ent˜o tamb´m o ´ por 2.
a e e
Seja n ∈ Z, tal que n ´ divis´ por 6:
e ıvel
1. n ´ divis´ por 6 (hip´tese);
e ıvel o
2. n = 6.k, onde k ∈ N;
3. n = 2.3.k;
4. n = 2.k , onde k = 3.k e k ∈ N
5. n ´ divis´ por 2;
e ıvel
6. Logo, vale o enunciado.
23. 5 ˜
REVISAO DE PROVA DE TEOREMAS 23
5.2 Prova por Redu¸˜o ao Absurdo
ca
Para provar A, suponha ¬A e mostre que isto resulta em
uma contradi¸ao (absurdo).
c˜
ex: Provar que se um n´mero somado a si mesmo resulta
u
o n´mero original, ent˜o este n´mero ´ zero.
u a u e
Suponha que este n´mero ´ x e que:
u e
x+x=x∧x=0
ent˜o
a
2x = x ∧ x = 0
Logo, 2 = 1 (absurdo).
24. 5 ˜
REVISAO DE PROVA DE TEOREMAS 24
5.3 Prova por Indu¸˜o
ca
5.3.1 Indu¸˜o Sobre os Naturais
ca
P (0) P (n) → P (n + 1)
n∈N
∀nP (n)
Base P (0);
Passo P (n) → P (n + 1);
• P (n) ´ a hip´tese indutiva;
e o
• Ent˜o, tenta-se provar P (n + 1);
a
Conclus˜o ∀nP (n).
a
25. 5 ˜
REVISAO DE PROVA DE TEOREMAS 25
ex: Provar que o quadrado de um n´mero natural sempre
u
´ maior ou igual ao n´mero.
e u
Base 0 ≤ 02 ;
Passo Assumir n ≤ n2 . Ent˜o:
a
n + 1 ≤ n2 + 1 ≤ n2 + 1 + 2n = (n + 1)2
Conclus˜o ∀n ∈ N n ≤ n2 .
a
26. 5 ˜
REVISAO DE PROVA DE TEOREMAS 26
ıcio: Prove que para todo n ∈ N, 2n n.
Exerc´
n(n+1)
Exerc´
ıcio: Prove que 1 + 2 + 3 + · · · + n = 2
.
27. 5 ˜
REVISAO DE PROVA DE TEOREMAS 27
5.3.2 Indu¸˜o Sobre o Tamanho de uma
ca
Seq¨ˆncia
ue
1. Prove que a propriedade vale para todas as
seq¨ˆncias de comprimento 0 (base);
ue
2. Prove que a propriedade vale para todas as outras
seq¨ˆncias: Assuma que a propriedade vale para
ue
todas as seq¨ˆncias de tamanho menor ou igual a k
ue
(hip´tese indutiva) e mostre que vale para seq¨ˆncias
o ue
de tamanho k + 1.
28. 5 ˜
REVISAO DE PROVA DE TEOREMAS 28
5.3.3 Indu¸˜o Estrutural
ca
Aplica-se sobre as estruturas de uma linguagem:
1. Prove que a propriedade vale para todas as
estruturas atˆmicas (ex: P (x:=a) e P (skip));
o
2. Prove que a propriedade vale para qualquer
programa: Assuma que vale para as estruturas que
formam um comando, e mostre que vale para o
comando composto (ex: P (S1 ) ∧ P (S2 ) → P (S1 ; S2 )).
29. 6 ˆ ˜
SEMANTICA DE EXPRESSOES 29
6 Semˆntica de Express˜es
a o
6.1 N´ meros e Numerais
u
N : Num → Z
Se n ∈ Num ent˜o escrevemos N [[n]], e usamos [[ e ]] para
a
enfatizar que N ´ uma fun¸˜o semˆntica.
e ca a
30. 6 ˆ ˜
SEMANTICA DE EXPRESSOES 30
N [[0]] = 0
N [[1]] = 1
N [[n 0]] = 2∗N [[n]]
N [[n 1]] = 2∗N [[n]]+1
Observa¸˜o: 0 ´ o numeral (0 ∈ Num) e 0 ´ o n´mero
ca e e u
(0 ∈ Z).
31. 6 ˆ ˜
SEMANTICA DE EXPRESSOES 31
6.2 Descrevendo Estados
Estado representa uma associa¸ao entre vari´veis e seus
c˜ a
valores.
State = Var → Z
ex: [x → 5, y → 7, z → 0].
32. 6 ˆ ˜
SEMANTICA DE EXPRESSOES 32
6.3 Express˜es aritm´ticas
o e
A : Aexp → (State → Z)
A[[n]]s = N [[n]]
A[[x]]s = s x
A[[a1 + a2 ]]s = A[[a1 ]]s+A[[a2 ]]s
A[[a1 ∗ a2 ]]s = A[[a1 ]]s∗A[[a2 ]]s
A[[a1 − a2 ]]s = A[[a1 ]]s−A[[a2 ]]s
Observa¸˜o: s ´ um estado.
ca e
33. 6 ˆ ˜
SEMANTICA DE EXPRESSOES 33
ex: seja s x = 3:
A[[x + 1]]s = A[[x]]s+A[[1]]s
= (s x)+N [[1]]
= 3+1
= 4
Observa¸˜o: na primeira linha, + dentro do [[.]] pertence
ca
` linguagem, + ` direita ´ a opera¸ao soma. 1 ´ o
a a e c˜ e
numeral (1 ∈ Num) e 1 ´ o n´mero (1 ∈ Z).
e u
34. 6 ˆ ˜
SEMANTICA DE EXPRESSOES 34
6.4 Express˜es booleanas
o
B : Bexp → (State → T)
T = {tt, ff }
36. 6 ˆ ˜
SEMANTICA DE EXPRESSOES 36
tt se B[[b ]]s = tt e B[[b ]]s = tt
1 2
B[[b1 ∧ b2 ]]s =
ff se B[[b1 ]]s = ff ou B[[b2 ]]s = ff
37. 7 ˆ
PROPRIEDADES DA SEMANTICA 37
7 Propriedades da Semˆntica
a
7.1 Vari´veis Livres
a
As vari´veis livres de uma express˜o a ´ definida como o
a a e
conjunto de vari´veis que ocorrem em a.
a
FV(n) = ∅
FV(x) = {x}
FV(a1 + a2 ) = FV(a1 ) ∪ FV(a2 )
FV(a1 ∗ a2 ) = FV(a1 ) ∪ FV(a2 )
FV(a1 − a2 ) = FV(a1 ) ∪ FV(a2 )
38. 7 ˆ
PROPRIEDADES DA SEMANTICA 38
Teorema 1 Sejam s e s dois estados satisfazendo que
s x = s x para todo x em FV(a). Ent˜o, A[[a]]s = A[[a]]s .
a
Prova: (por indu¸˜o sobre as express˜es aritm´ticas)
ca o e
1. Base:
caso n Sabemos que A[[a]]s = N [[n]] e A[[a]]s = N [[n]]
e assim A[[a]]s = A[[a]]s ;
caso x n´s temos A[[x]]s = s x e A[[x]]s = s x e, pela
o
hip´tese, s x = s x, j´ que x ∈ FV(x). Logo,
o a
A[[a]]s = A[[a]]s ;
39. 7 ˆ
PROPRIEDADES DA SEMANTICA 39
2. Passo: (supomos que o enunciado vale para a1 e a2 )
caso a1 + a2 Sabemos que
A[[a1 + a2 ]]s = A[[a1 ]]s + A[[a2 ]]s e
A[[a1 + a2 ]]s = A[[a1 ]]s + A[[a2 ]]s . Al´m disto,
e
FV(a1) ⊆ FV(a1 + a2 ) e FV(a2) ⊆ FV(a1 + a2 ).
Usando a hip´tese indutiva, A[[a1 ]]s = A[[a1 ]]s e
o
A[[a2 ]]s = A[[a2 ]]s , e ´ f´cil ver que o enunciado
e a
vale para a1 + a2 ;
casos a1 ∗ a2 e a1 − a2 similares ao anterior.
40. 7 ˆ
PROPRIEDADES DA SEMANTICA 40
Exerc´
ıcio: Definir o conjunto FV(b) das vari´veis livres
a
em uma express˜o booleana b.
a
Exerc´ıcio: Provar que, dados s e s satisfazendo s x = s x
para todo x ∈ FV(b), B[[b]]s = B[[b]]s .
41. 7 ˆ
PROPRIEDADES DA SEMANTICA 41
7.2 Substitui¸˜o
ca
Substitui¸˜o denota a opera¸˜o em que se troca cada
ca ca
ocorrˆncia de uma vari´vel y de uma express˜o a por
e a a
uma outra express˜o a0 .
a
Nota¸ao: a[y → a0 ].
c˜
42. 7 ˆ
PROPRIEDADES DA SEMANTICA 42
n[y → a0 ] = n
a se x = y
0
x[y → a0 ] =
x se x = y
(a1 + a2 )[y → a0 ] = (a1 [y → a0 ]) + (a2 [y → a0 ])
(a1 ∗ a2 )[y → a0 ] = (a1 [y → a0 ]) ∗ (a2 [y → a0 ])
(a1 − a2 )[y → a0 ] = (a1 [y → a0 ]) − (a2 [y → a0 ])
43. 7 ˆ
PROPRIEDADES DA SEMANTICA 43
Exerc´ıcio: Prove que
A[[a[y → a0 ]]]s = A[[a]](s[y → A[[a0 ]]s]), para todo s.
Exerc´
ıcio: Defina a substitui¸ao para express˜es
c˜ o
booleanas.
44. 8 ˆ
SEMANTICA OPERACIONAL 44
8 Semˆntica Operacional
a
• Express˜es aritm´ticas e booleanas apenas produzem
o e
um valor, mas n˜o mudam os estados;
a
• Comandos de programas While mudam o estado;
• Semˆntica operacional preocupa-se mais em como os
a
programas s˜o executados do que meramente com os
a
resultados destas computa¸oes;
c˜
45. 8 ˆ
SEMANTICA OPERACIONAL 45
• Abordagens:
Semˆntica natural descreve como os resultados
a
gerais s˜o obtidos;
a
Semˆntica operacional estruturada descreve como
a
passos individuais da computa¸˜o ocorrem;
ca
46. 8 ˆ
SEMANTICA OPERACIONAL 46
• Os significados dos comandos da linguagem ser˜oa
descritos por meio de um sistema de transi¸˜es;
co
• Existem dois tipos de configura¸oes:
c˜
S, s significando que o comando S ser´ executado a
a
partir do estado s;
s representando um estado terminal (ou final).
47. 8 ˆ
SEMANTICA OPERACIONAL 47
8.1 Semˆntica Natural
a
[assns ] x:=a, s → s[x → A[[a]]s]
[skipns ] skip, s → s
S1 ,s →s , S2 ,s →s
[compns ] S1 ;S2 ,s →s
S1 ,s →s
[if tt ]
ns if b then S1 else S2 ,s →s
se B[[b]]s = tt
S2 ,s →s
[if ff ]
ns if b then S1 else S2 ,s →s
se B[[b]]s = ff
S,s →s , while b do S,s →s
[whilett ]
ns while b do S,s →s
se B[[b]]s = tt
[whileff ]
ns while b do S, s → s se B[[b]]s = ff
48. 8 ˆ
SEMANTICA OPERACIONAL 48
esquema de axioma ou axioma como em [assns ];
regra como em [compns ];
´rvore de deriva¸˜o ´ a aplica¸ao dos axiomas e regras
a ca e c˜
para deduzir uma transi¸˜o S, s → s .
ca
Observa¸˜o: x ´ uma meta-vari´vel.
ca e a
49. 8 ˆ
SEMANTICA OPERACIONAL 49
ex: (´rvore de deriva¸˜o)
a ca
(z:=x; x:=y); y:=z s0 = [x → 5, y → 7, z → 0]
z:=x,s0 →s1 x:=y,s1 →s2
z:=x;x:=y,s0 →s2
y:=z, s2 → s3
(z:=x; x:=y); y:=z, s0 → s3
Observa¸˜o: s1 = s0 [z → 5], s2 = s1 [x → 7] e
ca
s3 = s2 [y → 5].
50. 8 ˆ
SEMANTICA OPERACIONAL 50
Como construir uma ´rvore de deriva¸˜o?
a ca
Resposta: da raiz para as folhas.
51. 8 ˆ
SEMANTICA OPERACIONAL 51
ex: y:=1; while ¬(x = 1) do (y:=y∗x; x:=x−1) e
s = [x → 3, y → 0]
52. 8 ˆ
SEMANTICA OPERACIONAL 52
Raiz:
y:=1; while ¬(x = 1) do (y:=y∗x; x:=x−1), s → s61
s61 = s[y → 6][x → 1]
53. 8 ˆ
SEMANTICA OPERACIONAL 53
´rvore T :
a
y:=1, s → s13 T1
y:=1; while ¬(x = 1) do (y:=y∗x; x:=x−1), s → s61
s13 = s[y → 1]
´rvore T1 :
a
T2 T3
while ¬(x = 1) do (y:=y∗x; x:=x − 1), s13 → s61
Pois B[[¬(x = 1)]]s13 = tt
55. 8 ˆ
SEMANTICA OPERACIONAL 55
´rvore T3 :
a
y:=y∗x,s32 →s62 x:=x−1,s62 →s61
y:=y∗x;x:=x−1,s32 →s61
T4
while ¬(x = 1) do (y:=y∗x; x:=x−1), s32 → s61
s62 = s[y → 6][x → 2]
56. 8 ˆ
SEMANTICA OPERACIONAL 56
´rvore T4 (folha):
a
while ¬(x = 1) do (y:=y∗x; x:=x−1), s61 → s61
Pois B[[¬(x = 1)]]s61 = ff
57. 8 ˆ
SEMANTICA OPERACIONAL 57
Exerc´
ıcio: Construa a ´rvore de deriva¸˜o para o seguinte
a ca
programa:
z:=0; while y ≤ x do (z:=z+1; x:=x−y)
com s = [x → 17, y → 5].
58. 8 ˆ
SEMANTICA OPERACIONAL 58
A execu¸ao de um comando S no estado s:
c˜
• termina se e somente se existe um estado s tal que
S, s → s ;
• entra em loop se e somente se n˜o existe um estado s
a
tal que S, s → s .
59. 8 ˆ
SEMANTICA OPERACIONAL 59
8.1.1 Propriedades da Semˆntica
a
S1 e S2 s˜o semanticamente equivalentes se
a
S1 , s → s se e somente se S2 , s → s
para todos os estados s e s .
60. 8 ˆ
SEMANTICA OPERACIONAL 60
Provar que while b do S ´ semanticamente equivalente a
e
if b then (S; while b do S) else skip.
Prova: (⇒) Se while b do S, s → s ent˜o a
if b then (S; while b do S) else skip, s → s
while b do S, s → s
Poss´
ıveis ´rvores:
a
T1 T2
while b do S, s → s
Onde T1 ´ a ´rvore com raiz S, s → s e T2 ´ a ´rvore
e a e a
com raiz while b do S, s → s e B[[b]]s = tt.
61. 8 ˆ
SEMANTICA OPERACIONAL 61
S1 , s → s S2 , s → s
[compns ]
S1 ; S2 , s → s
Usando T1 e T2 como premissas da regra [compns ]:
T1 T2
S; while b do S, s → s
62. 8 ˆ
SEMANTICA OPERACIONAL 62
S1 , s → s
[if tt ]
ns Se B[[b]]s = tt
if b then S1 else S2 , s → s
Obtemos:
T1 T2
S;while b do S,s →s
if b then (S; while b do S) else skip, s → s
63. 8 ˆ
SEMANTICA OPERACIONAL 63
Falta provar o caso B[[b]]s = ff . Neste caso, T ´
e
simplesmente:
while b do S, s →s
Usando [skipns ]:
skip, s →s
64. 8 ˆ
SEMANTICA OPERACIONAL 64
Usando [if ff ]:
ns
S2 , s → s
[if ff ]
ns Se B[[b]]s = ff
if b then S1 else S2 , s → s
skip, s → s
if b then (S; while b do S) else skip, s →s
65. 8 ˆ
SEMANTICA OPERACIONAL 65
(⇐) Se if b then (S; while b do S) else skip, s → s
ent˜o while b do S, s → s
a
Usando [if tt ]:
ns
S; while b do S, s → s
if b then (S; while b do S) else skip, s → s
e B[[b]]s = tt
66. 8 ˆ
SEMANTICA OPERACIONAL 66
Usando [compns ]:
S,s →s while b do S,s →s
S;while b do S,s →s
if b then (S; while b do S) else skip, s → s
Usando [whilett ]:
ns
S, s → s while b do S, s → s
while b do S, s → s
67. 8 ˆ
SEMANTICA OPERACIONAL 67
No caso B[[b]]s = ff :
skip, s → s
if b then (S; while b do S) else skip, s → s
es=s .
Usando [whileff ]:
ns
while b do S, s →s
Isto completa a prova.
68. 8 ˆ
SEMANTICA OPERACIONAL 68
Exerc´
ıcio: Prove que S1 ; (S2 ; S3 ) e (S1 ; S2 ); S3 s˜o
a
semanticamente equivalentes.
Exerc´
ıcio: Mostre que S1 ; S2 , no geral, n˜o ´
a e
semanticamente equivalente a S2 ; S1 .
69. 8 ˆ
SEMANTICA OPERACIONAL 69
Uma semˆntica ´ determin´stica se, para todos S, s, s e
a e ı
s :
S, s → s e S, s → s implica s = s .
Isto significa que para todo comando S e estado inicial s
n´s podemos determinar um unico estado final s se a
o ´
execu¸ao de S termina.
c˜
70. 8 ˆ
SEMANTICA OPERACIONAL 70
Teorema 2 A semˆntica natural ´ determin´
a e ıstica.
71. 8 ˆ
SEMANTICA OPERACIONAL 71
8.1.2 Fun¸˜o Semˆntica
ca a
Sns : Smt → (State → State)
Observa¸˜o: usa-se → para fun¸oes parciais. Ou seja:
ca c˜
Sns [[S]] ∈ State → State
dado por:
s Se S, s → s
Sns [[S]]s =
undef caso contr´rio
a
Observa¸˜o: Sns [[while true do skip]]s = undef para
ca
todo s (fun¸˜o parcial).
ca
72. 8 ˆ
SEMANTICA OPERACIONAL 72
8.2 Semˆntica Operacional Estruturada
a
ˆ
• Enfase nos passos individuais da computa¸˜o;
ca
• Rela¸˜o de transi¸˜o: S, s ⇒ γ (a transi¸ao
ca ca c˜
expressa o primeiro passo da computa¸ao), com dois
c˜
poss´
ıveis resultados:
– γ = S , s significando que a execu¸˜o de S n˜o
ca a
est´ completa e S , s ´ uma configura¸˜o
a e ca
intermedi´ria;
a
– γ = s significando que a execu¸ao de S terminou
c˜
e o estado final ´ s ;
e
• Se diz que S, s emperrou se n˜o existe γ tal que
a
S, s ⇒ γ.
73. 8 ˆ
SEMANTICA OPERACIONAL 73
[assSOS ] x:=a, s ⇒ s[x → A[[a]]s]
[skipSOS ] skip, s ⇒ s
S1 ,s ⇒ S1 ,s
[comp1 ]
SOS S1 ;S2 ,s ⇒ S1 ;S2 ,s
S1 ,s ⇒s
[comp2 ]
SOS S1 ;S2 ,s ⇒ S2 ,s
[if tt ]
SOS if b then S1 else S2 , s ⇒ S1 , s
Se B[[b]]s = tt
[if ff ]
SOS if b then S1 else S2 , s ⇒ S2 , s
Se B[[b]]s = ff
[whileSOS ] while b do S, s ⇒
if b then (S; while b do S) else skip, s
74. 8 ˆ
SEMANTICA OPERACIONAL 74
Uma seq¨ˆncia de deriva¸˜o de um comando S iniciando
ue ca
no estado s ´:
e
• uma seq¨ˆncia finita
ue
γ0 , γ 1 , γ 2 , . . . , γ k
de configura¸oes satisfazendo γ0 = S, s , γi ⇒ γi+1
c˜
para 0 ≤ i k, e k ≥ 0, e ou γk ´ uma configura¸˜o
e ca
terminal ou ´ uma configura¸˜o emperrada; ou
e ca
• uma seq¨ˆncia infinita
ue
γ0 , γ 1 , γ 2 , . . .
de configura¸oes satisfazendo γ0 = S, s e γi ⇒ γi+1
c˜
para i ≥ 0.
75. 8 ˆ
SEMANTICA OPERACIONAL 75
Nota¸ao: Usamos γ0 ⇒i γi para indicar i passos na
c˜
seq¨ˆncia. Usamos γ0 ⇒∗ γi para indicar um n´mero
ue u
finito de passos.
77. 8 ˆ
SEMANTICA OPERACIONAL 77
Cada passo da deriva¸˜o corresponde a uma ´rvore de
ca a
deriva¸˜o. Assim, para o primeiro passo ter´
ca ıamos:
z:=x,s0 ⇒s0 [z→5]
z:=x;x:=y,s0 ⇒ x:=y,s0 [z→5]
(z:=x; x:=y); y:=z, s0 ⇒ x:=y; y:=z, s0 [z → 5]
78. 8 ˆ
SEMANTICA OPERACIONAL 78
ex: Seja s x = 3 e
y:=1; while ¬(x = 1) do (y:=y∗x; x:=x−1). O primeiro
passo ´:
e
y:=1; while ¬(x = 1) do (y:=y∗x; x:=x−1), s ⇒
while ¬(x = 1) do (y:=y∗x; x:=x−1), s[y → 1]
79. 8 ˆ
SEMANTICA OPERACIONAL 79
´
Arvore:
y:=1, s ⇒ s[y → 1]
y:=1; while ¬(x = 1) do (y:=y∗x; x:=x−1), s ⇒
while ¬(x = 1) do (y:=y∗x; x:=x−1), s[y → 1]
Observa¸˜o: usa-se [assSOS ] e [comp2 ].
ca SOS
80. 8 ˆ
SEMANTICA OPERACIONAL 80
Reescrevendo o la¸o como um condicional:
c
if ¬(x = 1) then ((y:=y∗x; x:=x−1); while
¬(x = 1) do (y:=y∗x; x:=x−1)) else skip, s[y → 1]
81. 8 ˆ
SEMANTICA OPERACIONAL 81
Segundo [if tt ], o passo seguinte resultar´ em:
SOS a
(y:=y∗x; x:=x−1);
while ¬(x = 1) do (y:=y∗x; x:=x−1), s[y → 1]
82. 8 ˆ
SEMANTICA OPERACIONAL 82
Usando-se [assSOS ], [comp2 ] e [comp1 ], obtem-se a
SOS SOS
transi¸ao:
c˜
(y:=y∗x; x:=x−1);
while ¬(x = 1) do (y:=y∗x; x:=x−1), s[y → 1] ⇒
x:=x−1; while ¬(x = 1) do (y:=y∗x; x:=x−1), s[y → 3]
83. 8 ˆ
SEMANTICA OPERACIONAL 83
´
Arvore:
y:=y∗x,s[y→1] ⇒s[y→3]
y:=y∗x;x:=x−1,s[y→1] ⇒ x:=x−1,s[y→3]
(y:=y∗x; x:=x−1);
while ¬(x = 1) do (y:=y∗x; x:=x−1), s[y → 1] ⇒
x:=x−1;
while ¬(x = 1) do (y:=y∗x; x:=x−1), s[y → 3]
84. 8 ˆ
SEMANTICA OPERACIONAL 84
Usando [assSOS ] e [comp2 ] obtemos a pr´xima
SOS o
configura¸ao:
c˜
while ¬(x = 1) do (y:=y∗x; x:=x−1), s[y → 3][x → 2]
Continuando, chegaremos ao estado final s[y → 6][x → 1].
85. 8 ˆ
SEMANTICA OPERACIONAL 85
Exerc´ıcio: Seja s = [x → 17, y → 5]. Construa a
seq¨ˆncia de deriva¸ao do comando:
ue c˜
z:=0; while y ≤ x do (z:=z+1; x:=x−y)
86. 8 ˆ
SEMANTICA OPERACIONAL 86
Importante observar que a linguagem exemplo While n˜o
a
possui configura¸˜es emperradas.
co
A execu¸ao de um comando S no estado s:
c˜
• termina se e somente se existe uma seq¨ˆncia de
ue
deriva¸ao finita come¸ando com S, s ;
c˜ c
• entra em loop se e somente se existe uma seq¨ˆncia
ue
de deriva¸˜o infinita come¸ando com S, s .
ca c
Dizemos que s execu¸ao de S em s termina com sucesso
c˜
se S, s ⇒∗ s , para algum estado s . Na linguagem
exemplo While a execu¸ao termina com sucesso se e
c˜
somente se termina pois n˜o existem configura¸˜es
a co
emperradas.
87. 8 ˆ
SEMANTICA OPERACIONAL 87
8.2.1 Propriedades da Semˆntica
a
Lema 1 Se S1 ; S2 , s ⇒k s , ent˜o existe um estado s e
a
n´meros naturais k1 e k2 tal que S1 , s ⇒k1 s e
u
S2 , s ⇒k2 s , onde k = k1 + k2 .
Prova: (por indu¸˜o sobre o tamanho da seq¨ˆncia de
ca ue
deriva¸˜o)
ca
Base: k = 0 (por vacuidade)
Passo: Assumimos como hip´tese que o enunciado vale
o
para todo k ≤ k0 . Assumimos S1 ; S2 , s ⇒k0 +1 s ou
S1 ; S2 , s ⇒ γ ⇒k0 s para alguma configura¸˜o γ.
ca
88. 8 ˆ
SEMANTICA OPERACIONAL 88
O primeiro passo pode ser resultado de [comp1 ] ou
SOS
[comp2 ]:
SOS
1. [comp1 ] e γ = S1 ; S2 , s , ou seja
SOS
S1 ; S2 , s ⇒ S1 ; S2 , s
Logo, S1 , s ⇒ S1 , s e S1 ; S2 , s ⇒k0 s .
Esta segunda seq¨ˆncia satisfaz a hip´tese indutiva.
ue o
Assim, existe um estado s0 e n´meros k1 e k2 tal que
u
S1 , s ⇒k1 s0 e S2 , s0 ⇒k2 s
onde k1 + k2 = k0 . Logo, S1 , s ⇒k1 +1 s0 e
S2 , s0 ⇒k2 s , e como (k1 + 1) + k2 = k0 + 1, est´
a
provado o resultado;
89. 8 ˆ
SEMANTICA OPERACIONAL 89
2. [comp2 ] e γ = s . Assim, S1 , s ⇒ s e
SOS
S2 , s ⇒k0 s . O resultado fica provado fazendo-se
k1 = 1 e k2 = k0 .
90. 8 ˆ
SEMANTICA OPERACIONAL 90
Exerc´ ıcio: Prove que se S1 , s ⇒k s ent˜o a
S1 ; S2 , s ⇒k S2 , s , isto ´, a execu¸˜o de S1 n˜o ´
e ca a e
influenciada pelo comando que o segue.
91. 8 ˆ
SEMANTICA OPERACIONAL 91
Teorema 3 A semˆntica operacional estruturada ´
a e
determin´
ıstica.
92. 8 ˆ
SEMANTICA OPERACIONAL 92
8.2.2 Fun¸˜o Semˆntica
ca a
SSOS : Smt → (State → State) ,
dado por:
s Se S, s ⇒∗ s
SSOS [[S]]s =
undef caso contr´rio
a
93. 8 ˆ
SEMANTICA OPERACIONAL 93
8.3 Um Resultado de Equivalˆncia
e
Teorema 4 Para todo comando S da linguagem exemplo
While n´s temos Sns [[S]] = SSOS [[S]].
o
Este teorema expressa duas propriedades:
1. Se a execu¸˜o de S, come¸ando em algum estado,
ca c
termina em uma semˆntica, ent˜o ela tamb´m
a a e
termina na outra, e os estados resultantes s˜o iguais;
a
2. Se a execu¸˜o de S, para algum estado, entra em
ca
loop em uma semˆntica ent˜o tamb´m entra em loop
a a e
na outra.
94. 9 ˆ
SEMANTICA DENOTACIONAL 94
9 Semˆntica Denotacional
a
Semˆntica Operacional Como ocorre a execu¸˜o do
a ca
comando;
Semˆntica Denotacional O efeito da execu¸ao do
a c˜
comando.
95. 9 ˆ
SEMANTICA DENOTACIONAL 95
• Na abordagem denotacional cada constru¸ao sint´tica
c˜ a
´ mapeada, por uma fun¸˜o semˆntica, para um
e ca a
objeto matem´tico (de um modo geral uma fun¸ao);
a c˜
• Exemplos de fun¸oes semˆnticas denotacionais: A
c˜ a
(mapeia express˜es aritm´ticas para fun¸oes em
o e c˜
State → Z) e B (mapeia express˜es booleanas para
o
fun¸˜es em State → T);
co
96. 9 ˆ
SEMANTICA DENOTACIONAL 96
• Fun¸oes Sns e SSOS s˜o exemplos de fun¸˜es
c˜ a co
semˆnticas que mapeiam comandos em fun¸oes em
a c˜
State → State, no entanto, elas n˜o s˜o exemplos
a a
de fun¸oes denotacionais porque elas n˜o s˜o
c˜ a a
definidas de forma composicional ;
• Na semˆntica denotacional, estruturas de la¸o de
a c
repeti¸˜o s˜o interpretadas usando-se pontos fixos:
ca a
– pontos fixos s˜o ra´ de uma equa¸˜o funcional ;
a ızes ca
– um funcional ´ uma fun¸˜o que mapeia uma fun¸ao
e ca c˜
em outra fun¸˜o.
ca
97. 9 ˆ
SEMANTICA DENOTACIONAL 97
9.1 Composicionalidade
Significa expressar uma propriedade de uma estrutura em
fun¸ao da composi¸ao das propriedades de suas
c˜ c˜
sub-estruturas.
ex: A[[a1 + a2 ]]s = A[[a1 ]]s+A[[a2 ]]s
98. 9 ˆ
SEMANTICA DENOTACIONAL 98
9.2 Ponto Fixo
Um funcional mapeia uma fun¸˜o em outra fun¸ao.
ca c˜
Seja F um funcional, ent˜o:
a
F g1 = g2
F g0 = g0 (ponto fixo)
F k g0 = g0
ex: F g = se x = 0 ent˜o 1 caso contr´rio x∗g(x − 1),
a a
e o ponto fixo de F ´ a fun¸˜o fatorial. Ou seja,
e ca
F g0 = g0 e g0 ´ a fun¸ao fatorial.
e c˜
Observa¸˜o: usamos uma linguagem de programa¸˜o
ca ca
funcional hipot´tica neste exemplo.
e
99. 9 ˆ
SEMANTICA DENOTACIONAL 99
Seja g1 (x) = x2 . Ent˜o:
a
F g1 = se x = 0 ent˜o 1 caso contr´rio x ∗ (x − 1)2 = g2
a a
e g1 = g2 .
Seja g0 (x) = x!. Ent˜o:
a
F g0 = se x = 0 ent˜o 1 caso contr´rio x ∗ ((x − 1)!) =
a a
se x = 0 ent˜o 1 caso contr´rio x! = x! = g0
a a
100. 9 ˆ
SEMANTICA DENOTACIONAL 100
9.3 Defini¸˜o
ca
Sds [[x:=a]]s = s[x → A[[a]]s]
Sds [[skip]] = id
Sds [[S1 ; S2 ]] = Sds [[S2 ]] ◦ Sds [[S1 ]]
Sds [[if b then S1 else S2 ]] = cond(B[[b]], Sds [[S1 ]], Sds [[S2 ]])
Sds [[while b do S]] = FIX F
Onde F g = cond(B[[b]], g ◦ Sds [[S]], id).
101. 9 ˆ
SEMANTICA DENOTACIONAL 101
Explica¸ao:
c˜
Sds [[x:=a]]s = s[x → A[[a]]s]
Observa¸˜o: corresponde a [assns ] e [assSOS ].
ca
Sds [[skip]] = id
Observa¸˜o: id ´ a fun¸˜o identidade.
ca e ca
102. 9 ˆ
SEMANTICA DENOTACIONAL 102
Sds [[S1 ; S2 ]] = Sds [[S2 ]] ◦ Sds [[S1 ]]
Observa¸˜o: isto significa que o efeito da execu¸ao de
ca c˜
S1 ; S2 ´ a composi¸ao funcional do efeito da execu¸ao de
e c˜ c˜
S1 com o efeito da execu¸˜o de S2 .
ca
103. 9 ˆ
SEMANTICA DENOTACIONAL 103
Sds [[S1 ; S2 ]]s = (Sds [[S2 ]] ◦ Sds [[S1 ]])s =
s
se existe s tal que
Sds [[S1 ]]s = s e Sds [[S2 ]]s = s
undef se Sds [[S1 ]]s = undef ou
=
se existe s tal que
Sds [[S1 ]]s = s e
Sds [[S2 ]]s = undef
104. 9 ˆ
SEMANTICA DENOTACIONAL 104
Sds [[if b then S1 else S2 ]] = cond(B[[b]], Sds [[S1 ]], Sds [[S2 ]])
Observa¸˜o: a fun¸˜o auxiliar cond tem funcionalidade
ca ca
cond : (State → T) × (State → State) ×
(State → State) → (State → State)
e ´ definida por:
e
g s se p s = tt
1
cond(p, g1 , g2 )s =
g2 s se p s = ff
105. 9 ˆ
SEMANTICA DENOTACIONAL 105
Sds [[if b then S1 else S2 ]]s =
= cond(B[[b]], Sds [[S1 ]], Sds [[S2 ]])s
s
se B[[b]]s = tt e Sds [[S1 ]]s = s ou
se B[[b]]s = ff e Sds [[S2 ]]s = s
=
undef se B[[b]]s = tt e Sds [[S1 ]]s = undef ou
se B[[b]]s = ff e Sds [[S2 ]]s = undef
106. 9 ˆ
SEMANTICA DENOTACIONAL 106
Sds [[while b do S]] = FIX F
Observe que:
while b do S = if b then (S; while b do S) else skip
e aplicando a defini¸ao de Sds ao lado direito resulta em:
c˜
Sds [[while b do S]] =
= cond(B[[b]], Sds [[while b do S]] ◦ Sds [[S]], id)
107. 9 ˆ
SEMANTICA DENOTACIONAL 107
• N˜o podemos usar esta ultima express˜o, pois ela
a ´ a
n˜o est´ definida de forma composicional ;
a a
• No entanto, isto expressa que Sds [[while b do S]] ´ o
e
ponto fixo do funcional definido por:
F g = cond(B[[b]], g ◦ Sds [[S]], id)
ou seja,
Sds [[while b do S]] = F (Sds [[while b do S]])
• Agora, esta nova defini¸ao respeita a
c˜
composicionalidade.
108. 9 ˆ
SEMANTICA DENOTACIONAL 108
Sds [[while b do S]] = FIX F
e a funcionalidade da fun¸˜o auxiliar FIX ´
ca e
FIX : ((State → State) → (State → State)) →
(State → State)
109. 9 ˆ
SEMANTICA DENOTACIONAL 109
ex: Seja o seguinte comando:
while ¬(x = 0) do skip
O funcional correspondente ´:
e
g s se s x = 0
(F g)s =
s se s x = 0
110. 9 ˆ
SEMANTICA DENOTACIONAL 110
Determina¸ao do funcional:
c˜
Sds [[while ¬(x = 0) do skip]]s = (FIX F )s
(F g)s = cond(B[[¬(x = 0)]], g ◦ Sds [[skip]], id)s
g ◦ S [[skip]]s se B[[¬(x = 0)]]s = tt
ds
=
id s se B[[¬(x = 0)]]s = ff
g s se s x = 0
=
s se s x = 0
Observa¸˜o: g ◦ Sds [[skip]]s = g ◦ id s = g s, pois
ca
g ◦ id = g.
111. 9 ˆ
SEMANTICA DENOTACIONAL 111
A fun¸ao g1 definida como:
c˜
undef se s x = 0
g1 s =
s se s x = 0
´ ponto fixo de F porque
e
g s se s x=0
1
(F g1 )s =
s se s x=0
undef se sx=0
=
s se sx=0
= g1 s
112. 9 ˆ
SEMANTICA DENOTACIONAL 112
J´, por sua vez, g2 , definida como:
a
g2 s = undef para todo s
n˜o ´ ponto fixo de F porque se s x = 0 ent˜o
a e a
(F g2 )s = s , enquanto que g2 s = undef.
113. 9 ˆ
SEMANTICA DENOTACIONAL 113
• Existem funcionais com mais de um ponto fixo. Um
exemplo ´ F , j´ que qualquer fun¸˜o g de
e a ca
State → State satisfazendo g s = s se s x = 0 ´
e
ponto fixo de F ;
• Existem tamb´m funcionais que n˜o tem ponto fixo.
e a
Considere F1 definido como:
g se g = g2
1
F1 g =
g2 caso contr´rio
a
Se g1 = g2 ent˜o n˜o existe fun¸ao g0 tal que
a a c˜
F1 g0 = g0 .
114. 9 ˆ
SEMANTICA DENOTACIONAL 114
Exerc´
ıcio: Determine o funcional F associado ao
comando:
while ¬(x = 0) do x:=x − 1
115. 9 ˆ
SEMANTICA DENOTACIONAL 115
Solu¸ao:
c˜
Sds [[while ¬(x = 0) do x:=x − 1]]s = (FIX F )s
(F g)s = cond(B[[¬(x = 0)]], g ◦ Sds [[x:=x − 1]], id)s
g ◦ S [[x:=x − 1]]s se B[[¬(x = 0)]]s = tt
ds
=
id s se B[[¬(x = 0)]]s = ff
g s[x → s x − 1] se s x = 0
=
s se s x = 0
116. 9 ˆ
SEMANTICA DENOTACIONAL 116
Exerc´
ıcio: Considere as seguintes fun¸˜es parciais:
co
1. g1 s = undef para todo s
2.
s[x → 0] se s x ≥ 0
g2 s =
undef se s x 0
3.
s[x → 0] se s x ≥ 0
g3 s =
s se s x 0
4. g4 s = s[x → 0] para todo s
5. g5 s = s para todo s
Determine quais s˜o pontos fixos de F .
a
117. 9 ˆ
SEMANTICA DENOTACIONAL 117
Exerc´
ıcio: Considere o seguinte fragmento de programa:
while ¬(x = 1) do (y:=y∗x; x:=x − 1)
Determine o funcional F associado ao programa.
Determine tamb´m ao menos dois pontos fixos de F .
e
118. 9 ˆ
SEMANTICA DENOTACIONAL 118
9.4 Requisitos sobre o Ponto Fixo
Perante o problema de haver mais de um ponto fixo, ou
de n˜o existir nenhum, se faz necess´rio:
a a
• Definir os requisitos de um ponto fixo e mostrar que
ao menos um ponto fixo preenche estes requisitos;
• Mostrar que todos os funcionais obtidos da linguagem
While tem um ponto fixo que satisfaz estes requisitos.
119. 9 ˆ
SEMANTICA DENOTACIONAL 119
Seja o comando while b do S. Quanto a termina¸ao,
c˜
existem trˆs possibilidades:
e
1. Ele termina;
2. Ele entra em loop localmente, ou seja, S entra em
loop;
3. Ele entra em loop globalmente, ou seja, a estrutura
while entra em loop.
120. 9 ˆ
SEMANTICA DENOTACIONAL 120
1. Caso em que o la¸o termina: Assim, existe uma
c
seq¨ˆncia de estados s0 , s1 , . . . , sn tal que
ue
tt se i n
B[[b]]si =
ff se i = n
e
Sds [[S]]si = si+1 para i n
121. 9 ˆ
SEMANTICA DENOTACIONAL 121
Seja g0 um ponto fixo de F . Logo, no caso i n
temos:
g0 si = (F g0 )si
= cond(B[[b]], g0 ◦ Sds [[S]], id)si
= g0 (Sds [[S]]si )
= g0 si+1
No caso i = n, temos:
g0 sn = (F g0 )sn
= cond(B[[b]], g0 ◦ Sds [[S]], id)sn
= id sn
= sn
122. 9 ˆ
SEMANTICA DENOTACIONAL 122
Conclui-se que todos os pontos fixos satisfazem
g0 s0 = sn , n˜o sendo poss´ tirar daqui nenhum
a ıvel
requisito.
123. 9 ˆ
SEMANTICA DENOTACIONAL 123
2. Caso em que o la¸o entra em loop localmente, ou
c
seja, S entra em loop: Existe uma seq¨ˆncia de
ue
estados s0 , s1 , . . . , sn tal que
B[[b]]si = tt para i ≤ n
e
s para i n
i+1
Sds [[S]]si =
undef para i = n
124. 9 ˆ
SEMANTICA DENOTACIONAL 124
Seja g0 um ponto fixo do funcional F . No caso i n
obtemos:
g0 si = g0 si+1
e no caso i = n obtemos:
g0 sn = (F g0 )sn
= cond(B[[b]], g0 ◦ Sds [[S]], id)sn
= (g0 ◦ Sds [[S]])sn
= undef
E novamente n˜o se obtem nenhum requisito.
a
125. 9 ˆ
SEMANTICA DENOTACIONAL 125
3. Caso em que o la¸o entra em loop globalmente, ou
c
seja, a estrutura while entra em loop: Existe um
seq¨ˆncia infinita de estados s0 , s1 , s2 , . . . tal que
ue
B[[b]]si = tt para todo i
e
Sds [[S]]si = si+1 para todo i
Seja g0 um ponto fixo de F , ent˜o
a
g0 si = g0 si+1
para todo i ≥ 0. E temos g0 s0 = g0 si para todo i.
Esta ´ a situa¸ao em que podemos ter v´rios pontos
e c˜ a
fixos diferentes.
126. 9 ˆ
SEMANTICA DENOTACIONAL 126
ex:
S = while ¬(x = 0) do skip
cujo funcional ´
e
g s se s x = 0
(F g)s =
s se s x = 0
Sabemos que qualquer fun¸ao g de State → State
c˜
satisfazendo g s = s se s x = 0 ´ ponto fixo de F . No
e
entanto, nossa experiˆncia computacional nos diz que
e
undef se s x = 0
0
Sds [[S]]s0 =
s0 se s0 x = 0
de forma a representar o comportamento do loop.
127. 9 ˆ
SEMANTICA DENOTACIONAL 127
Assim, nosso ponto fixo preferencial ´
e
undef se s x = 0
g0 s =
s se s x = 0
A propriedade distintiva deste ponto fixo ´ que para
e
qualquer outro ponto fixo g de F , se g0 s = s ent˜o
a
g s = s , mas n˜o o contr´rio.
a a
128. 9 ˆ
SEMANTICA DENOTACIONAL 128
Generalizando para qualquer funcional F : O ponto
fixo desejado deve ser alguma fun¸ao parcial
c˜
g0 : State → State tal que:
• g0 ´ um ponto fixo de F ;
e
• se g ´ outro ponto fixo de F , ent˜o g0 s = s
e a
implica g s = s , para todos os s e s .
129. 9 ˆ
SEMANTICA DENOTACIONAL 129
9.5 Teoria de Pontos Fixos
• Desenvolver uma teoria que permita tratar com
funcionais e pontos fixos;
• Garantir a existˆncia do ponto fixo preferencial.
e
130. 9 ˆ
SEMANTICA DENOTACIONAL 130
Seja a ordem sobre as fun¸oes parciais State → State:
c˜
g1 g2
quando a fun¸˜o parcial g1 compartilha seus resultados
ca
com a fun¸˜o parcial g2 , ou seja, se g1 s = s ent˜o
ca a
g2 s = s , para todo s e s .
g1 g2 significa que em todos os pontos em que g1 ´ e
definido, g2 tamb´m o ´, e os seus valores s˜o iguais, mas
e e a
o inverso n˜o ´ exigido. g1 g2 pode ser lido como g1 ´
a e e
menos ou igualmente definido que g2 ou g1 aproxima g2 .
131. 9 ˆ
SEMANTICA DENOTACIONAL 131
g
1
1 a
2 b
3 c
g
2
1 a
2 b
3 c
132. 9 ˆ
SEMANTICA DENOTACIONAL 132
ex:
g1 s = s para todo s
s se s x ≥ 0
g2 s =
undef caso contr´rio
a
s se s x = 0
g3 s =
undef caso contr´rio
a
s se s x ≤ 0
g4 s =
undef caso contr´rio
a
134. 9 ˆ
SEMANTICA DENOTACIONAL 134
Diagrama de Hasse:
g1 e
} ee
}} ee
}}} ee
}} e
g2 e g4
ee }
ee }}}
ee }}
e }}
g3
135. 9 ˆ
SEMANTICA DENOTACIONAL 135
Exerc´
ıcio: Sejam g1 , g2 e g3 , como a seguir definidos:
s se s x ´ par
e
g1 s =
undef caso contr´rio a
s se s x ´ um primo
e
g2 s =
undef caso contr´rio
a
g3 s = s
1. Determine a ordem entre estas fun¸˜es;
co
2. Determine uma fun¸˜o parcial g4 tal que g4
ca g1 ,
g4 g2 e g4 g3 ;
3. Determine uma fun¸˜o parcial g5 tal que g1 g5 ,
ca
g2 g5 e g5 g3 , e g5 n˜o ´ igual a g1 , g2 nem a g3 .
a e
136. 9 ˆ
SEMANTICA DENOTACIONAL 136
Uma caracteriza¸ao alternativa da ordem
c˜ em
State → State ´e
g1 g2 se e somente se graph(g1 ) ⊆ graph(g2 )
onde graph(f ) = { x, y ∈ X × Y |f (x) = y} e
f :X →Y.
137. 9 ˆ
SEMANTICA DENOTACIONAL 137
O conjunto State → State munido da ordem ´ um e
exemplo de um conjunto parcialmente ordenado.
Seja D um conjunto e d, d1 , d2 , d3 ∈ D. Um conjunto
parcialmente ordenado ´ um par (D, D ), onde D ´
e e
uma rela¸ao em D satisfazendo:
c˜
1. d D d (reflexividade);
2. d1 D d2 e d2 D d3 implica d1 D d3
(transitividade);
3. d1 D d2 e d2 D d1 implica d1 = d2 (anti-simetria).
138. 9 ˆ
SEMANTICA DENOTACIONAL 138
Um elemento d ∈ D satisfazendo d d para todo d ∈ D
´ chamado de elemento m´nimo de D. Podemos dizer que
e ı
ele n˜o cont´m informa¸˜o.
a e ca
139. 9 ˆ
SEMANTICA DENOTACIONAL 139
Teorema 5 Se um conjunto parcialmente ordenado
(D, D ) tem um elemento m´nimo d, ent˜o d ´ unico.
ı a e´
Prova: Assuma que D tem dois elementos m´nimos d1 e
ı
d2 . Desde que d1 ´ elemento m´nimo, d1 d2 . Como d2
e ı
tamb´m ´ elemento m´nimo, d2 d1 . Pela propriedade
e e ı
da anti-simetria de obtemos d1 = d2 .
140. 9 ˆ
SEMANTICA DENOTACIONAL 140
1 aa
ÑÑ aa
ÑÑ aa
ÑÑÑ a
2 aa 3 aa
aa ÑÑÑ aa
aa ÑÑ aa
a ÑÑ a
4 5
141. 9 ˆ
SEMANTICA DENOTACIONAL 141
ex: Seja S um conjunto n˜o vazio e defina:
a
P(S) = {K|K ⊆ S}
chamado conjunto das partes.
Ent˜o (P(S), ⊆) ´ um conjunto parcialmente ordenado
a e
porque
• ⊆ ´ reflexiva: K ⊆ K;
e
• ⊆ ´ transitiva: se K1 ⊆ K2 e K2 ⊆ K3 ent˜o
e a
K1 ⊆ K3 ;
• ⊆ ´ anti-sim´trica: se K1 ⊆ K2 e K2 ⊆ K1 ent˜o
e e a
K1 = K2 .
142. 9 ˆ
SEMANTICA DENOTACIONAL 142
No caso em que S = {a, b, c},
P(S) = {∅, {a}, {b}, {c}, {a, b}, {a, c}, {b, c}, {a, b, c}}, e
temos:
{a, b, c}
t tt
tt tt
t tt
ttt tt
tt t
{a, b} {a, c} {b, c}
tt tt
tt ttt tt ttt
tt
tt
ttt t
tt t tt t
t
tt ttt
tt ttt t
{a} t {b} {c}
tt t
tt ttt
tt
tt ttt
tt tt
tt
∅
(P(S), ⊆) tem um elemento m´
ınimo, ∅.
143. 9 ˆ
SEMANTICA DENOTACIONAL 143
Exerc´ıcio: Mostre que (P(S), ⊇) ´ um conjunto
e
parcialmente ordenado e determine o elemento m´ınimo.
Desenhe o diagrama de Hasse no caso em que
S = {a, b, c}.
144. 9 ˆ
SEMANTICA DENOTACIONAL 144
Lema 2 (State → State, ) ´ um conjunto
e
parcialmente ordenado. A fun¸˜o parcial
ca
⊥ : State → State definida como
⊥ s = undef para todo s
´ o elemento m´nimo de State → State.
e ı
145. 9 ˆ
SEMANTICA DENOTACIONAL 145
Prova: Primeiro provamos que ´ ordem parcial:
e
Reflexiva Trivialmente g g, porque g s = s implica
g s=s;
Transitiva Assumimos g1 g2 e g2 g3 . Assumimos
g1 s = s e de g1 g2 concluimos g2 s = s , e ent˜o
a
g2 g3 fornece g3 s = s ;
Anti-sim´trica Assumimos g1 g2 e g2 g1 .
e
Assumimos que g1 s = s . Ent˜o, g2 s = s segue de
a
g1 g2 , e neste caso ambas as fun¸˜es d˜o valores
co a
iguais. No caso em que g1 s = undef, ´ necess´rio
e a
que g2 s = undef, j´ que caso contr´rio, g2 s = s e
a a
de g2 g1 obteriamos g1 s = s , que ´ uma
e
contradi¸˜o.
ca
146. 9 ˆ
SEMANTICA DENOTACIONAL 146
Finalmente, temos que provar que ⊥ ´ o elemento
e
ı ´ a
m´nimo de State → State. E f´cil ver que ⊥ ´ um
e
elemento de State → State e trivialmente ⊥ g vale
para todos g, dado que ⊥ s = s implica g s = s por
vacuidade.
147. 9 ˆ
SEMANTICA DENOTACIONAL 147
Formalizando os requisitos de FIX F :
• FIX F ´ ponto fixo de F , isto ´, F (FIX F ) = FIX F ;
e e
• FIX F ´ o menor ponto fixo de F , isto ´, se F g = g
e e
ent˜o FIX F g.
a
148. 9 ˆ
SEMANTICA DENOTACIONAL 148
Exerc´
ıcio: Mostre que se F tem um menor ponto fixo g0
ent˜o g0 ´ unico.
a e´
Exerc´ıcio: Determine o menor ponto fixo dos funcionais
associados aos programas:
1. while ¬(x = 0) do x:=x − 1
2. while ¬(x = 1) do (y:=y ∗ x; x:=x − 1)
149. 9 ˆ
SEMANTICA DENOTACIONAL 149
• Seja (D, ), e assumimos um subconjunto Y ⊆ D;
• Existe um elemento de D que resume toda a
informa¸˜o de Y ;
ca
• Um elemento d ´ chamado de limite superior de Y se:
e
∀d ∈ Y d d
• Um limite superior d de Y ´ um menor limite
e
superior (ou supremo) se e somente se
d ´ limite superior de Y implica que d
e d
• O supremo de Y tem pouca informa¸ao a mais que a
c˜
presente nos elementos de Y .
150. 9 ˆ
SEMANTICA DENOTACIONAL 150
Exerc´ıcio: Mostre que se Y tem um supremo, ent˜o ele ´
a e
unico.
´
151. 9 ˆ
SEMANTICA DENOTACIONAL 151
Nota¸ao: o (´nico) supremo de Y ´ denotado por
c˜ u e Y.
152. 9 ˆ
SEMANTICA DENOTACIONAL 152
Um subconjunto Y ´ chamado de cadeia se ele ´
e e
consistente no sentido que quaisquer dois elementos de Y
compartilham informa¸ao um com o outro, ou seja,
c˜
∀d1 , d2 ∈ Y d1 d2 ∨ d2 d1
153. 9 ˆ
SEMANTICA DENOTACIONAL 153
ex: Considere o conjunto parcialmente ordenado
(P({a, b, c}), ⊆). Ent˜o, o subconjunto
a
Y0 = {∅, {a}, {a, c}}
´ uma cadeia. Neste caso, {a, b, c} e {a, c} s˜o limites
e a
superiores de Y0 e {a, c} ´ o supremo.
e
contra-ex: O subconjunto {∅, {a}, {c}, {a, c}} n˜o ´ uma
a e
cadeia. Por que?
154. 9 ˆ
SEMANTICA DENOTACIONAL 154
ex: Seja gn : State → State definido como:
undef
se s x n
gn s = s[x → −1] se 0 ≤ s x e s x ≤ n
s se s x 0
e gn gm se n ≤ m.
Seja Y0 = {gn |n ≥ 0}. Y0 ´ uma cadeia porque gn
e gm se
n ≤ m. A fun¸ao parcial
c˜
s[x → −1] se 0 ≤ s x
gs=
s se s x 0
´ o supremo de Y0 .
e
155. 9 ˆ
SEMANTICA DENOTACIONAL 155
Exerc´
ıcio: Seja gn a fun¸ao parcial definida por:
c˜
s[y → (s x)!][x → 1] se 0 s x e s x ≤ n
gn s =
undef se s x ≤ 0 ou s x n
Definimos Y0 = {gn |n ≥ 0}. Mostre que Y0 ´ uma cadeia.
e
Caracterize os limites superiores de Y0 e determine o
supremo.
156. 9 ˆ
SEMANTICA DENOTACIONAL 156
Um conjunto parcialmente ordenado (D, ) ´ chamado
e
de cadeia completa parcialmente ordenada (ccpo) se Y
existe para todas as cadeias Y de D. Ele ´ um reticulado
e
completo se Y existe para todos os subconjuntos Y de
D.
157. 9 ˆ
SEMANTICA DENOTACIONAL 157
Exerc´
ıcio: Mostre que (P(S), ⊆) ´ um reticulado
e
completo e um ccpo para todos os conjuntos n˜o vazios S.
a
158. 9 ˆ
SEMANTICA DENOTACIONAL 158
Contra-exemplo de ccpo: Seja
Pfin (S) = {K ⊆ S|K ´ finito}. Considere (Pfin (N), ⊆).
e
Ent˜o
a
Y = {{0}, {0, 1}, {0, 1, 2}, . . . , {0, 1, 2, . . . , n}, . . .}
´ cadeia. A uni˜o cont´vel dos elementos Ai da cadeia ´
e a a e
∞
Ai = N ,
i=1
por´m ele n˜o pode ser o supremo da cadeia pois n˜o
e a a
pertence a ela.
159. 9 ˆ
SEMANTICA DENOTACIONAL 159
Teorema 6 Se (D, ) ´ um ccpo ent˜o existe um
e a
elemento m´nimo ⊥ dado por ⊥ = ∅.
ı
Prova:
1. ∅ ´ uma cadeia pois ∀d1 , d2 ∈ ∅ d1
e d2 ∨ d2 d1
(por vacuidade);
2. Como (D, ) ´ uma ccpo ent˜o existe
e a ∅ pois ∅ ⊆ D
´ cadeia de D;
e
3. ∅ d, d ∈ D, ent˜o
a ∅ ´ elemento m´
e ınimo de D.
160. 9 ˆ
SEMANTICA DENOTACIONAL 160
Lema 3 (State → State, ) ´ um ccpo. O supremo
e
Y da cadeia Y de State → State ´ dado por:
e
graph( Y)= {graph(g)|g ∈ Y }
isto ´, ( Y ) s = s se e somente se g s = s para algum
e
g ∈Y.
Observa¸˜es:
co
• graph(f ) = { x, y ∈ X × Y |f (x) = y} e
f :X →Y;
• State → State n˜o ´ um reticulado, mas ´ um ccpo
a e e
e suas cadeias possuem supremo.
161. 9 ˆ
SEMANTICA DENOTACIONAL 161
Sejam (D, ) e (D , ) duas ccpo’s e considere a fun¸ao
c˜
(total) f : D → D . f ´ monotˆnica se e somente se
e o
d1 d2 implica f (d1 ) f (d2 )
para todos os d1 e d2 .
162. 9 ˆ
SEMANTICA DENOTACIONAL 162
Exerc´ıcio: Considere o ccpo (P(N), ⊆). Determine quais
das seguintes fun¸˜es em P(N) → P(N) s˜o
co a
monotˆnicas:
o
• f1 (X) = NX
• f2 (X) = X {27}
• f3 (X) = X {7, 9, 13}
• f4 (X) = {n ∈ X|n ´ primo}
e
• f5 (X) = {2∗n|n ∈ X}
163. 9 ˆ
SEMANTICA DENOTACIONAL 163
Exerc´
ıcio: Determine quais dos seguintes funcionais em
(State → State) → (State → State) s˜o monotˆnicos:
a o
• F0 g = g
g se g = g2
1
• F1 g = onde g1 = g2
g2 caso contr´rio
a
g s se s x = 0
• (F g) s =
s se s x = 0
164. 9 ˆ
SEMANTICA DENOTACIONAL 164
Teorema 7 Sejam (D, ), (D , ) e (D , ) trˆs e
ccpo’s e sejam f : D → D e f : D → D duas fun¸˜es
co
monotˆnicas. Ent˜o, f ◦ f : D → D ´ uma fun¸˜o
o a e ca
monotˆnica.
o
Prova: Assumimos que d1 d2 . A monotonicidade de f
resulta em f (d1 ) f (d2 ). A monotonicidade de f
resulta em f (f (d1 )) f (f (d2 )), como queriamos
provar.
Observa¸˜o: Isto significa que a opera¸˜o de composi¸ao
ca ca c˜
de fun¸oes preserva a monotonicidade.
c˜
165. 9 ˆ
SEMANTICA DENOTACIONAL 165
Lema 4 Sejam (D, ) e (D , ) duas ccpo’s e seja
f : D → D uma fun¸˜o monotˆnica. Se Y ´ cadeia de D
ca o e
ent˜o {f (d)|d ∈ Y } ´ uma cadeia de D . Al´m disto,
a e e
{f (d)|d ∈ Y } f( Y )
Observa¸˜o: Isto significa que:
ca
• a imagem de uma cadeia sob uma fun¸ao monotˆnica
c˜ o
tamb´m ´ uma cadeia;
e e
• o supremo desta segunda cadeia aproxima a imagem
do supremo da primeira.
166. 9 ˆ
SEMANTICA DENOTACIONAL 166
Prova: Se Y = ∅ o enunciado ´ trivialmente v´lido porque
e a
{f (d)|d ∈ ∅} f (⊥)
∅ f (⊥)
⊥ f (⊥)
167. 9 ˆ
SEMANTICA DENOTACIONAL 167
Assumimos Y = ∅. Seja A = {f (d)|d ∈ Y } e sejam
d1 , d2 ∈ A. Ent˜o, existe d1 , d2 ∈ Y tal que d1 = f (d1 ) e
a
d2 = f (d2 ). Desde que Y ´ cadeia ent˜o d1 d2 ou
e a
d2 d1 .
Pela monotonicidade de f vale o mesmo entre d1 e d2 .
Ou seja, A ´ cadeia de D .
e
168. 9 ˆ
SEMANTICA DENOTACIONAL 168
Para a segunda parte da prova, assumimos d ∈ Y . Ent˜o, a
d Y , e pela monotonicidade de f , f (d) f ( Y ).
Desde que isto vale para todos os d ∈ Y , ent˜o f ( Y ) ´
a e
limite superior de A.
169. 9 ˆ
SEMANTICA DENOTACIONAL 169
Estamos interessados em fun¸oes f que preservem os
c˜
limites superiores de cadeias, ou seja, que satisfazem:
{f (d)|d ∈ Y } = f ( Y ) (1)
Uma fun¸ao f : D → D definida sobre duas ccpo’s
c˜
(D, ) e (D , ) ´ cont´nua se ela ´ monotˆnica e (1)
e ı e o
vale para todas as cadeias n˜o vazias Y .
a
Observa¸˜o: Isto significa que obtemos a mesma
ca
informa¸ao independente de determinarmos o supremo
c˜
antes ou depois de aplicar f .
170. 9 ˆ
SEMANTICA DENOTACIONAL 170
Se vale tamb´m ⊥ = f (⊥) ent˜o dizemos que f ´ estrita.
e a e
171. 9 ˆ
SEMANTICA DENOTACIONAL 171
Lema 5 Sejam (D, ),(D , ) e (D , )trˆs ccpo’s e
e
sejam f : D → D e f : D → D duas fun¸˜es cont´
co ınuas.
Ent˜o, f ◦ f : D → D ´ uma fun¸˜o cont´
a e ca ınua.
Prova: Do Teorema 7 sabemos que f ◦ f ´ monotˆnica.
e o
Da continuidade de f obtemos:
{f (d)|d ∈ Y } = f ( Y )
172. 9 ˆ
SEMANTICA DENOTACIONAL 172
Desde que {f (d)|d ∈ Y } ´ uma cadeia n˜o vazia de D e
e a
usando a continuidade de f obtemos:
{f (d )|d ∈ {f (d)|d ∈ Y }} = f ( {f (d)|d ∈ Y })
que ´ equivalente a
e
{f (f (d))|d ∈ Y } = f (f ( Y ))
provando o resultado.
173. 9 ˆ
SEMANTICA DENOTACIONAL 173
Exerc´
ıcio: Prove que se f e f s˜o estritas, f ◦ f tamb´m
a e
o ´.
e
174. 9 ˆ
SEMANTICA DENOTACIONAL 174
Exerc´
ıcio: Mostre que o funcional associado ao programa
while ¬(x = 0) do x:=x − 1
´ cont´
e ınuo.
175. 9 ˆ
SEMANTICA DENOTACIONAL 175
Contra-exemplo de fun¸˜o cont´
ca ınua: Seja
(P(N ∪ {a}), ⊆) um ccpo. Considere a fun¸˜o
ca
f : P(N ∪ {a}) → P(N ∪ {a}) definida como:
X se X ´ finito
e
f X=
X ∪ {a} se X ´ infinito
e
f ´ monotˆnica, j´ que X1 ⊆ X2 implica f X1 ⊆ f X2 .
e o a
No entanto, n˜o ´ cont´
a e ınua. Considere
Y = {{0, 1, . . . , n}|n ≥ 0} que ´ uma cadeia, com
e
Y = N. Aplicando f obtemos:
{f X|X ∈ Y } = Y = N e f ( Y ) = f N = N ∪ {a}.
176. 9 ˆ
SEMANTICA DENOTACIONAL 176
Teorema 8 Seja f : D → D uma fun¸˜o cont´nua sobre
ca ı
um ccpo (D, ) com elemento m´nimo ⊥. Ent˜o,
ı a
FIX f = {f n (⊥)|n ≥ 0}
define um elemento de D e este elemento ´ o menor
e
ponto fixo de f .
Observa¸˜es:
co
• f 0 = id e f n+1 = f ◦ f n para n ≥ 0;
• Esta ´ a defini¸ao de ponto fixo desejado.
e c˜
177. 9 ˆ
SEMANTICA DENOTACIONAL 177
Prova:
1. f 0 (⊥) = ⊥, e ⊥ d para todo d ∈ D. Por indu¸˜o
ca
podemos mostrar que f n (⊥) f n (d), j´ que f ´
a e
monotˆnica. Segue que f n (⊥) f m (⊥) para n ≤ m.
o
Assim, {f n (⊥)|n ≥ 0} ´ uma cadeia de D e FIX f
e
existe porque D ´ um ccpo;
e
178. 9 ˆ
SEMANTICA DENOTACIONAL 178
2. Precisamos mostrar que FIX f ´ um ponto fixo, isto
e
´, f (FIX f ) = FIX f :
e
f (FIX f ) = f ( {f n (⊥)|n ≥ 0})
= {f (f n (⊥))|n ≥ 0}
= {f n (⊥)|n ≥ 1}
= ({f n (⊥)|n ≥ 1} ∪ {⊥})
= {f n (⊥)|n ≥ 0}
= FIX f
179. 9 ˆ
SEMANTICA DENOTACIONAL 179
3. Para mostrar que FIX f ´ o menor ponto fixo basta
e
assumir que d ´ algum outro ponto fixo. Assim,
e
⊥ d e pela monotonicidade de f obtemos
f n (⊥) f n (d), para n ≥ 0. Como d ´ ponto fixo,
e
f n (⊥) d, e sabendo que FIX f ´ supremo da cadeia
e
{f n (⊥)|n ≥ 0}, FIX f d, o que prova o resultado.
180. 9 ˆ
SEMANTICA DENOTACIONAL 180
ex: Considere o funcional:
g s se s x = 0
(F g) s =
s se s x = 0
Tomamos ⊥ s = undef para todo s, que ´ o menor
e
elemento de State → State, para determinar os
elementos de {F n (⊥)|n ≥ 0}.
181. 9 ˆ
SEMANTICA DENOTACIONAL 181
0
(F ⊥) s = (id ⊥) s
= undef
1
(F ⊥) s = (F ⊥) s
⊥ s se s x = 0
=
s se s x = 0
undef se s x = 0
=
s se s x = 0
182. 9 ˆ
SEMANTICA DENOTACIONAL 182
2
(F ⊥) s = F (F 1 ⊥) s
(F 1 ⊥) s se s x = 0
=
s se s x = 0
undef se sx=0
=
s se sx=0
183. 9 ˆ
SEMANTICA DENOTACIONAL 183
n n+1
No caso geral, nos temos F ⊥=F ⊥ para n 0.
Al´m disto,
e
n 0 1 1
{F ⊥|n ≥ 0} = {F ⊥, F ⊥} = F ⊥
0
porque F ⊥ = ⊥. Assim, o menor ponto fixo de F ´ a
e
fun¸ao
c˜
undef se s x = 0
g1 s =
s se s x = 0
184. 9 ˆ
SEMANTICA DENOTACIONAL 184
Exerc´ıcio: Determine o ponto fixo dos funcionais
associados aos seguintes comandos:
1. while ¬(x = 0) do x:=x − 1
2. while ¬(x = 1) do (y:=y ∗ x; x:=x − 1)
185. 9 ˆ
SEMANTICA DENOTACIONAL 185
9.6 Existˆncia
e
Teorema 9 As equa¸˜es da semˆntica denotacional
co a
definem uma fun¸˜o total Sds em
ca
Stm → (State → State).
186. 9 ˆ
SEMANTICA DENOTACIONAL 186
9.7 Um Resultado de Equivalˆncia
e
Teorema 10 Para todo comando S da linguagem
exemplo While, n´s temos SSOS [[S]] = Sds [[S]].
o
187. 10 ˆ ´
SEMANTICA AXIOMATICA 187
10 Semˆntica Axiom´tica
a a
• Corre¸˜o parcial: estabelece certa rela¸ao entre os
ca c˜
valores iniciais e finais das vari´veis (se o programa
a
terminar);
• Corre¸˜o parcial+termina¸ao=corre¸˜o total
ca c˜ ca