[STATEMENT]
lemma eqButPID_step_\<gamma>_out:
assumes ss1: "eqButPID s s1"
and step: "step s a = (ou,s')" and step1: "step s1 a = (ou1,s1')"
and sT: "reachNT s" and T: "\<not> T (Trans s a ou s')"
and s1: "reach s1"
and \<gamma>: "\<gamma> (Trans s a ou s')"
shows "(\<exists> uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
proof-
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
have s'T: "reachNT s'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. reachNT s'
[PROOF STEP]
using step sT T
[PROOF STATE]
proof (prove)
using this:
step s a = (ou, s')
reachNT s
\<not> T (Trans s a ou s')

goal (1 subgoal):
 1. reachNT s'
[PROOF STEP]
using reachNT_PairI
[PROOF STATE]
proof (prove)
using this:
step s a = (ou, s')
reachNT s
\<not> T (Trans s a ou s')
\<lbrakk>reachNT ?s; step ?s ?a = (?ou, ?s'); \<not> T (Trans ?s ?a ?ou ?s')\<rbrakk> \<Longrightarrow> reachNT ?s'

goal (1 subgoal):
 1. reachNT s'
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
reachNT s'

goal (1 subgoal):
 1. (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
note op = reachNT_state[OF s'T]
[PROOF STATE]
proof (state)
this:
\<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV))

goal (1 subgoal):
 1. (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
note [simp] = all_defs
[PROOF STATE]
proof (state)
this:
e_startSys ?s ?uID ?p \<equiv> userIDs ?s = []
startSys ?s ?uID ?p \<equiv> ?s\<lparr>admin := ?uID, userIDs := [?uID], user := (user ?s)(?uID := emptyUser), pass := (pass ?s)(?uID := ?p)\<rparr>
e_createNUReq ?s ?uID ?requestInfo \<equiv> admin ?s \<in>\<in> userIDs ?s \<and> ?uID \<notin> set (userIDs ?s) \<and> ?uID \<notin> set (pendingUReqs ?s)
createNUReq ?s ?uID ?reqInfo \<equiv> ?s\<lparr>pendingUReqs := pendingUReqs ?s ## ?uID, userReq := (userReq ?s)(?uID := ?reqInfo)\<rparr>
e_createUser ?s ?uID ?p ?uID' ?p' \<equiv> IDsOK ?s [?uID] [] [] [] \<and> pass ?s ?uID = ?p \<and> ?uID = admin ?s \<and> ?uID' \<in>\<in> pendingUReqs ?s
createUser ?s ?uID ?p ?uID' ?p' \<equiv> ?s\<lparr>userIDs := ?uID' # userIDs ?s, user := (user ?s)(?uID' := emptyUser), pass := (pass ?s)(?uID' := ?p'), pendingUReqs := remove1 ?uID' (pendingUReqs ?s), userReq := (userReq ?s)(?uID := emptyRequestInfo)\<rparr>
e_createPost ?s ?uID ?p ?pID \<equiv> IDsOK ?s [?uID] [] [] [] \<and> pass ?s ?uID = ?p \<and> ?pID \<notin> set (postIDs ?s)
createPost ?s ?uID ?p ?pID \<equiv> ?s\<lparr>postIDs := ?pID # postIDs ?s, post := (post ?s)(?pID := emptyPost), owner := (owner ?s)(?pID := ?uID)\<rparr>
e_createFriendReq ?s ?uID ?p ?uID' ?req \<equiv> IDsOK ?s [?uID, ?uID'] [] [] [] \<and> pass ?s ?uID = ?p \<and> ?uID \<notin> set (pendingFReqs ?s ?uID') \<and> ?uID \<notin> set (friendIDs ?s ?uID')
createFriendReq ?s ?uID ?p ?uID' ?req \<equiv> let pfr = pendingFReqs ?s in ?s\<lparr>pendingFReqs := pfr(?uID' := pfr ?uID' ## ?uID), friendReq := fun_upd2 (friendReq ?s) ?uID ?uID' ?req\<rparr>
e_createFriend ?s ?uID ?p ?uID' \<equiv> IDsOK ?s [?uID, ?uID'] [] [] [] \<and> pass ?s ?uID = ?p \<and> ?uID' \<in>\<in> pendingFReqs ?s ?uID
createFriend ?s ?uID ?p ?uID' \<equiv> let fr = friendIDs ?s; pfr = pendingFReqs ?s in ?s\<lparr>friendIDs := fr(?uID := fr ?uID ## ?uID', ?uID' := fr ?uID' ## ?uID), pendingFReqs := pfr(?uID := remove1 ?uID' (pfr ?uID), ?uID' := remove1 ?uID (pfr ?uID')), friendReq := fun_upd2 (fun_upd2 (friendReq ?s) ?uID' ?uID emptyRequestInfo) ?uID ?uID' emptyRequestInfo\<rparr>
e_deleteFriend ?s ?uID ?p ?uID' \<equiv> IDsOK ?s [?uID, ?uID'] [] [] [] \<and> pass ?s ?uID = ?p \<and> ?uID' \<in>\<in> friendIDs ?s ?uID
deleteFriend ?s ?uID ?p ?uID' \<equiv> let fr = friendIDs ?s in ?s\<lparr>friendIDs := fr(?uID := removeAll ?uID' (fr ?uID), ?uID' := removeAll ?uID (fr ?uID'))\<rparr>
e_updateUser ?s ?uID ?p ?p' ?name ?info \<equiv> IDsOK ?s [?uID] [] [] [] \<and> pass ?s ?uID = ?p
updateUser ?s ?uID ?p ?p' ?name ?info \<equiv> ?s\<lparr>user := (user ?s)(?uID := Usr ?name ?info), pass := (pass ?s)(?uID := ?p')\<rparr>
e_updatePost ?s ?uID ?p ?pID ?pst \<equiv> IDsOK ?s [?uID] [?pID] [] [] \<and> pass ?s ?uID = ?p \<and> owner ?s ?pID = ?uID
updatePost ?s ?uID ?p ?pID ?pst \<equiv> let sW = sharedWith ?s in ?s\<lparr>post := (post ?s)(?pID := ?pst), sharedWith := sW(?pID := map (\<lambda>(aID, uu_). (aID, False)) (sW ?pID))\<rparr>
e_updateVisPost ?s ?uID ?p ?pID ?vs \<equiv> IDsOK ?s [?uID] [?pID] [] [] \<and> pass ?s ?uID = ?p \<and> owner ?s ?pID = ?uID \<and> ?vs \<in> {FriendV, PublicV}
updateVisPost ?s ?uID ?p ?pID ?vs \<equiv> ?s\<lparr>vis := (vis ?s)(?pID := ?vs)\<rparr>
sendServerReq ?s ?uID ?p ?aID ?reqInfo \<equiv> ((?aID, ?reqInfo), ?s\<lparr>pendingSApiReqs := pendingSApiReqs ?s ## ?aID, sApiReq := (sApiReq ?s)(?aID := ?reqInfo)\<rparr>)
e_sendServerReq ?s ?uID ?p ?aID ?reqInfo \<equiv> IDsOK ?s [?uID] [] [] [] \<and> pass ?s ?uID = ?p \<and> ?uID = admin ?s \<and> ?aID \<notin> set (pendingSApiReqs ?s)
receiveClientReq ?s ?aID ?reqInfo \<equiv> ?s\<lparr>pendingCApiReqs := pendingCApiReqs ?s ## ?aID, cApiReq := (cApiReq ?s)(?aID := ?reqInfo)\<rparr>
e_receiveClientReq ?s ?aID ?reqInfo \<equiv> ?aID \<notin> set (pendingCApiReqs ?s) \<and> admin ?s \<in>\<in> userIDs ?s
connectClient ?s ?uID ?p ?aID ?cp \<equiv> ((?aID, ?cp), ?s\<lparr>clientApiIDs := ?aID # clientApiIDs ?s, clientPass := (clientPass ?s)(?aID := ?cp), pendingCApiReqs := remove1 ?aID (pendingCApiReqs ?s), cApiReq := (cApiReq ?s)(?aID := emptyRequestInfo)\<rparr>)
e_connectClient ?s ?uID ?p ?aID ?cp \<equiv> IDsOK ?s [?uID] [] [] [] \<and> pass ?s ?uID = ?p \<and> ?uID = admin ?s \<and> ?aID \<in>\<in> pendingCApiReqs ?s \<and> ?aID \<notin> set (clientApiIDs ?s)
connectServer ?s ?aID ?sp \<equiv> ?s\<lparr>serverApiIDs := ?aID # serverApiIDs ?s, serverPass := (serverPass ?s)(?aID := ?sp), pendingSApiReqs := remove1 ?aID (pendingSApiReqs ?s), sApiReq := (sApiReq ?s)(?aID := emptyRequestInfo)\<rparr>
e_connectServer ?s ?aID ?sp \<equiv> ?aID \<in>\<in> pendingSApiReqs ?s \<and> ?aID \<notin> set (serverApiIDs ?s)
receivePost ?s ?aID ?sp ?pID ?pst ?uID ?vs \<equiv> let opIDs = outerPostIDs ?s in ?s\<lparr>outerPostIDs := opIDs(?aID := List.insert ?pID (opIDs ?aID)), outerPost := fun_upd2 (outerPost ?s) ?aID ?pID ?pst, outerOwner := fun_upd2 (outerOwner ?s) ?aID ?pID ?uID, outerVis := fun_upd2 (outerVis ?s) ?aID ?pID ?vs\<rparr>
e_receivePost ?s ?aID ?sp ?pID ?nt ?uID ?vs \<equiv> IDsOK ?s [] [] [(?aID, [])] [] \<and> serverPass ?s ?aID = ?sp
sendPost ?s ?uID ?p ?aID ?pID \<equiv> ((?aID, clientPass ?s ?aID, ?pID, post ?s ?pID, owner ?s ?pID, vis ?s ?pID), ?s\<lparr>sharedWith := (sharedWith ?s)(?pID := insert2 ?aID True (sharedWith ?s ?pID))\<rparr>)
e_sendPost ?s ?uID ?p ?aID ?pID \<equiv> IDsOK ?s [?uID] [?pID] [] [?aID] \<and> pass ?s ?uID = ?p \<and> ?uID = admin ?s \<and> ?aID \<in>\<in> clientApiIDs ?s
receiveCreateOFriend ?s ?saID ?sp ?uID ?uID' \<equiv> let ofr = recvOuterFriendIDs ?s in ?s\<lparr>recvOuterFriendIDs := ofr(?uID' := ofr ?uID' ## (?saID, ?uID))\<rparr>
e_receiveCreateOFriend ?s ?saID ?sp ?uID ?uID' \<equiv> IDsOK ?s [] [] [(?saID, [])] [] \<and> serverPass ?s ?saID = ?sp \<and> (?saID, ?uID) \<notin> set (recvOuterFriendIDs ?s ?uID')
sendCreateOFriend ?s ?uID ?p ?aID ?uID' \<equiv> let ofr = sentOuterFriendIDs ?s in ((?aID, clientPass ?s ?aID, ?uID, ?uID'), ?s\<lparr>sentOuterFriendIDs := ofr(?uID := ofr ?uID ## (?aID, ?uID'))\<rparr>)
e_sendCreateOFriend ?s ?uID ?p ?caID ?uID' \<equiv> IDsOK ?s [?uID] [] [] [?caID] \<and> pass ?s ?uID = ?p \<and> (?caID, ?uID') \<notin> set (sentOuterFriendIDs ?s ?uID)
receiveDeleteOFriend ?s ?saID ?sp ?uID ?uID' \<equiv> let ofr = recvOuterFriendIDs ?s in ?s\<lparr>recvOuterFriendIDs := ofr(?uID' := remove1 (?saID, ?uID) (ofr ?uID'))\<rparr>
e_receiveDeleteOFriend ?s ?saID ?sp ?uID ?uID' \<equiv> IDsOK ?s [] [] [(?saID, [])] [] \<and> serverPass ?s ?saID = ?sp \<and> (?saID, ?uID) \<in>\<in> recvOuterFriendIDs ?s ?uID'
sendDeleteOFriend ?s ?uID ?p ?aID ?uID' \<equiv> let ofr = sentOuterFriendIDs ?s in ((?aID, clientPass ?s ?aID, ?uID, ?uID'), ?s\<lparr>sentOuterFriendIDs := ofr(?uID := remove1 (?aID, ?uID') (ofr ?uID))\<rparr>)
e_sendDeleteOFriend ?s ?uID ?p ?caID ?uID' \<equiv> IDsOK ?s [?uID] [] [] [?caID] \<and> pass ?s ?uID = ?p \<and> (?caID, ?uID') \<in>\<in> sentOuterFriendIDs ?s ?uID
readNUReq ?s ?uID ?p ?uID' \<equiv> userReq ?s ?uID'
e_readNUReq ?s ?uID ?p ?uID' \<equiv> IDsOK ?s [?uID] [] [] [] \<and> pass ?s ?uID = ?p \<and> ?uID = admin ?s \<and> ?uID' \<in>\<in> pendingUReqs ?s
readUser ?s ?uID ?p ?uID' \<equiv> nameUser (user ?s ?uID')
e_readUser ?s ?uID ?p ?uID' \<equiv> IDsOK ?s [?uID, ?uID'] [] [] [] \<and> pass ?s ?uID = ?p
readAmIAdmin ?s ?uID ?p \<equiv> ?uID = admin ?s
e_readAmIAdmin ?s ?uID ?p \<equiv> IDsOK ?s [?uID] [] [] [] \<and> pass ?s ?uID = ?p
readPost ?s ?uID ?p ?pID \<equiv> post ?s ?pID
e_readPost ?s ?uID ?p ?pID \<equiv> IDsOK ?s [?uID] [?pID] [] [] \<and> pass ?s ?uID = ?p \<and> (owner ?s ?pID = ?uID \<or> ?uID \<in>\<in> friendIDs ?s (owner ?s ?pID) \<or> vis ?s ?pID = PublicV)
readOwnerPost ?s ?uID ?p ?pID \<equiv> owner ?s ?pID
e_readOwnerPost ?s ?uID ?p ?pID \<equiv> IDsOK ?s [?uID] [?pID] [] [] \<and> pass ?s ?uID = ?p \<and> (admin ?s = ?uID \<or> owner ?s ?pID = ?uID \<or> ?uID \<in>\<in> friendIDs ?s (owner ?s ?pID) \<or> vis ?s ?pID = PublicV)
readVisPost ?s ?uID ?p ?pID \<equiv> vis ?s ?pID
e_readVisPost ?s ?uID ?p ?pID \<equiv> IDsOK ?s [?uID] [?pID] [] [] \<and> pass ?s ?uID = ?p \<and> (admin ?s = ?uID \<or> owner ?s ?pID = ?uID \<or> ?uID \<in>\<in> friendIDs ?s (owner ?s ?pID) \<or> vis ?s ?pID = PublicV)
readOPost ?s ?uID ?p ?aID ?pID \<equiv> outerPost ?s ?aID ?pID
e_readOPost ?s ?uID ?p ?aID ?pID \<equiv> IDsOK ?s [?uID] [] [(?aID, [?pID])] [] \<and> pass ?s ?uID = ?p \<and> (admin ?s = ?uID \<or> (?aID, outerOwner ?s ?aID ?pID) \<in>\<in> recvOuterFriendIDs ?s ?uID \<or> outerVis ?s ?aID ?pID = PublicV)
readOwnerOPost ?s ?uID ?p ?aID ?pID \<equiv> outerOwner ?s ?aID ?pID
e_readOwnerOPost ?s ?uID ?p ?aID ?pID \<equiv> IDsOK ?s [?uID] [] [(?aID, [?pID])] [] \<and> pass ?s ?uID = ?p \<and> (admin ?s = ?uID \<or> (?aID, outerOwner ?s ?aID ?pID) \<in>\<in> recvOuterFriendIDs ?s ?uID \<or> outerVis ?s ?aID ?pID = PublicV)
readVisOPost ?s ?uID ?p ?aID ?pID \<equiv> outerVis ?s ?aID ?pID
e_readVisOPost ?s ?uID ?p ?aID ?pID \<equiv> let post = outerPost ?s ?aID ?pID in IDsOK ?s [?uID] [] [(?aID, [?pID])] [] \<and> pass ?s ?uID = ?p \<and> (admin ?s = ?uID \<or> (?aID, outerOwner ?s ?aID ?pID) \<in>\<in> recvOuterFriendIDs ?s ?uID \<or> outerVis ?s ?aID ?pID = PublicV)
readFriendReqToMe ?s ?uID ?p ?uID' \<equiv> friendReq ?s ?uID' ?uID
e_readFriendReqToMe ?s ?uID ?p ?uID' \<equiv> IDsOK ?s [?uID, ?uID'] [] [] [] \<and> pass ?s ?uID = ?p \<and> ?uID' \<in>\<in> pendingFReqs ?s ?uID
readFriendReqFromMe ?s ?uID ?p ?uID' \<equiv> friendReq ?s ?uID ?uID'
e_readFriendReqFromMe ?s ?uID ?p ?uID' \<equiv> IDsOK ?s [?uID, ?uID'] [] [] [] \<and> pass ?s ?uID = ?p \<and> ?uID \<in>\<in> pendingFReqs ?s ?uID'
readSApiReq ?s ?uID ?p ?uID' \<equiv> sApiReq ?s ?uID'
e_readSApiReq ?s ?uID ?p ?uID' \<equiv> IDsOK ?s [?uID] [] [] [] \<and> pass ?s ?uID = ?p \<and> ?uID = admin ?s \<and> ?uID' \<in>\<in> pendingSApiReqs ?s
readCApiReq ?s ?uID ?p ?uID' \<equiv> cApiReq ?s ?uID'
e_readCApiReq ?s ?uID ?p ?uID' \<equiv> IDsOK ?s [?uID] [] [] [] \<and> pass ?s ?uID = ?p \<and> ?uID = admin ?s \<and> ?uID' \<in>\<in> pendingCApiReqs ?s
listPendingUReqs ?s ?uID ?p \<equiv> pendingUReqs ?s
e_listPendingUReqs ?s ?uID ?p \<equiv> IDsOK ?s [?uID] [] [] [] \<and> pass ?s ?uID = ?p \<and> ?uID = admin ?s
listAllUsers ?s ?uID ?p \<equiv> userIDs ?s
e_listAllUsers ?s ?uID ?p \<equiv> IDsOK ?s [?uID] [] [] [] \<and> pass ?s ?uID = ?p
listFriends ?s ?uID ?p ?uID' \<equiv> friendIDs ?s ?uID'
e_listFriends ?s ?uID ?p ?uID' \<equiv> IDsOK ?s [?uID, ?uID'] [] [] [] \<and> pass ?s ?uID = ?p \<and> (?uID = ?uID' \<or> ?uID \<in>\<in> friendIDs ?s ?uID')
listSentOuterFriends ?s ?uID ?p ?uID' \<equiv> sentOuterFriendIDs ?s ?uID'
e_listSentOuterFriends ?s ?uID ?p ?uID' \<equiv> IDsOK ?s [?uID, ?uID'] [] [] [] \<and> pass ?s ?uID = ?p \<and> (?uID = ?uID' \<or> ?uID \<in>\<in> friendIDs ?s ?uID')
listRecvOuterFriends ?s ?uID ?p \<equiv> recvOuterFriendIDs ?s ?uID
e_listRecvOuterFriends ?s ?uID ?p \<equiv> IDsOK ?s [?uID] [] [] [] \<and> pass ?s ?uID = ?p
listInnerPosts ?s ?uID ?p \<equiv> cmap (\<lambda>pID. if vis ?s pID \<noteq> FriendV \<or> ?uID \<in>\<in> friendIDs ?s (owner ?s pID) \<or> ?uID = owner ?s pID then [(owner ?s pID, pID)] else []) (postIDs ?s)
e_listInnerPosts ?s ?uID ?p \<equiv> IDsOK ?s [?uID] [] [] [] \<and> pass ?s ?uID = ?p
listOuterPosts ?s ?uID ?p \<equiv> cmap (\<lambda>saID. cmap (\<lambda>pID. if outerVis ?s saID pID = PublicV \<or> (saID, outerOwner ?s saID pID) \<in>\<in> recvOuterFriendIDs ?s ?uID then [(saID, pID)] else []) (outerPostIDs ?s saID)) (serverApiIDs ?s)
e_listOuterPosts ?s ?uID ?p \<equiv> IDsOK ?s [?uID] [] [] [] \<and> pass ?s ?uID = ?p
listClientsPost ?s ?uID ?p ?pID \<equiv> sharedWith ?s ?pID
e_listClientsPost ?s ?uID ?p ?pID \<equiv> IDsOK ?s [?uID] [?pID] [] [] \<and> pass ?s ?uID = ?p \<and> ?uID = admin ?s
listPendingSApiReqs ?s ?uID ?p \<equiv> pendingSApiReqs ?s
e_listPendingSApiReqs ?s ?uID ?p \<equiv> IDsOK ?s [?uID] [] [] [] \<and> pass ?s ?uID = ?p \<and> ?uID = admin ?s
listServerAPIs ?s ?uID ?p \<equiv> serverApiIDs ?s
e_listServerAPIs ?s ?uID ?p \<equiv> IDsOK ?s [?uID] [] [] [] \<and> pass ?s ?uID = ?p \<and> ?uID = admin ?s
listPendingCApiReqs ?s ?uID ?p \<equiv> pendingCApiReqs ?s
e_listPendingCApiReqs ?s ?uID ?p \<equiv> IDsOK ?s [?uID] [] [] [] \<and> pass ?s ?uID = ?p \<and> ?uID = admin ?s
listClientAPIs ?s ?uID ?p \<equiv> clientApiIDs ?s
e_listClientAPIs ?s ?uID ?p \<equiv> IDsOK ?s [?uID] [] [] [] \<and> pass ?s ?uID = ?p \<and> ?uID = admin ?s

