1 Semˆ antica Denotacional
Semˆantica denotacional ´e um estilo de semˆantica que visa dar modelos matem´aticos para lin- guagens de programa¸c˜ao (por isso ela tamb´em ´e chamadasemˆantica matem´atica). Significados de programas s˜ao definidos como sendo elementos de alguma estrutura matem´atica apropriada.
Um comando de IMP, por exemplo, dado um estado inicial, produz um estado final, ou n˜ao termina. Podemos ent˜ao dizer que comandos de IMP denotam fun¸c˜oes parciais entre estados que, por sua vez, s˜ao representados como fun¸c˜oes de identificadores de vari´aveis para inteiros.
Objetos Semˆanticos. Num primeiro momento ´e suficiente assumir que as estruturas ma- tem´aticas apropriadas para a semˆantica denotacional de IMP s˜ao simplesmente conjuntos.
Representa¸c˜ao da mem´oria(1)
• Uma mem´oria ´e uma fun¸c˜ao total de identificadores para valores inteiros:
σ, σ0, σ1, σ2. . .∈Ident→Z
• Σ≡Ident→Z
• σ[x7→n] ´e o mesmo que σ, exceto que mapeia xpara n
• Nota¸c˜ao:
σ[x7→n](y) =
(n se x=y σ(y) caso contr´ario
Um estado (ou uma mem´oria) ´e um mapeamento pertencente ao conjunto de fun¸c˜oesIdent→Z e vamos assumir que essas fun¸c˜oes s˜ao totais, ou seja que todo identificador possui um valor inteiro associado a ele na mem´oria. Por conveniˆencia, de agora em diante vamos nos referir ao conjuntoIdent→Zpelo nome Σ e usamos σ,σ0 . . .como meta-vari´aveis para elementos de Σ.
Portanto, para IMP temos:
Objetos Semˆanticos para IMP (2)
• Os significados de elementos de Aexp ? fun¸c˜oes totais pertencentes a Σ→Z
• Os significados de elementos de Bexp ?
fun¸c˜oes totais pertencentes a Σ→B ondeB={verdadeiro,falso}
• Os significados de elementos de Com ? fun¸c˜oes parciaispertencentes a Σ*Σ
Exerc´ıcio 1.1 Explique porque os significados de express˜oes aritm´eticas da linguagem IMP s˜ao (i) fun¸c˜oes pertencentes a Σ → Z e n˜ao simplesmente elementos de Z e (ii) porque s˜ao fun¸c˜oes totais
Exerc´ıcio 1.2 Explique porque os significados de express˜oes booleans da linguagem IMP s˜ao (i) fun¸c˜oes pertencentes a Σ→Be n˜ao simplesmente elementos deBe (ii) porque s˜ao fun¸c˜oes totais.
Exerc´ıcio 1.3 Explique porque os significados de comandos da linguagem IMP s˜ao fun¸c˜oes pertencentes a Σ→Σ e (ii) porque s˜ao fun¸c˜oes parciais.
Exerc´ıcio 1.4 Como podemos transformar as fun¸c˜oes que s˜ao significados de comandos da linguagem IMP em fun¸c˜oes totaispertencentes a Σ→Σ
Fun¸c˜oes auxiliares. As seguintes fun¸c˜oes ser˜ao usadas na defini¸c˜ao da semˆantica denotacional de IMP: +,−,×,=,≤,¬,∨e ∧. Observe, que esses s´ımbolos s˜ao sobrecarregados. O contexto de uso dir´a se eles s˜ao operadores (sint´aticos) da linguagem IMP ou se s˜ao os nomes das fun¸c˜oes matem´aticas.
Fun¸c˜oes Semˆanticas Fun¸c˜oes semˆanticas definem o mapeamento entre a sintaxe ´e a semˆantica.
Em geral, temos uma fun¸c˜ao semˆantica para cada categoria sint´atica. Os nomes das fun¸c˜oes semˆanticas s˜ao tradicionais em semˆantica denotacional.
Fun¸c˜oes Semˆanticas (3)
A semˆantica denotacional de IMP ´e dada atrav´es de trˆes fun¸c˜oes semˆanticas A[[·]]∈Aexp→(Σ→Z)
B[[·]]∈Bexp→(Σ→B) C[[·]]∈Com→(Σ*Σ) Paraa∈Aexp,b∈Bexp ec∈Com temos:
A[[a]]∈Σ→Z B[[b]]∈Σ→B C[[c]]∈Σ*Σ E, paraσ∈Σ:
A[[a]]σ∈Z B[[b]]σ∈B
C[[c]]σ∈Σ caso C[[c]]σfor definido
1.1 Tentativa de defini¸ c˜ ao atr´ aves da formula¸ c˜ ao de propriedades
Equa¸c˜oes Semˆanticas A defini¸c˜ao das fun¸c˜oes semˆanticas, e portanto a defini¸c˜ao do signifi- cado matem´atico de constru¸c˜oes de IMP, consiste de um conjunto de equa¸c˜oes semˆanticas.
Defini¸c˜oes(4)
• As equa¸c˜oes semˆanticas podem ser escritas na forma A[[a]]σ = . . . B[[b]]σ = . . . C[[c]]σ = . . .
• ou, usando a nota¸c˜ao lambda, na forma
A[[a]] = λσ∈Σ. . . . B[[b]] = λσ∈Σ. . . . C[[c]] = λσ∈Σ. . . . Tanto A[[a]]σ=. . .comoA[[a]] =λσ∈Σ. . . .possuem a mesma leitura:
”a denota¸c˜ao da express˜aoa´e a fun¸c˜ao que, dada uma mem´oriaσ . . .”
”a denota¸c˜ao da express˜aob´e a fun¸c˜ao que, dada uma mem´oriaσ . . .”
”a denota¸c˜ao do comandoc´e a fun¸c˜ao que, dada uma mem´oriaσ . . .”
Equa¸c˜oes Semˆanticas para Express˜oes Aritm´eticas (5)
O significado de uma express˜ao aritm´etica ´e uma fun¸c˜ao em Σ→Zdefinida como segue:
A[[n]]σ =n (EqN)
A[[x]]σ =σ(x) (EqId)
A[[a1+a2]]σ=A[[a1]]σ+A[[a2]]σ (Eq+) A[[a1-a2]]σ=A[[a1]]σ−A[[a2]]σ (Eq-) A[[a1*a2]]σ=A[[a1]]σ×A[[a2]]σ (Eq*) Exerc´ıcio:
A[[x + (5 * 4)]]σ = A[[x]]σ+A[[5∗4]|σ (Eq+)
= σ(x) +A[[5∗4]|σ (EqId)
= σ(x) +A[[5]|σ×A[[4]|σ (Eq∗)
= σ(x) + (5×4) (EqN, EqN)
= σ(x) + 20
Note que a defini¸c˜ao do significado de express˜oes booleanas faz uso da fun¸c˜ao de atribui¸c˜ao de significado para express˜oes aritm´eticas:
Equa¸c˜oes Semˆanticas para Express˜oes Boolenas(6)
B[[t]]σ =t (EqB)
B[[a1=a2]]σ =A[[a1]]σ=A[[a2]]σ (Eq=) B[[a1<a2]]σ =A[[a1]]σ < A[[a2]]σ (Eq<)
B[[¬b]]σ =¬B[[b]]σ (EqNeg)
B[[b1∧b2]]σ=B[[b1]]σ∧B[[b2]]σ (EqAnd) B[[b1∨b2]]σ=B[[b1]]σ∨B[[b2]]σ (EqOr)
Segue abaixo a defini¸c˜ao da denota¸c˜ao de comandos. O significado do comando while exige cuidados e ser´a visto mais adiante:
Equa¸c˜oes Semˆanticas para Comandos(7)
O significado de um comando ´e uma fun¸c˜ao em Σ*Σ definida como segue
C[[skip]]σ = σ (EqSkp)
C[[x:=a]]σ = σ[x7→A[[a]]σ] (EqAtr) C[[c1;c2]]σ = C[[c2]](C[[c1]]σ) (EqSeq) C[[if b then c1 else c2]]σ = seB[[b]]σent˜aoC[[c1]]σsen˜ao C[[c2]]σ (EqIf)
C[[while b do c]] = . . . (EqWh)
Segue abaixo um exemplo no qual ´e calculado o significado matem´atico de um comando utili- zando as equa¸c˜oes acima:
Exemplo (8)
C[[x:=1;(skip;y:=2)]]σ = C[[skip;y:=2]] (C[[x:=1]]σ) (EqSeq)
= C[[skip;y:=2]]σ[x7→A[[1]]σ] (EqAtr)
= C[[skip;y:=2]]σ[x7→1] (EqN)
= C[[y:=2]] (C[[skip]]σ[x7→1]) (EqSeq)
= C[[y:=2]]σ[x7→1] (EqSkp)
= σ[x7→1][y7→A[[2]]σ[x7→1]] (EqAtr)
= σ[x7→1][y7→2] (EqN)
Semˆantica com fun¸c˜oes totais. O tratamento formal fica mais simples se lidar somente com fun¸c˜oes totais. Podemos adicionar o elemento⊥(lido ”bottom”, ou ”indefinido”) ao conjunto Σ para representar indefini¸c˜ao. Escrevemos Σ⊥para nomear o conjunto Σ∪ {⊥}. Ao inv´es de dizermos que os significados de comandos pertencem ao conjunto de fun¸c˜oes parciais de Σ para Σ dizemos que pertencem ao conjunto de fun¸c˜oes totais de Σ para Σ⊥. E, finalmente, como o comandoc1 emc1;c2 pode n˜ao terminar, dizemos que os significados de comandos pertencem ao conjunto de fun¸c˜oes totais Σ⊥ →Σ⊥. Essas fun¸c˜oes s˜ao estritas, ou seja se aplicadas a⊥ produzem⊥.
Lifting - trabalhando com fun¸c˜oes totais (9)
• Σ⊥= Σ∪ {⊥}
• ⊥ representa a indefini¸c˜ao
• C[[c]] ´e agora fun¸c˜ao total em Σ⊥→Σ⊥
• Exemplo :
C[[(while true do c);c2]]σ = C[[c2]](C[[while true do c]]σ)
= C[[c2]]⊥
= ⊥
Significado do Comando while Como fica a equa¸c˜ao para o comando while? Podemos come¸car lembrando que o significado do comando while b do c ´e equivalente ao significado do comando
if b then (c;while b do c) else skip.
Logo
Significado do comando while? (10) C[[while b do c]]σ =C[[if b then (c;while b do c) else skip]]σ
= seB[[b]]σent˜aoC[[c;while b do c]]σsen˜aoC[[skip]]σ (EqIf)
= seB[[b]]σent˜aoC[[while b do c]](C[[c]]σ) sen˜aoC[[skip]]σ (EqSeq)
= seB[[b]]σent˜aoC[[while b do c]](C[[c]]σ) sen˜aoσ (EqSkp)
Ou seja:
[[while b do c]]σ = se [[b]]σent˜ao [[while b do c]]([[c]]σ) sen˜aoσ ou, usandoWpara [[while b do c]]:
Wσ = se [[b]]σseW([[c]]σ) sen˜aoσ
Contudo a equa¸c˜ao
C[[while b do c]]σ = seB[[b]]σ ent˜ao C[[while b do c]](C[[c]]σ) sen˜ao σ (EqWhV1) n˜ao ´e suficiente para definir o significado de comandoswhile, e a raz˜ao ´e simples: ao contr´ario das demais equa¸c˜oes para a linguagem – que definem explicitamente uma ´unica fun¸c˜ao de Σ⊥→ Σ⊥ dado um comando – est´a equa¸c˜ao (como veremos nos exerc´ıcios abaixo), dado um comando while espec´ıfico, pode ter v´arias solu¸c˜oes. O significado do comando ´e, com certeza, uma dessas solu¸c˜oes, mas a equa¸c˜ao acima, por si s´o, n˜ao indica qual delas.
Equa¸c˜oes e Defini¸c˜oes - Revis˜ao(11)
• Dado um universoU, uma equa¸c˜ao define um elemento de U quando ela – possui solu¸c˜ao emU, e
– a solu¸c˜ao ´e ´unica
• Se uma equa¸c˜ao possui mais de uma solu¸c˜ao, ela n˜ao define um elemento de U
• Uma propriedade adicional pode ser adotada para apontar uma das solu¸c˜oes como sendo o elemento definido
Equa¸c˜oes e Defini¸c˜oes - Revis˜ao(12)
• Exemplos:
– x=x+ 1 n˜ao possui solu¸c˜ao, seja l´a qual for o universo
– x= 3x−4 possui o natural 2 como uma ´unica solu¸c˜ao emN, logo essa equa¸c˜ao define xcomo sendo o natural 2
– 2x2 = 8 possui duas solu¸c˜oes emR: 2 e−2, logo ela por si s´o n˜ao define nenhum n´umero real
Exerc´ıcio 1.5 Considere o comandowhile x 6= 0 do x:=x-2
• Obtenha a equa¸c˜ao associada a esse comando No que segueW ≡ [[while(x6= 0)do x:=x−2]]:
Wσ = se [[x6= 0]]σent˜aoW([[x:=x−2]]σ) sen˜aoσ (EqWhV1)
= se [[x]]σ6= [[0]]σent˜aoW([[x:=x−2]]σ) sen˜aoσ (EqDif)
= seσ(x)6= [[0]]σent˜aoW([[x:=x−2]]σ) sen˜aoσ (EqId)
= seσ(x)6= 0 ent˜aoW([[x:=x−2]]σ) sen˜aoσ (EqN)
= seσ(x)6= 0 ent˜aoW(σ[x7→[[x−2]]σ]) sen˜aoσ (EqAtr)
= seσ(x)6= 0 ent˜aoW(σ[x7→[[x]]σ−[[2]]σ]) sen˜aoσ (EqSub)
= seσ(x)6= 0 ent˜aoW(σ[x7→σ(x)−[[2]]σ]) sen˜aoσ (EqId)
= seσ(x)6= 0 ent˜aoW(σ[x7→σ(x)−2]) sen˜aoσ (EqN)
Usandoσ0 ≡ σ[x7→σ(x)−2] a equa¸c˜ao fica:
Wσ= seσ(x)6= 0 ent˜aoWσ0 sen˜aoσ
• Verifique se as fun¸c˜oesg1 eg2 definidas abaixo s˜ao solu¸c˜oes dessa equa¸c˜ao:
g1σ=
(σ[x7→0] seσ(x) ´e par eσ(x)≥0
⊥ caso contr´ario
g2σ=
σ[x7→0] seσ(x) ´e par eσ(x)≥0 σ1 seσ(x) ´e par eσ(x)<0 σ2 seσ(x) ´e ´ımpar
ondeσ1eσ2 podem ser estados quaisquer ou⊥
Verifica¸c˜ao seg1´e solu¸c˜ao da equa¸c˜ao acima:
g1σ = seσ(x)6= 0 ent˜aog1σ0 sen˜aoσ
= seσ(x)6= 0 ent˜ao (separ(σ0(x))∧σ0(x)≥0 ent˜aoσ0[x7→0] sen˜ao⊥) sen˜aoσ
= seσ(x)6= 0 ent˜ao (separ(σ(x)−2)∧σ0(x)≥0 ent˜aoσ0[x7→0] sen˜ao⊥) sen˜aoσ
= seσ(x)6= 0 ent˜ao (separ(σ(x))∧σ0(x)≥2 ent˜aoσ0[x7→0] sen˜ao⊥) sen˜aoσ
= seσ(x)6= 0 ent˜ao (separ(σ(x))∧σ(x)−2≥0 ent˜aoσ[x7→0] sen˜ao⊥) sen˜aoσ
= seσ(x)6= 0 ent˜ao (separ(σ(x))∧σ(x)≥2 ent˜aoσ[x7→0] sen˜ao⊥) sen˜aoσ
= seσ(x)6= 0 ent˜ao (separ(σ(x))∧σ(x)≥2 ent˜aoσ[x7→0] sen˜ao⊥) sen˜aoσ[x7→0]
= separ(σ(x))∧σ(x)≥0 ent˜aoσ[x7→0] sen˜ao⊥
= g1σ
Verifica¸c˜ao se g2´e solu¸c˜ao da equa¸c˜ao acima:
g2σ = seσ(x)6= 0 ent˜aog2σ0 sen˜aoσ
= se σ(x)6= 0entao (se par(σ0(x))∧σ0(x)≥0 entao σ0[x7→0]senao se par(σ0(x))∧σ0(x)<0entao σ2 senao σ3) senao σ
= se σ(x)6= 0entao (se par(σ(x))∧σ(x)≥2entao σ[x7→0]senao se par(σ(x))∧σ(x)<2 entao σ2 senao σ3) senao σ[x7→0]
= se par(σ(x))∧σ(x)≥0entao σ[x7→0]senao se par(σ(x))∧σ(x)<0entao σ2 senao σ3)
= g2σ
• Qual das duas fun¸c˜oes,g1 oug2deve ser o significado do comando while acima?
Exerc´ıcio 1.6 Considere o comandowhile true do skip.
• Escreva a equa¸c˜ao associada ao comando e explique por quetodasas fun¸c˜oes em Σ⊥→ Σ⊥ s˜ao solu¸c˜oes para esta equa¸c˜ao.
• Qual dessas fun¸c˜oes ´e o significado deste comando?
Exerc´ıcio 1.7 Considere o comandowhile ¬(x=0) do skip.
• Escreva a equa¸c˜ao correspondente ao comando while acima;
• Verifique se as fun¸c˜oesg1 e g2 abaixo s˜ao solu¸c˜oes desta equa¸c˜ao g1σ=
(⊥ seσ(x)6= 0 σ seσ(x) = 0 g2σ=
(σ3 seσ(x)6= 0 σ seσ(x) = 0
• Qual dessas fun¸c˜oes ´e o significado do comando?
• Certifique-se de que a fun¸c˜ao gdefinida abaixo n˜ao ´e solu¸c˜ao da equa¸c˜ao acima gσ=⊥ para todoσ ∈Σ
Exerc´ıcio 1.8 Considere o comandowhile ¬(x=0) do x:=x-1.
• Escreva a equa¸c˜ao associada a esse comando.
• Verifique se fun¸c˜oes definidas abaixo s˜ao solu¸c˜oes dessa equa¸c˜ao:
g1σ=⊥ para todoσ∈Σ g2σ=
(σ[x7→0] seσx≥0
⊥ seσx <0 g3σ=
(σ[x7→0] seσx≥0 σ seσx <0
g4σ=σ[x7→0] para todoσ ∈Σ g5σ=σ para todoσ∈Σ
• Qual dessa fun¸c˜oes ´e o significado do comando while acima?
1.2 Voltando a tentativa de defini¸ c˜ ao pela formula¸ c˜ ao de propriedades
Observe, pelos exerc´ıcios da se¸c˜ao 1.1, que h´a uma rela¸c˜ao de ordem entre as solu¸c˜oes de uma equa¸c˜ao baseada na “quantidade” de informa¸c˜ao que cada uma expressa. Formalmente podemos definir essa rela¸c˜ao de ordem da seguinte maneira:
Defini¸c˜ao de menor (13)
• Considere o seguinte rela¸c˜ao ordemv entre fun¸c˜oes deΣ⊥→Σ⊥:
f vg⇐⇒ ∀σ f σ=⊥ ∨ f σ=gσ (1.1)
• Nessa ordem uma fun¸c˜ao com “menos informa¸c˜ao” ´e dita menor.
ou seja, quandof ´e definida,g tamb´em ´e definida e produz o mesmo resultado do que f. Em todos exemplos acima, a solu¸c˜ao correspondente ao significado do comando sempre foi a menor solu¸c˜ao (dada a rela¸c˜ao de ordem acima).
Formulamos ent˜ao a seguinte hip´otese:
Hip´otese - o significado ´e a menor solu¸c˜ao(14)
o significado de um comando while ´e a menor solu¸c˜ao da equa¸c˜ao C[[while b do c]]σ = seB[[b]]σ ent˜ao C[[while b do c]](C[[c]]σ) sen˜ao σ
Exerc´ıcio 1.9 Ordene as solu¸c˜oes das equa¸c˜oes dos exerc´ıcios anteiores utilizando a defini¸c˜ao de ordem dada acima.
1.3 Equa¸ c˜ oes de Ponto Fixo
At´e agora, usando somente a nossa intui¸c˜ao e alguns exemplos, levantamos a hip´otese de que o significado de comando while deve ser a menor solu¸c˜ao da equa¸c˜ao para o comando while associada associada. Mas como obter/calcular essa menor solu¸c˜ao?
Para come¸car vai ser necess´ario colocar a equa¸c˜ao (EqWhV1) no formato geral de equa¸c˜ao de ponto fixo. Equa¸c˜oes de ponto fixo s˜ao aquelas que podem ser colocadas no seguinte formato geralx=f(x). Uma solu¸c˜ao para uma equa¸c˜ao de ponto fixox=f(x) ´e dita ponto fixo def.
Equa¸c˜ao no formato de equa¸c˜ao de ponto fixo(15) A equa¸c˜ao
C[[while b do c]]σ = seB[[b]]σ ent˜ao C[[while b do c]](C[[c]]σ) sen˜ao σ no formato geral de equa¸c˜ao de ponto fixo, fica:
[[while b do c]] =F ([[whileb do c]])
onde F ∈(Σ⊥→Σ⊥)→(Σ⊥→Σ⊥) ´e definido como:
F g=λσ∈Σ⊥.se [[b]]σ ent˜aog([[c]]σ) sen˜aoσ
Sendo assim a nossa hip´otese a cerca do significado de qualquer comando while pode ser reescrita nas seguintes formas equivalentes:
Hip´otese - o significado ´e a menor solu¸c˜ao (II)(16)
• O significado de um comando while ´e a menor solu¸c˜ao da equa¸c˜ao abaixo, ou ainda
• O significado de um comando while ´e o menor ponto fixo de F da equa¸c˜ao abaixo
[[while b c]] =F ([[whileb c]])
onde: F ∈(Σ⊥→Σ⊥)→(Σ⊥ →Σ⊥)´e definido como:
F g=λσ∈Σ.se [[b]]σ ent˜aog([[c]]σ) sen˜aoσ
Outra forma equivalente de formular a nossa hip´otese faz uso da seguinte nota¸c˜ao empregada para se referir ao menor ponto fixo de F: fixF ou ainda, µ F
Hip´otese (III)(17) [[while b c]] =fixF
onde: F ∈(Σ⊥→Σ⊥)→(Σ⊥ →Σ⊥)´e definido como:
F g=λσ∈Σ.se [[b]]σ ent˜aog([[c]]σ) sen˜aoσ
Exerc´ıcio 1.10 Reescreva as equa¸c˜oes dos comandos while dos exemplos/exerc´ıcios das se¸c˜oes anteriores colocando-as no formato geral de equa¸c˜ao de ponto fixo.
1.4 Calculando menor ponto fixo
Para obter o menor ponto fixo de F come¸camos aplicando F a fun¸c˜ao totalmente indefinida de Σ⊥ → Σ⊥ e assim aplicamos F sucessivamente a cada resultado obtido anteriormente. A id´eia ´e que, acada aplica¸c˜ao de F obtemos uma fun¸c˜ao de Σ⊥ → Σ⊥ com mais informa¸c˜ao e, eventualmente, obtemos uma fun¸c˜ao que ´e ponto fixo de F (ou seja que ´e o significado do comando while).
Exemplo 1(18)
Considerewhile x 6= 0 do x:=x-2. O funcionalF associado a esse comando ´e:
F g=λσ∈Σ. seσ(x)6= 0 ent˜aogσ[x7→σ(x)−2] sen˜aoσ Usandoσ0 no lugar deσ[x7→σ(x)−2] temos:
F g=λσ∈Σ. seσ(x)6= 0 ent˜aogσ0 sen˜aoσ
Calculando F0(⊥),F1(⊥), F2(⊥),. . .:
Exemplo 1(19)
F0(⊥) =def⊥
F1(⊥) =F(⊥)
=λσ∈Σ.seσ(x)6= 0 ent˜ao ⊥(σ0) sen˜ao σ
=λ.σ ∈Σ.seσ(x)6= 0 ent˜ao ⊥Σ⊥ sen˜ao σ[x7→0]
=λ.σ ∈Σ.seσ(x) = 0 ent˜ao σ[x7→0] sen˜ao ⊥Σ⊥ F2(⊥) =F(F1(⊥))
=λσ∈Σ.seσ(x)6= 0 ent˜ao (F1⊥)σ0 sen˜ao σ
=λσ∈Σ.seσ(x)6= 0 ent˜ao (se σ0(x) = 0 ent˜ao σ0[x7→0] sen˜ao ⊥Σ⊥) sen˜aoσ
=λσ∈Σ.seσ(x)6= 0 ent˜ao (se σ(x) = 2 ent˜aoσ[x7→0] sen˜ao⊥Σ⊥) sen˜ao σ
=λσ∈Σ.seσ(x) = 0∨σ(x) = 2 ent˜aoσ[x7→0] sen˜ao ⊥Σ⊥
F3(⊥) =F(F2(⊥))
=. . .
=λσ∈Σ.seσ(x) = 0∨σ(x) = 2∨σ(x) = 4 ent˜ao σ[x7→0] sen˜ao ⊥Σ⊥ . . .
Exemplo 1(20)
• Com cada aplica¸c˜ao de F a “informa¸c˜ao” cresce e temos a seguinte cadeia:
F0(⊥)vF1(⊥)vF2(⊥)vF3(⊥)v · · ·
• Intuitivamente, no “limite” da cadeia acima temos g=λσ∈Σ.
(σ[x7→0] separ(σ(x))∧x≥0
⊥ caso contr´ario representa a fun¸c˜ao que
– ´e ponto fixo deF (verifique isso)
– corresponde ao significado do comando while
Exemplo 2(21)
Considerewhile x>0 do x:=x-1. O funcionalF associado a esse comando ´e o seguinte:
F g=λσ∈Σ.seσ(x)>0 ent˜aogσ[x7→σ(x)−1] sen˜aoσ Usandoσ0 paraσ[x7→σ(x)−1] temos:
F g=λσ∈Σ.seσ(x)>0 ent˜aogσ0 sen˜aoσ
Exemplo 2(22) F0(⊥) =def ⊥
F1(⊥) =F(⊥)
=λσ∈Σ.seσ(x)>0 ent˜ao ⊥σ0 sen˜ao σ
=λ.σ∈Σ.se σ(x)>0 ent˜ao ⊥Σ⊥ sen˜ao σ F2(⊥) =F(F1(⊥))
=λσ∈Σ.seσ(x)>0 ent˜ao (F1⊥)σ0 sen˜ao σ . . .
=λσ∈Σ.
σ seσ(x)≤0 σ[x7→0] seσ(x) = 1
⊥Σ⊥ seσ(x)>1
F3(⊥) =F(F2(⊥)) =· · ·=λσ∈Σ.
σ seσ(x)≤0
σ[x7→0] seσ(x) = 1∨σ(x) = 2
⊥Σ⊥ seσ(x)>2
F4(⊥) =F(F3(⊥)) =· · ·=λσ∈Σ.
σ seσ(x)≤0
σ[x7→0] seσ(x) = 1∨σ(x) = 2∨σ(x) = 3
⊥Σ⊥ seσ(x)>3
Exemplo 2(23)
• Com cada aplica¸c˜ao deF a “informa¸c˜ao” cresce:
F0(⊥)vF1(⊥)vF2(⊥)vF3(⊥)v · · ·
• Intuitivamente, no “limite” da cadeia acima, temos a seguinte fun¸c˜ao:
λσ∈Σ.
(σ seσ(x)≤0 σ[x7→0] seσ(x)>0 representa a fun¸c˜ao que
– ´e ponto fixo deF (verifique isso)
– corresponde ao significado do comando while
Exemplo 3(24)
Considere o comandowhile x>0 do skip. O funcionalF associado a esse comando ´e o seguinte F g=λσ∈Σ⊥.seσx >0 ent˜aogσ sen˜aoσ
CalculandoF0(⊥),F1(⊥),F2(⊥),. . .
F0(⊥) =def ⊥ F1(⊥) =F(⊥)
=λσ∈Σ.seσ(x)>0 ent˜ao⊥(σ) sen˜aoσ
=λσ∈Σ.seσ(x)>0 ent˜ao⊥Σ sen˜aoσ F2(⊥) =F(F1(⊥))
=λσ∈Σ.seσ(x)>0 ent˜ao (F1(⊥))(σ) sen˜aoσ
=λσ∈Σ.seσ(x)>0 ent˜ao (seσ(x)>0 ent˜ao⊥Σsen˜aoσ) sen˜aoσ
=λσ∈Σ.seσ(x)>0 ent˜ao⊥Σ sen˜aoσ F3(⊥) =F(F2(⊥))
=. . .
=λσ∈Σ.seσ(x)>0 ent˜ao⊥Σ sen˜aoσ F4(⊥) =F(F3(⊥))
=. . .
=λσ∈Σ.seσ(x)>0 ent˜ao⊥Σ sen˜aoσ . . .
Exemplo 3 - continua¸c˜ao(25)
• Neste caso obtemos um ponto fixo para F j´a na terceira aplica¸c˜ao.
• Observe que a fun¸c˜ao
λσ∈Σ⊥.se σ(x)>0 ent˜ao⊥Σ sen˜aoσ obtida dessa forma :
– ´e o menor dentre os pontos fixos de F
– corresponde ao significado do comando while x>0 do skip
Tendo em vista os exemplos anteriores podemos refinar a nossa hip´otese sobre o significado do comando while para
C[[while b do c]] = limite superior de cadeia F0(⊥)vF1(⊥)vF2(⊥)vF3(⊥)v · · · Observa¸c˜ao: os termos limite superior e cadeia ser˜ao precisamente definidos mais adiante.
Veremos tamb´em que uma cadeia pode ter mais do que um limite superior e que estamos interessados no menor limite superior. Logo
C[[while b do c]] = menor limite superior de cadeiaF0(⊥)vF1(⊥)vF2(⊥)vF3(⊥)v · · · De agora em diante vamos escrever
∞
G
n≥0
Fn(⊥)
para menor limite superior de cadeia F0(⊥) v F1(⊥) v F2(⊥) v F3(⊥) v · · ·. Assim reescrevemos a hip´otese acima para
C[[while b do c]] =
∞
G
n≥0
Fn(⊥)
Exerc´ıcio 1.11 Calcule o significado dos seguintes comandos:
• while x6= 0 do x:= x - 1
• while ¬ (x = 0) do x:=x - 1
• while true do skip