• Nenhum resultado encontrado

3 O M´ etodo de Certifica¸ c˜ ao de

3.2.3 Dimens˜ ao Funcional

A segunda dimens˜ao do m´etodo de certifica¸c˜ao ´e denominada dimens˜ao funcional. A dimens˜ao funcional tem por objetivo verificar a funcionalidade da estrutura do workflow mediante a verifica¸c˜ao das pr´e- e p´os-condi¸c˜oes do mesmo. A estrutura do workflow ´e dada pela composi¸c˜ao dos elementos da base (S(I, O)), conforme definido na gram´atica da Figura 3. O s´ımbolo terminal S(I, O) define o elemento base da estrutura do workflow, representando as invoca¸c˜oes de servi¸cos dadas na implementa¸c˜ao do workflow. Assume-se que as invoca¸c˜oes de servi¸cos aparecendo no workflow est˜ao associadas a uma descri¸c˜ao dada em conformidade com a defini¸c˜ao 3.1.2. As asser¸c˜oes (s´ımbolo n˜ao-terminal A na

Figura 3) aparecendo nos elementos estruturais do workflow representam axiomas de ABox formulados em conformidade com o fragmento ALC da l´ogica descritiva.

Esta dimens˜ao visa certificar que um workflow cumpre uma determinada especifica¸c˜ao dada na forma de pr´e- e p´os-condi¸c˜oes. Para realizar a certifica¸c˜ao funcional, emprega- se um c´alculo de programa baseado na l´ogica de Hoare [54], onde as especifica¸c˜oes de corre¸c˜ao parcial s˜ao dadas na forma de triplas:

{ϕ} W {ψ} (3.23)

onde ϕ e ψ s˜ao asser¸c˜oes de ABox representando a pr´e-condi¸c˜ao e a p´os-condic˜ao, respec- tivamente, e W representa um workflow.

O c´alculo de Hoare proposto permite derivar especifica¸c˜oes de corre¸c˜ao parcial v´alidas. As regras de inferˆencia do c´alculo de programa proposto est˜ao descritas na Figura 10. As regras de inferˆencia assumem duas informa¸c˜oes como contexto:

• uma base de conhecimento K = hT , Ai composta por um TBox T e por um ABox A. A base de conhecimento K tem um papel importante na deriva¸c˜ao das especifica¸c˜oes de corre¸c˜ao parcial, especificamente na prova das obriga¸c˜oes geradas a partir da aplica¸c˜ao das regras. A base K fornece a terminologia e os fatos iniciais usados nas inferˆencias realizadas para provar as obriga¸c˜oes.

• um mapeamento Γ, dado pelas fun¸c˜oes injetivas, representa o mapeamento dos iden- tificadores usados em cada invoca¸c˜ao de servi¸co, conforme descrito na se¸c˜ao 3.2.2. O mapeamento Γ ´e fundamental para que as inferˆencias envolvendo identificadores di- ferentes, por´em representando um mesmo indiv´ıduo, sejam realizadas corretamente pelo raciocinador DL.

No contexto desta tese, a nota¸c˜ao K, Γ |= φ ´e usada para expressar que uma f´ormula φ ´e consequˆencia l´ogica de uma base de conhecimento K, considerando o mapeamento provido por Γ.

As regras do c´alculo seguem, basicamente, a estrutura da gram´atica da linguagem de workflow proposta para expressar as composi¸c˜oes de servi¸cos web semˆanticos. O axi- oma de servico representa um esquema englobando todas as defini¸c˜oes de servi¸cos web semˆanticos aplic´aveis nas deriva¸c˜oes das provas de corre¸c˜ao parcial. Em outras palavras, cada defini¸c˜ao de servi¸co web semˆantico dispon´ıvel ´e considerada uma instˆancia deste es- quema, representada por suas pr´e-condi¸c˜oes (P re) e efeitos (E). A regra do consequente