goal (1 subgoal):
 1. (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
note s = reachNT_reach[OF sT]
[PROOF STATE]
proof (state)
this:
reach s

goal (1 subgoal):
 1. (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
note willUse =
    step step1 \<gamma>
    op
    reach_vis[OF s]
    eqButPID_stateSelectors[OF ss1] (* eqButPID_postSelectors[OF ss1] *)
    eqButPID_actions[OF ss1]
    eqButPID_update[OF ss1] (* eqButPID_setTextPost[OF ss1] *) eqButPID_not_PID[OF ss1]
    (* added to cope with extra leak towards the admin, when moving from API to CAPI: *)
    (* eqButPID_eqButT[OF ss1] *) eqButPID_eqButF[OF ss1]
    eqButPID_setShared[OF ss1] eqButPID_updateShared[OF ss1]
    eeqButPID_F_not_PID eqButPID_not_PID_sharedWith
    eqButPID_insert2[OF ss1]
[PROOF STATE]
proof (state)
this:
step s a = (ou, s')
step s1 a = (ou1, s1')
\<gamma> (Trans s a ou s')
\<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV))
vis s ?pID \<in> {FriendV, PublicV}
admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1
listInnerPosts s ?uid ?p = listInnerPosts s1 ?uid ?p
(post s)(PID := ?txt) = (post s1)(PID := ?txt)
?pid \<noteq> PID \<Longrightarrow> post s ?pid = post s1 ?pid
eqButF (sharedWith s PID) (sharedWith s1 PID)
(sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s1 PID))
eeqButPID_F ((sharedWith s)(?pid := ?aID_b)) ((sharedWith s1)(?pid := ?aID_b))
\<lbrakk>eeqButPID_F ?sw ?sw1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> ?sw ?pid = ?sw1.0 ?pid
\<lbrakk>eqButPID ?s ?s1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith ?s ?pid = sharedWith ?s1.0 ?pid
eqButF (insert2 ?aID ?b (sharedWith s PID)) (insert2 ?aID ?b (sharedWith s1 PID))

goal (1 subgoal):
 1. (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
proof (cases a)
[PROOF STATE]
proof (state)
goal (7 subgoals):
 1. \<And>x1. a = Sact x1 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 2. \<And>x2. a = Cact x2 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 3. \<And>x3. a = Dact x3 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 4. \<And>x4. a = Uact x4 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 5. \<And>x5. a = Ract x5 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 6. \<And>x6. a = Lact x6 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 7. \<And>x7. a = COMact x7 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
case (Sact x1)
[PROOF STATE]
proof (state)
this:
a = Sact x1

goal (7 subgoals):
 1. \<And>x1. a = Sact x1 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 2. \<And>x2. a = Cact x2 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 3. \<And>x3. a = Dact x3 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 4. \<And>x4. a = Uact x4 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 5. \<And>x5. a = Ract x5 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 6. \<And>x6. a = Lact x6 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 7. \<And>x7. a = COMact x7 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
with willUse
[PROOF STATE]
proof (chain)
picking this:
step s a = (ou, s')
step s1 a = (ou1, s1')
\<gamma> (Trans s a ou s')
\<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV))
vis s ?pID \<in> {FriendV, PublicV}
admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1
listInnerPosts s ?uid ?p = listInnerPosts s1 ?uid ?p
(post s)(PID := ?txt) = (post s1)(PID := ?txt)
?pid \<noteq> PID \<Longrightarrow> post s ?pid = post s1 ?pid
eqButF (sharedWith s PID) (sharedWith s1 PID)
(sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s1 PID))
eeqButPID_F ((sharedWith s)(?pid := ?aID_b)) ((sharedWith s1)(?pid := ?aID_b))
\<lbrakk>eeqButPID_F ?sw ?sw1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> ?sw ?pid = ?sw1.0 ?pid
\<lbrakk>eqButPID ?s ?s1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith ?s ?pid = sharedWith ?s1.0 ?pid
eqButF (insert2 ?aID ?b (sharedWith s PID)) (insert2 ?aID ?b (sharedWith s1 PID))
a = Sact x1
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
step s a = (ou, s')
step s1 a = (ou1, s1')
\<gamma> (Trans s a ou s')
\<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV))
vis s ?pID \<in> {FriendV, PublicV}
admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1
listInnerPosts s ?uid ?p = listInnerPosts s1 ?uid ?p
(post s)(PID := ?txt) = (post s1)(PID := ?txt)
?pid \<noteq> PID \<Longrightarrow> post s ?pid = post s1 ?pid
eqButF (sharedWith s PID) (sharedWith s1 PID)
(sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s1 PID))
eeqButPID_F ((sharedWith s)(?pid := ?aID_b)) ((sharedWith s1)(?pid := ?aID_b))
\<lbrakk>eeqButPID_F ?sw ?sw1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> ?sw ?pid = ?sw1.0 ?pid
\<lbrakk>eqButPID ?s ?s1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith ?s ?pid = sharedWith ?s1.0 ?pid
eqButF (insert2 ?aID ?b (sharedWith s PID)) (insert2 ?aID ?b (sharedWith s1 PID))
a = Sact x1

goal (1 subgoal):
 1. (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
by (cases x1) auto
[PROOF STATE]
proof (state)
this:
(\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1

goal (6 subgoals):
 1. \<And>x2. a = Cact x2 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 2. \<And>x3. a = Dact x3 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 3. \<And>x4. a = Uact x4 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 4. \<And>x5. a = Ract x5 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 5. \<And>x6. a = Lact x6 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 6. \<And>x7. a = COMact x7 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>x2. a = Cact x2 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 2. \<And>x3. a = Dact x3 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 3. \<And>x4. a = Uact x4 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 4. \<And>x5. a = Ract x5 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 5. \<And>x6. a = Lact x6 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 6. \<And>x7. a = COMact x7 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
case (Cact x2)
[PROOF STATE]
proof (state)
this:
a = Cact x2

goal (6 subgoals):
 1. \<And>x2. a = Cact x2 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 2. \<And>x3. a = Dact x3 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 3. \<And>x4. a = Uact x4 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 4. \<And>x5. a = Ract x5 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 5. \<And>x6. a = Lact x6 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 6. \<And>x7. a = COMact x7 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
with willUse
[PROOF STATE]
proof (chain)
picking this:
step s a = (ou, s')
step s1 a = (ou1, s1')
\<gamma> (Trans s a ou s')
\<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV))
vis s ?pID \<in> {FriendV, PublicV}
admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1
listInnerPosts s ?uid ?p = listInnerPosts s1 ?uid ?p
(post s)(PID := ?txt) = (post s1)(PID := ?txt)
?pid \<noteq> PID \<Longrightarrow> post s ?pid = post s1 ?pid
eqButF (sharedWith s PID) (sharedWith s1 PID)
(sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s1 PID))
eeqButPID_F ((sharedWith s)(?pid := ?aID_b)) ((sharedWith s1)(?pid := ?aID_b))
\<lbrakk>eeqButPID_F ?sw ?sw1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> ?sw ?pid = ?sw1.0 ?pid
\<lbrakk>eqButPID ?s ?s1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith ?s ?pid = sharedWith ?s1.0 ?pid
eqButF (insert2 ?aID ?b (sharedWith s PID)) (insert2 ?aID ?b (sharedWith s1 PID))
a = Cact x2
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
step s a = (ou, s')
step s1 a = (ou1, s1')
\<gamma> (Trans s a ou s')
\<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV))
vis s ?pID \<in> {FriendV, PublicV}
admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1
listInnerPosts s ?uid ?p = listInnerPosts s1 ?uid ?p
(post s)(PID := ?txt) = (post s1)(PID := ?txt)
?pid \<noteq> PID \<Longrightarrow> post s ?pid = post s1 ?pid
eqButF (sharedWith s PID) (sharedWith s1 PID)
(sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s1 PID))
eeqButPID_F ((sharedWith s)(?pid := ?aID_b)) ((sharedWith s1)(?pid := ?aID_b))
\<lbrakk>eeqButPID_F ?sw ?sw1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> ?sw ?pid = ?sw1.0 ?pid
\<lbrakk>eqButPID ?s ?s1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith ?s ?pid = sharedWith ?s1.0 ?pid
eqButF (insert2 ?aID ?b (sharedWith s PID)) (insert2 ?aID ?b (sharedWith s1 PID))
a = Cact x2

goal (1 subgoal):
 1. (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
by (cases x2) auto
[PROOF STATE]
proof (state)
this:
(\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1

goal (5 subgoals):
 1. \<And>x3. a = Dact x3 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 2. \<And>x4. a = Uact x4 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 3. \<And>x5. a = Ract x5 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 4. \<And>x6. a = Lact x6 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 5. \<And>x7. a = COMact x7 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. \<And>x3. a = Dact x3 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 2. \<And>x4. a = Uact x4 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 3. \<And>x5. a = Ract x5 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 4. \<And>x6. a = Lact x6 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 5. \<And>x7. a = COMact x7 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
case (Dact x3)
[PROOF STATE]
proof (state)
this:
a = Dact x3

goal (5 subgoals):
 1. \<And>x3. a = Dact x3 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 2. \<And>x4. a = Uact x4 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 3. \<And>x5. a = Ract x5 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 4. \<And>x6. a = Lact x6 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 5. \<And>x7. a = COMact x7 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
with willUse
[PROOF STATE]
proof (chain)
picking this:
step s a = (ou, s')
step s1 a = (ou1, s1')
\<gamma> (Trans s a ou s')
\<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV))
vis s ?pID \<in> {FriendV, PublicV}
admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1
listInnerPosts s ?uid ?p = listInnerPosts s1 ?uid ?p
(post s)(PID := ?txt) = (post s1)(PID := ?txt)
?pid \<noteq> PID \<Longrightarrow> post s ?pid = post s1 ?pid
eqButF (sharedWith s PID) (sharedWith s1 PID)
(sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s1 PID))
eeqButPID_F ((sharedWith s)(?pid := ?aID_b)) ((sharedWith s1)(?pid := ?aID_b))
\<lbrakk>eeqButPID_F ?sw ?sw1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> ?sw ?pid = ?sw1.0 ?pid
\<lbrakk>eqButPID ?s ?s1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith ?s ?pid = sharedWith ?s1.0 ?pid
eqButF (insert2 ?aID ?b (sharedWith s PID)) (insert2 ?aID ?b (sharedWith s1 PID))
a = Dact x3
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
step s a = (ou, s')
step s1 a = (ou1, s1')
\<gamma> (Trans s a ou s')
\<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV))
vis s ?pID \<in> {FriendV, PublicV}
admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1
listInnerPosts s ?uid ?p = listInnerPosts s1 ?uid ?p
(post s)(PID := ?txt) = (post s1)(PID := ?txt)
?pid \<noteq> PID \<Longrightarrow> post s ?pid = post s1 ?pid
eqButF (sharedWith s PID) (sharedWith s1 PID)
(sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s1 PID))
eeqButPID_F ((sharedWith s)(?pid := ?aID_b)) ((sharedWith s1)(?pid := ?aID_b))
\<lbrakk>eeqButPID_F ?sw ?sw1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> ?sw ?pid = ?sw1.0 ?pid
\<lbrakk>eqButPID ?s ?s1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith ?s ?pid = sharedWith ?s1.0 ?pid
eqButF (insert2 ?aID ?b (sharedWith s PID)) (insert2 ?aID ?b (sharedWith s1 PID))
a = Dact x3

goal (1 subgoal):
 1. (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
by (cases x3) auto
[PROOF STATE]
proof (state)
this:
(\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1

goal (4 subgoals):
 1. \<And>x4. a = Uact x4 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 2. \<And>x5. a = Ract x5 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 3. \<And>x6. a = Lact x6 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 4. \<And>x7. a = COMact x7 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1. \<And>x4. a = Uact x4 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 2. \<And>x5. a = Ract x5 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 3. \<And>x6. a = Lact x6 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 4. \<And>x7. a = COMact x7 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
case (Uact x4)
[PROOF STATE]
proof (state)
this:
a = Uact x4

goal (4 subgoals):
 1. \<And>x4. a = Uact x4 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 2. \<And>x5. a = Ract x5 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 3. \<And>x6. a = Lact x6 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 4. \<And>x7. a = COMact x7 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
with willUse
[PROOF STATE]
proof (chain)
picking this:
step s a = (ou, s')
step s1 a = (ou1, s1')
\<gamma> (Trans s a ou s')
\<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV))
vis s ?pID \<in> {FriendV, PublicV}
admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1
listInnerPosts s ?uid ?p = listInnerPosts s1 ?uid ?p
(post s)(PID := ?txt) = (post s1)(PID := ?txt)
?pid \<noteq> PID \<Longrightarrow> post s ?pid = post s1 ?pid
eqButF (sharedWith s PID) (sharedWith s1 PID)
(sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s1 PID))
eeqButPID_F ((sharedWith s)(?pid := ?aID_b)) ((sharedWith s1)(?pid := ?aID_b))
\<lbrakk>eeqButPID_F ?sw ?sw1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> ?sw ?pid = ?sw1.0 ?pid
\<lbrakk>eqButPID ?s ?s1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith ?s ?pid = sharedWith ?s1.0 ?pid
eqButF (insert2 ?aID ?b (sharedWith s PID)) (insert2 ?aID ?b (sharedWith s1 PID))
a = Uact x4
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
step s a = (ou, s')
step s1 a = (ou1, s1')
\<gamma> (Trans s a ou s')
\<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV))
vis s ?pID \<in> {FriendV, PublicV}
admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1
listInnerPosts s ?uid ?p = listInnerPosts s1 ?uid ?p
(post s)(PID := ?txt) = (post s1)(PID := ?txt)
?pid \<noteq> PID \<Longrightarrow> post s ?pid = post s1 ?pid
eqButF (sharedWith s PID) (sharedWith s1 PID)
(sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s1 PID))
eeqButPID_F ((sharedWith s)(?pid := ?aID_b)) ((sharedWith s1)(?pid := ?aID_b))
\<lbrakk>eeqButPID_F ?sw ?sw1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> ?sw ?pid = ?sw1.0 ?pid
\<lbrakk>eqButPID ?s ?s1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith ?s ?pid = sharedWith ?s1.0 ?pid
eqButF (insert2 ?aID ?b (sharedWith s PID)) (insert2 ?aID ?b (sharedWith s1 PID))
a = Uact x4

goal (1 subgoal):
 1. (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
by (cases x4) auto
[PROOF STATE]
proof (state)
this:
(\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1

goal (3 subgoals):
 1. \<And>x5. a = Ract x5 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 2. \<And>x6. a = Lact x6 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 3. \<And>x7. a = COMact x7 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<And>x5. a = Ract x5 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 2. \<And>x6. a = Lact x6 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 3. \<And>x7. a = COMact x7 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
case (Ract x5)
[PROOF STATE]
proof (state)
this:
a = Ract x5

goal (3 subgoals):
 1. \<And>x5. a = Ract x5 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 2. \<And>x6. a = Lact x6 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 3. \<And>x7. a = COMact x7 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
with willUse
[PROOF STATE]
proof (chain)
picking this:
step s a = (ou, s')
step s1 a = (ou1, s1')
\<gamma> (Trans s a ou s')
\<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV))
vis s ?pID \<in> {FriendV, PublicV}
admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1
listInnerPosts s ?uid ?p = listInnerPosts s1 ?uid ?p
(post s)(PID := ?txt) = (post s1)(PID := ?txt)
?pid \<noteq> PID \<Longrightarrow> post s ?pid = post s1 ?pid
eqButF (sharedWith s PID) (sharedWith s1 PID)
(sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s1 PID))
eeqButPID_F ((sharedWith s)(?pid := ?aID_b)) ((sharedWith s1)(?pid := ?aID_b))
\<lbrakk>eeqButPID_F ?sw ?sw1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> ?sw ?pid = ?sw1.0 ?pid
\<lbrakk>eqButPID ?s ?s1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith ?s ?pid = sharedWith ?s1.0 ?pid
eqButF (insert2 ?aID ?b (sharedWith s PID)) (insert2 ?aID ?b (sharedWith s1 PID))
a = Ract x5
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
step s a = (ou, s')
step s1 a = (ou1, s1')
\<gamma> (Trans s a ou s')
\<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV))
vis s ?pID \<in> {FriendV, PublicV}
admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1
listInnerPosts s ?uid ?p = listInnerPosts s1 ?uid ?p
(post s)(PID := ?txt) = (post s1)(PID := ?txt)
?pid \<noteq> PID \<Longrightarrow> post s ?pid = post s1 ?pid
eqButF (sharedWith s PID) (sharedWith s1 PID)
(sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s1 PID))
eeqButPID_F ((sharedWith s)(?pid := ?aID_b)) ((sharedWith s1)(?pid := ?aID_b))
\<lbrakk>eeqButPID_F ?sw ?sw1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> ?sw ?pid = ?sw1.0 ?pid
\<lbrakk>eqButPID ?s ?s1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith ?s ?pid = sharedWith ?s1.0 ?pid
eqButF (insert2 ?aID ?b (sharedWith s PID)) (insert2 ?aID ?b (sharedWith s1 PID))
a = Ract x5

goal (1 subgoal):
 1. (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
proof (cases x5)
[PROOF STATE]
proof (state)
goal (13 subgoals):
 1. \<And>x11 x12 x13. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Ract x5; x5 = rNUReq x11 x12 x13\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 2. \<And>x21 x22 x23. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Ract x5; x5 = rUser x21 x22 x23\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 3. \<And>x31 x32. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Ract x5; x5 = rAmIAdmin x31 x32\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 4. \<And>x41 x42 x43. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Ract x5; x5 = rPost x41 x42 x43\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 5. \<And>x51 x52 x53. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Ract x5; x5 = rOwnerPost x51 x52 x53\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 6. \<And>x61 x62 x63. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Ract x5; x5 = rVisPost x61 x62 x63\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 7. \<And>x71 x72 x73 x74. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Ract x5; x5 = rOPost x71 x72 x73 x74\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 8. \<And>x81 x82 x83 x84. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Ract x5; x5 = rOwnerOPost x81 x82 x83 x84\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 9. \<And>x91 x92 x93 x94. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Ract x5; x5 = rVisOPost x91 x92 x93 x94\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 10. \<And>x101 x102 x103. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Ract x5; x5 = rFriendReqToMe x101 x102 x103\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
A total of 13 subgoals...
[PROOF STEP]
case (rPost uid p pid)
[PROOF STATE]
proof (state)
this:
x5 = rPost uid p pid

goal (13 subgoals):
 1. \<And>x11 x12 x13. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Ract x5; x5 = rNUReq x11 x12 x13\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 2. \<And>x21 x22 x23. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Ract x5; x5 = rUser x21 x22 x23\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 3. \<And>x31 x32. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Ract x5; x5 = rAmIAdmin x31 x32\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 4. \<And>x41 x42 x43. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Ract x5; x5 = rPost x41 x42 x43\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 5. \<And>x51 x52 x53. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Ract x5; x5 = rOwnerPost x51 x52 x53\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 6. \<And>x61 x62 x63. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Ract x5; x5 = rVisPost x61 x62 x63\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 7. \<And>x71 x72 x73 x74. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Ract x5; x5 = rOPost x71 x72 x73 x74\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 8. \<And>x81 x82 x83 x84. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Ract x5; x5 = rOwnerOPost x81 x82 x83 x84\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 9. \<And>x91 x92 x93 x94. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Ract x5; x5 = rVisOPost x91 x92 x93 x94\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 10. \<And>x101 x102 x103. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Ract x5; x5 = rFriendReqToMe x101 x102 x103\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
A total of 13 subgoals...
[PROOF STEP]
with Ract willUse
[PROOF STATE]
proof (chain)
picking this:
a = Ract x5
step s a = (ou, s')
step s1 a = (ou1, s1')
\<gamma> (Trans s a ou s')
\<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV))
vis s ?pID \<in> {FriendV, PublicV}
admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1
listInnerPosts s ?uid ?p = listInnerPosts s1 ?uid ?p
(post s)(PID := ?txt) = (post s1)(PID := ?txt)
?pid \<noteq> PID \<Longrightarrow> post s ?pid = post s1 ?pid
eqButF (sharedWith s PID) (sharedWith s1 PID)
(sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s1 PID))
eeqButPID_F ((sharedWith s)(?pid := ?aID_b)) ((sharedWith s1)(?pid := ?aID_b))
\<lbrakk>eeqButPID_F ?sw ?sw1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> ?sw ?pid = ?sw1.0 ?pid
\<lbrakk>eqButPID ?s ?s1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith ?s ?pid = sharedWith ?s1.0 ?pid
eqButF (insert2 ?aID ?b (sharedWith s PID)) (insert2 ?aID ?b (sharedWith s1 PID))
x5 = rPost uid p pid
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
a = Ract x5
step s a = (ou, s')
step s1 a = (ou1, s1')
\<gamma> (Trans s a ou s')
\<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV))
vis s ?pID \<in> {FriendV, PublicV}
admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1
listInnerPosts s ?uid ?p = listInnerPosts s1 ?uid ?p
(post s)(PID := ?txt) = (post s1)(PID := ?txt)
?pid \<noteq> PID \<Longrightarrow> post s ?pid = post s1 ?pid
eqButF (sharedWith s PID) (sharedWith s1 PID)
(sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s1 PID))
eeqButPID_F ((sharedWith s)(?pid := ?aID_b)) ((sharedWith s1)(?pid := ?aID_b))
\<lbrakk>eeqButPID_F ?sw ?sw1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> ?sw ?pid = ?sw1.0 ?pid
\<lbrakk>eqButPID ?s ?s1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith ?s ?pid = sharedWith ?s1.0 ?pid
eqButF (insert2 ?aID ?b (sharedWith s PID)) (insert2 ?aID ?b (sharedWith s1 PID))
x5 = rPost uid p pid

goal (1 subgoal):
 1. (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
by (cases "pid = PID") auto
[PROOF STATE]
proof (state)
this:
(\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1

goal (12 subgoals):
 1. \<And>x11 x12 x13. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Ract x5; x5 = rNUReq x11 x12 x13\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 2. \<And>x21 x22 x23. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Ract x5; x5 = rUser x21 x22 x23\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 3. \<And>x31 x32. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Ract x5; x5 = rAmIAdmin x31 x32\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 4. \<And>x51 x52 x53. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Ract x5; x5 = rOwnerPost x51 x52 x53\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 5. \<And>x61 x62 x63. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Ract x5; x5 = rVisPost x61 x62 x63\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 6. \<And>x71 x72 x73 x74. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Ract x5; x5 = rOPost x71 x72 x73 x74\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 7. \<And>x81 x82 x83 x84. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Ract x5; x5 = rOwnerOPost x81 x82 x83 x84\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 8. \<And>x91 x92 x93 x94. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Ract x5; x5 = rVisOPost x91 x92 x93 x94\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 9. \<And>x101 x102 x103. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Ract x5; x5 = rFriendReqToMe x101 x102 x103\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 10. \<And>x111 x112 x113. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Ract x5; x5 = rFriendReqFromMe x111 x112 x113\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
A total of 12 subgoals...
[PROOF STEP]
qed auto
[PROOF STATE]
proof (state)
this:
(\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1

goal (2 subgoals):
 1. \<And>x6. a = Lact x6 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 2. \<And>x7. a = COMact x7 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>x6. a = Lact x6 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 2. \<And>x7. a = COMact x7 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
case (Lact x6)
[PROOF STATE]
proof (state)
this:
a = Lact x6

goal (2 subgoals):
 1. \<And>x6. a = Lact x6 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 2. \<And>x7. a = COMact x7 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
with willUse
[PROOF STATE]
proof (chain)
picking this:
step s a = (ou, s')
step s1 a = (ou1, s1')
\<gamma> (Trans s a ou s')
\<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV))
vis s ?pID \<in> {FriendV, PublicV}
admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1
listInnerPosts s ?uid ?p = listInnerPosts s1 ?uid ?p
(post s)(PID := ?txt) = (post s1)(PID := ?txt)
?pid \<noteq> PID \<Longrightarrow> post s ?pid = post s1 ?pid
eqButF (sharedWith s PID) (sharedWith s1 PID)
(sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s1 PID))
eeqButPID_F ((sharedWith s)(?pid := ?aID_b)) ((sharedWith s1)(?pid := ?aID_b))
\<lbrakk>eeqButPID_F ?sw ?sw1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> ?sw ?pid = ?sw1.0 ?pid
\<lbrakk>eqButPID ?s ?s1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith ?s ?pid = sharedWith ?s1.0 ?pid
eqButF (insert2 ?aID ?b (sharedWith s PID)) (insert2 ?aID ?b (sharedWith s1 PID))
a = Lact x6
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
step s a = (ou, s')
step s1 a = (ou1, s1')
\<gamma> (Trans s a ou s')
\<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV))
vis s ?pID \<in> {FriendV, PublicV}
admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1
listInnerPosts s ?uid ?p = listInnerPosts s1 ?uid ?p
(post s)(PID := ?txt) = (post s1)(PID := ?txt)
?pid \<noteq> PID \<Longrightarrow> post s ?pid = post s1 ?pid
eqButF (sharedWith s PID) (sharedWith s1 PID)
(sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s1 PID))
eeqButPID_F ((sharedWith s)(?pid := ?aID_b)) ((sharedWith s1)(?pid := ?aID_b))
\<lbrakk>eeqButPID_F ?sw ?sw1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> ?sw ?pid = ?sw1.0 ?pid
\<lbrakk>eqButPID ?s ?s1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith ?s ?pid = sharedWith ?s1.0 ?pid
eqButF (insert2 ?aID ?b (sharedWith s PID)) (insert2 ?aID ?b (sharedWith s1 PID))
a = Lact x6

goal (1 subgoal):
 1. (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
proof (cases x6)
[PROOF STATE]
proof (state)
goal (12 subgoals):
 1. \<And>x11 x12. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Lact x6; x6 = lPendingUReqs x11 x12\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 2. \<And>x21 x22. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Lact x6; x6 = lAllUsers x21 x22\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 3. \<And>x31 x32 x33. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Lact x6; x6 = lFriends x31 x32 x33\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 4. \<And>x41 x42 x43. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Lact x6; x6 = lSentOuterFriends x41 x42 x43\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 5. \<And>x51 x52. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Lact x6; x6 = lRecvOuterFriends x51 x52\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 6. \<And>x61 x62. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Lact x6; x6 = lInnerPosts x61 x62\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 7. \<And>x71 x72. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Lact x6; x6 = lOuterPosts x71 x72\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 8. \<And>x81 x82 x83. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Lact x6; x6 = lClientsPost x81 x82 x83\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 9. \<And>x91 x92. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Lact x6; x6 = lPendingSApiReqs x91 x92\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 10. \<And>x101 x102. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Lact x6; x6 = lServerAPIs x101 x102\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
A total of 12 subgoals...
[PROOF STEP]
case (lClientsPost uid p pid)
[PROOF STATE]
proof (state)
this:
x6 = lClientsPost uid p pid

goal (12 subgoals):
 1. \<And>x11 x12. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Lact x6; x6 = lPendingUReqs x11 x12\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 2. \<And>x21 x22. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Lact x6; x6 = lAllUsers x21 x22\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 3. \<And>x31 x32 x33. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Lact x6; x6 = lFriends x31 x32 x33\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 4. \<And>x41 x42 x43. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Lact x6; x6 = lSentOuterFriends x41 x42 x43\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 5. \<And>x51 x52. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Lact x6; x6 = lRecvOuterFriends x51 x52\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 6. \<And>x61 x62. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Lact x6; x6 = lInnerPosts x61 x62\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 7. \<And>x71 x72. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Lact x6; x6 = lOuterPosts x71 x72\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 8. \<And>x81 x82 x83. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Lact x6; x6 = lClientsPost x81 x82 x83\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 9. \<And>x91 x92. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Lact x6; x6 = lPendingSApiReqs x91 x92\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 10. \<And>x101 x102. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Lact x6; x6 = lServerAPIs x101 x102\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
A total of 12 subgoals...
[PROOF STEP]
with Lact willUse
[PROOF STATE]
proof (chain)
picking this:
a = Lact x6
step s a = (ou, s')
step s1 a = (ou1, s1')
\<gamma> (Trans s a ou s')
\<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV))
vis s ?pID \<in> {FriendV, PublicV}
admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1
listInnerPosts s ?uid ?p = listInnerPosts s1 ?uid ?p
(post s)(PID := ?txt) = (post s1)(PID := ?txt)
?pid \<noteq> PID \<Longrightarrow> post s ?pid = post s1 ?pid
eqButF (sharedWith s PID) (sharedWith s1 PID)
(sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s1 PID))
eeqButPID_F ((sharedWith s)(?pid := ?aID_b)) ((sharedWith s1)(?pid := ?aID_b))
\<lbrakk>eeqButPID_F ?sw ?sw1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> ?sw ?pid = ?sw1.0 ?pid
\<lbrakk>eqButPID ?s ?s1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith ?s ?pid = sharedWith ?s1.0 ?pid
eqButF (insert2 ?aID ?b (sharedWith s PID)) (insert2 ?aID ?b (sharedWith s1 PID))
x6 = lClientsPost uid p pid
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
a = Lact x6
step s a = (ou, s')
step s1 a = (ou1, s1')
\<gamma> (Trans s a ou s')
\<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV))
vis s ?pID \<in> {FriendV, PublicV}
admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1
listInnerPosts s ?uid ?p = listInnerPosts s1 ?uid ?p
(post s)(PID := ?txt) = (post s1)(PID := ?txt)
?pid \<noteq> PID \<Longrightarrow> post s ?pid = post s1 ?pid
eqButF (sharedWith s PID) (sharedWith s1 PID)
(sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s1 PID))
eeqButPID_F ((sharedWith s)(?pid := ?aID_b)) ((sharedWith s1)(?pid := ?aID_b))
\<lbrakk>eeqButPID_F ?sw ?sw1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> ?sw ?pid = ?sw1.0 ?pid
\<lbrakk>eqButPID ?s ?s1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith ?s ?pid = sharedWith ?s1.0 ?pid
eqButF (insert2 ?aID ?b (sharedWith s PID)) (insert2 ?aID ?b (sharedWith s1 PID))
x6 = lClientsPost uid p pid

goal (1 subgoal):
 1. (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
by (cases "pid = PID") auto
[PROOF STATE]
proof (state)
this:
(\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1

goal (11 subgoals):
 1. \<And>x11 x12. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Lact x6; x6 = lPendingUReqs x11 x12\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 2. \<And>x21 x22. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Lact x6; x6 = lAllUsers x21 x22\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 3. \<And>x31 x32 x33. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Lact x6; x6 = lFriends x31 x32 x33\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 4. \<And>x41 x42 x43. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Lact x6; x6 = lSentOuterFriends x41 x42 x43\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 5. \<And>x51 x52. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Lact x6; x6 = lRecvOuterFriends x51 x52\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 6. \<And>x61 x62. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Lact x6; x6 = lInnerPosts x61 x62\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 7. \<And>x71 x72. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Lact x6; x6 = lOuterPosts x71 x72\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 8. \<And>x91 x92. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Lact x6; x6 = lPendingSApiReqs x91 x92\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 9. \<And>x101 x102. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Lact x6; x6 = lServerAPIs x101 x102\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
 10. \<And>x111 x112. \<lbrakk>step s a = (ou, s'); step s1 a = (ou1, s1'); \<gamma> (Trans s a ou s'); \<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV)); \<And>pID. vis s pID \<in> {FriendV, PublicV}; admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1; \<And>uid p. listInnerPosts s uid p = listInnerPosts s1 uid p; \<And>txt. (post s)(PID := txt) = (post s1)(PID := txt); \<And>pid. pid \<noteq> PID \<Longrightarrow> post s pid = post s1 pid; eqButF (sharedWith s PID) (sharedWith s1 PID); \<And>b. (sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, b)) (sharedWith s1 PID)); \<And>pid aID_b. eeqButPID_F ((sharedWith s)(pid := aID_b)) ((sharedWith s1)(pid := aID_b)); \<And>sw sw1 pid. \<lbrakk>eeqButPID_F sw sw1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sw pid = sw1 pid; \<And>s s1 pid. \<lbrakk>eqButPID s s1; pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith s pid = sharedWith s1 pid; \<And>aID b. eqButF (insert2 aID b (sharedWith s PID)) (insert2 aID b (sharedWith s1 PID)); a = Lact x6; x6 = lPendingCApiReqs x111 x112\<rbrakk> \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
A total of 11 subgoals...
[PROOF STEP]
qed auto
[PROOF STATE]
proof (state)
this:
(\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1

goal (1 subgoal):
 1. \<And>x7. a = COMact x7 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>x7. a = COMact x7 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
case (COMact x7)
[PROOF STATE]
proof (state)
this:
a = COMact x7

goal (1 subgoal):
 1. \<And>x7. a = COMact x7 \<Longrightarrow> (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
with willUse
[PROOF STATE]
proof (chain)
picking this:
step s a = (ou, s')
step s1 a = (ou1, s1')
\<gamma> (Trans s a ou s')
\<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV))
vis s ?pID \<in> {FriendV, PublicV}
admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1
listInnerPosts s ?uid ?p = listInnerPosts s1 ?uid ?p
(post s)(PID := ?txt) = (post s1)(PID := ?txt)
?pid \<noteq> PID \<Longrightarrow> post s ?pid = post s1 ?pid
eqButF (sharedWith s PID) (sharedWith s1 PID)
(sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s1 PID))
eeqButPID_F ((sharedWith s)(?pid := ?aID_b)) ((sharedWith s1)(?pid := ?aID_b))
\<lbrakk>eeqButPID_F ?sw ?sw1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> ?sw ?pid = ?sw1.0 ?pid
\<lbrakk>eqButPID ?s ?s1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith ?s ?pid = sharedWith ?s1.0 ?pid
eqButF (insert2 ?aID ?b (sharedWith s PID)) (insert2 ?aID ?b (sharedWith s1 PID))
a = COMact x7
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
step s a = (ou, s')
step s1 a = (ou1, s1')
\<gamma> (Trans s a ou s')
\<not> (\<exists>uid\<in>UIDs. uid \<in>\<in> userIDs s' \<and> PID \<in>\<in> postIDs s' \<and> (uid = admin s' \<or> uid = owner s' PID \<or> uid \<in>\<in> friendIDs s' (owner s' PID) \<or> vis s' PID = PublicV))
vis s ?pID \<in> {FriendV, PublicV}
admin s = admin s1 \<and> pendingUReqs s = pendingUReqs s1 \<and> userReq s = userReq s1 \<and> userIDs s = userIDs s1 \<and> user s = user s1 \<and> pass s = pass s1 \<and> pendingFReqs s = pendingFReqs s1 \<and> friendReq s = friendReq s1 \<and> friendIDs s = friendIDs s1 \<and> sentOuterFriendIDs s = sentOuterFriendIDs s1 \<and> recvOuterFriendIDs s = recvOuterFriendIDs s1 \<and> postIDs s = postIDs s1 \<and> admin s = admin s1 \<and> eeqButPID (post s) (post s1) \<and> owner s = owner s1 \<and> vis s = vis s1 \<and> pendingSApiReqs s = pendingSApiReqs s1 \<and> sApiReq s = sApiReq s1 \<and> serverApiIDs s = serverApiIDs s1 \<and> serverPass s = serverPass s1 \<and> outerPostIDs s = outerPostIDs s1 \<and> outerPost s = outerPost s1 \<and> outerOwner s = outerOwner s1 \<and> outerVis s = outerVis s1 \<and> pendingCApiReqs s = pendingCApiReqs s1 \<and> cApiReq s = cApiReq s1 \<and> clientApiIDs s = clientApiIDs s1 \<and> clientPass s = clientPass s1 \<and> eeqButPID_F (sharedWith s) (sharedWith s1) \<and> IDsOK s = IDsOK s1
listInnerPosts s ?uid ?p = listInnerPosts s1 ?uid ?p
(post s)(PID := ?txt) = (post s1)(PID := ?txt)
?pid \<noteq> PID \<Longrightarrow> post s ?pid = post s1 ?pid
eqButF (sharedWith s PID) (sharedWith s1 PID)
(sharedWith s)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s PID)) = (sharedWith s1)(PID := map (\<lambda>(aID, uu_). (aID, ?b)) (sharedWith s1 PID))
eeqButPID_F ((sharedWith s)(?pid := ?aID_b)) ((sharedWith s1)(?pid := ?aID_b))
\<lbrakk>eeqButPID_F ?sw ?sw1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> ?sw ?pid = ?sw1.0 ?pid
\<lbrakk>eqButPID ?s ?s1.0; ?pid \<noteq> PID\<rbrakk> \<Longrightarrow> sharedWith ?s ?pid = sharedWith ?s1.0 ?pid
eqButF (insert2 ?aID ?b (sharedWith s PID)) (insert2 ?aID ?b (sharedWith s1 PID))
a = COMact x7

goal (1 subgoal):
 1. (\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1
[PROOF STEP]
by (cases x7) auto
[PROOF STATE]
proof (state)
this:
(\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
(\<exists>uid p aid pid. a = COMact (comSendPost uid p aid pid) \<and> outPurge ou = outPurge ou1) \<or> ou = ou1

goal:
No subgoals!
[PROOF STEP]
qed