• Nenhum resultado encontrado

Uma memória é uma função total de identificadores para valores inteiros: se x=y

N/A
N/A
Protected

Academic year: 2022

Share "Uma memória é uma função total de identificadores para valores inteiros: se x=y"

Copied!
15
0
0

Texto

(1)

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}

(2)

• 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¸oes semˆanticas A[[·]]AexpZ)

B[[·]]BexpB) C[[·]]Com*Σ) ParaaAexp,bBexp ecCom temos:

A[[a]]ΣZ B[[b]]ΣB C[[c]]Σ*Σ E, paraσΣ:

A[[a]]σZ B[[b]]σB

C[[c]]σΣ caso C[[c]]σfor definido

(3)

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¸ao da express˜aoa´e a fun¸ao que, dada uma mem´oriaσ . . .”

”a denota¸ao da express˜aob´e a fun¸ao que, dada uma mem´oriaσ . . .”

”a denota¸ao do comandoc´e a fun¸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[[54]|σ (Eq+)

= σ(x) +A[[54]|σ (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:

(4)

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:

(5)

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

(6)

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

(7)

– 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]]:

= se [[x6= 0]]σent˜aoW([[x:=x2]]σ) sen˜aoσ (EqWhV1)

= se [[x]]σ6= [[0]]σent˜aoW([[x:=x2]]σ) sen˜aoσ (EqDif)

= seσ(x)6= [[0]]σent˜aoW([[x:=x2]]σ) sen˜aoσ (EqId)

= seσ(x)6= 0 ent˜aoW([[x:=x2]]σ) sen˜aoσ (EqN)

= seσ(x)6= 0 ent˜aoW(σ[x7→[[x2]]σ]) 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¸ao fica:

= seσ(x)6= 0 ent˜ao0 sen˜aoσ

Verifique se as fun¸oesg1 eg2 definidas abaixo s˜ao solu¸oes dessa equa¸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¸ao seg1´e solu¸ao da equa¸ao acima:

(8)

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)20 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¸ao se g2´e solu¸c˜ao da equa¸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¸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;

(9)

• 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.

(10)

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

(11)

[[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˜ao0 sen˜aoσ

Calculando F0(⊥),F1(⊥), F2(⊥),. . .:

Exemplo 1(19)

(12)

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)

(13)

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˜ao0 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 · · ·

(14)

• 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˜ao 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σ . . .

(15)

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

Referências

Documentos relacionados

Em caso de troca deste produto, o novo equipamento será garantido pelo restante do prazo original de garantia do produto substituído ou apenas por

Essas novas bases teórico-metodológicas mobilizadas para tornar inteligíveis processos e dinâmicas de produção dos saberes profissionais dos professores e, em

A ocorrência do Grupo Canastra na área é registrada na porção oeste da bacia, onde essa unidade é empurrada sobre os grupos Paranoá, Vazante e Bambuí.. As rochas que sustentam

Considerando as duas cidades de maior representatividade na composição do Índice FipeZap, São Paulo apresentou alta nominal de 0,40% nos preços de venda de imóveis residenciais

In this context, the present study investigates the benefits of pyrite separation (sulfide isolation method), resulting in a reduction of the acidity generation

8.1 - Será elaborada pelo leiloeiro a Ata do Leilão contendo, para cada imóvel, o valor do lance vencedor, valor pago após a realização do leilão e dados do

Energia e magnetismo; Energia elétrica; Impactos ambientais da geração da energia elétrica; Economia de energia elétrica; Livro didático: Ciências Projeto Lumirá

A relação entre as pistas que estão dentro das zonas, apresentadas no capítulo anterior, no Rio de Janeiro, o contato direto entre policial e garota de programa e toda