serve como um mecanismo para combinar provas parciais de forma a compor a prova final, atrav´es do fortalecimento da pr´e-condi¸c˜ao e do enfraquecimento da p´os-condi¸c˜ao. A regra de sequˆencia permite que uma especifica¸c˜ao dada por uma sequˆencia de workflows seja derivada a partir de suas especifica¸c˜oes individuais. A regra requer que seja estabelecida uma asser¸c˜ao intermedi´aria θ, a partir da qual seja poss´ıvel derivar as especifica¸c˜oes indi- viduais. A regra paralelo estabelece que uma especifica¸c˜ao dada pela composi¸c˜ao paralela de workflows pode ser derivada a partir de suas deriva¸c˜oes independentes, observadas as condi¸c˜oes impostas pela regra. A regra if estabelece que uma especifica¸c˜ao dada por uma estrutura condicional if-then-else pode ser derivada a partir das deriva¸c˜oes de ambos os branches, considerando os respectivos valores de verdade da condi¸c˜ao na deriva¸c˜ao de cada branch. A regra de escolha estabelece que uma especifica¸c˜ao contendo escolha guar- dada pode ser derivada a partir das deriva¸c˜oes de cada branch desde que estabele¸cam a mesma p´os-condi¸c˜ao. A regra while permite que uma especifica¸c˜ao contendo itera¸c˜ao seja derivada a partir da inferˆencia de um invariante adequado para a itera¸c˜ao.

(servico)

K, Γ ⊢ {P re ∧ ECk} S(I, O) {ELk}

S = hI, O, P re, Ei∧ | Si inv| = | I ∪ O | (cons) K, Γ ⊢ {ϕ′} W {ψ′} K, Γ ⊢ {ϕ} W {ψ} (K ∪ {ϕ}, Γ |= ϕ′)∧ (update(K, ψ′), Γ |= ψ) (sequencia) K, Γ ⊢ {ϕ} W1 {θ} K, Γ ⊢ {θ} W2 {ψ} K, Γ ⊢ {ϕ} W1; W2 {ψ} (paralelo) K, Γ ⊢ {ϕ′} W1 {ψ′} K, Γ ⊢ {ϕ′′} W1 {ψ′′} K, Γ ⊢ {ϕ} W1k W2 {ψ} K ∪ {ϕ}, Γ |= ϕ′∪ ϕ′′∧ update(K, ψ′∪ ψ′′), Γ |= ψ (if ) K, Γ ⊢ {ϕ ∪ A1} W1 {ψ} K, Γ ⊢ {ϕ ∪ ¬A1} W2 {ψ} K, Γ ⊢ {ϕ} if A1thenW1elseW2 {ψ} (escolha) K, Γ ⊢ {ϕ ∪ A1} W1 {ψ} K, Γ ⊢ {ϕ ∪ A2} W2 {ψ} K, Γ ⊢ {ϕ} [A1]W1+ [A2]W2 {ψ} (while) K, Γ ⊢ {θ ∪ A1} W {θ} K, Γ ⊢ {θ} while A1doW {¬A1∪ θ}

Figura 10: C´alculo de Hoare para a linguagem de workflow.

As subse¸c˜oes a seguir discutem a aplicabilidade de cada uma das regras na deriva¸c˜ao de especifica¸c˜oes de corre¸c˜ao parcial. A discuss˜ao de cada regra ´e complementada com sua respectiva aplica¸c˜ao no running example descrito no in´ıcio desta se¸c˜ao. As provas dos exemplos discutidos a seguir est˜ao representadas na forma de ´arvore, onde a conclus˜ao representa a especifica¸c˜ao a ser provada e as sub-´arvores representam a aplica¸c˜ao de regras na deriva¸c˜ao da prova. Nos exemplos envolvendo ´arvores de prova mais complexas requerendo mais espa¸co para sua representa¸c˜ao, as sub-´arvores (deriva¸c˜oes parciais) s˜ao

