• Aucun résultat trouvé

Simplified theory of the proximity effect in the limit of small pair

7.1 Weak proximity effect

O refinamentoleilao refpode ser refinado através da seguinte implementação:

IMPLEMENTATION leilao imp (OBJETOS) REFINES leilao ref

VALUES lance min = 100 IMPORTS leilaoVar (OBJETOS)

INVARIANT sessaoVar = rsessao ∧ leiloadosVar = rleiloados OPERATIONS

iniciar(obj) ˆ= VAR st IN

st ←− em sessao(obj)

IF obj ∈ OBJETOS ∧ st = FALSE THEN set sessao(lance min, obj) ELSE skip END END; propor(lance, obj) ˆ= VAR st1, st2, nn IN st1 ←− em sessao(obj); st2 ←− nao leiloado(obj); nn ←− get(obj);

A. Especificações e Obrigações de Prova 94

IF st1 = TRUE ∧ st2 = TRUE THEN

IF lance > nn

THEN set sessao(lance, obj) ELSE skip END END END; encerrar(obj) ˆ= VAR st1, st2 IN

st1 ←− em sessao(obj); st2 ←− nao leiloado(obj); IF st1 = TRUE ∧ st2 = TRUE

THEN set leiloados(obj) ELSE skip

END END;

resp, m ←− consultar(obj) ˆ= VAR st1, st2 IN

st1 ←− em sessao(obj); st2 ←− nao leiloado(obj); IF st1 = TRUE

THEN m ←− get(obj); IF st2 = TRUE

THEN resp := aberto ELSE resp := fechado END

ELSE m := 0; resp := inexistente END

END END

A. Especificações e Obrigações de Prova 95

MACHINE leilaoVar (OBJETOS)

VARIABLES sessaoVar, leiloadosVar

INVARIANT sessaoVar ∈ OBJETOS → N1∧ leiloadosVar ⊆ dom(sessaoVar)

INITIALISATION sessaoVar, leiloadosVar := ∅, ∅ OPERATIONS

set sessao(lance, obj) ˆ=

PRE obj ∈ OBJETOS ∧ lance ∈ N1

THEN sessaoVar := sessaoVar ⊕ {obj → lance min} END;

set leiloados(obj) ˆ=

PRE obj ∈ dom(sessaoVar)

THEN leiloadosVar := leiloadosVar ∪ {obj} END;

resp ←− em sessao(obj) ˆ= PRE obj ∈ OBJETOS

THEN resp := bool(obj ∈ dom(sessaoVar)) END;

resp ←− nao leiloado(obj) ˆ= PRE obj ∈ OBJETOS

THEN resp := bool(obj /∈ leiloadosVar) END;

resp ←− get(obj) ˆ=

PRE obj ∈ dom(sessaoVar) THEN resp := sessaoVar(obj) END

A. Especificações e Obrigações de Prova 96

END

Para a verificação da implementação são geradas as seguintes obrigações de prova: Inicialização:

CM∧ DMI∧ Dimp ⇒ [SUBSimp ; SUBSI]¬ [SUBSR]¬ INVI

CM∧ TIPO PARAMMI∧ TIPO CONJMI∧ REST CONSTMI∧ TIPO PARAMimp∧ TIPO CONJimp∧ REST CONSTimp ⇒ [SUBSimp ; SUBSI]¬ [SUBSR]¬ INVI

OBJETOS ∈ P1(Z) ∧ lance min ∈ N1

∧ RESP ∈ P1(Z) ∧ RESP = {aberto, fechado, inexistente}

∧ aberto = fechado ∧ aberto = inexistente ∧ fechado = inexistente ∧ card(OBJETOS) ∈ N1

⇒ [sessaoVar, leiloadosVar := ∅, ∅] ¬ [rsessao, rleiloados := ∅, ∅]

¬ (sessaoVar = rsessao ∧ leiloadosVar = rleiloados) ⇔

∅ = ∅

Operação iniciar:

CM∧ DMI∧ Dimp∧ INVMI∧ PREMR ⇒ PREI∧ [SUBSI]¬ [SUBSR]¬ INVI

CM∧ TIPO PARAMMI∧ TIPO CONJMI∧ REST CONSTMI

TIPO PARAMimp∧ TIPO CONJimp∧ REST CONSTimp∧ INVMI∧ PREMR

⇒ PREI∧ [SUBSI]¬ [SUBSR]¬ INVI

OBJETOS ∈ P1(Z) ∧ lance min ∈ N1

A. Especificações e Obrigações de Prova 97

∧ aberto = fechado ∧ aberto = inexistente ∧ fechado = inexistente ∧ card(OBJETOS) ∈ N1

∧ sessao ∈ OBJETOS ↔ N1∧ leiloados ⊆ dom(sessao)

∧ rsessao ∈ OBJETOS → N1∧ dom(rsessao) = dom(sessao)

∧ ∀x • (x ∈ dom(rsessao) ⇒ rsessao(x) = max(sessao[{x}])) ∧ rleiloados = leiloados ∧ sessaoVar = rsessao

