| ctrok(gs.ctr, gs.writers) ∧ writersOk(gs.p, gs.writers) ∧ pendingOk(gs.p), ctrok(gs0.ctr, gs0.writers) ∧ writersOk(gs0.p, gs0.writers) ∧ pendingOk(gs0.p), allReadsOK(ags.h) ∧ allWritesOK(ags.h) ∧ ags.vm = ∅ ⊕ ags.h ∧ ags.pm = ∅ ⊕ (ags.h | true), lsf(t) = ls, lsf0(t) = ls0, alsf(t) = als, alsf(t).t = t, lsf(t).t = t, ∀ t0. t0 ≠ t → lsf(t0).t = t0, ∀ t0. t0 ≠ t → alsf(t0).t = t0, pcf(t) = R1, pcf0(t) = R2, apcf(t) = apc, notMember(t, gs.writers) ∧ notMember(t, gs.readers) ∧ noPendingW(t, gs.p), notMember(t, gs0.writers) ∧ oneMember(t, ls0.l, gs0.readers) ∧ noPendingW(t, gs0.p), PLIBLInv(ags, als, apc), t ≠ t0, lsf(t0).t = t0, FLITPSCLInv(gs, lsf(t0), pcf(t0)), FLITPSCLInv(gs0, lsf(t0), pcf(t0)), PLIBLInv(ags, alsf(t0), apcf(t0)), ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(gs, lsf(t1), pcf(t1)) ∧ PLIBLInv(ags, alsf(t1), apcf(t1)) ∧ labs(gs, lsf(t1), pcf(t1), ags, alsf(t1), apcf(t1)), pre(ags, als, apc, ADoRead(ls.t)) → ags0 = gstepf(ags, als, apc, ADoRead(ls.t)) ∧ als0 = lstepf(ags, als, apc, ADoRead(ls.t)) ∧ apc0 = pcstepf(ags, als, apc, ADoRead(ls.t)), allReadsOK(ags0.h) ∧ allWritesOK(ags0.h) ∧ ags0.vm = ∅ ⊕ ags0.h ∧ ags0.pm = ∅ ⊕ (ags0.h | true), pre(gs, ls, R1, doReadPSC(ls.t, l, ((mem ⊕ p))(l))) ∧ gs0 = gstepf(gs, ls, R1, doReadPSC(ls.t, l, ((mem ⊕ p))(l))) ∧ ls0 = lstepf(gs, ls, R1, doReadPSC(ls.t, l, ((mem ⊕ p))(l))) ∧ R2 = pcstepf(gs, ls, R1, doReadPSC(ls.t, l, ((mem ⊕ p))(l))), ags.pm = gs.mem ∧ ags.vm = gs.mem ⊕ gs.p ∧ abs(ags.h, gs.readers, gs.p), ls.t = als.t ∧ apc = invRead ∧ ls.l = als.il ∧ (∀ l. ¬ FO(ls.t) ∈ gs.p(l) → ((ags.h | l) | ls.t) | false = []), lsf(t0).t = alsf(t0).t ∧ (pcf(t0) = idle → apcf(t0) = idle) ∧ (pcf(t0) = ready → apcf(t0) = ready) ∧ (pcf(t0) = crashed → apcf(t0) = crashed) ∧ (pcf(t0) = R1 → apcf(t0) = invRead) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead) ∧ (pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite) ∧ (pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite) ∧ (pcf(t0) = R1 → lsf(t0).l = alsf(t0).il) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → lsf(t0).v = alsf(t0).ov) ∧ ( pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → lsf(t0).l = alsf(t0).il ∧ lsf(t0).v = alsf(t0).iv) ∧ ( pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(lsf(t0).t) ∈ gs.p(l) → ((ags.h | l) | lsf(t0).t) | false = [])) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((ags.h | l) | lsf(t0).t) | false = [])) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ lsf(t0).l ∧ ¬ FO(lsf(t0).t) ∈ gs.p(l0) → ((ags.h | l0) | lsf(t0).t) | false = [])) ∧ (pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((ags.h | lsf(t0).l) | lsf(t0).t) | false = []) ∧ ( pcf(t0) = W4 → ((ags.h | lsf(t0).l) | lsf(t0).t) | false = (W(lsf(t0).t, lsf(t0).l, lsf(t0).v), false) ' ∨ ((ags.h | lsf(t0).l) | lsf(t0).t) | false = []) ⊦ lsf(t0).t = alsf(t0).t ∧ (pcf(t0) = idle → apcf(t0) = idle) ∧ (pcf(t0) = ready → apcf(t0) = ready) ∧ (pcf(t0) = crashed → apcf(t0) = crashed) ∧ (pcf(t0) = R1 → apcf(t0) = invRead) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead) ∧ (pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite) ∧ (pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite) ∧ (pcf(t0) = R1 → lsf(t0).l = alsf(t0).il) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → lsf(t0).v = alsf(t0).ov) ∧ ( pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → lsf(t0).l = alsf(t0).il ∧ lsf(t0).v = alsf(t0).iv) ∧ ( pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(lsf(t0).t) ∈ gs0.p(l) → ((ags0.h | l) | lsf(t0).t) | false = [])) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((ags0.h | l) | lsf(t0).t) | false = [])) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ lsf(t0).l ∧ ¬ FO(lsf(t0).t) ∈ gs0.p(l0) → ((ags0.h | l0) | lsf(t0).t) | false = [])) ∧ (pcf(t0) = R2 → gs0.ctr(lsf(t0).l) = 0 → ((ags0.h | lsf(t0).l) | lsf(t0).t) | false = []) ∧ ( pcf(t0) = W4 → ((ags0.h | lsf(t0).l) | lsf(t0).t) | false = (W(lsf(t0).t, lsf(t0).l, lsf(t0).v), false) ' ∨ ((ags0.h | lsf(t0).l) | lsf(t0).t) | false = []) |
ls.l = als.il, ags.pm = gs.mem, ags0.pm = ∅ ⊕ (ags0.h | true), ags.pm = ∅ ⊕ (ags.h | true), lsf(t0).t = alsf(t0).t, ls.t = als.t, lsf(t0).t = t0, lsf(t).t = t, alsf(t).t = t, ags.vm = gs.mem ⊕ gs.p, ags0.vm = ∅ ⊕ ags0.h, ags.vm = ∅ ⊕ ags.h, R2 = pcstepf(gs, ls, R1, doReadPSC(ls.t, l, ((mem ⊕ p))(l))), alsf(t) = als, apc = invRead, apcf(t) = apc, gs0 = gstepf(gs, ls, R1, doReadPSC(ls.t, l, ((mem ⊕ p))(l))), ls0 = lstepf(gs, ls, R1, doReadPSC(ls.t, l, ((mem ⊕ p))(l))), lsf(t) = ls, lsf0(t) = ls0, pcf(t) = R1, pcf0(t) = R2, t ≠ t0, FLITPSCLInv(gs0, lsf(t0), pcf(t0)), FLITPSCLInv(gs, lsf(t0), pcf(t0)), PLIBLInv(ags, alsf(t0), apcf(t0)), PLIBLInv(ags, als, apc), abs(ags.h, gs.readers, gs.p), allReadsOK(ags0.h), allReadsOK(ags.h), allWritesOK(ags0.h), allWritesOK(ags.h), ctrok(gs0.ctr, gs0.writers), ctrok(gs.ctr, gs.writers), noPendingW(t, gs0.p), noPendingW(t, gs.p), notMember(t, gs0.writers), notMember(t, gs.writers), notMember(t, gs.readers), oneMember(t, ls0.l, gs0.readers), pendingOk(gs0.p), pendingOk(gs.p), pre(gs, ls, R1, doReadPSC(ls.t, l, ((mem ⊕ p))(l))), writersOk(gs0.p, gs0.writers), writersOk(gs.p, gs.writers), pcf(t0) = idle → apcf(t0) = idle, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = R1 → lsf(t0).l = alsf(t0).il, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → lsf(t0).v = alsf(t0).ov, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → lsf(t0).l = alsf(t0).il ∧ lsf(t0).v = alsf(t0).iv, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(lsf(t0).t) ∈ gs.p(l) → ((ags.h | l) | lsf(t0).t) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((ags.h | l) | lsf(t0).t) | false = []), pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ lsf(t0).l ∧ ¬ FO(lsf(t0).t) ∈ gs.p(l0) → ((ags.h | l0) | lsf(t0).t) | false = []), pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((ags.h | lsf(t0).l) | lsf(t0).t) | false = [], pcf(t0) = W4 → ((ags.h | lsf(t0).l) | lsf(t0).t) | false = (W(lsf(t0).t, lsf(t0).l, lsf(t0).v), false) ' ∨ ((ags.h | lsf(t0).l) | lsf(t0).t) | false = [], pre(ags, als, apc, ADoRead(ls.t)) → ags0 = gstepf(ags, als, apc, ADoRead(ls.t)) ∧ als0 = lstepf(ags, als, apc, ADoRead(ls.t)) ∧ apc0 = pcstepf(ags, als, apc, ADoRead(ls.t)), ∀ l. ¬ FO(ls.t) ∈ gs.p(l) → ((ags.h | l) | ls.t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(gs, lsf(t1), pcf(t1)) ∧ PLIBLInv(ags, alsf(t1), apcf(t1)) ∧ labs(gs, lsf(t1), pcf(t1), ags, alsf(t1), apcf(t1)), ∀ t0. t0 ≠ t → alsf(t0).t = t0, ∀ t0. t0 ≠ t → lsf(t0).t = t0 ⊦ lsf(t0).t = alsf(t0).t ∧ (pcf(t0) = idle → apcf(t0) = idle) ∧ (pcf(t0) = ready → apcf(t0) = ready) ∧ (pcf(t0) = crashed → apcf(t0) = crashed) ∧ (pcf(t0) = R1 → apcf(t0) = invRead) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead) ∧ (pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite) ∧ (pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite) ∧ (pcf(t0) = R1 → lsf(t0).l = alsf(t0).il) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → lsf(t0).v = alsf(t0).ov) ∧ ( pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → lsf(t0).l = alsf(t0).il ∧ lsf(t0).v = alsf(t0).iv) ∧ ( pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(lsf(t0).t) ∈ gs0.p(l) → ((ags0.h | l) | lsf(t0).t) | false = [])) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((ags0.h | l) | lsf(t0).t) | false = [])) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ lsf(t0).l ∧ ¬ FO(lsf(t0).t) ∈ gs0.p(l0) → ((ags0.h | l0) | lsf(t0).t) | false = [])) ∧ (pcf(t0) = R2 → gs0.ctr(lsf(t0).l) = 0 → ((ags0.h | lsf(t0).l) | lsf(t0).t) | false = []) ∧ ( pcf(t0) = W4 → ((ags0.h | lsf(t0).l) | lsf(t0).t) | false = (W(lsf(t0).t, lsf(t0).l, lsf(t0).v), false) ' ∨ ((ags0.h | lsf(t0).l) | lsf(t0).t) | false = [])
| ls.l = als.il, ags.pm = gs.mem, ags0.pm = ∅ ⊕ (ags0.h | true), ags.pm = ∅ ⊕ (ags.h | true), lsf(t0).t = alsf(t0).t, ls.t = als.t, lsf(t0).t = t0, lsf(t).t = t, alsf(t).t = t, ags.vm = gs.mem ⊕ gs.p, ags0.vm = ∅ ⊕ ags0.h, ags.vm = ∅ ⊕ ags.h, R2 = pcstepf(gs, ls, R1, doReadPSC(ls.t, l, ((mem ⊕ p))(l))), alsf(t) = als, apc = invRead, apcf(t) = apc, gs0 = gstepf(gs, ls, R1, doReadPSC(ls.t, l, ((mem ⊕ p))(l))), ls0 = lstepf(gs, ls, R1, doReadPSC(ls.t, l, ((mem ⊕ p))(l))), lsf(t) = ls, lsf0(t) = ls0, pcf(t) = R1, pcf0(t) = R2, t ≠ t0, FLITPSCLInv(gs0, lsf(t0), pcf(t0)), FLITPSCLInv(gs, lsf(t0), pcf(t0)), PLIBLInv(ags, alsf(t0), apcf(t0)), PLIBLInv(ags, als, apc), abs(ags.h, gs.readers, gs.p), allReadsOK(ags0.h), allReadsOK(ags.h), allWritesOK(ags0.h), allWritesOK(ags.h), ctrok(gs0.ctr, gs0.writers), ctrok(gs.ctr, gs.writers), noPendingW(t, gs0.p), noPendingW(t, gs.p), notMember(t, gs0.writers), notMember(t, gs.writers), notMember(t, gs.readers), oneMember(t, ls0.l, gs0.readers), pendingOk(gs0.p), pendingOk(gs.p), pre(gs, ls, R1, doReadPSC(ls.t, l, ((mem ⊕ p))(l))), writersOk(gs0.p, gs0.writers), writersOk(gs.p, gs.writers), pcf(t0) = idle → apcf(t0) = idle, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = R1 → lsf(t0).l = alsf(t0).il, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → lsf(t0).v = alsf(t0).ov, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → lsf(t0).l = alsf(t0).il ∧ lsf(t0).v = alsf(t0).iv, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(lsf(t0).t) ∈ gs.p(l) → ((ags.h | l) | lsf(t0).t) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((ags.h | l) | lsf(t0).t) | false = []), pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ lsf(t0).l ∧ ¬ FO(lsf(t0).t) ∈ gs.p(l0) → ((ags.h | l0) | lsf(t0).t) | false = []), pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((ags.h | lsf(t0).l) | lsf(t0).t) | false = [], pcf(t0) = W4 → ((ags.h | lsf(t0).l) | lsf(t0).t) | false = (W(lsf(t0).t, lsf(t0).l, lsf(t0).v), false) ' ∨ ((ags.h | lsf(t0).l) | lsf(t0).t) | false = [], pre(ags, als, apc, ADoRead(ls.t)) → ags0 = gstepf(ags, als, apc, ADoRead(ls.t)) ∧ als0 = lstepf(ags, als, apc, ADoRead(ls.t)) ∧ apc0 = pcstepf(ags, als, apc, ADoRead(ls.t)), ∀ l. ¬ FO(ls.t) ∈ gs.p(l) → ((ags.h | l) | ls.t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(gs, lsf(t1), pcf(t1)) ∧ PLIBLInv(ags, alsf(t1), apcf(t1)) ∧ labs(gs, lsf(t1), pcf(t1), ags, alsf(t1), apcf(t1)), ∀ t0. t0 ≠ t → alsf(t0).t = t0, ∀ t0. t0 ≠ t → lsf(t0).t = t0 ⊦ lsf(t0).t = alsf(t0).t ∧ (pcf(t0) = idle → apcf(t0) = idle) ∧ (pcf(t0) = ready → apcf(t0) = ready) ∧ (pcf(t0) = crashed → apcf(t0) = crashed) ∧ (pcf(t0) = R1 → apcf(t0) = invRead) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead) ∧ (pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite) ∧ (pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite) ∧ (pcf(t0) = R1 → lsf(t0).l = alsf(t0).il) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → lsf(t0).v = alsf(t0).ov) ∧ ( pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → lsf(t0).l = alsf(t0).il ∧ lsf(t0).v = alsf(t0).iv) ∧ ( pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(lsf(t0).t) ∈ gs0.p(l) → ((ags0.h | l) | lsf(t0).t) | false = [])) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((ags0.h | l) | lsf(t0).t) | false = [])) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ lsf(t0).l ∧ ¬ FO(lsf(t0).t) ∈ gs0.p(l0) → ((ags0.h | l0) | lsf(t0).t) | false = [])) ∧ (pcf(t0) = R2 → gs0.ctr(lsf(t0).l) = 0 → ((ags0.h | lsf(t0).l) | lsf(t0).t) | false = []) ∧ ( pcf(t0) = W4 → ((ags0.h | lsf(t0).l) | lsf(t0).t) | false = (W(lsf(t0).t, lsf(t0).l, lsf(t0).v), false) ' ∨ ((ags0.h | lsf(t0).l) | lsf(t0).t) | false = []) |
lsf(t).l = alsf(t).il, gs.mem = ∅ ⊕ (ags.h | true), gs.mem = ∅ ⊕ ((ags.h | true) + (ags.h.lastPersistedOrElse(alsf(t).il, true) ⊃ (R(t, alsf(t).il, ags.vm(alsf(t).il)), true) ';[])), ags.pm = gs.mem, alsf(t).t = t, alsf(t0).t = t0, lsf(t).t = t, lsf(t0).t = t0, ags.vm = ∅ ⊕ ags.h, ags.vm = gs.mem ⊕ gs.p, apcf(t) = invRead, lsf0(t) = lsf(t).v:= (gs.mem(alsf(t).il) ⊕ gs.p(alsf(t).il)), pcf(t) = R1, pcf0(t) = R2, mem(alsf(t).il) ⊕ p(alsf(t).il) = gs.mem(alsf(t).il) ⊕ gs.p(alsf(t).il), t ≠ t0, FLITPSCLInv(gs, lsf(t0), pcf(t0)), FLITPSCLInv(gs.readers:= gs.readers(alsf(t).il := gs.readers(alsf(t).il) ++ t), lsf(t0), pcf(t0)), PLIBLInv(ags, alsf(t), invRead), PLIBLInv(ags, alsf(t0), apcf(t0)), abs(ags.h, gs.readers, gs.p), allReadsOK(ags.h), allReadsOK(ags.h + (R(t, alsf(t).il, ags.vm(alsf(t).il)), ags.h.lastPersistedOrElse(alsf(t).il, true)) '), allWritesOK(ags.h), allWritesOK(ags.h + (R(t, alsf(t).il, ags.vm(alsf(t).il)), ags.h.lastPersistedOrElse(alsf(t).il, true)) '), ctrok(gs.ctr, gs.writers), noPendingW(t, gs.p), notMember(t, gs.readers), notMember(t, gs.writers), oneMember(t, lsf0(t).l, gs.readers(alsf(t).il := gs.readers(alsf(t).il) ++ t)), pendingOk(gs.p), writersOk(gs.p, gs.writers), pcf(t0) = W4 → ((ags.h | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((ags.h | lsf(t0).l) | t0) | false = [], pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((ags.h | lsf(t0).l) | t0) | false = [], pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l0) → ((ags.h | l0) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((ags.h | l) | t0) | false = []), pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ gs.p(l) → ((ags.h | l) | t0) | false = []), pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → lsf(t0).l = alsf(t0).il ∧ lsf(t0).v = alsf(t0).iv, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → lsf(t0).v = alsf(t0).ov, pcf(t0) = R1 → lsf(t0).l = alsf(t0).il, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = idle → apcf(t0) = idle, ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(gs, lsf(t1), pcf(t1)) ∧ PLIBLInv(ags, alsf(t1), apcf(t1)) ∧ labs(gs, lsf(t1), pcf(t1), ags, alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ gs.p(l) → ((ags.h | l) | t) | false = [] ⊦ ( pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ gs.p(l0) → ((ags.h | l0) | t0) | false = [] ∧ ((alsf(t).il = l0 ⊃ (R(t, alsf(t).il, ags.vm(alsf(t).il)), ags.h.lastPersistedOrElse(alsf(t).il, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((ags.h | l1) | t0) | false = [] ∧ ((alsf(t).il = l1 ⊃ (R(t, alsf(t).il, ags.vm(alsf(t).il)), ags.h.lastPersistedOrElse(alsf(t).il, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 ∨ pcf(t0) = R3 → l2 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l2) → ((ags.h | l2) | t0) | false = [] ∧ ((alsf(t).il = l2 ⊃ (R(t, alsf(t).il, ags.vm(alsf(t).il)), ags.h.lastPersistedOrElse(alsf(t).il, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((ags.h | lsf(t0).l) | t0) | false = [] ∧ ((alsf(t).il = lsf(t0).l ⊃ (R(t, alsf(t).il, ags.vm(alsf(t).il)), ags.h.lastPersistedOrElse(alsf(t).il, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W4 → (((ags.h | lsf(t0).l) | t0) | false) + (((alsf(t).il = lsf(t0).l ⊃ (R(t, alsf(t).il, ags.vm(alsf(t).il)), ags.h.lastPersistedOrElse(alsf(t).il, true)) ';[]) | t0) | false) = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((ags.h | lsf(t0).l) | t0) | false = [] ∧ ((alsf(t).il = lsf(t0).l ⊃ (R(t, alsf(t).il, ags.vm(alsf(t).il)), ags.h.lastPersistedOrElse(alsf(t).il, true)) ';[]) | t0) | false = [])
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ h + h0 | b = (h | b) + (h0 | b); (s) ⊦ h + h0 | t = (h | t) + (h0 | t); (s) ⊦ R(t, l, v).l = l; (s) ⊦ vpe ' | l = (vpe._1.l = l ⊃ vpe ';[]); (s) ⊦ h + h0 | l0 = (h | l0) + (h0 | l0); (s) ⊦ (gs.h:= h).h = h; (s) ⊦ (e, b) ' | b0 = (b ↔ b0 ⊃ (e, b) ';[]); (s) ⊦ (gs.h:= h).pm = gs.pm; (s) ⊦ mem ⊕ (h + (R(t, l, v), b) ') = mem ⊕ h; (s) ⊦ (gs.h:= h).vm = gs.vm; (s) ⊦ ls.t = t → pcstepf(gs, ls, invRead, ADoRead(t)) = resRead; (s) ⊦ ls.t = t → lstepf(gs, ls, invRead, ADoRead(t)) = ls.ov:= gs.vm(ls.il); (s) ⊦ x + a = x + a '; (s) ⊦ ls.t = t → gstepf(gs, ls, invRead, ADoRead(t)) = gs .h:= (gs.h + (R(ls.t, ls.il, gs.vm(ls.il)), gs.h.lastPersistedOrElse(ls.il, true))); (s) ⊦ ADoRead(t) = ADoRead(t0) ↔ t = t0; (s) ⊦ pre(gs, ls, invRead, a) ↔ a = ADoRead(ls.t); (s) ⊦ (gs.readers:= writers0).ctr = gs.ctr; (s) ⊦ gstepf(gs, ls, R1, a) = gs.readers:= gs.readers(ls.l := gs.readers(ls.l) ++ ls.t); (s) ⊦ ((mem ⊕ p))(l) = mem(l) ⊕ p(l); (s) ⊦ (gs.readers:= writers0).p = gs.p; (s) ⊦ (gs.readers:= writers0).writers = gs.writers; (s) ⊦ (gs.readers:= writers0).readers = writers0; (s) ⊦ doReadPSC(t, l, v) = doReadPSC(t0, l0, v0) ↔ t = t0 ∧ l = l0 ∧ v = v0; (ws) ⊦ pre(gs, ls, R1, a) ↔ a = doReadPSC(ls.t, ls.l, ((gs.mem ⊕ gs.p))(ls.l)); (s) ⊦ pcstepf(gs, ls, R1, a) = R2; (s) ⊦ lstepf(gs, ls, R1, a) = ls.v:= ((gs.mem ⊕ gs.p))(ls.l); (s)
| lsf(t).l = alsf(t).il, gs.mem = ∅ ⊕ (ags.h | true), gs.mem = ∅ ⊕ ((ags.h | true) + (ags.h.lastPersistedOrElse(alsf(t).il, true) ⊃ (R(t, alsf(t).il, ags.vm(alsf(t).il)), true) ';[])), ags.pm = gs.mem, alsf(t).t = t, alsf(t0).t = t0, lsf(t).t = t, lsf(t0).t = t0, ags.vm = ∅ ⊕ ags.h, ags.vm = gs.mem ⊕ gs.p, apcf(t) = invRead, lsf0(t) = lsf(t).v:= (gs.mem(alsf(t).il) ⊕ gs.p(alsf(t).il)), pcf(t) = R1, pcf0(t) = R2, mem(alsf(t).il) ⊕ p(alsf(t).il) = gs.mem(alsf(t).il) ⊕ gs.p(alsf(t).il), t ≠ t0, FLITPSCLInv(gs, lsf(t0), pcf(t0)), FLITPSCLInv(gs.readers:= gs.readers(alsf(t).il := gs.readers(alsf(t).il) ++ t), lsf(t0), pcf(t0)), PLIBLInv(ags, alsf(t), invRead), PLIBLInv(ags, alsf(t0), apcf(t0)), abs(ags.h, gs.readers, gs.p), allReadsOK(ags.h), allReadsOK(ags.h + (R(t, alsf(t).il, ags.vm(alsf(t).il)), ags.h.lastPersistedOrElse(alsf(t).il, true)) '), allWritesOK(ags.h), allWritesOK(ags.h + (R(t, alsf(t).il, ags.vm(alsf(t).il)), ags.h.lastPersistedOrElse(alsf(t).il, true)) '), ctrok(gs.ctr, gs.writers), noPendingW(t, gs.p), notMember(t, gs.readers), notMember(t, gs.writers), oneMember(t, lsf0(t).l, gs.readers(alsf(t).il := gs.readers(alsf(t).il) ++ t)), pendingOk(gs.p), writersOk(gs.p, gs.writers), pcf(t0) = W4 → ((ags.h | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((ags.h | lsf(t0).l) | t0) | false = [], pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((ags.h | lsf(t0).l) | t0) | false = [], pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l0) → ((ags.h | l0) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((ags.h | l) | t0) | false = []), pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ gs.p(l) → ((ags.h | l) | t0) | false = []), pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → lsf(t0).l = alsf(t0).il ∧ lsf(t0).v = alsf(t0).iv, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → lsf(t0).v = alsf(t0).ov, pcf(t0) = R1 → lsf(t0).l = alsf(t0).il, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = idle → apcf(t0) = idle, ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(gs, lsf(t1), pcf(t1)) ∧ PLIBLInv(ags, alsf(t1), apcf(t1)) ∧ labs(gs, lsf(t1), pcf(t1), ags, alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ gs.p(l) → ((ags.h | l) | t) | false = [] ⊦ ( pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ gs.p(l0) → ((ags.h | l0) | t0) | false = [] ∧ ((alsf(t).il = l0 ⊃ (R(t, alsf(t).il, ags.vm(alsf(t).il)), ags.h.lastPersistedOrElse(alsf(t).il, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((ags.h | l1) | t0) | false = [] ∧ ((alsf(t).il = l1 ⊃ (R(t, alsf(t).il, ags.vm(alsf(t).il)), ags.h.lastPersistedOrElse(alsf(t).il, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 ∨ pcf(t0) = R3 → l2 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l2) → ((ags.h | l2) | t0) | false = [] ∧ ((alsf(t).il = l2 ⊃ (R(t, alsf(t).il, ags.vm(alsf(t).il)), ags.h.lastPersistedOrElse(alsf(t).il, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((ags.h | lsf(t0).l) | t0) | false = [] ∧ ((alsf(t).il = lsf(t0).l ⊃ (R(t, alsf(t).il, ags.vm(alsf(t).il)), ags.h.lastPersistedOrElse(alsf(t).il, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W4 → (((ags.h | lsf(t0).l) | t0) | false) + (((alsf(t).il = lsf(t0).l ⊃ (R(t, alsf(t).il, ags.vm(alsf(t).il)), ags.h.lastPersistedOrElse(alsf(t).il, true)) ';[]) | t0) | false) = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((ags.h | lsf(t0).l) | t0) | false = [] ∧ ((alsf(t).il = lsf(t0).l ⊃ (R(t, alsf(t).il, ags.vm(alsf(t).il)), ags.h.lastPersistedOrElse(alsf(t).il, true)) ';[]) | t0) | false = []) |
lsf(t).l = alsf(t).il, gs.mem = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(alsf(t).il, true) ⊃ (R(t, alsf(t).il, mem0(alsf(t).il)), true) ';[])), gs.mem = ∅ ⊕ (h | true), lsf(t0).t = t0, lsf(t).t = t, alsf(t0).t = t0, alsf(t).t = t, ags = mkPLIBgs(mem0, mem1, h), apcf(t) = invRead, lsf0(t) = lsf(t).v:= (gs.mem(alsf(t).il) ⊕ gs.p(alsf(t).il)), mem0 = gs.mem ⊕ gs.p, mem0 = ∅ ⊕ h, mem1 = gs.mem, pcf(t) = R1, pcf0(t) = R2, mem(alsf(t).il) ⊕ p(alsf(t).il) = gs.mem(alsf(t).il) ⊕ gs.p(alsf(t).il), t ≠ t0, FLITPSCLInv(gs.readers:= gs.readers(alsf(t).il := gs.readers(alsf(t).il) ++ t), lsf(t0), pcf(t0)), FLITPSCLInv(gs, lsf(t0), pcf(t0)), PLIBLInv(ags, alsf(t0), apcf(t0)), PLIBLInv(ags, alsf(t), invRead), abs(h, gs.readers, gs.p), allReadsOK(h + (R(t, alsf(t).il, mem0(alsf(t).il)), h.lastPersistedOrElse(alsf(t).il, true)) '), allReadsOK(h), allWritesOK(h + (R(t, alsf(t).il, mem0(alsf(t).il)), h.lastPersistedOrElse(alsf(t).il, true)) '), allWritesOK(h), ctrok(gs.ctr, gs.writers), noPendingW(t, gs.p), notMember(t, gs.writers), notMember(t, gs.readers), oneMember(t, lsf0(t).l, gs.readers(alsf(t).il := gs.readers(alsf(t).il) ++ t)), pendingOk(gs.p), writersOk(gs.p, gs.writers), pcf(t0) = idle → apcf(t0) = idle, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = R1 → lsf(t0).l = alsf(t0).il, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → lsf(t0).v = alsf(t0).ov, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → lsf(t0).l = alsf(t0).il ∧ lsf(t0).v = alsf(t0).iv, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ gs.p(l) → ((h | l) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l0) → ((h | l0) | t0) | false = []), pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [], pcf(t0) = W4 → ((h | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [], ∀ l. ¬ FO(t) ∈ gs.p(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(gs, lsf(t1), pcf(t1)) ∧ PLIBLInv(ags, alsf(t1), apcf(t1)) ∧ labs(gs, lsf(t1), pcf(t1), ags, alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1 ⊦ ( pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ gs.p(l0) → ((h | l0) | t0) | false = [] ∧ ((alsf(t).il = l0 ⊃ (R(t, alsf(t).il, mem0(alsf(t).il)), h.lastPersistedOrElse(alsf(t).il, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l1) | t0) | false = [] ∧ ((alsf(t).il = l1 ⊃ (R(t, alsf(t).il, mem0(alsf(t).il)), h.lastPersistedOrElse(alsf(t).il, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 ∨ pcf(t0) = R3 → l2 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l2) → ((h | l2) | t0) | false = [] ∧ ((alsf(t).il = l2 ⊃ (R(t, alsf(t).il, mem0(alsf(t).il)), h.lastPersistedOrElse(alsf(t).il, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [] ∧ ((alsf(t).il = lsf(t0).l ⊃ (R(t, alsf(t).il, mem0(alsf(t).il)), h.lastPersistedOrElse(alsf(t).il, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W4 → (((h | lsf(t0).l) | t0) | false) + (((alsf(t).il = lsf(t0).l ⊃ (R(t, alsf(t).il, mem0(alsf(t).il)), h.lastPersistedOrElse(alsf(t).il, true)) ';[]) | t0) | false) = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [] ∧ ((alsf(t).il = lsf(t0).l ⊃ (R(t, alsf(t).il, mem0(alsf(t).il)), h.lastPersistedOrElse(alsf(t).il, true)) ';[]) | t0) | false = [])
Used simplifier rules: ⊦ (vm = gs.vm ∧ pm = gs.pm) ∧ h = gs.h ↔ gs = mkPLIBgs(vm, pm, h); (elim) Used terms: ags, mem0, mem1, h
| lsf(t).l = alsf(t).il, gs.mem = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(alsf(t).il, true) ⊃ (R(t, alsf(t).il, mem0(alsf(t).il)), true) ';[])), gs.mem = ∅ ⊕ (h | true), lsf(t0).t = t0, lsf(t).t = t, alsf(t0).t = t0, alsf(t).t = t, ags = mkPLIBgs(mem0, mem1, h), apcf(t) = invRead, lsf0(t) = lsf(t).v:= (gs.mem(alsf(t).il) ⊕ gs.p(alsf(t).il)), mem0 = gs.mem ⊕ gs.p, mem0 = ∅ ⊕ h, mem1 = gs.mem, pcf(t) = R1, pcf0(t) = R2, mem(alsf(t).il) ⊕ p(alsf(t).il) = gs.mem(alsf(t).il) ⊕ gs.p(alsf(t).il), t ≠ t0, FLITPSCLInv(gs.readers:= gs.readers(alsf(t).il := gs.readers(alsf(t).il) ++ t), lsf(t0), pcf(t0)), FLITPSCLInv(gs, lsf(t0), pcf(t0)), PLIBLInv(ags, alsf(t0), apcf(t0)), PLIBLInv(ags, alsf(t), invRead), abs(h, gs.readers, gs.p), allReadsOK(h + (R(t, alsf(t).il, mem0(alsf(t).il)), h.lastPersistedOrElse(alsf(t).il, true)) '), allReadsOK(h), allWritesOK(h + (R(t, alsf(t).il, mem0(alsf(t).il)), h.lastPersistedOrElse(alsf(t).il, true)) '), allWritesOK(h), ctrok(gs.ctr, gs.writers), noPendingW(t, gs.p), notMember(t, gs.writers), notMember(t, gs.readers), oneMember(t, lsf0(t).l, gs.readers(alsf(t).il := gs.readers(alsf(t).il) ++ t)), pendingOk(gs.p), writersOk(gs.p, gs.writers), pcf(t0) = idle → apcf(t0) = idle, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = R1 → lsf(t0).l = alsf(t0).il, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → lsf(t0).v = alsf(t0).ov, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → lsf(t0).l = alsf(t0).il ∧ lsf(t0).v = alsf(t0).iv, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ gs.p(l) → ((h | l) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l0) → ((h | l0) | t0) | false = []), pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [], pcf(t0) = W4 → ((h | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [], ∀ l. ¬ FO(t) ∈ gs.p(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(gs, lsf(t1), pcf(t1)) ∧ PLIBLInv(ags, alsf(t1), apcf(t1)) ∧ labs(gs, lsf(t1), pcf(t1), ags, alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1 ⊦ ( pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ gs.p(l0) → ((h | l0) | t0) | false = [] ∧ ((alsf(t).il = l0 ⊃ (R(t, alsf(t).il, mem0(alsf(t).il)), h.lastPersistedOrElse(alsf(t).il, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l1) | t0) | false = [] ∧ ((alsf(t).il = l1 ⊃ (R(t, alsf(t).il, mem0(alsf(t).il)), h.lastPersistedOrElse(alsf(t).il, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 ∨ pcf(t0) = R3 → l2 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l2) → ((h | l2) | t0) | false = [] ∧ ((alsf(t).il = l2 ⊃ (R(t, alsf(t).il, mem0(alsf(t).il)), h.lastPersistedOrElse(alsf(t).il, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [] ∧ ((alsf(t).il = lsf(t0).l ⊃ (R(t, alsf(t).il, mem0(alsf(t).il)), h.lastPersistedOrElse(alsf(t).il, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W4 → (((h | lsf(t0).l) | t0) | false) + (((alsf(t).il = lsf(t0).l ⊃ (R(t, alsf(t).il, mem0(alsf(t).il)), h.lastPersistedOrElse(alsf(t).il, true)) ';[]) | t0) | false) = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [] ∧ ((alsf(t).il = lsf(t0).l ⊃ (R(t, alsf(t).il, mem0(alsf(t).il)), h.lastPersistedOrElse(alsf(t).il, true)) ';[]) | t0) | false = []) |
lsf(t).l = alsf(t).il, gs.mem = ∅ ⊕ (h | true), gs.mem = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(alsf(t).il, true) ⊃ (R(t, alsf(t).il, ((∅ ⊕ h))(alsf(t).il)), true) ';[])), alsf(t).t = t, alsf(t0).t = t0, lsf(t).t = t, lsf(t0).t = t0, apcf(t) = invRead, lsf0(t) = lsf(t).v:= (gs.mem(alsf(t).il) ⊕ gs.p(alsf(t).il)), pcf(t) = R1, pcf0(t) = R2, mem(alsf(t).il) ⊕ p(alsf(t).il) = gs.mem(alsf(t).il) ⊕ gs.p(alsf(t).il), ∅ ⊕ h = gs.mem ⊕ gs.p, t ≠ t0, FLITPSCLInv(gs, lsf(t0), pcf(t0)), FLITPSCLInv(gs.readers:= gs.readers(alsf(t).il := gs.readers(alsf(t).il) ++ t), lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t), invRead), PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t0), apcf(t0)), abs(h, gs.readers, gs.p), allReadsOK(h), allReadsOK(h + (R(t, alsf(t).il, ((∅ ⊕ h))(alsf(t).il)), h.lastPersistedOrElse(alsf(t).il, true)) '), allWritesOK(h), allWritesOK(h + (R(t, alsf(t).il, ((∅ ⊕ h))(alsf(t).il)), h.lastPersistedOrElse(alsf(t).il, true)) '), ctrok(gs.ctr, gs.writers), noPendingW(t, gs.p), notMember(t, gs.readers), notMember(t, gs.writers), oneMember(t, lsf0(t).l, gs.readers(alsf(t).il := gs.readers(alsf(t).il) ++ t)), pendingOk(gs.p), writersOk(gs.p, gs.writers), pcf(t0) = W4 → ((h | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [], pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [], pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l0) → ((h | l0) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ gs.p(l) → ((h | l) | t0) | false = []), pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → lsf(t0).l = alsf(t0).il ∧ lsf(t0).v = alsf(t0).iv, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → lsf(t0).v = alsf(t0).ov, pcf(t0) = R1 → lsf(t0).l = alsf(t0).il, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = idle → apcf(t0) = idle, ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(gs, lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t1), apcf(t1)) ∧ labs(gs, lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ gs.p(l) → ((h | l) | t) | false = [] ⊦ ( pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ gs.p(l0) → ((h | l0) | t0) | false = [] ∧ ((alsf(t).il = l0 ⊃ (R(t, alsf(t).il, ((∅ ⊕ h))(alsf(t).il)), h.lastPersistedOrElse(alsf(t).il, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l1) | t0) | false = [] ∧ ((alsf(t).il = l1 ⊃ (R(t, alsf(t).il, ((∅ ⊕ h))(alsf(t).il)), h.lastPersistedOrElse(alsf(t).il, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 ∨ pcf(t0) = R3 → l2 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l2) → ((h | l2) | t0) | false = [] ∧ ((alsf(t).il = l2 ⊃ (R(t, alsf(t).il, ((∅ ⊕ h))(alsf(t).il)), h.lastPersistedOrElse(alsf(t).il, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [] ∧ ((alsf(t).il = lsf(t0).l ⊃ (R(t, alsf(t).il, ((∅ ⊕ h))(alsf(t).il)), h.lastPersistedOrElse(alsf(t).il, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W4 → (((h | lsf(t0).l) | t0) | false) + (((alsf(t).il = lsf(t0).l ⊃ (R(t, alsf(t).il, ((∅ ⊕ h))(alsf(t).il)), h.lastPersistedOrElse(alsf(t).il, true)) ';[]) | t0) | false) = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [] ∧ ((alsf(t).il = lsf(t0).l ⊃ (R(t, alsf(t).il, ((∅ ⊕ h))(alsf(t).il)), h.lastPersistedOrElse(alsf(t).il, true)) ';[]) | t0) | false = [])
| lsf(t).l = alsf(t).il, gs.mem = ∅ ⊕ (h | true), gs.mem = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(alsf(t).il, true) ⊃ (R(t, alsf(t).il, ((∅ ⊕ h))(alsf(t).il)), true) ';[])), alsf(t).t = t, alsf(t0).t = t0, lsf(t).t = t, lsf(t0).t = t0, apcf(t) = invRead, lsf0(t) = lsf(t).v:= (gs.mem(alsf(t).il) ⊕ gs.p(alsf(t).il)), pcf(t) = R1, pcf0(t) = R2, mem(alsf(t).il) ⊕ p(alsf(t).il) = gs.mem(alsf(t).il) ⊕ gs.p(alsf(t).il), ∅ ⊕ h = gs.mem ⊕ gs.p, t ≠ t0, FLITPSCLInv(gs, lsf(t0), pcf(t0)), FLITPSCLInv(gs.readers:= gs.readers(alsf(t).il := gs.readers(alsf(t).il) ++ t), lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t), invRead), PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t0), apcf(t0)), abs(h, gs.readers, gs.p), allReadsOK(h), allReadsOK(h + (R(t, alsf(t).il, ((∅ ⊕ h))(alsf(t).il)), h.lastPersistedOrElse(alsf(t).il, true)) '), allWritesOK(h), allWritesOK(h + (R(t, alsf(t).il, ((∅ ⊕ h))(alsf(t).il)), h.lastPersistedOrElse(alsf(t).il, true)) '), ctrok(gs.ctr, gs.writers), noPendingW(t, gs.p), notMember(t, gs.readers), notMember(t, gs.writers), oneMember(t, lsf0(t).l, gs.readers(alsf(t).il := gs.readers(alsf(t).il) ++ t)), pendingOk(gs.p), writersOk(gs.p, gs.writers), pcf(t0) = W4 → ((h | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [], pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [], pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l0) → ((h | l0) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ gs.p(l) → ((h | l) | t0) | false = []), pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → lsf(t0).l = alsf(t0).il ∧ lsf(t0).v = alsf(t0).iv, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → lsf(t0).v = alsf(t0).ov, pcf(t0) = R1 → lsf(t0).l = alsf(t0).il, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = idle → apcf(t0) = idle, ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(gs, lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t1), apcf(t1)) ∧ labs(gs, lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ gs.p(l) → ((h | l) | t) | false = [] ⊦ ( pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ gs.p(l0) → ((h | l0) | t0) | false = [] ∧ ((alsf(t).il = l0 ⊃ (R(t, alsf(t).il, ((∅ ⊕ h))(alsf(t).il)), h.lastPersistedOrElse(alsf(t).il, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l1) | t0) | false = [] ∧ ((alsf(t).il = l1 ⊃ (R(t, alsf(t).il, ((∅ ⊕ h))(alsf(t).il)), h.lastPersistedOrElse(alsf(t).il, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 ∨ pcf(t0) = R3 → l2 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l2) → ((h | l2) | t0) | false = [] ∧ ((alsf(t).il = l2 ⊃ (R(t, alsf(t).il, ((∅ ⊕ h))(alsf(t).il)), h.lastPersistedOrElse(alsf(t).il, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [] ∧ ((alsf(t).il = lsf(t0).l ⊃ (R(t, alsf(t).il, ((∅ ⊕ h))(alsf(t).il)), h.lastPersistedOrElse(alsf(t).il, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W4 → (((h | lsf(t0).l) | t0) | false) + (((alsf(t).il = lsf(t0).l ⊃ (R(t, alsf(t).il, ((∅ ⊕ h))(alsf(t).il)), h.lastPersistedOrElse(alsf(t).il, true)) ';[]) | t0) | false) = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [] ∧ ((alsf(t).il = lsf(t0).l ⊃ (R(t, alsf(t).il, ((∅ ⊕ h))(alsf(t).il)), h.lastPersistedOrElse(alsf(t).il, true)) ';[]) | t0) | false = []) |
lsf(t).l = il, gs.mem = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(il, true) ⊃ (R(t, il, ((∅ ⊕ h))(il)), true) ';[])), gs.mem = ∅ ⊕ (h | true), lsf(t0).t = t0, lsf(t).t = t, alsf(t0).t = t0, alsf(t) = mkPLIBls(t2, il, iv, ov), apcf(t) = invRead, lsf0(t) = lsf(t).v:= (gs.mem(il) ⊕ gs.p(il)), pcf(t) = R1, pcf0(t) = R2, t2 = t, ∅ ⊕ h = gs.mem ⊕ gs.p, mem(il) ⊕ p(il) = gs.mem(il) ⊕ gs.p(il), t ≠ t0, FLITPSCLInv(gs.readers:= gs.readers(il := gs.readers(il) ++ t), lsf(t0), pcf(t0)), FLITPSCLInv(gs, lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t), invRead), abs(h, gs.readers, gs.p), allReadsOK(h + (R(t, il, ((∅ ⊕ h))(il)), h.lastPersistedOrElse(il, true)) '), allReadsOK(h), allWritesOK(h + (R(t, il, ((∅ ⊕ h))(il)), h.lastPersistedOrElse(il, true)) '), allWritesOK(h), ctrok(gs.ctr, gs.writers), noPendingW(t, gs.p), notMember(t, gs.writers), notMember(t, gs.readers), oneMember(t, lsf0(t).l, gs.readers(il := gs.readers(il) ++ t)), pendingOk(gs.p), writersOk(gs.p, gs.writers), pcf(t0) = idle → apcf(t0) = idle, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = R1 → lsf(t0).l = alsf(t0).il, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → lsf(t0).v = alsf(t0).ov, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → lsf(t0).l = alsf(t0).il ∧ lsf(t0).v = alsf(t0).iv, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ gs.p(l) → ((h | l) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l0) → ((h | l0) | t0) | false = []), pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [], pcf(t0) = W4 → ((h | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [], ∀ l. ¬ FO(t) ∈ gs.p(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(gs, lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t1), apcf(t1)) ∧ labs(gs, lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1 ⊦ ( pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ gs.p(l0) → ((h | l0) | t0) | false = [] ∧ ((il = l0 ⊃ (R(t, il, ((∅ ⊕ h))(il)), h.lastPersistedOrElse(il, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l1) | t0) | false = [] ∧ ((il = l1 ⊃ (R(t, il, ((∅ ⊕ h))(il)), h.lastPersistedOrElse(il, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 ∨ pcf(t0) = R3 → l2 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l2) → ((h | l2) | t0) | false = [] ∧ ((il = l2 ⊃ (R(t, il, ((∅ ⊕ h))(il)), h.lastPersistedOrElse(il, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [] ∧ ((il = lsf(t0).l ⊃ (R(t, il, ((∅ ⊕ h))(il)), h.lastPersistedOrElse(il, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W4 → (((h | lsf(t0).l) | t0) | false) + (((il = lsf(t0).l ⊃ (R(t, il, ((∅ ⊕ h))(il)), h.lastPersistedOrElse(il, true)) ';[]) | t0) | false) = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [] ∧ ((il = lsf(t0).l ⊃ (R(t, il, ((∅ ⊕ h))(il)), h.lastPersistedOrElse(il, true)) ';[]) | t0) | false = [])
Used simplifier rules: ⊦ ((t = ls.t ∧ il = ls.il) ∧ iv = ls.iv) ∧ ov = ls.ov ↔ ls = mkPLIBls(t, il, iv, ov); (elim) Used terms: alsf(t), iv, t2, il, ov
| lsf(t).l = il, gs.mem = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(il, true) ⊃ (R(t, il, ((∅ ⊕ h))(il)), true) ';[])), gs.mem = ∅ ⊕ (h | true), lsf(t0).t = t0, lsf(t).t = t, alsf(t0).t = t0, alsf(t) = mkPLIBls(t2, il, iv, ov), apcf(t) = invRead, lsf0(t) = lsf(t).v:= (gs.mem(il) ⊕ gs.p(il)), pcf(t) = R1, pcf0(t) = R2, t2 = t, ∅ ⊕ h = gs.mem ⊕ gs.p, mem(il) ⊕ p(il) = gs.mem(il) ⊕ gs.p(il), t ≠ t0, FLITPSCLInv(gs.readers:= gs.readers(il := gs.readers(il) ++ t), lsf(t0), pcf(t0)), FLITPSCLInv(gs, lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t), invRead), abs(h, gs.readers, gs.p), allReadsOK(h + (R(t, il, ((∅ ⊕ h))(il)), h.lastPersistedOrElse(il, true)) '), allReadsOK(h), allWritesOK(h + (R(t, il, ((∅ ⊕ h))(il)), h.lastPersistedOrElse(il, true)) '), allWritesOK(h), ctrok(gs.ctr, gs.writers), noPendingW(t, gs.p), notMember(t, gs.writers), notMember(t, gs.readers), oneMember(t, lsf0(t).l, gs.readers(il := gs.readers(il) ++ t)), pendingOk(gs.p), writersOk(gs.p, gs.writers), pcf(t0) = idle → apcf(t0) = idle, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = R1 → lsf(t0).l = alsf(t0).il, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → lsf(t0).v = alsf(t0).ov, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → lsf(t0).l = alsf(t0).il ∧ lsf(t0).v = alsf(t0).iv, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ gs.p(l) → ((h | l) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l0) → ((h | l0) | t0) | false = []), pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [], pcf(t0) = W4 → ((h | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [], ∀ l. ¬ FO(t) ∈ gs.p(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(gs, lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t1), apcf(t1)) ∧ labs(gs, lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1 ⊦ ( pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ gs.p(l0) → ((h | l0) | t0) | false = [] ∧ ((il = l0 ⊃ (R(t, il, ((∅ ⊕ h))(il)), h.lastPersistedOrElse(il, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l1) | t0) | false = [] ∧ ((il = l1 ⊃ (R(t, il, ((∅ ⊕ h))(il)), h.lastPersistedOrElse(il, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 ∨ pcf(t0) = R3 → l2 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l2) → ((h | l2) | t0) | false = [] ∧ ((il = l2 ⊃ (R(t, il, ((∅ ⊕ h))(il)), h.lastPersistedOrElse(il, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [] ∧ ((il = lsf(t0).l ⊃ (R(t, il, ((∅ ⊕ h))(il)), h.lastPersistedOrElse(il, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W4 → (((h | lsf(t0).l) | t0) | false) + (((il = lsf(t0).l ⊃ (R(t, il, ((∅ ⊕ h))(il)), h.lastPersistedOrElse(il, true)) ';[]) | t0) | false) = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [] ∧ ((il = lsf(t0).l ⊃ (R(t, il, ((∅ ⊕ h))(il)), h.lastPersistedOrElse(il, true)) ';[]) | t0) | false = []) |
gs.mem = ∅ ⊕ (h | true), gs.mem = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(lsf(t).l, true) ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), true) ';[])), alsf(t0).t = t0, lsf(t).t = t, lsf(t0).t = t0, alsf(t) = mkPLIBls(t, lsf(t).l, iv, ov), apcf(t) = invRead, lsf0(t) = lsf(t).v:= (gs.mem(lsf(t).l) ⊕ gs.p(lsf(t).l)), pcf(t) = R1, pcf0(t) = R2, mem(lsf(t).l) ⊕ p(lsf(t).l) = gs.mem(lsf(t).l) ⊕ gs.p(lsf(t).l), ∅ ⊕ h = gs.mem ⊕ gs.p, t ≠ t0, FLITPSCLInv(gs, lsf(t0), pcf(t0)), FLITPSCLInv(gs.readers:= gs.readers(lsf(t).l := gs.readers(lsf(t).l) ++ t), lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), mkPLIBls(t, lsf(t).l, iv, ov), invRead), PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t0), apcf(t0)), abs(h, gs.readers, gs.p), allReadsOK(h), allReadsOK(h + (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) '), allWritesOK(h), allWritesOK(h + (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) '), ctrok(gs.ctr, gs.writers), noPendingW(t, gs.p), notMember(t, gs.readers), notMember(t, gs.writers), oneMember(t, lsf0(t).l, gs.readers(lsf(t).l := gs.readers(lsf(t).l) ++ t)), pendingOk(gs.p), writersOk(gs.p, gs.writers), pcf(t0) = W4 → ((h | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [], pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [], pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l0) → ((h | l0) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ gs.p(l) → ((h | l) | t0) | false = []), pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → lsf(t0).l = alsf(t0).il ∧ lsf(t0).v = alsf(t0).iv, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → lsf(t0).v = alsf(t0).ov, pcf(t0) = R1 → lsf(t0).l = alsf(t0).il, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = idle → apcf(t0) = idle, ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(gs, lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t1), apcf(t1)) ∧ labs(gs, lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ gs.p(l) → ((h | l) | t) | false = [] ⊦ ( pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ gs.p(l0) → ((h | l0) | t0) | false = [] ∧ ((lsf(t).l = l0 ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l1) | t0) | false = [] ∧ ((lsf(t).l = l1 ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 ∨ pcf(t0) = R3 → l2 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l2) → ((h | l2) | t0) | false = [] ∧ ((lsf(t).l = l2 ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [] ∧ ((lsf(t).l = lsf(t0).l ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W4 → (((h | lsf(t0).l) | t0) | false) + (((lsf(t).l = lsf(t0).l ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false) = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [] ∧ ((lsf(t).l = lsf(t0).l ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = [])
| gs.mem = ∅ ⊕ (h | true), gs.mem = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(lsf(t).l, true) ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), true) ';[])), alsf(t0).t = t0, lsf(t).t = t, lsf(t0).t = t0, alsf(t) = mkPLIBls(t, lsf(t).l, iv, ov), apcf(t) = invRead, lsf0(t) = lsf(t).v:= (gs.mem(lsf(t).l) ⊕ gs.p(lsf(t).l)), pcf(t) = R1, pcf0(t) = R2, mem(lsf(t).l) ⊕ p(lsf(t).l) = gs.mem(lsf(t).l) ⊕ gs.p(lsf(t).l), ∅ ⊕ h = gs.mem ⊕ gs.p, t ≠ t0, FLITPSCLInv(gs, lsf(t0), pcf(t0)), FLITPSCLInv(gs.readers:= gs.readers(lsf(t).l := gs.readers(lsf(t).l) ++ t), lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), mkPLIBls(t, lsf(t).l, iv, ov), invRead), PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t0), apcf(t0)), abs(h, gs.readers, gs.p), allReadsOK(h), allReadsOK(h + (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) '), allWritesOK(h), allWritesOK(h + (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) '), ctrok(gs.ctr, gs.writers), noPendingW(t, gs.p), notMember(t, gs.readers), notMember(t, gs.writers), oneMember(t, lsf0(t).l, gs.readers(lsf(t).l := gs.readers(lsf(t).l) ++ t)), pendingOk(gs.p), writersOk(gs.p, gs.writers), pcf(t0) = W4 → ((h | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [], pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [], pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l0) → ((h | l0) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ gs.p(l) → ((h | l) | t0) | false = []), pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → lsf(t0).l = alsf(t0).il ∧ lsf(t0).v = alsf(t0).iv, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → lsf(t0).v = alsf(t0).ov, pcf(t0) = R1 → lsf(t0).l = alsf(t0).il, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = idle → apcf(t0) = idle, ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(gs, lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t1), apcf(t1)) ∧ labs(gs, lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ gs.p(l) → ((h | l) | t) | false = [] ⊦ ( pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ gs.p(l0) → ((h | l0) | t0) | false = [] ∧ ((lsf(t).l = l0 ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l1) | t0) | false = [] ∧ ((lsf(t).l = l1 ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 ∨ pcf(t0) = R3 → l2 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l2) → ((h | l2) | t0) | false = [] ∧ ((lsf(t).l = l2 ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [] ∧ ((lsf(t).l = lsf(t0).l ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W4 → (((h | lsf(t0).l) | t0) | false) + (((lsf(t).l = lsf(t0).l ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false) = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [] ∧ ((lsf(t).l = lsf(t0).l ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) |
gs.mem = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(lsf(t).l, true) ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), true) ';[])), gs.mem = ∅ ⊕ (h | true), lsf(t0).t = t0, lsf(t).t = t, alsf(t) = mkPLIBls(t, lsf(t).l, iv, ov), alsf(t0) = mkPLIBls(t2, il, iv0, ov0), apcf(t) = invRead, lsf0(t) = lsf(t).v:= (gs.mem(lsf(t).l) ⊕ gs.p(lsf(t).l)), pcf(t) = R1, pcf0(t) = R2, t2 = t0, ∅ ⊕ h = gs.mem ⊕ gs.p, mem(lsf(t).l) ⊕ p(lsf(t).l) = gs.mem(lsf(t).l) ⊕ gs.p(lsf(t).l), t ≠ t0, FLITPSCLInv(gs.readers:= gs.readers(lsf(t).l := gs.readers(lsf(t).l) ++ t), lsf(t0), pcf(t0)), FLITPSCLInv(gs, lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), mkPLIBls(t, lsf(t).l, iv, ov), invRead), abs(h, gs.readers, gs.p), allReadsOK(h + (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) '), allReadsOK(h), allWritesOK(h + (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) '), allWritesOK(h), ctrok(gs.ctr, gs.writers), noPendingW(t, gs.p), notMember(t, gs.writers), notMember(t, gs.readers), oneMember(t, lsf0(t).l, gs.readers(lsf(t).l := gs.readers(lsf(t).l) ++ t)), pendingOk(gs.p), writersOk(gs.p, gs.writers), pcf(t0) = idle → apcf(t0) = idle, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = R1 → lsf(t0).l = il, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → lsf(t0).v = ov0, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → lsf(t0).l = il ∧ lsf(t0).v = iv0, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ gs.p(l) → ((h | l) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l0) → ((h | l0) | t0) | false = []), pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [], pcf(t0) = W4 → ((h | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [], ∀ l. ¬ FO(t) ∈ gs.p(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(gs, lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t1), apcf(t1)) ∧ labs(gs, lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1 ⊦ ( pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ gs.p(l0) → ((h | l0) | t0) | false = [] ∧ ((lsf(t).l = l0 ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l1) | t0) | false = [] ∧ ((lsf(t).l = l1 ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 ∨ pcf(t0) = R3 → l2 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l2) → ((h | l2) | t0) | false = [] ∧ ((lsf(t).l = l2 ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [] ∧ ((lsf(t).l = lsf(t0).l ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W4 → (((h | lsf(t0).l) | t0) | false) + (((lsf(t).l = lsf(t0).l ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false) = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [] ∧ ((lsf(t).l = lsf(t0).l ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = [])
Used simplifier rules: ⊦ ((t = ls.t ∧ il = ls.il) ∧ iv = ls.iv) ∧ ov = ls.ov ↔ ls = mkPLIBls(t, il, iv, ov); (elim) Used terms: alsf(t0), iv0, t2, il, ov0
| gs.mem = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(lsf(t).l, true) ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), true) ';[])), gs.mem = ∅ ⊕ (h | true), lsf(t0).t = t0, lsf(t).t = t, alsf(t) = mkPLIBls(t, lsf(t).l, iv, ov), alsf(t0) = mkPLIBls(t2, il, iv0, ov0), apcf(t) = invRead, lsf0(t) = lsf(t).v:= (gs.mem(lsf(t).l) ⊕ gs.p(lsf(t).l)), pcf(t) = R1, pcf0(t) = R2, t2 = t0, ∅ ⊕ h = gs.mem ⊕ gs.p, mem(lsf(t).l) ⊕ p(lsf(t).l) = gs.mem(lsf(t).l) ⊕ gs.p(lsf(t).l), t ≠ t0, FLITPSCLInv(gs.readers:= gs.readers(lsf(t).l := gs.readers(lsf(t).l) ++ t), lsf(t0), pcf(t0)), FLITPSCLInv(gs, lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), mkPLIBls(t, lsf(t).l, iv, ov), invRead), abs(h, gs.readers, gs.p), allReadsOK(h + (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) '), allReadsOK(h), allWritesOK(h + (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) '), allWritesOK(h), ctrok(gs.ctr, gs.writers), noPendingW(t, gs.p), notMember(t, gs.writers), notMember(t, gs.readers), oneMember(t, lsf0(t).l, gs.readers(lsf(t).l := gs.readers(lsf(t).l) ++ t)), pendingOk(gs.p), writersOk(gs.p, gs.writers), pcf(t0) = idle → apcf(t0) = idle, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = R1 → lsf(t0).l = il, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → lsf(t0).v = ov0, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → lsf(t0).l = il ∧ lsf(t0).v = iv0, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ gs.p(l) → ((h | l) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l0) → ((h | l0) | t0) | false = []), pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [], pcf(t0) = W4 → ((h | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [], ∀ l. ¬ FO(t) ∈ gs.p(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(gs, lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t1), apcf(t1)) ∧ labs(gs, lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1 ⊦ ( pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ gs.p(l0) → ((h | l0) | t0) | false = [] ∧ ((lsf(t).l = l0 ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l1) | t0) | false = [] ∧ ((lsf(t).l = l1 ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 ∨ pcf(t0) = R3 → l2 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l2) → ((h | l2) | t0) | false = [] ∧ ((lsf(t).l = l2 ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [] ∧ ((lsf(t).l = lsf(t0).l ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W4 → (((h | lsf(t0).l) | t0) | false) + (((lsf(t).l = lsf(t0).l ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false) = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [] ∧ ((lsf(t).l = lsf(t0).l ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) |
gs.mem = ∅ ⊕ (h | true), gs.mem = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(lsf(t).l, true) ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), true) ';[])), lsf(t).t = t, lsf(t0).t = t0, alsf(t0) = mkPLIBls(t0, il, iv0, ov0), alsf(t) = mkPLIBls(t, lsf(t).l, iv, ov), apcf(t) = invRead, lsf0(t) = lsf(t).v:= (gs.mem(lsf(t).l) ⊕ gs.p(lsf(t).l)), pcf(t) = R1, pcf0(t) = R2, mem(lsf(t).l) ⊕ p(lsf(t).l) = gs.mem(lsf(t).l) ⊕ gs.p(lsf(t).l), ∅ ⊕ h = gs.mem ⊕ gs.p, t ≠ t0, FLITPSCLInv(gs, lsf(t0), pcf(t0)), FLITPSCLInv(gs.readers:= gs.readers(lsf(t).l := gs.readers(lsf(t).l) ++ t), lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), mkPLIBls(t, lsf(t).l, iv, ov), invRead), PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), abs(h, gs.readers, gs.p), allReadsOK(h), allReadsOK(h + (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) '), allWritesOK(h), allWritesOK(h + (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) '), ctrok(gs.ctr, gs.writers), noPendingW(t, gs.p), notMember(t, gs.readers), notMember(t, gs.writers), oneMember(t, lsf0(t).l, gs.readers(lsf(t).l := gs.readers(lsf(t).l) ++ t)), pendingOk(gs.p), writersOk(gs.p, gs.writers), pcf(t0) = W4 → ((h | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [], pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [], pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l0) → ((h | l0) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ gs.p(l) → ((h | l) | t0) | false = []), pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → lsf(t0).l = il ∧ lsf(t0).v = iv0, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → lsf(t0).v = ov0, pcf(t0) = R1 → lsf(t0).l = il, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = idle → apcf(t0) = idle, ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(gs, lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t1), apcf(t1)) ∧ labs(gs, lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ gs.p(l) → ((h | l) | t) | false = [] ⊦ ( pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ gs.p(l0) → ((h | l0) | t0) | false = [] ∧ ((lsf(t).l = l0 ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l1) | t0) | false = [] ∧ ((lsf(t).l = l1 ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 ∨ pcf(t0) = R3 → l2 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l2) → ((h | l2) | t0) | false = [] ∧ ((lsf(t).l = l2 ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [] ∧ ((lsf(t).l = lsf(t0).l ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W4 → (((h | lsf(t0).l) | t0) | false) + (((lsf(t).l = lsf(t0).l ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false) = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [] ∧ ((lsf(t).l = lsf(t0).l ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = [])
| gs.mem = ∅ ⊕ (h | true), gs.mem = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(lsf(t).l, true) ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), true) ';[])), lsf(t).t = t, lsf(t0).t = t0, alsf(t0) = mkPLIBls(t0, il, iv0, ov0), alsf(t) = mkPLIBls(t, lsf(t).l, iv, ov), apcf(t) = invRead, lsf0(t) = lsf(t).v:= (gs.mem(lsf(t).l) ⊕ gs.p(lsf(t).l)), pcf(t) = R1, pcf0(t) = R2, mem(lsf(t).l) ⊕ p(lsf(t).l) = gs.mem(lsf(t).l) ⊕ gs.p(lsf(t).l), ∅ ⊕ h = gs.mem ⊕ gs.p, t ≠ t0, FLITPSCLInv(gs, lsf(t0), pcf(t0)), FLITPSCLInv(gs.readers:= gs.readers(lsf(t).l := gs.readers(lsf(t).l) ++ t), lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), mkPLIBls(t, lsf(t).l, iv, ov), invRead), PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), abs(h, gs.readers, gs.p), allReadsOK(h), allReadsOK(h + (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) '), allWritesOK(h), allWritesOK(h + (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) '), ctrok(gs.ctr, gs.writers), noPendingW(t, gs.p), notMember(t, gs.readers), notMember(t, gs.writers), oneMember(t, lsf0(t).l, gs.readers(lsf(t).l := gs.readers(lsf(t).l) ++ t)), pendingOk(gs.p), writersOk(gs.p, gs.writers), pcf(t0) = W4 → ((h | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [], pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [], pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l0) → ((h | l0) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ gs.p(l) → ((h | l) | t0) | false = []), pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → lsf(t0).l = il ∧ lsf(t0).v = iv0, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → lsf(t0).v = ov0, pcf(t0) = R1 → lsf(t0).l = il, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = idle → apcf(t0) = idle, ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(gs, lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t1), apcf(t1)) ∧ labs(gs, lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ gs.p(l) → ((h | l) | t) | false = [] ⊦ ( pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ gs.p(l0) → ((h | l0) | t0) | false = [] ∧ ((lsf(t).l = l0 ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l1) | t0) | false = [] ∧ ((lsf(t).l = l1 ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 ∨ pcf(t0) = R3 → l2 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l2) → ((h | l2) | t0) | false = [] ∧ ((lsf(t).l = l2 ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [] ∧ ((lsf(t).l = lsf(t0).l ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W4 → (((h | lsf(t0).l) | t0) | false) + (((lsf(t).l = lsf(t0).l ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false) = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [] ∧ ((lsf(t).l = lsf(t0).l ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) |
lsf(t0).t = t0, lsf(t).t = t, alsf(t) = mkPLIBls(t, lsf(t).l, iv, ov), alsf(t0) = mkPLIBls(t0, il, iv0, ov0), apcf(t) = invRead, gs = mkFLITPSCgs(mem0, p0, ctr, writers, writers0), lsf0(t) = lsf(t).v:= (mem0(lsf(t).l) ⊕ p0(lsf(t).l)), mem0 = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(lsf(t).l, true) ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), true) ';[])), mem0 = ∅ ⊕ (h | true), pcf(t) = R1, pcf0(t) = R2, ∅ ⊕ h = mem0 ⊕ p0, mem(lsf(t).l) ⊕ p(lsf(t).l) = mem0(lsf(t).l) ⊕ p0(lsf(t).l), t ≠ t0, FLITPSCLInv(gs.readers:= writers0(lsf(t).l := writers0(lsf(t).l) ++ t), lsf(t0), pcf(t0)), FLITPSCLInv(gs, lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, mem0, h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, mem0, h), mkPLIBls(t, lsf(t).l, iv, ov), invRead), abs(h, writers0, p0), allReadsOK(h + (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) '), allReadsOK(h), allWritesOK(h + (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) '), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers), notMember(t, writers0), oneMember(t, lsf0(t).l, writers0(lsf(t).l := writers0(lsf(t).l) ++ t)), pendingOk(p0), writersOk(p0, writers), pcf(t0) = idle → apcf(t0) = idle, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = R1 → lsf(t0).l = il, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → lsf(t0).v = ov0, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → lsf(t0).l = il ∧ lsf(t0).v = iv0, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = []), pcf(t0) = R2 → ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [], pcf(t0) = W4 → ((h | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [], ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(gs, lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, mem0, h), alsf(t1), apcf(t1)) ∧ labs(gs, lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, mem0, h), alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1 ⊦ ( pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = [] ∧ ((lsf(t).l = l0 ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l1) | t0) | false = [] ∧ ((lsf(t).l = l1 ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 ∨ pcf(t0) = R3 → l2 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ p0(l2) → ((h | l2) | t0) | false = [] ∧ ((lsf(t).l = l2 ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 → ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [] ∧ ((lsf(t).l = lsf(t0).l ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W4 → (((h | lsf(t0).l) | t0) | false) + (((lsf(t).l = lsf(t0).l ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false) = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [] ∧ ((lsf(t).l = lsf(t0).l ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = [])
Used simplifier rules: ⊦ (((mem = gs.mem ∧ p = gs.p) ∧ ctr = gs.ctr) ∧ writers = gs.writers) ∧ readers = gs.readers ↔ gs = mkFLITPSCgs(mem, p, ctr, writers, readers); (elim) Used terms: gs, mem0, ctr, writers, writers0, p0
| lsf(t0).t = t0, lsf(t).t = t, alsf(t) = mkPLIBls(t, lsf(t).l, iv, ov), alsf(t0) = mkPLIBls(t0, il, iv0, ov0), apcf(t) = invRead, gs = mkFLITPSCgs(mem0, p0, ctr, writers, writers0), lsf0(t) = lsf(t).v:= (mem0(lsf(t).l) ⊕ p0(lsf(t).l)), mem0 = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(lsf(t).l, true) ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), true) ';[])), mem0 = ∅ ⊕ (h | true), pcf(t) = R1, pcf0(t) = R2, ∅ ⊕ h = mem0 ⊕ p0, mem(lsf(t).l) ⊕ p(lsf(t).l) = mem0(lsf(t).l) ⊕ p0(lsf(t).l), t ≠ t0, FLITPSCLInv(gs.readers:= writers0(lsf(t).l := writers0(lsf(t).l) ++ t), lsf(t0), pcf(t0)), FLITPSCLInv(gs, lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, mem0, h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, mem0, h), mkPLIBls(t, lsf(t).l, iv, ov), invRead), abs(h, writers0, p0), allReadsOK(h + (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) '), allReadsOK(h), allWritesOK(h + (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) '), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers), notMember(t, writers0), oneMember(t, lsf0(t).l, writers0(lsf(t).l := writers0(lsf(t).l) ++ t)), pendingOk(p0), writersOk(p0, writers), pcf(t0) = idle → apcf(t0) = idle, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = R1 → lsf(t0).l = il, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → lsf(t0).v = ov0, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → lsf(t0).l = il ∧ lsf(t0).v = iv0, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = []), pcf(t0) = R2 → ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [], pcf(t0) = W4 → ((h | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [], ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(gs, lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, mem0, h), alsf(t1), apcf(t1)) ∧ labs(gs, lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, mem0, h), alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1 ⊦ ( pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = [] ∧ ((lsf(t).l = l0 ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l1) | t0) | false = [] ∧ ((lsf(t).l = l1 ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 ∨ pcf(t0) = R3 → l2 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ p0(l2) → ((h | l2) | t0) | false = [] ∧ ((lsf(t).l = l2 ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 → ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [] ∧ ((lsf(t).l = lsf(t0).l ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W4 → (((h | lsf(t0).l) | t0) | false) + (((lsf(t).l = lsf(t0).l ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false) = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [] ∧ ((lsf(t).l = lsf(t0).l ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) |
lsf(t).t = t, lsf(t0).t = t0, alsf(t0) = mkPLIBls(t0, il, iv0, ov0), alsf(t) = mkPLIBls(t, lsf(t).l, iv, ov), apcf(t) = invRead, lsf0(t) = lsf(t).v:= (((∅ ⊕ (h | true)))(lsf(t).l) ⊕ p0(lsf(t).l)), pcf(t) = R1, pcf0(t) = R2, mem(lsf(t).l) ⊕ p(lsf(t).l) = ((∅ ⊕ (h | true)))(lsf(t).l) ⊕ p0(lsf(t).l), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(lsf(t).l, true) ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), true) ';[])), t ≠ t0, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(lsf(t).l := writers0(lsf(t).l) ++ t)), lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, lsf(t).l, iv, ov), invRead), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), abs(h, writers0, p0), allReadsOK(h), allReadsOK(h + (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) '), allWritesOK(h), allWritesOK(h + (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) '), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers0), notMember(t, writers), oneMember(t, lsf0(t).l, writers0(lsf(t).l := writers0(lsf(t).l) ++ t)), pendingOk(p0), writersOk(p0, writers), pcf(t0) = W4 → ((h | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [], pcf(t0) = R2 → ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [], pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = []), pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → lsf(t0).l = il ∧ lsf(t0).v = iv0, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → lsf(t0).v = ov0, pcf(t0) = R1 → lsf(t0).l = il, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = idle → apcf(t0) = idle, ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [] ⊦ ( pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = [] ∧ ((lsf(t).l = l0 ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l1) | t0) | false = [] ∧ ((lsf(t).l = l1 ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 ∨ pcf(t0) = R3 → l2 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ p0(l2) → ((h | l2) | t0) | false = [] ∧ ((lsf(t).l = l2 ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 → ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [] ∧ ((lsf(t).l = lsf(t0).l ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W4 → (((h | lsf(t0).l) | t0) | false) + (((lsf(t).l = lsf(t0).l ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false) = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [] ∧ ((lsf(t).l = lsf(t0).l ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = [])
Used simplifier rules: ⊦ mkFLITPSCgs(mem, p, ctr, writers, writers0).readers:= writers2 = mkFLITPSCgs(mem, p, ctr, writers, writers2); (s)
| lsf(t).t = t, lsf(t0).t = t0, alsf(t0) = mkPLIBls(t0, il, iv0, ov0), alsf(t) = mkPLIBls(t, lsf(t).l, iv, ov), apcf(t) = invRead, lsf0(t) = lsf(t).v:= (((∅ ⊕ (h | true)))(lsf(t).l) ⊕ p0(lsf(t).l)), pcf(t) = R1, pcf0(t) = R2, mem(lsf(t).l) ⊕ p(lsf(t).l) = ((∅ ⊕ (h | true)))(lsf(t).l) ⊕ p0(lsf(t).l), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(lsf(t).l, true) ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), true) ';[])), t ≠ t0, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(lsf(t).l := writers0(lsf(t).l) ++ t)), lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, lsf(t).l, iv, ov), invRead), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), abs(h, writers0, p0), allReadsOK(h), allReadsOK(h + (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) '), allWritesOK(h), allWritesOK(h + (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) '), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers0), notMember(t, writers), oneMember(t, lsf0(t).l, writers0(lsf(t).l := writers0(lsf(t).l) ++ t)), pendingOk(p0), writersOk(p0, writers), pcf(t0) = W4 → ((h | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [], pcf(t0) = R2 → ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [], pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = []), pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → lsf(t0).l = il ∧ lsf(t0).v = iv0, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → lsf(t0).v = ov0, pcf(t0) = R1 → lsf(t0).l = il, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = idle → apcf(t0) = idle, ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [] ⊦ ( pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = [] ∧ ((lsf(t).l = l0 ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l1) | t0) | false = [] ∧ ((lsf(t).l = l1 ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 ∨ pcf(t0) = R3 → l2 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ p0(l2) → ((h | l2) | t0) | false = [] ∧ ((lsf(t).l = l2 ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 → ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [] ∧ ((lsf(t).l = lsf(t0).l ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W4 → (((h | lsf(t0).l) | t0) | false) + (((lsf(t).l = lsf(t0).l ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false) = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [] ∧ ((lsf(t).l = lsf(t0).l ⊃ (R(t, lsf(t).l, ((∅ ⊕ h))(lsf(t).l)), h.lastPersistedOrElse(lsf(t).l, true)) ';[]) | t0) | false = []) |
lsf(t0).t = t0, alsf(t) = mkPLIBls(t, l3, iv, ov), alsf(t0) = mkPLIBls(t0, il, iv0, ov0), apcf(t) = invRead, lsf(t) = mkFLITPSCls(t2, l3, v), lsf0(t) = lsf(t).v:= (((∅ ⊕ (h | true)))(l3) ⊕ p0(l3)), pcf(t) = R1, pcf0(t) = R2, t2 = t, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), t ≠ t0, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), lsf(t0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), abs(h, writers0, p0), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allReadsOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers), notMember(t, writers0), oneMember(t, lsf0(t).l, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), pcf(t0) = idle → apcf(t0) = idle, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = R1 → lsf(t0).l = il, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → lsf(t0).v = ov0, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → lsf(t0).l = il ∧ lsf(t0).v = iv0, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = []), pcf(t0) = R2 → ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [], pcf(t0) = W4 → ((h | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [], ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1 ⊦ ( pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = [] ∧ ((l3 = l0 ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l1) | t0) | false = [] ∧ ((l3 = l1 ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 ∨ pcf(t0) = R3 → l2 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ p0(l2) → ((h | l2) | t0) | false = [] ∧ ((l3 = l2 ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 → ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [] ∧ ((l3 = lsf(t0).l ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W4 → (((h | lsf(t0).l) | t0) | false) + (((l3 = lsf(t0).l ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) ';[]) | t0) | false) = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [] ∧ ((l3 = lsf(t0).l ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) ';[]) | t0) | false = [])
Used simplifier rules: ⊦ (t = ls.t ∧ l = ls.l) ∧ v = ls.v ↔ ls = mkFLITPSCls(t, l, v); (elim) Used terms: lsf(t), t2, l3, v
| lsf(t0).t = t0, alsf(t) = mkPLIBls(t, l3, iv, ov), alsf(t0) = mkPLIBls(t0, il, iv0, ov0), apcf(t) = invRead, lsf(t) = mkFLITPSCls(t2, l3, v), lsf0(t) = lsf(t).v:= (((∅ ⊕ (h | true)))(l3) ⊕ p0(l3)), pcf(t) = R1, pcf0(t) = R2, t2 = t, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), t ≠ t0, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), lsf(t0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), abs(h, writers0, p0), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allReadsOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers), notMember(t, writers0), oneMember(t, lsf0(t).l, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), pcf(t0) = idle → apcf(t0) = idle, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = R1 → lsf(t0).l = il, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → lsf(t0).v = ov0, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → lsf(t0).l = il ∧ lsf(t0).v = iv0, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = []), pcf(t0) = R2 → ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [], pcf(t0) = W4 → ((h | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [], ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1 ⊦ ( pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = [] ∧ ((l3 = l0 ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l1) | t0) | false = [] ∧ ((l3 = l1 ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 ∨ pcf(t0) = R3 → l2 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ p0(l2) → ((h | l2) | t0) | false = [] ∧ ((l3 = l2 ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 → ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [] ∧ ((l3 = lsf(t0).l ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W4 → (((h | lsf(t0).l) | t0) | false) + (((l3 = lsf(t0).l ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) ';[]) | t0) | false) = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [] ∧ ((l3 = lsf(t0).l ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) ';[]) | t0) | false = []) |
lsf(t0).t = t0, alsf(t0) = mkPLIBls(t0, il, iv0, ov0), alsf(t) = mkPLIBls(t, l3, iv, ov), apcf(t) = invRead, lsf(t) = mkFLITPSCls(t, l3, v), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t) = R1, pcf0(t) = R2, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), t ≠ t0, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), abs(h, writers0, p0), allReadsOK(h), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers0), notMember(t, writers), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), pcf(t0) = W4 → ((h | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [], pcf(t0) = R2 → ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [], pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = []), pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → lsf(t0).l = il ∧ lsf(t0).v = iv0, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → lsf(t0).v = ov0, pcf(t0) = R1 → lsf(t0).l = il, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = idle → apcf(t0) = idle, ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [] ⊦ ( pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = [] ∧ ((l3 = l0 ⊃ (R(t, l0, ((∅ ⊕ h))(l0)), h.lastPersistedOrElse(l0, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l1) | t0) | false = [] ∧ ((l3 = l1 ⊃ (R(t, l1, ((∅ ⊕ h))(l1)), h.lastPersistedOrElse(l1, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 ∨ pcf(t0) = R3 → l2 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ p0(l2) → ((h | l2) | t0) | false = [] ∧ ((l3 = l2 ⊃ (R(t, l2, ((∅ ⊕ h))(l2)), h.lastPersistedOrElse(l2, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 → ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [] ∧ ((l3 = lsf(t0).l ⊃ (R(t, lsf(t0).l, ((∅ ⊕ h))(lsf(t0).l)), h.lastPersistedOrElse(lsf(t0).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W4 → (((h | lsf(t0).l) | t0) | false) + (((l3 = lsf(t0).l ⊃ (R(t, lsf(t0).l, ((∅ ⊕ h))(lsf(t0).l)), h.lastPersistedOrElse(lsf(t0).l, true)) ';[]) | t0) | false) = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [] ∧ ((l3 = lsf(t0).l ⊃ (R(t, lsf(t0).l, ((∅ ⊕ h))(lsf(t0).l)), h.lastPersistedOrElse(lsf(t0).l, true)) ';[]) | t0) | false = [])
Used simplifier rules: ⊦ mkFLITPSCls(t, l, v).l = l; (s) ⊦ mkFLITPSCls(t, l, v).v:= v0 = mkFLITPSCls(t, l, v0); (s)
| lsf(t0).t = t0, alsf(t0) = mkPLIBls(t0, il, iv0, ov0), alsf(t) = mkPLIBls(t, l3, iv, ov), apcf(t) = invRead, lsf(t) = mkFLITPSCls(t, l3, v), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t) = R1, pcf0(t) = R2, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), t ≠ t0, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), abs(h, writers0, p0), allReadsOK(h), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers0), notMember(t, writers), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), pcf(t0) = W4 → ((h | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [], pcf(t0) = R2 → ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [], pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = []), pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → lsf(t0).l = il ∧ lsf(t0).v = iv0, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → lsf(t0).v = ov0, pcf(t0) = R1 → lsf(t0).l = il, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = idle → apcf(t0) = idle, ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [] ⊦ ( pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = [] ∧ ((l3 = l0 ⊃ (R(t, l0, ((∅ ⊕ h))(l0)), h.lastPersistedOrElse(l0, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l1) | t0) | false = [] ∧ ((l3 = l1 ⊃ (R(t, l1, ((∅ ⊕ h))(l1)), h.lastPersistedOrElse(l1, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 ∨ pcf(t0) = R3 → l2 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ p0(l2) → ((h | l2) | t0) | false = [] ∧ ((l3 = l2 ⊃ (R(t, l2, ((∅ ⊕ h))(l2)), h.lastPersistedOrElse(l2, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 → ctr(lsf(t0).l) = 0 → ((h | lsf(t0).l) | t0) | false = [] ∧ ((l3 = lsf(t0).l ⊃ (R(t, lsf(t0).l, ((∅ ⊕ h))(lsf(t0).l)), h.lastPersistedOrElse(lsf(t0).l, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W4 → (((h | lsf(t0).l) | t0) | false) + (((l3 = lsf(t0).l ⊃ (R(t, lsf(t0).l, ((∅ ⊕ h))(lsf(t0).l)), h.lastPersistedOrElse(lsf(t0).l, true)) ';[]) | t0) | false) = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h | lsf(t0).l) | t0) | false = [] ∧ ((l3 = lsf(t0).l ⊃ (R(t, lsf(t0).l, ((∅ ⊕ h))(lsf(t0).l)), h.lastPersistedOrElse(lsf(t0).l, true)) ';[]) | t0) | false = []) |
alsf(t) = mkPLIBls(t, l3, iv, ov), alsf(t0) = mkPLIBls(t0, il, iv0, ov0), apcf(t) = invRead, lsf(t) = mkFLITPSCls(t, l3, v), lsf(t0) = mkFLITPSCls(t2, l4, v0), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t) = R1, pcf0(t) = R2, t2 = t0, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), t ≠ t0, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), lsf(t0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), abs(h, writers0, p0), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allReadsOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers), notMember(t, writers0), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), pcf(t0) = idle → apcf(t0) = idle, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = R1 → l4 = il, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → v0 = ov0, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → l4 = il ∧ v0 = iv0, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ l4 ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = []), pcf(t0) = R2 → ctr(l4) = 0 → ((h | l4) | t0) | false = [], pcf(t0) = W4 → ((h | l4) | t0) | false = (W(t0, l4, v0), false) ' ∨ ((h | l4) | t0) | false = [], ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1 ⊦ ( pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = [] ∧ ((l3 = l0 ⊃ (R(t, l0, ((∅ ⊕ h))(l0)), h.lastPersistedOrElse(l0, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l1) | t0) | false = [] ∧ ((l3 = l1 ⊃ (R(t, l1, ((∅ ⊕ h))(l1)), h.lastPersistedOrElse(l1, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 ∨ pcf(t0) = R3 → l2 ≠ l4 ∧ ¬ FO(t0) ∈ p0(l2) → ((h | l2) | t0) | false = [] ∧ ((l3 = l2 ⊃ (R(t, l2, ((∅ ⊕ h))(l2)), h.lastPersistedOrElse(l2, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 → ctr(l4) = 0 → ((h | l4) | t0) | false = [] ∧ ((l3 = l4 ⊃ (R(t, l4, ((∅ ⊕ h))(l4)), h.lastPersistedOrElse(l4, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W4 → (((h | l4) | t0) | false) + (((l3 = l4 ⊃ (R(t, l4, ((∅ ⊕ h))(l4)), h.lastPersistedOrElse(l4, true)) ';[]) | t0) | false) = (W(t0, l4, v0), false) ' ∨ ((h | l4) | t0) | false = [] ∧ ((l3 = l4 ⊃ (R(t, l4, ((∅ ⊕ h))(l4)), h.lastPersistedOrElse(l4, true)) ';[]) | t0) | false = [])
Used simplifier rules: ⊦ (t = ls.t ∧ l = ls.l) ∧ v = ls.v ↔ ls = mkFLITPSCls(t, l, v); (elim) Used terms: lsf(t0), t2, l4, v0
| alsf(t) = mkPLIBls(t, l3, iv, ov), alsf(t0) = mkPLIBls(t0, il, iv0, ov0), apcf(t) = invRead, lsf(t) = mkFLITPSCls(t, l3, v), lsf(t0) = mkFLITPSCls(t2, l4, v0), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t) = R1, pcf0(t) = R2, t2 = t0, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), t ≠ t0, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), lsf(t0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), abs(h, writers0, p0), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allReadsOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers), notMember(t, writers0), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), pcf(t0) = idle → apcf(t0) = idle, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = R1 → l4 = il, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → v0 = ov0, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → l4 = il ∧ v0 = iv0, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ l4 ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = []), pcf(t0) = R2 → ctr(l4) = 0 → ((h | l4) | t0) | false = [], pcf(t0) = W4 → ((h | l4) | t0) | false = (W(t0, l4, v0), false) ' ∨ ((h | l4) | t0) | false = [], ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1 ⊦ ( pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = [] ∧ ((l3 = l0 ⊃ (R(t, l0, ((∅ ⊕ h))(l0)), h.lastPersistedOrElse(l0, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l1) | t0) | false = [] ∧ ((l3 = l1 ⊃ (R(t, l1, ((∅ ⊕ h))(l1)), h.lastPersistedOrElse(l1, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 ∨ pcf(t0) = R3 → l2 ≠ l4 ∧ ¬ FO(t0) ∈ p0(l2) → ((h | l2) | t0) | false = [] ∧ ((l3 = l2 ⊃ (R(t, l2, ((∅ ⊕ h))(l2)), h.lastPersistedOrElse(l2, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 → ctr(l4) = 0 → ((h | l4) | t0) | false = [] ∧ ((l3 = l4 ⊃ (R(t, l4, ((∅ ⊕ h))(l4)), h.lastPersistedOrElse(l4, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W4 → (((h | l4) | t0) | false) + (((l3 = l4 ⊃ (R(t, l4, ((∅ ⊕ h))(l4)), h.lastPersistedOrElse(l4, true)) ';[]) | t0) | false) = (W(t0, l4, v0), false) ' ∨ ((h | l4) | t0) | false = [] ∧ ((l3 = l4 ⊃ (R(t, l4, ((∅ ⊕ h))(l4)), h.lastPersistedOrElse(l4, true)) ';[]) | t0) | false = []) |
alsf(t0) = mkPLIBls(t0, il, iv0, ov0), alsf(t) = mkPLIBls(t, l3, iv, ov), apcf(t) = invRead, lsf(t0) = mkFLITPSCls(t0, l4, v0), lsf(t) = mkFLITPSCls(t, l3, v), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t) = R1, pcf0(t) = R2, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), t ≠ t0, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), mkFLITPSCls(t0, l4, v0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), mkFLITPSCls(t0, l4, v0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), abs(h, writers0, p0), allReadsOK(h), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers0), notMember(t, writers), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), pcf(t0) = W4 → ((h | l4) | t0) | false = (W(t0, l4, v0), false) ' ∨ ((h | l4) | t0) | false = [], pcf(t0) = R2 → ctr(l4) = 0 → ((h | l4) | t0) | false = [], pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ l4 ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = []), pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → l4 = il ∧ v0 = iv0, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → v0 = ov0, pcf(t0) = R1 → l4 = il, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = idle → apcf(t0) = idle, ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [] ⊦ ( pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = [] ∧ ((l3 = l0 ⊃ (R(t, l0, ((∅ ⊕ h))(l0)), h.lastPersistedOrElse(l0, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l1) | t0) | false = [] ∧ ((l3 = l1 ⊃ (R(t, l1, ((∅ ⊕ h))(l1)), h.lastPersistedOrElse(l1, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 ∨ pcf(t0) = R3 → l2 ≠ l4 ∧ ¬ FO(t0) ∈ p0(l2) → ((h | l2) | t0) | false = [] ∧ ((l3 = l2 ⊃ (R(t, l2, ((∅ ⊕ h))(l2)), h.lastPersistedOrElse(l2, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 → ctr(l4) = 0 → ((h | l4) | t0) | false = [] ∧ ((l3 = l4 ⊃ (R(t, l4, ((∅ ⊕ h))(l4)), h.lastPersistedOrElse(l4, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W4 → (((h | l4) | t0) | false) + (((l3 = l4 ⊃ (R(t, l4, ((∅ ⊕ h))(l4)), h.lastPersistedOrElse(l4, true)) ';[]) | t0) | false) = (W(t0, l4, v0), false) ' ∨ ((h | l4) | t0) | false = [] ∧ ((l3 = l4 ⊃ (R(t, l4, ((∅ ⊕ h))(l4)), h.lastPersistedOrElse(l4, true)) ';[]) | t0) | false = [])
| alsf(t0) = mkPLIBls(t0, il, iv0, ov0), alsf(t) = mkPLIBls(t, l3, iv, ov), apcf(t) = invRead, lsf(t0) = mkFLITPSCls(t0, l4, v0), lsf(t) = mkFLITPSCls(t, l3, v), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t) = R1, pcf0(t) = R2, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), t ≠ t0, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), mkFLITPSCls(t0, l4, v0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), mkFLITPSCls(t0, l4, v0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), abs(h, writers0, p0), allReadsOK(h), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers0), notMember(t, writers), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), pcf(t0) = W4 → ((h | l4) | t0) | false = (W(t0, l4, v0), false) ' ∨ ((h | l4) | t0) | false = [], pcf(t0) = R2 → ctr(l4) = 0 → ((h | l4) | t0) | false = [], pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ l4 ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = []), pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → l4 = il ∧ v0 = iv0, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → v0 = ov0, pcf(t0) = R1 → l4 = il, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = idle → apcf(t0) = idle, ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [] ⊦ ( pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = [] ∧ ((l3 = l0 ⊃ (R(t, l0, ((∅ ⊕ h))(l0)), h.lastPersistedOrElse(l0, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l1) | t0) | false = [] ∧ ((l3 = l1 ⊃ (R(t, l1, ((∅ ⊕ h))(l1)), h.lastPersistedOrElse(l1, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 ∨ pcf(t0) = R3 → l2 ≠ l4 ∧ ¬ FO(t0) ∈ p0(l2) → ((h | l2) | t0) | false = [] ∧ ((l3 = l2 ⊃ (R(t, l2, ((∅ ⊕ h))(l2)), h.lastPersistedOrElse(l2, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = R2 → ctr(l4) = 0 → ((h | l4) | t0) | false = [] ∧ ((l3 = l4 ⊃ (R(t, l4, ((∅ ⊕ h))(l4)), h.lastPersistedOrElse(l4, true)) ';[]) | t0) | false = []) ∧ ( pcf(t0) = W4 → (((h | l4) | t0) | false) + (((l3 = l4 ⊃ (R(t, l4, ((∅ ⊕ h))(l4)), h.lastPersistedOrElse(l4, true)) ';[]) | t0) | false) = (W(t0, l4, v0), false) ' ∨ ((h | l4) | t0) | false = [] ∧ ((l3 = l4 ⊃ (R(t, l4, ((∅ ⊕ h))(l4)), h.lastPersistedOrElse(l4, true)) ';[]) | t0) | false = []) |
alsf(t) = mkPLIBls(t, l3, iv, ov), alsf(t0) = mkPLIBls(t0, il, iv0, ov0), apcf(t) = invRead, lsf(t) = mkFLITPSCls(t, l3, v), lsf(t0) = mkFLITPSCls(t0, l4, v0), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t) = R1, pcf0(t) = R2, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), t ≠ t0, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), mkFLITPSCls(t0, l4, v0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), mkFLITPSCls(t0, l4, v0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), abs(h, writers0, p0), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allReadsOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers), notMember(t, writers0), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), ¬ FO(t0) ∈ p0(l0), pcf(t0) = idle → apcf(t0) = idle, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = R1 → l4 = il, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → v0 = ov0, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → l4 = il ∧ v0 = iv0, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ l4 ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = []), pcf(t0) = R2 → ctr(l4) = 0 → ((h | l4) | t0) | false = [], pcf(t0) = W4 → ((h | l4) | t0) | false = (W(t0, l4, v0), false) ' ∨ ((h | l4) | t0) | false = [], ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 ⊦ ((h | l0) | t0) | false = [] ∧ ((l3 = l0 ⊃ (R(t, l0, ((∅ ⊕ h))(l0)), h.lastPersistedOrElse(l0, true)) ';[]) | t0) | false = []
alsf(t) = mkPLIBls(t, l3, iv, ov), alsf(t0) = mkPLIBls(t0, il, iv0, ov0), apcf(t) = invRead, lsf(t) = mkFLITPSCls(t, l3, v), lsf(t0) = mkFLITPSCls(t0, l4, v0), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t) = R1, pcf0(t) = R2, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), t ≠ t0, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), mkFLITPSCls(t0, l4, v0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), mkFLITPSCls(t0, l4, v0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), abs(h, writers0, p0), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allReadsOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers), notMember(t, writers0), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), pcf(t0) = idle → apcf(t0) = idle, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = R1 → l4 = il, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → v0 = ov0, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → l4 = il ∧ v0 = iv0, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ l4 ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = []), pcf(t0) = R2 → ctr(l4) = 0 → ((h | l4) | t0) | false = [], pcf(t0) = W4 → ((h | l4) | t0) | false = (W(t0, l4, v0), false) ' ∨ ((h | l4) | t0) | false = [], ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 ⊦ ((h | l1) | t0) | false = [] ∧ ((l3 = l1 ⊃ (R(t, l1, ((∅ ⊕ h))(l1)), h.lastPersistedOrElse(l1, true)) ';[]) | t0) | false = []
alsf(t) = mkPLIBls(t, l3, iv, ov), alsf(t0) = mkPLIBls(t0, il, iv0, ov0), apcf(t) = invRead, lsf(t) = mkFLITPSCls(t, l3, v), lsf(t0) = mkFLITPSCls(t0, l4, v0), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t) = R1, pcf0(t) = R2, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), l2 ≠ l4, t ≠ t0, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), mkFLITPSCls(t0, l4, v0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), mkFLITPSCls(t0, l4, v0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), abs(h, writers0, p0), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allReadsOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers), notMember(t, writers0), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), ¬ FO(t0) ∈ p0(l2), pcf(t0) = idle → apcf(t0) = idle, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = R1 → l4 = il, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → v0 = ov0, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → l4 = il ∧ v0 = iv0, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ l4 ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = []), pcf(t0) = R2 → ctr(l4) = 0 → ((h | l4) | t0) | false = [], pcf(t0) = W4 → ((h | l4) | t0) | false = (W(t0, l4, v0), false) ' ∨ ((h | l4) | t0) | false = [], ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, pcf(t0) = R2 ∨ pcf(t0) = R3 ⊦ ((h | l2) | t0) | false = [] ∧ ((l3 = l2 ⊃ (R(t, l2, ((∅ ⊕ h))(l2)), h.lastPersistedOrElse(l2, true)) ';[]) | t0) | false = []
alsf(t) = mkPLIBls(t, l3, iv, ov), alsf(t0) = mkPLIBls(t0, il, iv0, ov0), apcf(t) = invRead, ctr(l4) = 0, lsf(t) = mkFLITPSCls(t, l3, v), lsf(t0) = mkFLITPSCls(t0, l4, v0), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t0) = R2, pcf(t) = R1, pcf0(t) = R2, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), t ≠ t0, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), mkFLITPSCls(t0, l4, v0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), mkFLITPSCls(t0, l4, v0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), abs(h, writers0, p0), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allReadsOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers), notMember(t, writers0), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), pcf(t0) = idle → apcf(t0) = idle, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = R1 → l4 = il, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → v0 = ov0, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → l4 = il ∧ v0 = iv0, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ l4 ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = []), pcf(t0) = R2 → ctr(l4) = 0 → ((h | l4) | t0) | false = [], pcf(t0) = W4 → ((h | l4) | t0) | false = (W(t0, l4, v0), false) ' ∨ ((h | l4) | t0) | false = [], ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1 ⊦ ((h | l4) | t0) | false = [] ∧ ((l3 = l4 ⊃ (R(t, l4, ((∅ ⊕ h))(l4)), h.lastPersistedOrElse(l4, true)) ';[]) | t0) | false = []
alsf(t) = mkPLIBls(t, l3, iv, ov), alsf(t0) = mkPLIBls(t0, il, iv0, ov0), apcf(t) = invRead, lsf(t) = mkFLITPSCls(t, l3, v), lsf(t0) = mkFLITPSCls(t0, l4, v0), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t0) = W4, pcf(t) = R1, pcf0(t) = R2, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), (((h | l4) | t0) | false) + (((l3 = l4 ⊃ (R(t, l4, ((∅ ⊕ h))(l4)), h.lastPersistedOrElse(l4, true)) ';[]) | t0) | false) ≠ (W(t0, l4, v0), false) ', t ≠ t0, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), mkFLITPSCls(t0, l4, v0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), mkFLITPSCls(t0, l4, v0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), abs(h, writers0, p0), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allReadsOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers), notMember(t, writers0), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), pcf(t0) = idle → apcf(t0) = idle, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = R1 → l4 = il, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → v0 = ov0, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → l4 = il ∧ v0 = iv0, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ l4 ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = []), pcf(t0) = R2 → ctr(l4) = 0 → ((h | l4) | t0) | false = [], pcf(t0) = W4 → ((h | l4) | t0) | false = (W(t0, l4, v0), false) ' ∨ ((h | l4) | t0) | false = [], ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1 ⊦ ((h | l4) | t0) | false = [] ∧ ((l3 = l4 ⊃ (R(t, l4, ((∅ ⊕ h))(l4)), h.lastPersistedOrElse(l4, true)) ';[]) | t0) | false = []
| alsf(t) = mkPLIBls(t, l3, iv, ov), alsf(t0) = mkPLIBls(t0, il, iv0, ov0), apcf(t) = invRead, lsf(t) = mkFLITPSCls(t, l3, v), lsf(t0) = mkFLITPSCls(t0, l4, v0), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t) = R1, pcf0(t) = R2, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), t ≠ t0, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), mkFLITPSCls(t0, l4, v0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), mkFLITPSCls(t0, l4, v0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), abs(h, writers0, p0), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allReadsOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers), notMember(t, writers0), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), ¬ FO(t0) ∈ p0(l0), pcf(t0) = idle → apcf(t0) = idle, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = R1 → l4 = il, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → v0 = ov0, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → l4 = il ∧ v0 = iv0, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ l4 ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = []), pcf(t0) = R2 → ctr(l4) = 0 → ((h | l4) | t0) | false = [], pcf(t0) = W4 → ((h | l4) | t0) | false = (W(t0, l4, v0), false) ' ∨ ((h | l4) | t0) | false = [], ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 ⊦ ((h | l0) | t0) | false = [] ∧ ((l3 = l0 ⊃ (R(t, l0, ((∅ ⊕ h))(l0)), h.lastPersistedOrElse(l0, true)) ';[]) | t0) | false = [] |
alsf(t0) = mkPLIBls(t0, il, iv0, ov0), alsf(t) = mkPLIBls(t, l3, iv, ov), apcf(t) = invRead, lsf(t0) = mkFLITPSCls(t0, l4, v0), lsf(t) = mkFLITPSCls(t, l3, v), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t) = R1, pcf0(t) = R2, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), t ≠ t0, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), mkFLITPSCls(t0, l4, v0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), mkFLITPSCls(t0, l4, v0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), abs(h, writers0, p0), allReadsOK(h), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers0), notMember(t, writers), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), ¬ FO(t0) ∈ p0(l0), pcf(t0) = W4 → ((h | l4) | t0) | false = (W(t0, l4, v0), false) ' ∨ ((h | l4) | t0) | false = [], pcf(t0) = R2 → ctr(l4) = 0 → ((h | l4) | t0) | false = [], pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ l4 ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → l4 = il ∧ v0 = iv0, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → v0 = ov0, pcf(t0) = R1 → l4 = il, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = idle → apcf(t0) = idle, ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = [], pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 ⊦ ((h | l0) | t0) | false = [] ∧ ((l3 = l0 ⊃ (R(t, l0, ((∅ ⊕ h))(l0)), h.lastPersistedOrElse(l0, true)) ';[]) | t0) | false = []
| alsf(t0) = mkPLIBls(t0, il, iv0, ov0), alsf(t) = mkPLIBls(t, l3, iv, ov), apcf(t) = invRead, lsf(t0) = mkFLITPSCls(t0, l4, v0), lsf(t) = mkFLITPSCls(t, l3, v), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t) = R1, pcf0(t) = R2, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), t ≠ t0, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), mkFLITPSCls(t0, l4, v0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), mkFLITPSCls(t0, l4, v0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), abs(h, writers0, p0), allReadsOK(h), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers0), notMember(t, writers), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), ¬ FO(t0) ∈ p0(l0), pcf(t0) = W4 → ((h | l4) | t0) | false = (W(t0, l4, v0), false) ' ∨ ((h | l4) | t0) | false = [], pcf(t0) = R2 → ctr(l4) = 0 → ((h | l4) | t0) | false = [], pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ l4 ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → l4 = il ∧ v0 = iv0, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → v0 = ov0, pcf(t0) = R1 → l4 = il, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = idle → apcf(t0) = idle, ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = [], pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 ⊦ ((h | l0) | t0) | false = [] ∧ ((l3 = l0 ⊃ (R(t, l0, ((∅ ⊕ h))(l0)), h.lastPersistedOrElse(l0, true)) ';[]) | t0) | false = [] |
alsf(t) = mkPLIBls(t, l3, iv, ov), alsf(t0) = mkPLIBls(t0, il, iv0, ov0), apcf(t) = invRead, lsf(t) = mkFLITPSCls(t, l3, v), lsf(t0) = mkFLITPSCls(t0, l4, v0), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t) = R1, pcf0(t) = R2, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), t ≠ t0, ((h | l0) | t0) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), mkFLITPSCls(t0, l4, v0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), mkFLITPSCls(t0, l4, v0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), abs(h, writers0, p0), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allReadsOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers), notMember(t, writers0), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), ¬ FO(t0) ∈ p0(l0), pcf(t0) = idle → apcf(t0) = idle, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = R1 → l4 = il, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → v0 = ov0, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → l4 = il ∧ v0 = iv0, pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ l4 ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = []), pcf(t0) = R2 → ctr(l4) = 0 → ((h | l4) | t0) | false = [], pcf(t0) = W4 → ((h | l4) | t0) | false = (W(t0, l4, v0), false) ' ∨ ((h | l4) | t0) | false = [], ∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = [], ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 ⊦
alsf(t) = mkPLIBls(t, l3, iv, ov), alsf(t0) = mkPLIBls(t0, il, iv0, ov0), apcf(t) = invRead, lsf(t) = mkFLITPSCls(t, l3, v), lsf(t0) = mkFLITPSCls(t0, l4, v0), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t) = R1, pcf0(t) = R2, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), t ≠ t0, ((l3 = l0 ⊃ (R(t, l0, ((∅ ⊕ h))(l0)), h.lastPersistedOrElse(l0, true)) ';[]) | t0) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), mkFLITPSCls(t0, l4, v0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), mkFLITPSCls(t0, l4, v0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), abs(h, writers0, p0), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allReadsOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers), notMember(t, writers0), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), ¬ FO(t0) ∈ p0(l0), pcf(t0) = idle → apcf(t0) = idle, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = R1 → l4 = il, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → v0 = ov0, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → l4 = il ∧ v0 = iv0, pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ l4 ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = []), pcf(t0) = R2 → ctr(l4) = 0 → ((h | l4) | t0) | false = [], pcf(t0) = W4 → ((h | l4) | t0) | false = (W(t0, l4, v0), false) ' ∨ ((h | l4) | t0) | false = [], ∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = [], ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 ⊦
| alsf(t) = mkPLIBls(t, l3, iv, ov), alsf(t0) = mkPLIBls(t0, il, iv0, ov0), apcf(t) = invRead, lsf(t) = mkFLITPSCls(t, l3, v), lsf(t0) = mkFLITPSCls(t0, l4, v0), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t) = R1, pcf0(t) = R2, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), t ≠ t0, ((h | l0) | t0) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), mkFLITPSCls(t0, l4, v0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), mkFLITPSCls(t0, l4, v0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), abs(h, writers0, p0), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allReadsOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers), notMember(t, writers0), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), ¬ FO(t0) ∈ p0(l0), pcf(t0) = idle → apcf(t0) = idle, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = R1 → l4 = il, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → v0 = ov0, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → l4 = il ∧ v0 = iv0, pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ l4 ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = []), pcf(t0) = R2 → ctr(l4) = 0 → ((h | l4) | t0) | false = [], pcf(t0) = W4 → ((h | l4) | t0) | false = (W(t0, l4, v0), false) ' ∨ ((h | l4) | t0) | false = [], ∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = [], ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 ⊦ |
Used terms: l0
| alsf(t) = mkPLIBls(t, l3, iv, ov), alsf(t0) = mkPLIBls(t0, il, iv0, ov0), apcf(t) = invRead, lsf(t) = mkFLITPSCls(t, l3, v), lsf(t0) = mkFLITPSCls(t0, l4, v0), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t) = R1, pcf0(t) = R2, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), t ≠ t0, ((l3 = l0 ⊃ (R(t, l0, ((∅ ⊕ h))(l0)), h.lastPersistedOrElse(l0, true)) ';[]) | t0) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), mkFLITPSCls(t0, l4, v0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), mkFLITPSCls(t0, l4, v0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), abs(h, writers0, p0), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allReadsOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers), notMember(t, writers0), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), ¬ FO(t0) ∈ p0(l0), pcf(t0) = idle → apcf(t0) = idle, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = R1 → l4 = il, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → v0 = ov0, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → l4 = il ∧ v0 = iv0, pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ l4 ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = []), pcf(t0) = R2 → ctr(l4) = 0 → ((h | l4) | t0) | false = [], pcf(t0) = W4 → ((h | l4) | t0) | false = (W(t0, l4, v0), false) ' ∨ ((h | l4) | t0) | false = [], ∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = [], ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 ⊦ |
Used simplifier rules: ⊦ [] | t = []; (s) ⊦ [] | b = []; (s) ⊦ (e, b) ' | t = (t = e.t ⊃ (e, b) ';[]); (s) ⊦ R(t, l, v).t = t; (s) Used formulas: l3 = l0
| alsf(t) = mkPLIBls(t, l3, iv, ov), alsf(t0) = mkPLIBls(t0, il, iv0, ov0), apcf(t) = invRead, lsf(t) = mkFLITPSCls(t, l3, v), lsf(t0) = mkFLITPSCls(t0, l4, v0), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t) = R1, pcf0(t) = R2, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), t ≠ t0, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), mkFLITPSCls(t0, l4, v0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), mkFLITPSCls(t0, l4, v0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), abs(h, writers0, p0), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allReadsOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers), notMember(t, writers0), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), pcf(t0) = idle → apcf(t0) = idle, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = R1 → l4 = il, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → v0 = ov0, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → l4 = il ∧ v0 = iv0, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ l4 ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = []), pcf(t0) = R2 → ctr(l4) = 0 → ((h | l4) | t0) | false = [], pcf(t0) = W4 → ((h | l4) | t0) | false = (W(t0, l4, v0), false) ' ∨ ((h | l4) | t0) | false = [], ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 ⊦ ((h | l1) | t0) | false = [] ∧ ((l3 = l1 ⊃ (R(t, l1, ((∅ ⊕ h))(l1)), h.lastPersistedOrElse(l1, true)) ';[]) | t0) | false = [] |
alsf(t0) = mkPLIBls(t0, il, iv0, ov0), alsf(t) = mkPLIBls(t, l3, iv, ov), apcf(t) = invRead, lsf(t0) = mkFLITPSCls(t0, l4, v0), lsf(t) = mkFLITPSCls(t, l3, v), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t) = R1, pcf0(t) = R2, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), t ≠ t0, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), mkFLITPSCls(t0, l4, v0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), mkFLITPSCls(t0, l4, v0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), abs(h, writers0, p0), allReadsOK(h), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers0), notMember(t, writers), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), pcf(t0) = W4 → ((h | l4) | t0) | false = (W(t0, l4, v0), false) ' ∨ ((h | l4) | t0) | false = [], pcf(t0) = R2 → ctr(l4) = 0 → ((h | l4) | t0) | false = [], pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ l4 ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = []), pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = []), pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → l4 = il ∧ v0 = iv0, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → v0 = ov0, pcf(t0) = R1 → l4 = il, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = idle → apcf(t0) = idle, ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ l. ((h | l) | t0) | false = [], pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 ⊦ ((h | l1) | t0) | false = [] ∧ ((l3 = l1 ⊃ (R(t, l1, ((∅ ⊕ h))(l1)), h.lastPersistedOrElse(l1, true)) ';[]) | t0) | false = []
| alsf(t0) = mkPLIBls(t0, il, iv0, ov0), alsf(t) = mkPLIBls(t, l3, iv, ov), apcf(t) = invRead, lsf(t0) = mkFLITPSCls(t0, l4, v0), lsf(t) = mkFLITPSCls(t, l3, v), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t) = R1, pcf0(t) = R2, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), t ≠ t0, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), mkFLITPSCls(t0, l4, v0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), mkFLITPSCls(t0, l4, v0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), abs(h, writers0, p0), allReadsOK(h), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers0), notMember(t, writers), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), pcf(t0) = W4 → ((h | l4) | t0) | false = (W(t0, l4, v0), false) ' ∨ ((h | l4) | t0) | false = [], pcf(t0) = R2 → ctr(l4) = 0 → ((h | l4) | t0) | false = [], pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ l4 ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = []), pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = []), pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → l4 = il ∧ v0 = iv0, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → v0 = ov0, pcf(t0) = R1 → l4 = il, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = idle → apcf(t0) = idle, ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ l. ((h | l) | t0) | false = [], pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 ⊦ ((h | l1) | t0) | false = [] ∧ ((l3 = l1 ⊃ (R(t, l1, ((∅ ⊕ h))(l1)), h.lastPersistedOrElse(l1, true)) ';[]) | t0) | false = [] |
alsf(t) = mkPLIBls(t, l3, iv, ov), alsf(t0) = mkPLIBls(t0, il, iv0, ov0), apcf(t) = invRead, lsf(t) = mkFLITPSCls(t, l3, v), lsf(t0) = mkFLITPSCls(t0, l4, v0), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t) = R1, pcf0(t) = R2, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), t ≠ t0, ((h | l1) | t0) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), mkFLITPSCls(t0, l4, v0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), mkFLITPSCls(t0, l4, v0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), abs(h, writers0, p0), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allReadsOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers), notMember(t, writers0), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), pcf(t0) = idle → apcf(t0) = idle, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = R1 → l4 = il, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → v0 = ov0, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → l4 = il ∧ v0 = iv0, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = []), pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ l4 ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = []), pcf(t0) = R2 → ctr(l4) = 0 → ((h | l4) | t0) | false = [], pcf(t0) = W4 → ((h | l4) | t0) | false = (W(t0, l4, v0), false) ' ∨ ((h | l4) | t0) | false = [], ∀ l. ((h | l) | t0) | false = [], ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 ⊦
alsf(t) = mkPLIBls(t, l3, iv, ov), alsf(t0) = mkPLIBls(t0, il, iv0, ov0), apcf(t) = invRead, lsf(t) = mkFLITPSCls(t, l3, v), lsf(t0) = mkFLITPSCls(t0, l4, v0), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t) = R1, pcf0(t) = R2, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), t ≠ t0, ((l3 = l1 ⊃ (R(t, l1, ((∅ ⊕ h))(l1)), h.lastPersistedOrElse(l1, true)) ';[]) | t0) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), mkFLITPSCls(t0, l4, v0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), mkFLITPSCls(t0, l4, v0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), abs(h, writers0, p0), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allReadsOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers), notMember(t, writers0), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), pcf(t0) = idle → apcf(t0) = idle, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = R1 → l4 = il, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → v0 = ov0, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → l4 = il ∧ v0 = iv0, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = []), pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ l4 ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = []), pcf(t0) = R2 → ctr(l4) = 0 → ((h | l4) | t0) | false = [], pcf(t0) = W4 → ((h | l4) | t0) | false = (W(t0, l4, v0), false) ' ∨ ((h | l4) | t0) | false = [], ∀ l. ((h | l) | t0) | false = [], ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 ⊦
| alsf(t) = mkPLIBls(t, l3, iv, ov), alsf(t0) = mkPLIBls(t0, il, iv0, ov0), apcf(t) = invRead, lsf(t) = mkFLITPSCls(t, l3, v), lsf(t0) = mkFLITPSCls(t0, l4, v0), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t) = R1, pcf0(t) = R2, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), t ≠ t0, ((h | l1) | t0) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), mkFLITPSCls(t0, l4, v0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), mkFLITPSCls(t0, l4, v0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), abs(h, writers0, p0), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allReadsOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers), notMember(t, writers0), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), pcf(t0) = idle → apcf(t0) = idle, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = R1 → l4 = il, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → v0 = ov0, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → l4 = il ∧ v0 = iv0, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = []), pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ l4 ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = []), pcf(t0) = R2 → ctr(l4) = 0 → ((h | l4) | t0) | false = [], pcf(t0) = W4 → ((h | l4) | t0) | false = (W(t0, l4, v0), false) ' ∨ ((h | l4) | t0) | false = [], ∀ l. ((h | l) | t0) | false = [], ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 ⊦ |
Used terms: l1
| alsf(t) = mkPLIBls(t, l3, iv, ov), alsf(t0) = mkPLIBls(t0, il, iv0, ov0), apcf(t) = invRead, lsf(t) = mkFLITPSCls(t, l3, v), lsf(t0) = mkFLITPSCls(t0, l4, v0), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t) = R1, pcf0(t) = R2, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), t ≠ t0, ((l3 = l1 ⊃ (R(t, l1, ((∅ ⊕ h))(l1)), h.lastPersistedOrElse(l1, true)) ';[]) | t0) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), mkFLITPSCls(t0, l4, v0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), mkFLITPSCls(t0, l4, v0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), abs(h, writers0, p0), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allReadsOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers), notMember(t, writers0), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), pcf(t0) = idle → apcf(t0) = idle, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = R1 → l4 = il, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → v0 = ov0, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → l4 = il ∧ v0 = iv0, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = []), pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ l4 ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = []), pcf(t0) = R2 → ctr(l4) = 0 → ((h | l4) | t0) | false = [], pcf(t0) = W4 → ((h | l4) | t0) | false = (W(t0, l4, v0), false) ' ∨ ((h | l4) | t0) | false = [], ∀ l. ((h | l) | t0) | false = [], ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 ⊦ |
Used simplifier rules: ⊦ [] | t = []; (s) ⊦ [] | b = []; (s) ⊦ (e, b) ' | t = (t = e.t ⊃ (e, b) ';[]); (s) ⊦ R(t, l, v).t = t; (s) Used formulas: l3 = l1
| alsf(t) = mkPLIBls(t, l3, iv, ov), alsf(t0) = mkPLIBls(t0, il, iv0, ov0), apcf(t) = invRead, lsf(t) = mkFLITPSCls(t, l3, v), lsf(t0) = mkFLITPSCls(t0, l4, v0), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t) = R1, pcf0(t) = R2, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), l2 ≠ l4, t ≠ t0, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), mkFLITPSCls(t0, l4, v0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), mkFLITPSCls(t0, l4, v0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), abs(h, writers0, p0), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allReadsOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers), notMember(t, writers0), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), ¬ FO(t0) ∈ p0(l2), pcf(t0) = idle → apcf(t0) = idle, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = R1 → l4 = il, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → v0 = ov0, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → l4 = il ∧ v0 = iv0, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ l4 ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = []), pcf(t0) = R2 → ctr(l4) = 0 → ((h | l4) | t0) | false = [], pcf(t0) = W4 → ((h | l4) | t0) | false = (W(t0, l4, v0), false) ' ∨ ((h | l4) | t0) | false = [], ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, pcf(t0) = R2 ∨ pcf(t0) = R3 ⊦ ((h | l2) | t0) | false = [] ∧ ((l3 = l2 ⊃ (R(t, l2, ((∅ ⊕ h))(l2)), h.lastPersistedOrElse(l2, true)) ';[]) | t0) | false = [] |
alsf(t0) = mkPLIBls(t0, il, iv0, ov0), alsf(t) = mkPLIBls(t, l3, iv, ov), apcf(t) = invRead, lsf(t0) = mkFLITPSCls(t0, l4, v0), lsf(t) = mkFLITPSCls(t, l3, v), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t) = R1, pcf0(t) = R2, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), l2 ≠ l4, t ≠ t0, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), mkFLITPSCls(t0, l4, v0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), mkFLITPSCls(t0, l4, v0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), abs(h, writers0, p0), allReadsOK(h), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers0), notMember(t, writers), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), ¬ FO(t0) ∈ p0(l2), pcf(t0) = W4 → ((h | l4) | t0) | false = (W(t0, l4, v0), false) ' ∨ ((h | l4) | t0) | false = [], pcf(t0) = R2 → ctr(l4) = 0 → ((h | l4) | t0) | false = [], pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = []), pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → l4 = il ∧ v0 = iv0, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → v0 = ov0, pcf(t0) = R1 → l4 = il, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = idle → apcf(t0) = idle, ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ l0. l0 ≠ l4 ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = [], pcf(t0) = R2 ∨ pcf(t0) = R3 ⊦ ((h | l2) | t0) | false = [] ∧ ((l3 = l2 ⊃ (R(t, l2, ((∅ ⊕ h))(l2)), h.lastPersistedOrElse(l2, true)) ';[]) | t0) | false = []
| alsf(t0) = mkPLIBls(t0, il, iv0, ov0), alsf(t) = mkPLIBls(t, l3, iv, ov), apcf(t) = invRead, lsf(t0) = mkFLITPSCls(t0, l4, v0), lsf(t) = mkFLITPSCls(t, l3, v), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t) = R1, pcf0(t) = R2, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), l2 ≠ l4, t ≠ t0, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), mkFLITPSCls(t0, l4, v0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), mkFLITPSCls(t0, l4, v0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), abs(h, writers0, p0), allReadsOK(h), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers0), notMember(t, writers), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), ¬ FO(t0) ∈ p0(l2), pcf(t0) = W4 → ((h | l4) | t0) | false = (W(t0, l4, v0), false) ' ∨ ((h | l4) | t0) | false = [], pcf(t0) = R2 → ctr(l4) = 0 → ((h | l4) | t0) | false = [], pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = []), pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → l4 = il ∧ v0 = iv0, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → v0 = ov0, pcf(t0) = R1 → l4 = il, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = idle → apcf(t0) = idle, ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ l0. l0 ≠ l4 ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = [], pcf(t0) = R2 ∨ pcf(t0) = R3 ⊦ ((h | l2) | t0) | false = [] ∧ ((l3 = l2 ⊃ (R(t, l2, ((∅ ⊕ h))(l2)), h.lastPersistedOrElse(l2, true)) ';[]) | t0) | false = [] |
alsf(t) = mkPLIBls(t, l3, iv, ov), alsf(t0) = mkPLIBls(t0, il, iv0, ov0), apcf(t) = invRead, lsf(t) = mkFLITPSCls(t, l3, v), lsf(t0) = mkFLITPSCls(t0, l4, v0), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t) = R1, pcf0(t) = R2, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), l2 ≠ l4, t ≠ t0, ((h | l2) | t0) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), mkFLITPSCls(t0, l4, v0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), mkFLITPSCls(t0, l4, v0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), abs(h, writers0, p0), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allReadsOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers), notMember(t, writers0), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), ¬ FO(t0) ∈ p0(l2), pcf(t0) = idle → apcf(t0) = idle, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = R1 → l4 = il, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → v0 = ov0, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → l4 = il ∧ v0 = iv0, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = R2 → ctr(l4) = 0 → ((h | l4) | t0) | false = [], pcf(t0) = W4 → ((h | l4) | t0) | false = (W(t0, l4, v0), false) ' ∨ ((h | l4) | t0) | false = [], ∀ l0. l0 ≠ l4 ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = [], ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, pcf(t0) = R2 ∨ pcf(t0) = R3 ⊦
alsf(t) = mkPLIBls(t, l3, iv, ov), alsf(t0) = mkPLIBls(t0, il, iv0, ov0), apcf(t) = invRead, lsf(t) = mkFLITPSCls(t, l3, v), lsf(t0) = mkFLITPSCls(t0, l4, v0), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t) = R1, pcf0(t) = R2, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), l2 ≠ l4, t ≠ t0, ((l3 = l2 ⊃ (R(t, l2, ((∅ ⊕ h))(l2)), h.lastPersistedOrElse(l2, true)) ';[]) | t0) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), mkFLITPSCls(t0, l4, v0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), mkFLITPSCls(t0, l4, v0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), abs(h, writers0, p0), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allReadsOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers), notMember(t, writers0), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), ¬ FO(t0) ∈ p0(l2), pcf(t0) = idle → apcf(t0) = idle, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = R1 → l4 = il, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → v0 = ov0, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → l4 = il ∧ v0 = iv0, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = R2 → ctr(l4) = 0 → ((h | l4) | t0) | false = [], pcf(t0) = W4 → ((h | l4) | t0) | false = (W(t0, l4, v0), false) ' ∨ ((h | l4) | t0) | false = [], ∀ l0. l0 ≠ l4 ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = [], ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, pcf(t0) = R2 ∨ pcf(t0) = R3 ⊦
| alsf(t) = mkPLIBls(t, l3, iv, ov), alsf(t0) = mkPLIBls(t0, il, iv0, ov0), apcf(t) = invRead, lsf(t) = mkFLITPSCls(t, l3, v), lsf(t0) = mkFLITPSCls(t0, l4, v0), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t) = R1, pcf0(t) = R2, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), l2 ≠ l4, t ≠ t0, ((h | l2) | t0) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), mkFLITPSCls(t0, l4, v0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), mkFLITPSCls(t0, l4, v0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), abs(h, writers0, p0), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allReadsOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers), notMember(t, writers0), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), ¬ FO(t0) ∈ p0(l2), pcf(t0) = idle → apcf(t0) = idle, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = R1 → l4 = il, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → v0 = ov0, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → l4 = il ∧ v0 = iv0, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = R2 → ctr(l4) = 0 → ((h | l4) | t0) | false = [], pcf(t0) = W4 → ((h | l4) | t0) | false = (W(t0, l4, v0), false) ' ∨ ((h | l4) | t0) | false = [], ∀ l0. l0 ≠ l4 ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = [], ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, pcf(t0) = R2 ∨ pcf(t0) = R3 ⊦ |
Used terms: l2
| alsf(t) = mkPLIBls(t, l3, iv, ov), alsf(t0) = mkPLIBls(t0, il, iv0, ov0), apcf(t) = invRead, lsf(t) = mkFLITPSCls(t, l3, v), lsf(t0) = mkFLITPSCls(t0, l4, v0), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t) = R1, pcf0(t) = R2, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), l2 ≠ l4, t ≠ t0, ((l3 = l2 ⊃ (R(t, l2, ((∅ ⊕ h))(l2)), h.lastPersistedOrElse(l2, true)) ';[]) | t0) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), mkFLITPSCls(t0, l4, v0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), mkFLITPSCls(t0, l4, v0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), abs(h, writers0, p0), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allReadsOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers), notMember(t, writers0), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), ¬ FO(t0) ∈ p0(l2), pcf(t0) = idle → apcf(t0) = idle, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = R1 → l4 = il, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → v0 = ov0, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → l4 = il ∧ v0 = iv0, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = R2 → ctr(l4) = 0 → ((h | l4) | t0) | false = [], pcf(t0) = W4 → ((h | l4) | t0) | false = (W(t0, l4, v0), false) ' ∨ ((h | l4) | t0) | false = [], ∀ l0. l0 ≠ l4 ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = [], ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, pcf(t0) = R2 ∨ pcf(t0) = R3 ⊦ |
Used simplifier rules: ⊦ [] | t = []; (s) ⊦ [] | b = []; (s) ⊦ (e, b) ' | t = (t = e.t ⊃ (e, b) ';[]); (s) ⊦ R(t, l, v).t = t; (s) Used formulas: l3 = l2
| alsf(t) = mkPLIBls(t, l3, iv, ov), alsf(t0) = mkPLIBls(t0, il, iv0, ov0), apcf(t) = invRead, ctr(l4) = 0, lsf(t) = mkFLITPSCls(t, l3, v), lsf(t0) = mkFLITPSCls(t0, l4, v0), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t0) = R2, pcf(t) = R1, pcf0(t) = R2, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), t ≠ t0, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), mkFLITPSCls(t0, l4, v0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), mkFLITPSCls(t0, l4, v0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), abs(h, writers0, p0), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allReadsOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers), notMember(t, writers0), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), pcf(t0) = idle → apcf(t0) = idle, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = R1 → l4 = il, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → v0 = ov0, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → l4 = il ∧ v0 = iv0, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ l4 ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = []), pcf(t0) = R2 → ctr(l4) = 0 → ((h | l4) | t0) | false = [], pcf(t0) = W4 → ((h | l4) | t0) | false = (W(t0, l4, v0), false) ' ∨ ((h | l4) | t0) | false = [], ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1 ⊦ ((h | l4) | t0) | false = [] ∧ ((l3 = l4 ⊃ (R(t, l4, ((∅ ⊕ h))(l4)), h.lastPersistedOrElse(l4, true)) ';[]) | t0) | false = [] |
alsf(t) = mkPLIBls(t, l3, iv, ov), alsf(t0) = mkPLIBls(t0, il, iv0, ov0), apcf(t0) = resRead, apcf(t) = invRead, ctr(l4) = 0, lsf(t) = mkFLITPSCls(t, l3, v), lsf(t0) = mkFLITPSCls(t0, l4, ov0), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t0) = R2, pcf(t) = R1, pcf0(t) = R2, ((h | l4) | t0) | false = [], ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), t ≠ t0, ((l3 = l4 ⊃ (R(t, l4, ((∅ ⊕ h))(l4)), h.lastPersistedOrElse(l4, true)) ';[]) | t0) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), mkFLITPSCls(t0, l4, ov0), R2), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), mkFLITPSCls(t0, l4, ov0), R2), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), resRead), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), abs(h, writers0, p0), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allReadsOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers), notMember(t, writers0), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), ∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = [], ∀ l0. ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = [], ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1 ⊦
Used simplifier rules: ⊦ R1 ≠ R2; (s) ⊦ R2 ≠ crashed; (s) ⊦ R2 ≠ ready; (s) ⊦ R2 ≠ idle; (s) ⊦ R2 ≠ W7; (s) ⊦ R2 ≠ W6; (s) ⊦ R2 ≠ W3; (s) ⊦ R2 ≠ W2; (s) ⊦ R2 ≠ W5; (s) ⊦ R2 ≠ W4; (s) ⊦ R2 ≠ W1; (s)
| alsf(t) = mkPLIBls(t, l3, iv, ov), alsf(t0) = mkPLIBls(t0, il, iv0, ov0), apcf(t0) = resRead, apcf(t) = invRead, ctr(l4) = 0, lsf(t) = mkFLITPSCls(t, l3, v), lsf(t0) = mkFLITPSCls(t0, l4, ov0), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t0) = R2, pcf(t) = R1, pcf0(t) = R2, ((h | l4) | t0) | false = [], ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), t ≠ t0, ((l3 = l4 ⊃ (R(t, l4, ((∅ ⊕ h))(l4)), h.lastPersistedOrElse(l4, true)) ';[]) | t0) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), mkFLITPSCls(t0, l4, ov0), R2), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), mkFLITPSCls(t0, l4, ov0), R2), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), resRead), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), abs(h, writers0, p0), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allReadsOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers), notMember(t, writers0), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), ∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = [], ∀ l0. ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = [], ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1 ⊦ |
Used simplifier rules: ⊦ [] | t = []; (s) ⊦ [] | b = []; (s) ⊦ (e, b) ' | t = (t = e.t ⊃ (e, b) ';[]); (s) ⊦ R(t, l, v).t = t; (s) Used formulas: l3 = l4
| alsf(t) = mkPLIBls(t, l3, iv, ov), alsf(t0) = mkPLIBls(t0, il, iv0, ov0), apcf(t) = invRead, lsf(t) = mkFLITPSCls(t, l3, v), lsf(t0) = mkFLITPSCls(t0, l4, v0), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t0) = W4, pcf(t) = R1, pcf0(t) = R2, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), (((h | l4) | t0) | false) + (((l3 = l4 ⊃ (R(t, l4, ((∅ ⊕ h))(l4)), h.lastPersistedOrElse(l4, true)) ';[]) | t0) | false) ≠ (W(t0, l4, v0), false) ', t ≠ t0, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), mkFLITPSCls(t0, l4, v0), pcf(t0)), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), mkFLITPSCls(t0, l4, v0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), abs(h, writers0, p0), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allReadsOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers), notMember(t, writers0), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), pcf(t0) = idle → apcf(t0) = idle, pcf(t0) = ready → apcf(t0) = ready, pcf(t0) = crashed → apcf(t0) = crashed, pcf(t0) = R1 → apcf(t0) = invRead, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → apcf(t0) = resRead, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 → apcf(t0) = invWrite, pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → apcf(t0) = resWrite, pcf(t0) = R1 → l4 = il, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → v0 = ov0, pcf(t0) = W1 ∨ pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W4 ∨ pcf(t0) = W5 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → l4 = il ∧ v0 = iv0, pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → (∀ l. ¬ FO(t0) ∈ p0(l) → ((h | l) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((h | l) | t0) | false = []), pcf(t0) = R2 ∨ pcf(t0) = R3 → (∀ l0. l0 ≠ l4 ∧ ¬ FO(t0) ∈ p0(l0) → ((h | l0) | t0) | false = []), pcf(t0) = R2 → ctr(l4) = 0 → ((h | l4) | t0) | false = [], pcf(t0) = W4 → ((h | l4) | t0) | false = (W(t0, l4, v0), false) ' ∨ ((h | l4) | t0) | false = [], ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1 ⊦ ((h | l4) | t0) | false = [] ∧ ((l3 = l4 ⊃ (R(t, l4, ((∅ ⊕ h))(l4)), h.lastPersistedOrElse(l4, true)) ';[]) | t0) | false = [] |
alsf(t) = mkPLIBls(t, l3, iv, ov), alsf(t0) = mkPLIBls(t0, il, iv0, ov0), apcf(t0) = resWrite, apcf(t) = invRead, lsf(t) = mkFLITPSCls(t, l3, v), lsf(t0) = mkFLITPSCls(t0, il, iv0), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t0) = W4, pcf(t) = R1, pcf0(t) = R2, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), (((h | il) | t0) | false) + (((l3 = il ⊃ (R(t, il, ((∅ ⊕ h))(il)), h.lastPersistedOrElse(il, true)) ';[]) | t0) | false) ≠ (W(t0, il, iv0), false) ', t ≠ t0, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), mkFLITPSCls(t0, il, iv0), W4), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), mkFLITPSCls(t0, il, iv0), W4), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), resWrite), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), abs(h, writers0, p0), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allReadsOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers), notMember(t, writers0), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, ((h | il) | t0) | false = (W(t0, il, iv0), false) ' ∨ ((h | il) | t0) | false = [] ⊦ ((h | il) | t0) | false = [] ∧ ((l3 = il ⊃ (R(t, il, ((∅ ⊕ h))(il)), h.lastPersistedOrElse(il, true)) ';[]) | t0) | false = []
Used simplifier rules: ⊦ W3 ≠ W4; (s) ⊦ W2 ≠ W4; (s) ⊦ W1 ≠ W4; (s) ⊦ R4 ≠ W4; (s) ⊦ R3 ≠ W4; (s) ⊦ R2 ≠ W4; (s) ⊦ R1 ≠ W4; (s) ⊦ W4 ≠ crashed; (s) ⊦ W4 ≠ ready; (s) ⊦ W4 ≠ idle; (s) ⊦ W4 ≠ W7; (s) ⊦ W4 ≠ W6; (s) ⊦ W4 ≠ W5; (s)
| alsf(t) = mkPLIBls(t, l3, iv, ov), alsf(t0) = mkPLIBls(t0, il, iv0, ov0), apcf(t0) = resWrite, apcf(t) = invRead, lsf(t) = mkFLITPSCls(t, l3, v), lsf(t0) = mkFLITPSCls(t0, il, iv0), lsf0(t) = mkFLITPSCls(t, l3, mem(l3) ⊕ p(l3)), pcf(t0) = W4, pcf(t) = R1, pcf0(t) = R2, ∅ ⊕ (h | true) = ∅ ⊕ ((h | true) + (h.lastPersistedOrElse(l3, true) ⊃ (R(t, l3, ((∅ ⊕ h))(l3)), true) ';[])), ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p0, mem(l3) ⊕ p(l3) = ((∅ ⊕ (h | true)))(l3) ⊕ p0(l3), (((h | il) | t0) | false) + (((l3 = il ⊃ (R(t, il, ((∅ ⊕ h))(il)), h.lastPersistedOrElse(il, true)) ';[]) | t0) | false) ≠ (W(t0, il, iv0), false) ', t ≠ t0, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0(l3 := writers0(l3) ++ t)), mkFLITPSCls(t0, il, iv0), W4), FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), mkFLITPSCls(t0, il, iv0), W4), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t0, il, iv0, ov0), resWrite), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l3, iv, ov), invRead), abs(h, writers0, p0), allReadsOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allReadsOK(h), allWritesOK(h + (R(t, l3, ((∅ ⊕ h))(l3)), h.lastPersistedOrElse(l3, true)) '), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p0), notMember(t, writers), notMember(t, writers0), oneMember(t, l3, writers0(l3 := writers0(l3) ++ t)), pendingOk(p0), writersOk(p0, writers), ∀ l. ¬ FO(t) ∈ p0(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p0, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, ((h | il) | t0) | false = (W(t0, il, iv0), false) ' ∨ ((h | il) | t0) | false = [] ⊦ ((h | il) | t0) | false = [] ∧ ((l3 = il ⊃ (R(t, il, ((∅ ⊕ h))(il)), h.lastPersistedOrElse(il, true)) ';[]) | t0) | false = [] |
Used simplifier rules: ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] | t = []; (s) ⊦ [] | b = []; (s) ⊦ (e, b) ' | t = (t = e.t ⊃ (e, b) ';[]); (s) ⊦ R(t, l, v).t = t; (s) Used formulas: l3 = il
The following image shows the proof tree of sequent calculus. The proved goal is at the bottom. You can click on the nodes to view additional rules. See here for details on colors in a proof tree.