ilustradas separadamente e fornecida uma indica¸c˜ao associando-a com a ´arvore principal. Nestes casos, a deriva¸c˜ao da prova ´e dada pela agrega¸c˜ao (jun¸c˜ao) de todas as sub-´arvores. 3.2.3.1 Regra de Invocac˜ao de Servi¸co

No c´alculo proposto, considera-se cada servi¸co semˆantico como um contrato, ou seja, tem-se acesso a ele somente atrav´es de sua interface publicada, sem o conhecimento de seu funcionamento interno. Todo o racioc´ınio envolvendo os servi¸cos semˆanticos ´e realizado com base em sua interface publicada, uma vez que n˜ao pode-se assumir que seu c´odigo- fonte esteja dispon´ıvel (como no caso de servi¸cos terceirizados). A partir desta perspectiva, cada defini¸c˜ao de servi¸co semˆantico ´e tratada como um axioma no c´alculo proposto, o qual ´e generalizado pelo esquema de axioma englobando sua pr´e-condi¸c˜ao P re e seus efeitos condicionais E, conforme ilustrado no axioma abaixo (transcrito da Figura 10).

(servico)

K, Γ ⊢ {P re ∧ ECk} S(I, O) {ELk}

S = hI, O, P re, Ei∧ | Si

inv | = | I ∪ O |

onde Si

inv ∈ Γ representa a fun¸c˜ao de mapeamento da i-´esima invoca¸c˜ao do servi¸co S e

a nota¸c˜ao “| • |” expressa a cardinalidade de um conjunto. Os identificadores ECk e ELk

denotam o k-´esimo efeito condicional do servi¸co S (i.e., {ECk/ELk} ∈ E).

Intuitivamente, a regra de invoca¸c˜ao de servi¸co expressa que sua aplica¸c˜ao na de- riva¸c˜ao de uma especifica¸c˜ao requer a existˆencia da defini¸c˜ao do servi¸co S invocado e a respectiva fun¸c˜ao de mapeamento Si

inv ∈ Γ. Uma vez que estas condi¸c˜oes s˜ao verificadas

(existˆencia da defini¸c˜ao do servi¸co e da fun¸c˜ao de mapeamento), o axioma de invoca¸c˜ao de servi¸co (instanciado com a defini¸c˜ao do servi¸co S) pode ser empregado na deriva¸c˜ao de especifica¸c˜oes de corre¸c˜ao parcial.

No caso de servi¸cos web semˆanticos com m´ultiplos efeitos condicionais, cada efeito condicional ´e considerado individualmente quando a regra de servi¸co ´e empregada na deriva¸c˜ao de especifica¸c˜oes. Esta no¸c˜ao ´e dada pela conclus˜ao da regra de invoca¸c˜ao de servi¸co, a qual expressa que o efeito ELk ´e garantido ser verdadeiro ap´os a invoca¸c˜ao do

servi¸co S se a pr´e-condi¸c˜ao P re ∧ ECk se verifica no estado inicial (i.e., o estado anterior

`a invoca¸c˜ao do servi¸co). Resumidamente, cada efeito condicional de um servi¸co web semˆantico (juntamente com a pr´e-condi¸c˜ao) ´e tratado individualmente como uma instˆancia do axioma de invoca¸c˜ao de servi¸co. Dessa forma, quando uma deriva¸c˜ao de especifica¸c˜ao envolve um servi¸co web semˆantico com m´ultiplos efeitos condicionais, ´e necess´ario que

1 @pre[ e x i s t s h a s P r o d u c t A v a i l a b l e . Product ( ps ) ] 2

3 s e a r c h (<ps >, <p>)

4

5 @post[ I n S t o c k ( p ) ]

Figura 11: Exemplo de uma especifica¸c˜ao v´alida com invoca¸c˜ao de servi¸co com efeitos condicionais.

somente uma dentre as (poss´ıveis) instˆancias do axioma de invoca¸c˜ao para o referido servi¸co se verifique (devido `a suposi¸c˜ao de que os m´ultiplos efeitos condicionais do servi¸co s˜ao mutualmente exclusivos) para concluir a validade da deriva¸c˜ao.