∧ leiloadosVar = rleiloados ∧ obj ∈ OBJETOS \ dom(sessao) ∧ obj ∈ OBJETOS \ dom(rsessao)

⇒ [VAR st

IN st ←− em sessao(obj);

IF obj ∈ OBJETOS ∧ st = FALSE THEN set sessao(lance min, obj) ELSE skip END

END]

¬ [rsessao := rsessao ⊕ {obj → lance min}]

¬ (sessaoVar = rsessao ∧ leiloadosVar = rleiloados) ⇔

lance min ∈ N1

∧ sessao ∈ OBJETOS ↔ N1

∧ rsessao ∈ OBJETOS → N1∧ dom(rsessao) = dom(sessao)

∧ ∀x • (x ∈ dom(rsessao) ⇒ rsessao(x) = max(sessao[{x}])) ∧ sessaoVar = rsessao ∧ obj ∈ OBJETOS \ dom(sessao)

∧ obj ∈ OBJETOS \ dom(rsessao) ∧ obj ∈ OBJETOS lance min ∈ N1

∧ obj /∈ dom(sessaoVar)

⇒ sessaoVar ⊕ {obj → lance min} = rsessao ⊕ {obj → lance min}

Operação propor:

CM∧ DMI∧ Dimp∧ INVMI∧ PREMR ⇒ PREI∧ [SUBSI]¬ [SUBSR]¬ INVI

A. Especificações e Obrigações de Prova 98

CM∧ TIPO PARAMMI∧ TIPO CONJMI∧ REST CONSTMI

TIPO PARAMimp∧ TIPO CONJimp∧ REST CONSTimp∧ INVMI∧ PREMR

⇒ PREI∧ [SUBSI]¬ [SUBSR]¬ INVI

OBJETOS ∈ P1(Z) ∧ lance min ∈ N1

∧ RESP ∈ P1(Z) ∧ RESP = {aberto, fechado, inexistente}

∧ aberto = fechado ∧ aberto = inexistente ∧ fechado = inexistente ∧ card(OBJETOS) ∈ N1

∧ sessao ∈ OBJETOS ↔ N1∧ leiloados ⊆ dom(sessao)

∧ rsessao ∈ OBJETOS → N1∧ dom(rsessao) = dom(sessao)

∧ ∀x • (x ∈ dom(rsessao) ⇒ rsessao(x) = max(sessao[{x}])) ∧ rleiloados = leiloados ∧ sessaoVar = rsessao

∧ leiloadosVar = rleiloados ∧ lance ∈ N1

∧ obj ∈ dom(sessao) \ leiloados ∧ obj ∈ dom(rsessao) \ rleiloados

⇒ [VAR st1, st2, nn IN st1 ←− em sessao(obj); st2 ←− nao leiloado(obj); nn ←− get(obj); IF st1 = TRUE ∧ st2 = TRUE THEN IF lance > nn

THEN set sessao(lance, obj) ELSE skip END

ELSE skip END END]

¬ [rsessao := rsessao ⊕ {obj → lance}]

¬ (sessaoVar = rsessao ∧ leiloadosVar = rleiloados) ⇔

sessao ∈ OBJETOS ↔ N1

A. Especificações e Obrigações de Prova 99

∧ ∀x • (x ∈ dom(rsessao) ⇒ rsessao(x) = max(sessao[{x}])) ∧ sessaoVar = rsessao ∧ obj ∈ OBJETOS \ dom(sessao)

∧ obj ∈ OBJETOS \ dom(rsessao) ∧ obj ∈ OBJETOS ∧ obj ∈ dom(sessaoVar) ∧ obj /∈ leiloadosVar ∧ lance > sessaoVar(obj) ∧ lance ∈ N1

⇒ sessaoVar ⊕ {obj → lance} = rsessao ⊕ {obj → lance}

Operação encerrar:

CM∧ DMI∧ Dimp∧ INVMI∧ PREMR ⇒ PREI∧ [SUBSI]¬ [SUBSR]¬ INVI

CM∧ TIPO PARAMMI∧ TIPO CONJMI∧ REST CONSTMI

TIPO PARAMimp∧ TIPO CONJimp∧ REST CONSTimp∧ INVMI∧ PREMR ⇒ PREI∧ [SUBSI]¬ [SUBSR]¬ INVI

OBJETOS ∈ P1(Z) ∧ lance min ∈ N1

∧ RESP ∈ P1(Z) ∧ RESP = {aberto, fechado, inexistente}

∧ aberto = fechado ∧ aberto = inexistente ∧ fechado = inexistente ∧ card(OBJETOS) ∈ N1

∧ sessao ∈ OBJETOS ↔ N1∧ leiloados ⊆ dom(sessao)

∧ rsessao ∈ OBJETOS → N1∧ dom(rsessao) = dom(sessao)

∧ ∀x • (x ∈ dom(rsessao) ⇒ rsessao(x) = max(sessao[{x}])) ∧ rleiloados = leiloados ∧ sessaoVar = rsessao

