Fundamentos de Linguagens de Programação
Nelma Moreira
Departamento de Ciência de Computadores da FCUP
Fundamentos de Linguagens de Programação
Aula 13
Nelma Moreira (DCC-FC)
Fundamentos de Linguagens de Programação
Aula 13
1/9
Semântica axiomática
Exercı́cio
Mostrar que
`p {V}z := x + 1; if z − 1 = 0 then y := 1 else y := z{y = x + 1}
Nelma Moreira (DCC-FC)
Fundamentos de Linguagens de Programação
Aula 13
2/9
Comandos dedutivamente equivalentes
Comandos dedutivamente equivalentes
Dois comando c1 e c2 são dedutivamente equivalentes se para todas as
pré-condições P e todas as pós-condições Q se tem:
`p {P}c1 {Q} se e só se `p {P}c2 {Q}
Exemplo
Mostrar que os seguintes comandos são dedutivamente equivalentes:
1
c ; skip e c
2
c1 ; (c2 ; c3 ) e (c1 ; c2 ); c3
Nelma Moreira (DCC-FC)
Fundamentos de Linguagens de Programação
Aula 13
3/9
Integridade e completude da semântica axiomática
Vamos ver que o sistema `p é ı́ntegro em relação à semântica natural
operacional (analogamente podia-se provar para a semântica
denotacional).
Quanto à completude e no caso de se usar como linguagem de asserções
uma lógica de primeira ordem com aritmética o Teorema de Gödel apenas
permite versões fracas.
Validade
Uma asserção {P}c{Q} é válida se e só se:
∀s ∈ State⊥ , (Ps = V ∧ hc, si → s 0 ) ⇒ Q s 0 = V
e escreve-se |=p {P}c{Q}.
Nelma Moreira (DCC-FC)
Fundamentos de Linguagens de Programação
Aula 13
4/9
Integridade da semântica axiomática
Teorema (Integridade)
Para todas as asserções de correção parcial {P}c{Q},
`p {P}c{Q} implica |=p {P}c{Q}
A demonstração é por indução na árvore de inferência de `p {P}c{Q}.
Caso assp . Suponhamos que `p {P[x 7→ A[[a]]]}x := a{P}. Seja
hx := a, si → s 0 e P[x 7→ A[[a]]] s = P s[x 7→ A[[a]]s] = V.
Temos que provar que P s 0 = V. Por [asssn ] temos que
s 0 = s[x 7→ A[[a]]s], e portanto P s 0 = P s[x 7→ A[[a]]s] = V
Nelma Moreira (DCC-FC)
Fundamentos de Linguagens de Programação
Aula 13
5/9
Integridade da semântica axiomática
Caso skipp . Supomos que `p {P} skip {P} . Seja hskip, si → s 0 .
Como por [skipsn ], s 0 = s o resultado é imediato.
Caso compp . Suponhamos que |=p {P}c1 {R} e |=p {R}c2 {Q} .
Queremos mostrar que |=p {P}c1 ; c2 {Q}. Sejam s e s 00
estados, tal que P s = V e hc1 ; c2 , si → s 00 . Pela regra
[compsn ] existe s 0 tal que
hc1 , si → s 0 e hc2 , s 0 i → s 00
Da hc1 , si → s 0 , P s 0 = V e |=p {P}c1 {R}, temos que
R s 0 = V. De hc2 , s 0 i → s 00 , R s 0 = V e |=p {R}c2 {Q},
temos que Q s 00 = V. Que é o que queriamos.
Nelma Moreira (DCC-FC)
Fundamentos de Linguagens de Programação
Aula 13
6/9
Integridade da semântica axiomática
Caso ifp . Suponhamos que |=p {B[[b]] ∧ P}c1 {Q} e
|=p {¬B[[b]] ∧ P}c2 {Q}.
Para provar que
|=p {P} if b then c1 else c2 {Q}
sejam s e s 0 estados tais que P s = V e
hif b then c1 else c2 , si → s 0 .
Se B[[b]]s = V então por [ifsn ], temos que hc1 , si → s 0 .
Então dado que |=p {B[[b]] ∧ P}c1 {Q}, concluı́mos que
Q s 0 = V.
Analogamente se concluı́, caso B[[b]]s = F.
Nelma Moreira (DCC-FC)
Fundamentos de Linguagens de Programação
Aula 13
7/9
Integridade da semântica axiomática
Caso whilep . Suponhamos que
|=p {B[[b]] ∧ P}c{P}.
(1)
Para provar que |=p {P} while b do c {¬B[[b]] ∧ P}, sejam
s e s 00 estados tais que P s = V e hwhile b do c, si → s 00 .
Temos que mostrar que (¬B[[b]] ∧ P)s 00 = V. Há dois casos
a considerar, consoante [whilesn ]. Se B[[b]]s = F então
s 00 = s e (¬B[[b]] ∧ P)s 00 = V.
Senão, B[[b]]s = V e existe s 0 tal que hc, si → s 0 e
hwhile b do c, s 0 i → s 00 .
Temos que (B[[b]] ∧ P)s = V e pela hipótese (1) temos que
P s 0 = V. Aplicando a hipótese de indução a
hwhile b do c, s 0 i → s 00 , temos que (¬B[[b]] ∧ P)s 00 = V,
como queriamos.
Nelma Moreira (DCC-FC)
Fundamentos de Linguagens de Programação
Aula 13
8/9
Integridade da semântica axiomática
Caso consp . Suponhamos que
|=p {P 0 }c{Q 0 }, P ⇒ P 0 , e Q 0 ⇒ Q.
(2)
Para provar que |=p {P}c{Q}, sejam s e s 0 tal que P s = V
e hc, si → s 0 .pause
Como P s = V e P ⇒ P 0 então P 0 s = V e pela hipótese (2),
Q 0 s 0 = V. Mas como Q 0 ⇒ Q, temos que Q s 0 = V, como
queriamos.
Nelma Moreira (DCC-FC)
Fundamentos de Linguagens de Programação
Aula 13
9/9
Download

13 - Departamento de Ciência de Computadores