O exemplo da Figura 11 ilustra uma especifica¸c˜ao de corre¸c˜ao parcial cujo workflow ´e composto apenas por uma invoca¸c˜ao de servi¸co web semˆantico com m´ultiplos efeitos condicionais (no caso, o servi¸co search). A defini¸c˜ao do servi¸co search ´e descrita a seguir (transcrita do running example apresentado na se¸c˜ao 3.2.1):

search = h{P roductSpecif ication(prodSpec)}, {P roduct(prod)}, {⊤}, {∃hasP roductAvailable.P roduct(prodSpec)/InStock(prod), ¬∃hasP roductAvailable.P roduct(prodSpec)/OutOf Stock(prod)}i Neste caso, de acordo com a especifica¸c˜ao dada, a deriva¸c˜ao pode ser conclu´ıda com a aplica¸c˜ao do axioma de invoca¸c˜ao de servi¸co instanciado com a defini¸c˜ao do servi¸co

search. Considerando que a defini¸c˜ao do servi¸co search estabelece dois efeitos condicionais,

o axioma de invoca¸c˜ao deve ser instanciado duas vezes, uma para cada efeito condicional. A Figura 13 ilustra as duas deriva¸c˜oes (inv1 e inv2) geradas a partir da aplica¸c˜ao da regra

de invoca¸c˜ao considerando os efeitos condicionais definidos pelo servi¸co search. Para concluir a validade da especifica¸c˜ao, ´e suficiente que uma das deriva¸c˜oes seja v´alida. No exemplo considerado aqui, a deriva¸c˜ao inv1 na Figura 13 ´e uma deriva¸c˜ao v´alida para a

especifica¸c˜ao dada na Figura 11.

Observe que a fun¸c˜ao de mapeamento search1

inv ∈ Γ no contexto do axioma de in-

voca¸c˜ao ´e fundamental para decidir a correspondˆencia exata entre as pr´e- e p´os-condi¸c˜oes da especifica¸c˜ao e da defini¸c˜ao do servi¸co. A fun¸c˜ao de mapeamento search1

inv define o

conjunto {hproduct, pi, hprodSpec, psi}.

1 @pre[ A u t h o r i z a t i o n ( a ) ] 2

3 pay (<a >, <i >)

4

5 @post[ P a i d I n v o i c e ( i ) ]

Figura 12: Exemplo de especifica¸c˜ao inv´alida com invoca¸c˜ao de servi¸co.

pay dada a seguir:

pay = h{P aymentM ethod(pm)}, {Invoice(inv)}, {⊤}, {hasP ayment(inv, pm)}i

Neste caso, a especifica¸c˜ao dada n˜ao pode ser provada com a simples aplica¸c˜ao do axioma de invoca¸c˜ao instanciado com a defini¸c˜ao do servi¸co pay, ao contr´ario do que foi demonstrado no cen´ario anterior. Aqui, as pr´e- e p´os-condi¸c˜oes dadas na especifica¸c˜ao e na defini¸c˜ao do servi¸co n˜ao s˜ao sintaticamente unific´aveis [101], uma vez que os concei- tos envolvidos em suas defini¸c˜oes s˜ao distintos. A pr´e-condi¸c˜ao da especifica¸c˜ao garante um estado inicial onde o indiv´ıduo a ´e parte do dom´ınio do conceito Authorization, en- quanto que a defini¸c˜ao do servi¸co pay requer um estado no qual o individuo a (considere a fun¸c˜ao de mapeamento pay1

inv = {hpm, ai, hinv, ii} ∈ Γ) ´e parte do dom´ınio do conceito

P aymentM ethod, sendo que os conceitos s˜ao sintaticamente incompat´ıveis. O mesmo problema de incompatibilidade ocorre com os conceitos usados nas asser¸c˜oes dadas como p´os-condi¸c˜oes da especifica¸c˜ao e da defini¸c˜ao do servi¸co (P aidInvoice e Invoice, respec- tivamente).

