Theory Independent_Post_Observation_Setup_RECEIVER
theory Independent_Post_Observation_Setup_RECEIVER
imports
"../../Safety_Properties"
"../Post_Observation_Setup_RECEIVER"
begin
subsubsection ‹Receiver observation setup›
locale Strong_ObservationSetup_RECEIVER = Fixed_UIDs + Fixed_PID + Fixed_AID
begin
fun γ :: "(state,act,out) trans ⇒ bool" where
"γ (Trans _ a _ _) ⟷
(∃ uid. userOfA a = Some uid ∧ uid ∈ UIDs)
∨
(∃ca. a = COMact ca)
∨
(∃uid p pid pst. a = Uact (uPost uid p pid pst))
∨
(∃uid p. a = Sact (sSys uid p))
∨
(∃uid p uid' p'. a = Cact (cUser uid p uid' p'))
∨
(∃uid p pid. a = Cact (cPost uid p pid))
∨
(∃uid p uid'. a = Cact (cFriend uid p uid'))
∨
(∃uid p uid'. a = Dact (dFriend uid p uid'))
∨
(∃uid p pid v. a = Uact (uVisPost uid p pid v))"
fun sPurge :: "sActt ⇒ sActt" where
"sPurge (sSys uid pwd) = sSys uid emptyPass"
fun comPurge :: "comActt ⇒ comActt" where
"comPurge (comSendServerReq uID p aID reqInfo) = comSendServerReq uID emptyPass aID reqInfo"
|"comPurge (comConnectClient uID p aID sp) = comConnectClient uID emptyPass aID sp"
|"comPurge (comReceivePost aID sp pID pst uID vs) =
(let pst' = (if aID = AID ∧ pID = PID then emptyPost else pst)
in comReceivePost aID sp pID pst' uID vs)"
|"comPurge (comSendPost uID p aID pID) = comSendPost uID emptyPass aID pID"
|"comPurge (comSendCreateOFriend uID p aID uID') = comSendCreateOFriend uID emptyPass aID uID'"
|"comPurge (comSendDeleteOFriend uID p aID uID') = comSendDeleteOFriend uID emptyPass aID uID'"
|"comPurge ca = ca"
fun g :: "(state,act,out)trans ⇒ obs" where
"g (Trans _ (Sact sa) ou _) = (Sact (sPurge sa), ou)"
|"g (Trans _ (COMact ca) ou _) = (COMact (comPurge ca), ou)"
|"g (Trans _ a ou _) = (a,ou)"
lemma comPurge_simps:
"comPurge ca = comSendServerReq uID p aID reqInfo ⟷ (∃p'. ca = comSendServerReq uID p' aID reqInfo ∧ p = emptyPass)"
"comPurge ca = comReceiveClientReq aID reqInfo ⟷ ca = comReceiveClientReq aID reqInfo"
"comPurge ca = comConnectClient uID p aID sp ⟷ (∃p'. ca = comConnectClient uID p' aID sp ∧ p = emptyPass)"
"comPurge ca = comConnectServer aID sp ⟷ ca = comConnectServer aID sp"
"comPurge ca = comReceivePost aID sp pID pst' uID v ⟷ (∃pst. ca = comReceivePost aID sp pID pst uID v ∧ pst' = (if pID = PID ∧ aID = AID then emptyPost else pst))"
"comPurge ca = comSendPost uID p aID pID ⟷ (∃p'. ca = comSendPost uID p' aID pID ∧ p = emptyPass)"
"comPurge ca = comSendCreateOFriend uID p aID uID' ⟷ (∃p'. ca = comSendCreateOFriend uID p' aID uID' ∧ p = emptyPass)"
"comPurge ca = comReceiveCreateOFriend aID cp uID uID' ⟷ ca = comReceiveCreateOFriend aID cp uID uID'"
"comPurge ca = comSendDeleteOFriend uID p aID uID' ⟷ (∃p'. ca = comSendDeleteOFriend uID p' aID uID' ∧ p = emptyPass)"
"comPurge ca = comReceiveDeleteOFriend aID cp uID uID' ⟷ ca = comReceiveDeleteOFriend aID cp uID uID'"
by (cases ca; auto)+
lemma g_simps:
"g (Trans s a ou s') = (COMact (comSendServerReq uID p aID reqInfo), ou')
⟷ (∃p'. a = COMact (comSendServerReq uID p' aID reqInfo) ∧ p = emptyPass ∧ ou = ou')"
"g (Trans s a ou s') = (COMact (comReceiveClientReq aID reqInfo), ou')
⟷ a = COMact (comReceiveClientReq aID reqInfo) ∧ ou = ou'"
"g (Trans s a ou s') = (COMact (comConnectClient uID p aID sp), ou')
⟷ (∃p'. a = COMact (comConnectClient uID p' aID sp) ∧ p = emptyPass ∧ ou = ou')"
"g (Trans s a ou s') = (COMact (comConnectServer aID sp), ou')
⟷ a = COMact (comConnectServer aID sp) ∧ ou = ou'"
"g (Trans s a ou s') = (COMact (comReceivePost aID sp pID pst' uID v), ou')
⟷ (∃pst. a = COMact (comReceivePost aID sp pID pst uID v) ∧ pst' = (if pID = PID ∧ aID = AID then emptyPost else pst) ∧ ou = ou')"
"g (Trans s a ou s') = (COMact (comSendPost uID p aID nID), O_sendPost (aid, sp, pid, pst, own, v))
⟷ (∃p'. a = COMact (comSendPost uID p' aID nID) ∧ p = emptyPass ∧ ou = O_sendPost (aid, sp, pid, pst, own, v))"
"g (Trans s a ou s') = (COMact (comSendCreateOFriend uID p aID uID'), ou')
⟷ (∃p'. a = (COMact (comSendCreateOFriend uID p' aID uID')) ∧ p = emptyPass ∧ ou = ou')"
"g (Trans s a ou s') = (COMact (comReceiveCreateOFriend aID cp uID uID'), ou')
⟷ a = COMact (comReceiveCreateOFriend aID cp uID uID') ∧ ou = ou'"
"g (Trans s a ou s') = (COMact (comSendDeleteOFriend uID p aID uID'), ou')
⟷ (∃p'. a = COMact (comSendDeleteOFriend uID p' aID uID') ∧ p = emptyPass ∧ ou = ou')"
"g (Trans s a ou s') = (COMact (comReceiveDeleteOFriend aID cp uID uID'), ou')
⟷ a = COMact (comReceiveDeleteOFriend aID cp uID uID') ∧ ou = ou'"
by (cases a; auto simp: comPurge_simps ObservationSetup_RECEIVER.comPurge.simps)+
end
end