∧ leiloadosVar = rleiloados ∧ obj ∈ dom(sessao) \ leiloados ∧ obj ∈ dom(rsessao) \ rleiloados

⇒ [VAR st1, st2

IN st1 ←− em sessao(obj); st2 ←− nao leiloado(obj); IF st1 = TRUE ∧ st2 = TRUE THEN set leiloados(obj)

A. Especificações e Obrigações de Prova 100

ELSE skip END END]

¬ [rleiloados := rleiloados ∪ {obj}]

¬ (sessaoVar = rsessao ∧ leiloadosVar = rleiloados) ⇔

OBJETOS ∈ P1(Z)

∧ sessao ∈ OBJETOS ↔ N1∧ leiloados ⊆ dom(sessao)

∧ rsessao ∈ OBJETOS → N1∧ dom(rsessao) = dom(sessao)

∧ ∀x • (x ∈ dom(rsessao) ⇒ rsessao(x) = max(sessao[{x}])) ∧ rleiloados = leiloados ∧ sessaoVar = rsessao

∧ leiloadosVar = rleiloados ∧ obj ∈ dom(sessao) \ leiloados ∧ obj ∈ dom(rsessao) \ rleiloados ∧ obj ∈ OBJETOS

⇒ leiloadosVar ∪ {obj} = rleiloados ∪ {obj}

Operação consultar:

CM∧ DMI∧ Dimp∧ INVMI∧ PREMR

⇒ PREI∧ [SUBS’I]¬ [SUBSR]¬ (INVI∧ y’ = y)

CM∧ TIPO PARAMMI∧ TIPO CONJMI∧ REST CONSTMI

TIPO PARAMimp∧ TIPO CONJimp∧ REST CONSTimp∧ INVMI∧ PREMR

⇒ PREI∧ [SUBS’I]¬ [SUBSR]¬ (INVI∧ y’ = y)

OBJETOS ∈ P1(Z) ∧ lance min ∈ N1

∧ RESP ∈ P1(Z) ∧ RESP = {aberto, fechado, inexistente}

∧ aberto = fechado ∧ aberto = inexistente ∧ fechado = inexistente ∧ card(OBJETOS) ∈ N1

∧ sessao ∈ OBJETOS ↔ N1∧ leiloados ⊆ dom(sessao)

∧ rsessao ∈ OBJETOS → N1∧ dom(rsessao) = dom(sessao)

∧ ∀x • (x ∈ dom(rsessao) ⇒ rsessao(x) = max(sessao[{x}])) ∧ rleiloados = leiloados ∧ sessaoVar = rsessao

A. Especificações e Obrigações de Prova 101

∧ leiloadosVar = rleiloados ∧ obj ∈ dom(sessao) ∧ obj ∈ dom(rsessao) ⇒ [VAR st1, st2 IN st1 ←− em sessao(obj); st2 ←− nao leiloado(obj); IF st1 = TRUE THEN m’ ←− get(obj); IF st2 = TRUE

THEN resp’ := aberto ELSE resp’ := fechado END

ELSE m’ := 0; resp’ := inexistente END END]

¬ [IF obj /∈ rleiloados THEN resp := aberto ELSE resp := fechado END]

¬ (sessaoVar = rsessao ∧ leiloadosVar = rleiloados ∧ m’ = m ∧ resp’ = resp)

OBJETOS ∈ P1(Z) ∧ lance min ∈ N1

∧ RESP ∈ P1(Z) ∧ RESP = {aberto, fechado, inexistente}

∧ aberto = fechado ∧ aberto = inexistente ∧ fechado = inexistente ∧ card(OBJETOS) ∈ N1

∧ sessao ∈ OBJETOS ↔ N1∧ leiloados ⊆ dom(sessao)

∧ rsessao ∈ OBJETOS → N1∧ dom(rsessao) = dom(sessao)

∧ ∀x • (x ∈ dom(rsessao) ⇒ rsessao(x) = max(sessao[{x}])) ∧ rleiloados = leiloados ∧ sessaoVar = rsessao

∧ leiloadosVar = rleiloados ∧ obj ∈ dom(sessao) ∧ obj ∈ dom(rsessao)

⇒ obj ∈ OBJETOS

∧ (obj ∈ dom(sessaoVar) ∧ obj /∈ leiloadosVar ⇒ sessaoVar(obj) = rsessao(obj))

A. Especificações e Obrigações de Prova 102

∧ (obj ∈ dom(sessaoVar) ∧ obj ∈ leiloadosVar

⇒ sessaoVar(obj) = rsessao(obj) ∧ aberto = fechado) ∧ (obj ∈ dom(sessaoVar) ∧ obj ∈ leiloadosVar

∧ obj /∈ rleiloados)

⇒ sessaoVar(obj) = rsessao(obj) ∧ fechado = aberto) ∧ (obj /∈ dom(sessaoVar) ∧ obj /∈ rleiloados

⇒ 0 = rsessao(obj) ∧ inexistente = aberto) ∧ (obj /∈ dom(sessaoVar) ∧ obj ∈ rleiloados

Apêndice B

Teoria Axiomática dos Conjuntos NBG