Concluindo, a aplica¸c˜ao do axioma de servi¸co requer um cen´ario bastante restrito, onde a pr´e- e a p´os-condi¸c˜ao da especifica¸c˜ao correspondam exatamente `a pr´e-condi¸c˜ao e efeitos da defini¸c˜ao do servi¸co, o que limita consideravelmente sua aplica¸c˜ao na deriva¸c˜ao da prova de especifica¸c˜oes de corre¸c˜ao. Entretanto, como pode ser observado no ´ultimo cen´ario (Figura 12), a especifica¸c˜ao faz sentido uma vez que o estado garantido/requerido pela mesma ´e mais restrito/geral do que `aquele requerido/produzido pela aplica¸c˜ao do axioma de servi¸co pay. Ou seja, a especifica¸c˜ao ´e v´alida por´em n˜ao ´e deriv´avel somente com a aplica¸c˜ao do axioma de invoca¸c˜ao de servi¸co.

Para tratar com situa¸c˜oes desta natureza, propomos a regra do consequente, conforme descrito a seguir.

60

| {hproduct, pi, hprodSpec, psi} | = | {ps} ∪ {p} |

(inv2)

K@, Γ ⊢ {¬∃hasP roductAvailable.P roduct(ps)} search(hpsi, hpi) {OutOf Stock(p)}

search = h{P roductSpecif ication(prodSpec)}, {P roduct(prod)}, {⊤}, {∃hasP roductAvailable.P roduct(prodSpec)/InStock(prod), ¬∃hasP roductAvailable.P roduct(prodSpec)/OutOf Stock(prod)}i∧

| {hproduct, pi, hprodSpec, psi} | = | {ps} ∪ {p} |

Figura 13: Exemplo de instancia¸c˜ao da regra de invoca¸c˜ao para um servi¸co com m´ultiplos efeitos condicionais.

(cons)

(inv)

K@, Γ ⊢ {P aymentM ethod(pm)} pay(hauthi, hinvi) {Invoice(inv), hasP ayment(inv, pm)}

K@, Γ ⊢ {Authorization(a)} pay(hai, hii) {P aidInvoice(i)}

K@∪ {Authorization(a}, Γ |= P aymentM ethod(pm)∧

update(K@, {Invoice(inv), hasP ayment(inv, pm)}), Γ

|= P aidInvoice(i)

Figura 14: Exemplo de deriva¸c˜ao da prova para invoca¸c˜ao de servi¸co.

(cons)

(inv)

K@, Γ ⊢ {Registered(c)} signIn(hci, hsi) {OpenSession(s), hasLogin(c, s)}

K@, Γ ⊢ {θ} signIn(hci, hsi) {Logged(c)}

K@∪ θ, Γ |= Registered(c)∧

update(K@, {OpenSession(s), hasLogin(c, s)}), Γ

|= Logged(c)

(cons)

(inv)

K@, Γ ⊢ {Credential(c), ¬Registered(c)} createAcct(hci, hsi) {ClosedSession(s), hasLogin(c, s)}

K@, Γ ⊢ {Credential(c), ¬Registered(c)} createAcct(hci, hsi) {θ}

K@∪ {Credential(c), ¬Registered(c)}, Γ |= {Credential(c), ¬Registered(c)} ∧ update(K@, {ClosedSession(s), hasLogin(c, s)}), Γ |= θ (seq) . . .

K@, Γ ⊢ {Credential(c), ¬Registered(c)} createAcct(hci, hsi) {θ}

. . .

K@, Γ ⊢ {θ} signIn(hci, hsi) {Logged(c)}

K@, Γ ⊢ {Credential(c), ¬Registered(c)} createAcct(hci, hsi); signIn(hci, hsi) {Logged(c)}

3.2.3.2 Regra do Consequente

Como ilustrado nos exemplos da se¸c˜ao anterior, a aplica¸c˜ao do axioma de servi¸co na derivac˜ao de prova restringe-se `a situa¸c˜oes espec´ıficas onde existe uma correspondˆencia (sint´atica) exata entre os conceitos usados para definir as asser¸c˜oes aparecendo nas pr´e- e p´os-condi¸c˜oes da especifica¸c˜ao e da defini¸c˜ao do servi¸co. Esta restri¸c˜ao r´ıgida na apli- cabilidade do axioma de invoca¸c˜ao de servi¸co impede que o mesmo seja aplicado na derivac˜ao de especifica¸c˜oes que empregam conceitos sintaticamente distintos, por´em se- manticamente compat´ıveis, na formula¸c˜ao das pr´e- e p´os-condi¸coes. O exemplo descrito na Figura 12 ilustra esta situa¸c˜ao, onde a p´os-condi¸c˜ao da especifica¸c˜ao refere-se ao con- ceito PaidInvoice enquanto que a p´os-condi¸c˜ao do servi¸co refere-se ao conceito Invoice e a propriedade hasPayment. Nitidamente, estes conceitos e propriedades s˜ao sintatica- mente distintos, mas semanticamente compat´ıveis se observada a terminologia T@ dada

no exemplo (i.e., P aidInvoice ≡ Invoice ⊓ ∃hasP ayment.P aymentM ethod).

A regra do consequente desempenha um papel importante na deriva¸c˜ao da prova, permitindo ajustar as asser¸c˜oes das provas parciais de forma a compor a ´arvore de prova completa. Em essˆencia, a regra do consequente permite que especifica¸c˜oes j´a provadas (i.e., teoremas) sejam usados na deriva¸c˜ao de novas especifica¸c˜oes atrav´es do enfraquecimento ou fortalecimento das pr´e- e p´os-condi¸c˜oes, respectivamente. Uma asser¸c˜ao ϕ ´e dita ser mais forte que uma asser¸c˜ao ϕ′ se ϕ ⇒ ϕse verifica. Por outro lado, diz-se que a

asser¸c˜ao ϕ′ ´e mais fraca que a asser¸c˜ao ϕ. A regra do consequente apresentada a seguir

foi transcrita da Figura 10.

(cons) K, Γ ⊢ {ϕ

} W {ψ}

K, Γ ⊢ {ϕ} W {ψ}

(K ∪ {ϕ}, Γ |= ϕ′)∧

(update(K, ψ′), Γ |= ψ)

A regra estabelece que uma especifica¸c˜ao {ϕ} W {ψ} pode ser derivada a partir de um teorema {ϕ′} W {ψ} uma vez que as condi¸c˜oes se verificam. Para isso, basta provar

que a asser¸c˜ao ϕ ´e mais forte que a asser¸c˜ao ϕ′ considerando a base de conhecimento K,

e por outro lado, que a asser¸c˜ao ψ ´e consequˆencia l´ogica da asser¸c˜ao ψ′ considerando a

base de conhecimento K. Ambas as condi¸c˜oes representam as obriga¸c˜oes de prova para a aplica¸c˜ao da regra do consequente.

Retomando o exemplo apresentado na Figura 12, a especifica¸c˜ao dada poderia ser derivada com a aplica¸c˜ao conjunta da regra do consequente e do axioma de invoca¸c˜ao de servi¸co. A deriva¸c˜ao da prova para o exemplo ´e ilustrada na Figura 14. As obriga¸c˜oes de

prova geradas pela aplica¸c˜ao da regra do consequente s˜ao listadas a seguir.

K@∪ {Authorization(a)}, Γ |= P aymentM ethod(pm) (3.24)

update(K@, {Invoice(inv), hasP ayment(inv, pm)}), Γ |= P aidInvoice(i) (3.25)

A verifica¸c˜ao das obriga¸c˜oes de prova ´e modelada como um problema de inferˆencia, ou seja, um problema de decidir se a consequˆencia semˆantica se verifica a partir da base de conhecimento dada (neste exemplo, K@). Observe que os indiv´ıduos aparecendo na

f´ormula 3.24 s˜ao distintos, ou seja, seriam tratados como diferentes indiv´ıduos pelo racio- cinador DL. Dessa forma, a fun¸c˜ao de mapeamento pay1

inv ∈ Γ dada no contexto permite

ajustar os nomes dos indiv´ıduos de forma que sejam tratados como sendo o mesmo in- div´ıduo (i.e., pm 7→ a). Dessa forma, ap´os a substituic˜ao dos identificadores, a validade da obriga¸c˜ao de prova 3.24 ´e dada pela verifica¸c˜ao se a consequˆencia semˆantica

K@∪ {Authorization(a)}, Γ |= P aymentM ethod(a)

se verifica. A partir da base de conhecimento dada por K@, a obriga¸c˜ao de prova 3.24

se verifica, uma vez que ´e poss´ıvel inferir o relacionamento hier´arquico Authorization ⊑ P aymentM ethod a partir da terminologia T@ (conforme ilustrado na Figura 7).

A prova da obriga¸c˜ao 3.25 requer (ap´os a substitui¸c˜ao dos identificadores) a verifica¸c˜ao se a consequˆencia l´ogica

update(K@, {Invoice(i), hasP ayment(i, a)}), Γ |= P aidInvoice(i)

se verifica. Assumindo que a base de conhecimento K@ contˆem as asser¸c˜oes dadas na

pr´e-condi¸c˜ao do servi¸co pay (i.e., P aymentM ethod(a)), conclui-se que a obriga¸c˜ao de prova se verifica. Esta conclus˜ao ´e inferida devido `a presen¸ca do axioma de equivalˆencia

PaidInvoice ≡ Invoice ⊓ ∃ hasPayment.PaymentMethod na terminologia T@ da base

de conhecimento K@. Considerando a base de conhecimento resultante da execu¸c˜ao da

opera¸c˜ao de atualiza¸c˜ao update, a consequˆencia l´ogica verificada para esta obriga¸c˜ao pode ser sintetizada por

{Invoice(i), hasP ayment(i, a), P aymentM ethod(a)}), Γ |= P aidInvoice(i)

Observe novamente que o problema da divergˆencia de nomes dos identificadores (por ex., “i” e “inv” na f´ormula 3.25) ´e resolvido pela aplica¸c˜ao da fun¸c˜ao de mapeamento pay1

1 @pre[ C r e d e n t i a l ( c ) , not R e g i s t e r e d ( c ) ] 2 3 c r e a t e A c c t (<c >, <s >) ; 4 s i g n I n (<c >, <s >) 5 6 @post[ Logged ( c ) ]

Figura 16: Especifica¸c˜ao de corre¸c˜ao parcial com sequˆencia de servi¸cos.

Portanto, a partir da verifica¸c˜ao de ambas as obriga¸c˜oes de prova, conclui-se que a especifica¸c˜ao de corre¸c˜ao parcial dada na Figura 12 ´e v´alida.

3.2.3.3 Regra de Sequˆencia

Esta regra permite que uma especifica¸c˜ao de corre¸c˜ao parcial para uma sequˆencia {ϕ} W1; W2 {ψ} seja derivada a partir das especifica¸c˜oes para W1 e W2. Para isso, faz-se

necess´ario inferir uma asser¸c˜ao intermedi´aria θ que permita a deriva¸c˜ao da prova para as especifica¸c˜oes de W1 e W2 individualmente.

(sequencia) K, Γ ⊢ {ϕ} W1 {θ} K, Γ ⊢ {θ} W2 {ψ} K, Γ ⊢ {ϕ} W1 ; W2 {ψ}

O c´odigo ilustrado na Figura 16 expressa uma especifica¸c˜ao de corre¸c˜ao parcial en- volvendo a composi¸c˜ao sequencial de workflows, neste caso, as invoca¸c˜oes dos servi¸cos createAcct e signIn. O objetivo ´e verificar se a composi¸c˜ao sequencial dos servi¸cos sa- tisfaz a especifica¸c˜ao dada, ou seja, se a execu¸c˜ao do workflow permite obter um estado onde um determinado usu´ario c est´a logado (Logged(c)).

A deriva¸c˜ao da prova para este exemplo ´e ilustrada na Figura 15. A deriva¸c˜ao da prova inicia pela aplica¸c˜ao da regra da sequˆencia, uma vez que o elemento topo (a raiz da ´arvore sint´atica) do workflow ´e dado pelo construtor sequencial. A aplica¸c˜ao da regra de sequˆencia requer que seja inferida uma asser¸c˜ao intermedi´aria θ, conforme ilustrado na deriva¸c˜ao (parcial) na parte inferior da Figura 15. No entanto, a deriva¸c˜ao da prova segue sem a atribui¸c˜ao de uma asser¸c˜ao concreta para θ, mantendo-se o s´ımbolo θ onde for necess´ario referenciar a asser¸c˜ao intermedi´aria. A defini¸c˜ao da asser¸c˜ao concreta para θ ser´a dada a seguir, quando discutida a verifica¸c˜ao da validade das obriga¸c˜oes de prova. O pr´oximo passo consiste na deriva¸c˜ao da prova para as premissas da regra da sequˆencia aplicada anteriormente. Ambas as deriva¸c˜oes para as premissas est˜ao ilustradas na parte superior da Figura 15 (as duas primeiras deriva¸c˜oes). Tendo em vista que o work- flow dado em cada premissa a ser provada envolve a invoca¸c˜ao de um servi¸co (um s´ımbolo

terminal da linguagem), aplica-se o axioma de invoca¸c˜ao de servi¸co em cada deriva¸c˜ao, instanciados com as defini¸c˜oes dos servi¸cos correspondentes. Como discutido na se¸c˜ao anterior, a falta de correspondˆencia sint´atica entre as pr´e- e p´os-condi¸c˜oes dos servi¸cos e da especifica¸c˜ao requer a aplica¸c˜ao da regra do consequente em ambas as deriva¸c˜oes. Observe que no caso da deriva¸c˜ao referente ao servi¸co createAcct, n˜ao foi necess´ario o fortalecimento da pr´e-condi¸c˜ao, uma vez que houve a correspondˆencia exata entre elas ({Credential(c), ¬Registered(c)} ⇒ {Credential(c), ¬Registered(c)}).

Assim, as obriga¸c˜oes de prova geradas na deriva¸c˜ao para este exemplo s˜ao as seguintes: update(K@, {ClosedSession(s), hasLogin(c, s)}), Γ |= θ (3.26)

K@∪ θ, Γ |= Registered(c) (3.27)

update(K@, {OpenSession(s), hasLogin(c, s)}), Γ |= Logged(c) (3.28)

Para provar as obriga¸c˜oes geradas na deriva¸c˜ao (e assim concluir a validade da especi- fica¸c˜ao), faz-se necess´ario primeiramente inferir a asser¸c˜ao intermedi´aria θ. A inferˆencia da asser¸c˜ao intermedi´aria θ depende da estrat´egia escolhida para raciocinar sobre a deriva¸c˜ao da prova, ou seja, se ´e aplicada a estrat´egia backward (partindo da p´os-condi¸c˜ao da espe- cifica¸c˜ao) ou forward (partindo da pr´e-condi¸c˜ao da especifica¸c˜ao). ´E importante observar que o axioma de invoca¸c˜ao de servi¸co n˜ao pr´e-estabelece uma estrat´egia de racioc´ınio espec´ıfica para verificar a validade da especifica¸c˜ao, podendo-se optar por qualquer uma delas. No caso do emprego da estrat´egia backward, assume-se que a asser¸c˜ao intermedi´aria θ ´e dada pela pr´e-condi¸c˜ao do ´ultimo workflow da sequˆencia. Por outro lado, se for empre- gada a estrat´egia forward, assume-se θ como sendo a p´os-condi¸c˜ao do primeiro workflow

Documentos relacionados