| 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) = ready, pcf0(t) = ready, apcf(t) = apc, notMember(t, gs.writers) ∧ notMember(t, gs.readers) ∧ noPendingW(t, gs.p), notMember(t, gs0.writers) ∧ notMember(t, 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, callTSync(ls.t)) → ags0 = gstepf(ags, als, apc, callTSync(ls.t)) ∧ als0 = lstepf(ags, als, apc, callTSync(ls.t)) ∧ apc0 = pcstepf(ags, als, apc, callTSync(ls.t)), allReadsOK(ags0.h) ∧ allWritesOK(ags0.h) ∧ ags0.vm = ∅ ⊕ ags0.h ∧ ags0.pm = ∅ ⊕ (ags0.h | true), pre(gs, ls, ready, callPSCCOMPLETE(ls.t)) ∧ gs0 = gstepf(gs, ls, ready, callPSCCOMPLETE(ls.t)) ∧ ls0 = lstepf(gs, ls, ready, callPSCCOMPLETE(ls.t)) ∧ ready = pcstepf(gs, ls, ready, callPSCCOMPLETE(ls.t)), ags.pm = gs.mem ∧ ags.vm = gs.mem ⊕ gs.p ∧ abs(ags.h, gs.readers, gs.p), ls.t = als.t ∧ apc = ready ∧ (∀ 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 = []) |
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, alsf(t) = als, apc = ready, apcf(t) = apc, gs0 = gstepf(gs, ls, ready, callPSCCOMPLETE(ls.t)), ls0 = lstepf(gs, ls, ready, callPSCCOMPLETE(ls.t)), lsf(t) = ls, lsf0(t) = ls0, pcf(t) = ready, pcf0(t) = ready, ready = pcstepf(gs, ls, ready, callPSCCOMPLETE(ls.t)), 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, gs0.readers), notMember(t, gs.writers), notMember(t, gs.readers), pendingOk(gs0.p), pendingOk(gs.p), pre(gs, ls, ready, callPSCCOMPLETE(ls.t)), 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, callTSync(ls.t)) → ags0 = gstepf(ags, als, apc, callTSync(ls.t)) ∧ als0 = lstepf(ags, als, apc, callTSync(ls.t)) ∧ apc0 = pcstepf(ags, als, apc, callTSync(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 = [])
| 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, alsf(t) = als, apc = ready, apcf(t) = apc, gs0 = gstepf(gs, ls, ready, callPSCCOMPLETE(ls.t)), ls0 = lstepf(gs, ls, ready, callPSCCOMPLETE(ls.t)), lsf(t) = ls, lsf0(t) = ls0, pcf(t) = ready, pcf0(t) = ready, ready = pcstepf(gs, ls, ready, callPSCCOMPLETE(ls.t)), 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, gs0.readers), notMember(t, gs.writers), notMember(t, gs.readers), pendingOk(gs0.p), pendingOk(gs.p), pre(gs, ls, ready, callPSCCOMPLETE(ls.t)), 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, callTSync(ls.t)) → ags0 = gstepf(ags, als, apc, callTSync(ls.t)) ∧ als0 = lstepf(ags, als, apc, callTSync(ls.t)) ∧ apc0 = pcstepf(ags, als, apc, callTSync(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 = []) |
ags.pm = ∅ ⊕ (ags.h | true), ags0.pm = ∅ ⊕ (ags0.h | true), ags.pm = gs.mem, alsf(t).t = t, lsf(t).t = t, lsf(t0).t = t0, ls.t = als.t, lsf(t0).t = alsf(t0).t, ags.vm = ∅ ⊕ ags.h, ags0.vm = ∅ ⊕ ags0.h, ags.vm = gs.mem ⊕ gs.p, alsf(t) = als, apc = ready, apcf(t) = apc, gs0 = gstepf(gs, ls, ready, callPSCCOMPLETE(ls.t)), ls0 = lstepf(gs, ls, ready, callPSCCOMPLETE(ls.t)), lsf(t) = ls, lsf0(t) = ls0, pcf(t) = ready, pcf0(t) = ready, ready = pcstepf(gs, ls, ready, callPSCCOMPLETE(ls.t)), t ≠ t0, FLITPSCLInv(gs, lsf(t0), pcf(t0)), FLITPSCLInv(gs0, lsf(t0), pcf(t0)), PLIBLInv(ags, als, apc), PLIBLInv(ags, alsf(t0), apcf(t0)), abs(ags.h, gs.readers, gs.p), allReadsOK(ags.h), allReadsOK(ags0.h), allWritesOK(ags.h), allWritesOK(ags0.h), ctrok(gs.ctr, gs.writers), ctrok(gs0.ctr, gs0.writers), noPendingW(t, gs.p), noPendingW(t, gs0.p), notMember(t, gs.readers), notMember(t, gs.writers), notMember(t, gs0.readers), notMember(t, gs0.writers), pendingOk(gs.p), pendingOk(gs0.p), pre(gs, ls, ready, callPSCCOMPLETE(ls.t)), pre(ags, als, apc, callTSync(ls.t)), writersOk(gs.p, gs.writers), writersOk(gs0.p, gs0.writers), pre(ags, als, apc, callTSync(ls.t)) → ags0 = gstepf(ags, als, apc, callTSync(ls.t)) ∧ als0 = lstepf(ags, als, apc, callTSync(ls.t)) ∧ apc0 = pcstepf(ags, als, apc, callTSync(ls.t)), 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 = [], pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((ags.h | lsf(t0).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) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((ags.h | l) | lsf(t0).t) | false = []), 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) = 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, ∀ t0. t0 ≠ t → lsf(t0).t = t0, ∀ t0. t0 ≠ t → alsf(t0).t = 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)), ∀ 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) ∈ 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 = [])
ags.pm = ∅ ⊕ (ags.h | true), ags0.pm = ∅ ⊕ (ags0.h | true), ags.pm = gs.mem, alsf(t).t = t, lsf(t).t = t, lsf(t0).t = t0, ls.t = als.t, lsf(t0).t = alsf(t0).t, ags.vm = ∅ ⊕ ags.h, ags0.vm = ∅ ⊕ ags0.h, ags.vm = gs.mem ⊕ gs.p, alsf(t) = als, apc = ready, apcf(t) = apc, gs0 = gstepf(gs, ls, ready, callPSCCOMPLETE(ls.t)), ls0 = lstepf(gs, ls, ready, callPSCCOMPLETE(ls.t)), lsf(t) = ls, lsf0(t) = ls0, pcf(t) = ready, pcf0(t) = ready, ready = pcstepf(gs, ls, ready, callPSCCOMPLETE(ls.t)), t ≠ t0, FLITPSCLInv(gs, lsf(t0), pcf(t0)), FLITPSCLInv(gs0, lsf(t0), pcf(t0)), PLIBLInv(ags, als, apc), PLIBLInv(ags, alsf(t0), apcf(t0)), abs(ags.h, gs.readers, gs.p), allReadsOK(ags.h), allReadsOK(ags0.h), allWritesOK(ags.h), allWritesOK(ags0.h), ctrok(gs.ctr, gs.writers), ctrok(gs0.ctr, gs0.writers), noPendingW(t, gs.p), noPendingW(t, gs0.p), notMember(t, gs.readers), notMember(t, gs.writers), notMember(t, gs0.readers), notMember(t, gs0.writers), pendingOk(gs.p), pendingOk(gs0.p), pre(gs, ls, ready, callPSCCOMPLETE(ls.t)), writersOk(gs.p, gs.writers), writersOk(gs0.p, gs0.writers), ¬ pre(ags, als, apc, callTSync(ls.t)), pre(ags, als, apc, callTSync(ls.t)) → ags0 = gstepf(ags, als, apc, callTSync(ls.t)) ∧ als0 = lstepf(ags, als, apc, callTSync(ls.t)) ∧ apc0 = pcstepf(ags, als, apc, callTSync(ls.t)), 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 = [], pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((ags.h | lsf(t0).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) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((ags.h | l) | lsf(t0).t) | false = []), 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) = 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, ∀ t0. t0 ≠ t → lsf(t0).t = t0, ∀ t0. t0 ≠ t → alsf(t0).t = 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)), ∀ 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) ∈ 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 = [])
Used formulas: pre(ags, als, apc, callTSync(ls.t))
| ags.pm = ∅ ⊕ (ags.h | true), ags0.pm = ∅ ⊕ (ags0.h | true), ags.pm = gs.mem, alsf(t).t = t, lsf(t).t = t, lsf(t0).t = t0, ls.t = als.t, lsf(t0).t = alsf(t0).t, ags.vm = ∅ ⊕ ags.h, ags0.vm = ∅ ⊕ ags0.h, ags.vm = gs.mem ⊕ gs.p, alsf(t) = als, apc = ready, apcf(t) = apc, gs0 = gstepf(gs, ls, ready, callPSCCOMPLETE(ls.t)), ls0 = lstepf(gs, ls, ready, callPSCCOMPLETE(ls.t)), lsf(t) = ls, lsf0(t) = ls0, pcf(t) = ready, pcf0(t) = ready, ready = pcstepf(gs, ls, ready, callPSCCOMPLETE(ls.t)), t ≠ t0, FLITPSCLInv(gs, lsf(t0), pcf(t0)), FLITPSCLInv(gs0, lsf(t0), pcf(t0)), PLIBLInv(ags, als, apc), PLIBLInv(ags, alsf(t0), apcf(t0)), abs(ags.h, gs.readers, gs.p), allReadsOK(ags.h), allReadsOK(ags0.h), allWritesOK(ags.h), allWritesOK(ags0.h), ctrok(gs.ctr, gs.writers), ctrok(gs0.ctr, gs0.writers), noPendingW(t, gs.p), noPendingW(t, gs0.p), notMember(t, gs.readers), notMember(t, gs.writers), notMember(t, gs0.readers), notMember(t, gs0.writers), pendingOk(gs.p), pendingOk(gs0.p), pre(gs, ls, ready, callPSCCOMPLETE(ls.t)), pre(ags, als, apc, callTSync(ls.t)), writersOk(gs.p, gs.writers), writersOk(gs0.p, gs0.writers), pre(ags, als, apc, callTSync(ls.t)) → ags0 = gstepf(ags, als, apc, callTSync(ls.t)) ∧ als0 = lstepf(ags, als, apc, callTSync(ls.t)) ∧ apc0 = pcstepf(ags, als, apc, callTSync(ls.t)), 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 = [], pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((ags.h | lsf(t0).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) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((ags.h | l) | lsf(t0).t) | false = []), 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) = 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, ∀ t0. t0 ≠ t → lsf(t0).t = t0, ∀ t0. t0 ≠ t → alsf(t0).t = 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)), ∀ 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) ∈ 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 = []) |
gs.mem = ∅ ⊕ (ags.h | true), ags.pm = gs.mem, lsf(t0).t = t0, lsf(t).t = t, alsf(t).t = t, ags.vm = ∅ ⊕ ags.h, ags.vm = gs.mem ⊕ gs.p, apcf(t) = ready, lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, t0 = alsf(t0).t, (ags.h | t) | false = [], t ≠ t0, FLITPSCLInv(gs, lsf(t0), pcf(t0)), PLIBLInv(ags, alsf(t0), apcf(t0)), PLIBLInv(ags, alsf(t), ready), abs(ags.h, gs.readers, gs.p), allReadsOK(ags.h), allWritesOK(ags.h), ctrok(gs.ctr, gs.writers), noPendingW(t, gs.p), notMember(t, gs.writers), notMember(t, gs.readers), 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) → ((ags.h | l) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((ags.h | 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) = R2 → gs.ctr(lsf(t0).l) = 0 → ((ags.h | lsf(t0).l) | t0) | false = [], 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 = [], ∀ l. ¬ FO(t) ∈ gs.p(l), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ gs.p(l) → ((ags.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)) ⊦ ( pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ gs.p(l) → ((ags.h | l) | t0) | false = []) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((ags.h | l0) | t0) | false = []) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → l1 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l1) → ((ags.h | l1) | t0) | false = [])
Used simplifier rules: ⊦ gstepf(gs, ls, ready, a) = gs; (s) ⊦ AInvRead(t, l) ≠ callTSync(t0); (s) ⊦ AInvWrite(t, l, val) ≠ callTSync(t0); (s) ⊦ callTSync(t) = callTSync(t0) ↔ t = t0; (s) ⊦ pre(gs, ls, ready, a) ↔ a = callTSync(ls.t) ∧ (gs.h | ls.t) | false = [] ∨ (∃ l, v. a = AInvWrite(ls.t, l, v)) ∨ (∃ l. a = AInvRead(ls.t, l)); (s) ⊦ gstepf(gs, ls, ready, a) = gs; (s) ⊦ callPSCCOMPLETE(t) ≠ invFLITPSCREAD(t0, l); (s) ⊦ callPSCCOMPLETE(t) ≠ invFLITPSCWRITE(t0, l, v); (s) ⊦ pre(gs, ls, ready, a) ↔ (∃ l0, v0. a = invFLITPSCWRITE(ls.t, l0, v0)) ∨ (∃ l0. a = invFLITPSCREAD(ls.t, l0)) ∨ a = callPSCCOMPLETE(ls.t) ∧ (∀ l. ¬ FO(ls.t) ∈ gs.p(l)); (s) ⊦ ls.t = t → lstepf(gs, ls, ready, callPSCCOMPLETE(t)) = ls; (s) ⊦ ls.t = t → pcstepf(gs, ls, ready, callPSCCOMPLETE(t)) = ready; (s)
| gs.mem = ∅ ⊕ (ags.h | true), ags.pm = gs.mem, lsf(t0).t = t0, lsf(t).t = t, alsf(t).t = t, ags.vm = ∅ ⊕ ags.h, ags.vm = gs.mem ⊕ gs.p, apcf(t) = ready, lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, t0 = alsf(t0).t, (ags.h | t) | false = [], t ≠ t0, FLITPSCLInv(gs, lsf(t0), pcf(t0)), PLIBLInv(ags, alsf(t0), apcf(t0)), PLIBLInv(ags, alsf(t), ready), abs(ags.h, gs.readers, gs.p), allReadsOK(ags.h), allWritesOK(ags.h), ctrok(gs.ctr, gs.writers), noPendingW(t, gs.p), notMember(t, gs.writers), notMember(t, gs.readers), 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) → ((ags.h | l) | t0) | false = []), pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((ags.h | 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) = R2 → gs.ctr(lsf(t0).l) = 0 → ((ags.h | lsf(t0).l) | t0) | false = [], 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 = [], ∀ l. ¬ FO(t) ∈ gs.p(l), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ gs.p(l) → ((ags.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)) ⊦ ( pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ gs.p(l) → ((ags.h | l) | t0) | false = []) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((ags.h | l0) | t0) | false = []) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → l1 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l1) → ((ags.h | l1) | t0) | false = []) |
gs.mem = ∅ ⊕ (h | true), alsf(t).t = t, lsf(t).t = t, lsf(t0).t = t0, ags = mkPLIBgs(mem, mem0, h), apcf(t) = ready, lsf0(t) = lsf(t), mem = gs.mem ⊕ gs.p, mem = ∅ ⊕ h, mem0 = gs.mem, pcf(t) = ready, pcf0(t) = ready, t0 = alsf(t0).t, (h | t) | false = [], t ≠ t0, FLITPSCLInv(gs, lsf(t0), pcf(t0)), PLIBLInv(ags, alsf(t), ready), PLIBLInv(ags, alsf(t0), apcf(t0)), abs(h, gs.readers, gs.p), allReadsOK(h), allWritesOK(h), ctrok(gs.ctr, gs.writers), noPendingW(t, gs.p), notMember(t, gs.readers), notMember(t, gs.writers), 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. 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) → ((h | l) | t) | false = [], ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ gs.p(l) ⊦ (pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ gs.p(l) → ((h | l) | t0) | false = []) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l0) | t0) | false = []) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → l1 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l1) → ((h | l1) | t0) | false = [])
Used simplifier rules: ⊦ (vm = gs.vm ∧ pm = gs.pm) ∧ h = gs.h ↔ gs = mkPLIBgs(vm, pm, h); (elim) Used terms: ags, mem, mem0, h
| gs.mem = ∅ ⊕ (h | true), alsf(t).t = t, lsf(t).t = t, lsf(t0).t = t0, ags = mkPLIBgs(mem, mem0, h), apcf(t) = ready, lsf0(t) = lsf(t), mem = gs.mem ⊕ gs.p, mem = ∅ ⊕ h, mem0 = gs.mem, pcf(t) = ready, pcf0(t) = ready, t0 = alsf(t0).t, (h | t) | false = [], t ≠ t0, FLITPSCLInv(gs, lsf(t0), pcf(t0)), PLIBLInv(ags, alsf(t), ready), PLIBLInv(ags, alsf(t0), apcf(t0)), abs(h, gs.readers, gs.p), allReadsOK(h), allWritesOK(h), ctrok(gs.ctr, gs.writers), noPendingW(t, gs.p), notMember(t, gs.readers), notMember(t, gs.writers), 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. 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) → ((h | l) | t) | false = [], ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ gs.p(l) ⊦ (pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ gs.p(l) → ((h | l) | t0) | false = []) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l0) | t0) | false = []) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → l1 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l1) → ((h | l1) | t0) | false = []) |
gs.mem = ∅ ⊕ (h | true), lsf(t0).t = t0, lsf(t).t = t, alsf(t).t = t, apcf(t) = ready, lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, t0 = alsf(t0).t, (h | t) | false = [], ∅ ⊕ h = gs.mem ⊕ gs.p, t ≠ 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), ready), abs(h, gs.readers, gs.p), allReadsOK(h), allWritesOK(h), ctrok(gs.ctr, gs.writers), noPendingW(t, gs.p), notMember(t, gs.writers), notMember(t, gs.readers), 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), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, ∀ 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)) ⊦ (pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ gs.p(l) → ((h | l) | t0) | false = []) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l0) | t0) | false = []) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → l1 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l1) → ((h | l1) | t0) | false = [])
| gs.mem = ∅ ⊕ (h | true), lsf(t0).t = t0, lsf(t).t = t, alsf(t).t = t, apcf(t) = ready, lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, t0 = alsf(t0).t, (h | t) | false = [], ∅ ⊕ h = gs.mem ⊕ gs.p, t ≠ 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), ready), abs(h, gs.readers, gs.p), allReadsOK(h), allWritesOK(h), ctrok(gs.ctr, gs.writers), noPendingW(t, gs.p), notMember(t, gs.writers), notMember(t, gs.readers), 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), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, ∀ 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)) ⊦ (pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ gs.p(l) → ((h | l) | t0) | false = []) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l0) | t0) | false = []) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → l1 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l1) → ((h | l1) | t0) | false = []) |
alsf(t).t = t, lsf(t).t = t, lsf(t0).t = t0, apcf(t) = ready, gs = mkFLITPSCgs(mem, p, ctr, writers, writers0), lsf0(t) = lsf(t), mem = ∅ ⊕ (h | true), pcf(t) = ready, pcf0(t) = ready, t0 = alsf(t0).t, (h | t) | false = [], ∅ ⊕ h = mem ⊕ p, t ≠ t0, FLITPSCLInv(gs, lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, mem, h), alsf(t), ready), PLIBLInv(mkPLIBgs(∅ ⊕ h, mem, h), alsf(t0), apcf(t0)), abs(h, writers0, p), allReadsOK(h), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers0), notMember(t, writers), pendingOk(p), writersOk(p, 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) ∈ 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) ∈ 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. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(gs, lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, mem, h), alsf(t1), apcf(t1)) ∧ labs(gs, lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, mem, h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l) ⊦ (pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ p(l) → ((h | l) | t0) | false = []) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l0) | t0) | false = []) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → l1 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ p(l1) → ((h | l1) | 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, mem, ctr, writers, writers0, p
| alsf(t).t = t, lsf(t).t = t, lsf(t0).t = t0, apcf(t) = ready, gs = mkFLITPSCgs(mem, p, ctr, writers, writers0), lsf0(t) = lsf(t), mem = ∅ ⊕ (h | true), pcf(t) = ready, pcf0(t) = ready, t0 = alsf(t0).t, (h | t) | false = [], ∅ ⊕ h = mem ⊕ p, t ≠ t0, FLITPSCLInv(gs, lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, mem, h), alsf(t), ready), PLIBLInv(mkPLIBgs(∅ ⊕ h, mem, h), alsf(t0), apcf(t0)), abs(h, writers0, p), allReadsOK(h), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers0), notMember(t, writers), pendingOk(p), writersOk(p, 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) ∈ 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) ∈ 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. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(gs, lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, mem, h), alsf(t1), apcf(t1)) ∧ labs(gs, lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, mem, h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l) ⊦ (pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ p(l) → ((h | l) | t0) | false = []) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l0) | t0) | false = []) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → l1 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ p(l1) → ((h | l1) | t0) | false = []) |
lsf(t0).t = t0, lsf(t).t = t, alsf(t).t = t, apcf(t) = ready, lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, t0 = alsf(t0).t, (h | t) | false = [], ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t0, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t), ready), abs(h, writers0, p), allReadsOK(h), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers), notMember(t, writers0), pendingOk(p), writersOk(p, 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) ∈ 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) ∈ p(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) ∈ p(l), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ⊦ (pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ p(l) → ((h | l) | t0) | false = []) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l0) | t0) | false = []) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → l1 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ p(l1) → ((h | l1) | t0) | false = [])
| lsf(t0).t = t0, lsf(t).t = t, alsf(t).t = t, apcf(t) = ready, lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, t0 = alsf(t0).t, (h | t) | false = [], ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t0, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t), ready), abs(h, writers0, p), allReadsOK(h), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers), notMember(t, writers0), pendingOk(p), writersOk(p, 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) ∈ 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) ∈ p(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) ∈ p(l), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ⊦ (pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ p(l) → ((h | l) | t0) | false = []) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l0) | t0) | false = []) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → l1 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ p(l1) → ((h | l1) | t0) | false = []) |
lsf(t).t = t, lsf(t0).t = t0, alsf(t) = mkPLIBls(t2, il, iv, ov), apcf(t) = ready, lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, t0 = alsf(t0).t, t2 = t, (h | t) | false = [], ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t0, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t), ready), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)), abs(h, writers0, p), allReadsOK(h), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers0), notMember(t, writers), pendingOk(p), writersOk(p, 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) ∈ 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) ∈ 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. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l) ⊦ (pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ p(l) → ((h | l) | t0) | false = []) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l0) | t0) | false = []) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → l1 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ p(l1) → ((h | l1) | 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).t = t, lsf(t0).t = t0, alsf(t) = mkPLIBls(t2, il, iv, ov), apcf(t) = ready, lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, t0 = alsf(t0).t, t2 = t, (h | t) | false = [], ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t0, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t), ready), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)), abs(h, writers0, p), allReadsOK(h), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers0), notMember(t, writers), pendingOk(p), writersOk(p, 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) ∈ 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) ∈ 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. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l) ⊦ (pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ p(l) → ((h | l) | t0) | false = []) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l0) | t0) | false = []) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → l1 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ p(l1) → ((h | l1) | t0) | false = []) |
lsf(t0).t = t0, lsf(t).t = t, alsf(t) = mkPLIBls(t, il, iv, ov), apcf(t) = ready, lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, t0 = alsf(t0).t, (h | t) | false = [], ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t0, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), abs(h, writers0, p), allReadsOK(h), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers), notMember(t, writers0), pendingOk(p), writersOk(p, 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) ∈ 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) ∈ p(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) ∈ p(l), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ⊦ (pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ p(l) → ((h | l) | t0) | false = []) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l0) | t0) | false = []) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → l1 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ p(l1) → ((h | l1) | t0) | false = [])
| lsf(t0).t = t0, lsf(t).t = t, alsf(t) = mkPLIBls(t, il, iv, ov), apcf(t) = ready, lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, t0 = alsf(t0).t, (h | t) | false = [], ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t0, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), abs(h, writers0, p), allReadsOK(h), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers), notMember(t, writers0), pendingOk(p), writersOk(p, 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) ∈ 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) ∈ p(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) ∈ p(l), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ⊦ (pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ p(l) → ((h | l) | t0) | false = []) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l0) | t0) | false = []) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → l1 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ p(l1) → ((h | l1) | t0) | false = []) |
lsf(t).t = t, lsf(t0).t = t0, alsf(t) = mkPLIBls(t, il, iv, ov), alsf(t0) = mkPLIBls(t2, il0, iv0, ov0), apcf(t) = ready, lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, t0 = t2, (h | t) | false = [], ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t0, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)), abs(h, writers0, p), allReadsOK(h), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers0), notMember(t, writers), pendingOk(p), writersOk(p, 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) ∈ 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) ∈ 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 = il0 ∧ lsf(t0).v = iv0, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → lsf(t0).v = ov0, pcf(t0) = R1 → lsf(t0).l = il0, 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. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l) ⊦ (pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ p(l) → ((h | l) | t0) | false = []) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l0) | t0) | false = []) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → l1 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ p(l1) → ((h | l1) | 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, il0, ov0
| lsf(t).t = t, lsf(t0).t = t0, alsf(t) = mkPLIBls(t, il, iv, ov), alsf(t0) = mkPLIBls(t2, il0, iv0, ov0), apcf(t) = ready, lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, t0 = t2, (h | t) | false = [], ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t0, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)), abs(h, writers0, p), allReadsOK(h), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers0), notMember(t, writers), pendingOk(p), writersOk(p, 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) ∈ 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) ∈ 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 = il0 ∧ lsf(t0).v = iv0, pcf(t0) = R2 ∨ pcf(t0) = R3 ∨ pcf(t0) = R4 → lsf(t0).v = ov0, pcf(t0) = R1 → lsf(t0).l = il0, 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. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l) ⊦ (pcf(t0) = idle ∨ pcf(t0) = ready ∨ pcf(t0) = R1 ∨ pcf(t0) = R4 ∨ pcf(t0) = W1 ∨ pcf(t0) = W5 → ¬ FO(t0) ∈ p(l) → ((h | l) | t0) | false = []) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h | l0) | t0) | false = []) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → l1 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ p(l1) → ((h | l1) | t0) | false = []) |
lsf(t2).t = t2, lsf(t).t = t, alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), alsf(t) = mkPLIBls(t, il, iv, ov), apcf(t) = ready, lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, (h | t) | false = [], ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t2, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t2), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), abs(h, writers0, p), allReadsOK(h), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers), notMember(t, writers0), pendingOk(p), writersOk(p, writers), pcf(t2) = idle → apcf(t2) = idle, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = R1 → lsf(t2).l = il0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → lsf(t2).v = ov0, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → lsf(t2).l = il0 ∧ lsf(t2).v = iv0, pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ lsf(t2).l ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = R2 → ctr(lsf(t2).l) = 0 → ((h | lsf(t2).l) | t2) | false = [], pcf(t2) = W4 → ((h | lsf(t2).l) | t2) | false = (W(t2, lsf(t2).l, lsf(t2).v), false) ' ∨ ((h | lsf(t2).l) | t2) | false = [], ∀ l. ¬ FO(t) ∈ p(l), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ⊦ (pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []) ∧ (pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h | l0) | t2) | false = []) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 → l1 ≠ lsf(t2).l ∧ ¬ FO(t2) ∈ p(l1) → ((h | l1) | t2) | false = [])
| lsf(t2).t = t2, lsf(t).t = t, alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), alsf(t) = mkPLIBls(t, il, iv, ov), apcf(t) = ready, lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, (h | t) | false = [], ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t2, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t2), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), abs(h, writers0, p), allReadsOK(h), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers), notMember(t, writers0), pendingOk(p), writersOk(p, writers), pcf(t2) = idle → apcf(t2) = idle, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = R1 → lsf(t2).l = il0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → lsf(t2).v = ov0, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → lsf(t2).l = il0 ∧ lsf(t2).v = iv0, pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ lsf(t2).l ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = R2 → ctr(lsf(t2).l) = 0 → ((h | lsf(t2).l) | t2) | false = [], pcf(t2) = W4 → ((h | lsf(t2).l) | t2) | false = (W(t2, lsf(t2).l, lsf(t2).v), false) ' ∨ ((h | lsf(t2).l) | t2) | false = [], ∀ l. ¬ FO(t) ∈ p(l), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ⊦ (pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []) ∧ (pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h | l0) | t2) | false = []) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 → l1 ≠ lsf(t2).l ∧ ¬ FO(t2) ∈ p(l1) → ((h | l1) | t2) | false = []) |
lsf(t).t = t, alsf(t) = mkPLIBls(t, il, iv, ov), alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), apcf(t) = ready, lsf(t2) = mkFLITPSCls(t0, l2, v), lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, t0 = t2, (h | t) | false = [], ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t2, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t2), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), abs(h, writers0, p), allReadsOK(h), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers0), notMember(t, writers), pendingOk(p), writersOk(p, writers), pcf(t2) = W4 → ((h | l2) | t2) | false = (W(t2, l2, v), false) ' ∨ ((h | l2) | t2) | false = [], pcf(t2) = R2 → ctr(l2) = 0 → ((h | l2) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ l2 ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l2 = il0 ∧ v = iv0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v = ov0, pcf(t2) = R1 → l2 = il0, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = idle → apcf(t2) = idle, ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l) ⊦ (pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []) ∧ (pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h | l0) | t2) | false = []) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 → l1 ≠ l2 ∧ ¬ FO(t2) ∈ p(l1) → ((h | l1) | t2) | false = [])
Used simplifier rules: ⊦ (t = ls.t ∧ l = ls.l) ∧ v = ls.v ↔ ls = mkFLITPSCls(t, l, v); (elim) Used terms: lsf(t2), t0, l2, v
| lsf(t).t = t, alsf(t) = mkPLIBls(t, il, iv, ov), alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), apcf(t) = ready, lsf(t2) = mkFLITPSCls(t0, l2, v), lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, t0 = t2, (h | t) | false = [], ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t2, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t2), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), abs(h, writers0, p), allReadsOK(h), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers0), notMember(t, writers), pendingOk(p), writersOk(p, writers), pcf(t2) = W4 → ((h | l2) | t2) | false = (W(t2, l2, v), false) ' ∨ ((h | l2) | t2) | false = [], pcf(t2) = R2 → ctr(l2) = 0 → ((h | l2) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ l2 ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l2 = il0 ∧ v = iv0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v = ov0, pcf(t2) = R1 → l2 = il0, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = idle → apcf(t2) = idle, ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l) ⊦ (pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []) ∧ (pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h | l0) | t2) | false = []) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 → l1 ≠ l2 ∧ ¬ FO(t2) ∈ p(l1) → ((h | l1) | t2) | false = []) |
lsf(t).t = t, alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), alsf(t) = mkPLIBls(t, il, iv, ov), apcf(t) = ready, lsf(t2) = mkFLITPSCls(t2, l2, v), lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, (h | t) | false = [], ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t2, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), mkFLITPSCls(t2, l2, v), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), abs(h, writers0, p), allReadsOK(h), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers), notMember(t, writers0), pendingOk(p), writersOk(p, writers), pcf(t2) = idle → apcf(t2) = idle, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = R1 → l2 = il0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v = ov0, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l2 = il0 ∧ v = iv0, pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ l2 ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = R2 → ctr(l2) = 0 → ((h | l2) | t2) | false = [], pcf(t2) = W4 → ((h | l2) | t2) | false = (W(t2, l2, v), false) ' ∨ ((h | l2) | t2) | false = [], ∀ l. ¬ FO(t) ∈ p(l), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ⊦ (pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []) ∧ (pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h | l0) | t2) | false = []) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 → l1 ≠ l2 ∧ ¬ FO(t2) ∈ p(l1) → ((h | l1) | t2) | false = [])
| lsf(t).t = t, alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), alsf(t) = mkPLIBls(t, il, iv, ov), apcf(t) = ready, lsf(t2) = mkFLITPSCls(t2, l2, v), lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, (h | t) | false = [], ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t2, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), mkFLITPSCls(t2, l2, v), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), abs(h, writers0, p), allReadsOK(h), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers), notMember(t, writers0), pendingOk(p), writersOk(p, writers), pcf(t2) = idle → apcf(t2) = idle, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = R1 → l2 = il0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v = ov0, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l2 = il0 ∧ v = iv0, pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ l2 ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = R2 → ctr(l2) = 0 → ((h | l2) | t2) | false = [], pcf(t2) = W4 → ((h | l2) | t2) | false = (W(t2, l2, v), false) ' ∨ ((h | l2) | t2) | false = [], ∀ l. ¬ FO(t) ∈ p(l), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ⊦ (pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []) ∧ (pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h | l0) | t2) | false = []) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 → l1 ≠ l2 ∧ ¬ FO(t2) ∈ p(l1) → ((h | l1) | t2) | false = []) |
alsf(t) = mkPLIBls(t, il, iv, ov), alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), apcf(t) = ready, lsf(t2) = mkFLITPSCls(t2, l2, v), lsf(t) = mkFLITPSCls(t0, l3, v0), lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, t0 = t, (h | t) | false = [], ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t2, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), mkFLITPSCls(t2, l2, v), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), abs(h, writers0, p), allReadsOK(h), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers0), notMember(t, writers), pendingOk(p), writersOk(p, writers), pcf(t2) = W4 → ((h | l2) | t2) | false = (W(t2, l2, v), false) ' ∨ ((h | l2) | t2) | false = [], pcf(t2) = R2 → ctr(l2) = 0 → ((h | l2) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ l2 ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l2 = il0 ∧ v = iv0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v = ov0, pcf(t2) = R1 → l2 = il0, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = idle → apcf(t2) = idle, ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l) ⊦ (pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []) ∧ (pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h | l0) | t2) | false = []) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 → l1 ≠ l2 ∧ ¬ FO(t2) ∈ p(l1) → ((h | l1) | t2) | false = [])
Used simplifier rules: ⊦ (t = ls.t ∧ l = ls.l) ∧ v = ls.v ↔ ls = mkFLITPSCls(t, l, v); (elim) Used terms: lsf(t), t0, l3, v0
| alsf(t) = mkPLIBls(t, il, iv, ov), alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), apcf(t) = ready, lsf(t2) = mkFLITPSCls(t2, l2, v), lsf(t) = mkFLITPSCls(t0, l3, v0), lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, t0 = t, (h | t) | false = [], ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t2, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), mkFLITPSCls(t2, l2, v), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), abs(h, writers0, p), allReadsOK(h), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers0), notMember(t, writers), pendingOk(p), writersOk(p, writers), pcf(t2) = W4 → ((h | l2) | t2) | false = (W(t2, l2, v), false) ' ∨ ((h | l2) | t2) | false = [], pcf(t2) = R2 → ctr(l2) = 0 → ((h | l2) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ l2 ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l2 = il0 ∧ v = iv0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v = ov0, pcf(t2) = R1 → l2 = il0, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = idle → apcf(t2) = idle, ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l) ⊦ (pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []) ∧ (pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h | l0) | t2) | false = []) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 → l1 ≠ l2 ∧ ¬ FO(t2) ∈ p(l1) → ((h | l1) | t2) | false = []) |
alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), alsf(t) = mkPLIBls(t, il, iv, ov), apcf(t) = ready, lsf(t) = mkFLITPSCls(t, l3, v0), lsf(t2) = mkFLITPSCls(t2, l2, v), lsf0(t) = mkFLITPSCls(t, l3, v0), pcf(t) = ready, pcf0(t) = ready, (h | t) | false = [], ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t2, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), mkFLITPSCls(t2, l2, v), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), abs(h, writers0, p), allReadsOK(h), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers), notMember(t, writers0), pendingOk(p), writersOk(p, writers), pcf(t2) = idle → apcf(t2) = idle, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = R1 → l2 = il0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v = ov0, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l2 = il0 ∧ v = iv0, pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ l2 ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = R2 → ctr(l2) = 0 → ((h | l2) | t2) | false = [], pcf(t2) = W4 → ((h | l2) | t2) | false = (W(t2, l2, v), false) ' ∨ ((h | l2) | t2) | false = [], ∀ l. ¬ FO(t) ∈ p(l), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ⊦ (pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []) ∧ (pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h | l0) | t2) | false = []) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 → l1 ≠ l2 ∧ ¬ FO(t2) ∈ p(l1) → ((h | l1) | t2) | false = [])
| alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), alsf(t) = mkPLIBls(t, il, iv, ov), apcf(t) = ready, lsf(t) = mkFLITPSCls(t, l3, v0), lsf(t2) = mkFLITPSCls(t2, l2, v), lsf0(t) = mkFLITPSCls(t, l3, v0), pcf(t) = ready, pcf0(t) = ready, (h | t) | false = [], ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t2, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), mkFLITPSCls(t2, l2, v), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), abs(h, writers0, p), allReadsOK(h), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers), notMember(t, writers0), pendingOk(p), writersOk(p, writers), pcf(t2) = idle → apcf(t2) = idle, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = R1 → l2 = il0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v = ov0, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l2 = il0 ∧ v = iv0, pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ l2 ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = R2 → ctr(l2) = 0 → ((h | l2) | t2) | false = [], pcf(t2) = W4 → ((h | l2) | t2) | false = (W(t2, l2, v), false) ' ∨ ((h | l2) | t2) | false = [], ∀ l. ¬ FO(t) ∈ p(l), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ⊦ (pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []) ∧ (pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h | l0) | t2) | false = []) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 → l1 ≠ l2 ∧ ¬ FO(t2) ∈ p(l1) → ((h | l1) | t2) | false = []) |
alsf(t) = mkPLIBls(t, il, iv, ov), alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), apcf(t) = ready, lsf(t2) = mkFLITPSCls(t2, l2, v), lsf(t) = mkFLITPSCls(t, l3, v0), lsf0(t) = mkFLITPSCls(t, l3, v0), pcf(t) = ready, pcf0(t) = ready, (h | t) | false = [], ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t2, ((h | l) | t2) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), mkFLITPSCls(t2, l2, v), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), abs(h, writers0, p), allReadsOK(h), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers0), notMember(t, writers), pendingOk(p), writersOk(p, writers), ¬ FO(t2) ∈ p(l), pcf(t2) = W4 → ((h | l2) | t2) | false = (W(t2, l2, v), false) ' ∨ ((h | l2) | t2) | false = [], pcf(t2) = R2 → ctr(l2) = 0 → ((h | l2) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ l2 ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l2 = il0 ∧ v = iv0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v = ov0, pcf(t2) = R1 → l2 = il0, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = idle → apcf(t2) = idle, ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 ⊦
alsf(t) = mkPLIBls(t, il, iv, ov), alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), apcf(t) = ready, lsf(t2) = mkFLITPSCls(t2, l2, v), lsf(t) = mkFLITPSCls(t, l3, v0), lsf0(t) = mkFLITPSCls(t, l3, v0), pcf(t) = ready, pcf0(t) = ready, (h | t) | false = [], ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t2, ((h | l0) | t2) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), mkFLITPSCls(t2, l2, v), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), abs(h, writers0, p), allReadsOK(h), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers0), notMember(t, writers), pendingOk(p), writersOk(p, writers), pcf(t2) = W4 → ((h | l2) | t2) | false = (W(t2, l2, v), false) ' ∨ ((h | l2) | t2) | false = [], pcf(t2) = R2 → ctr(l2) = 0 → ((h | l2) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ l2 ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l2 = il0 ∧ v = iv0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v = ov0, pcf(t2) = R1 → l2 = il0, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = idle → apcf(t2) = idle, ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 ⊦
alsf(t) = mkPLIBls(t, il, iv, ov), alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), apcf(t) = ready, lsf(t2) = mkFLITPSCls(t2, l2, v), lsf(t) = mkFLITPSCls(t, l3, v0), lsf0(t) = mkFLITPSCls(t, l3, v0), pcf(t) = ready, pcf0(t) = ready, (h | t) | false = [], ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, l1 ≠ l2, t ≠ t2, ((h | l1) | t2) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), mkFLITPSCls(t2, l2, v), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), abs(h, writers0, p), allReadsOK(h), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers0), notMember(t, writers), pendingOk(p), writersOk(p, writers), ¬ FO(t2) ∈ p(l1), pcf(t2) = W4 → ((h | l2) | t2) | false = (W(t2, l2, v), false) ' ∨ ((h | l2) | t2) | false = [], pcf(t2) = R2 → ctr(l2) = 0 → ((h | l2) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ l2 ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l2 = il0 ∧ v = iv0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v = ov0, pcf(t2) = R1 → l2 = il0, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = idle → apcf(t2) = idle, ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l), pcf(t2) = R2 ∨ pcf(t2) = R3 ⊦
| alsf(t) = mkPLIBls(t, il, iv, ov), alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), apcf(t) = ready, lsf(t2) = mkFLITPSCls(t2, l2, v), lsf(t) = mkFLITPSCls(t, l3, v0), lsf0(t) = mkFLITPSCls(t, l3, v0), pcf(t) = ready, pcf0(t) = ready, (h | t) | false = [], ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t2, ((h | l) | t2) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), mkFLITPSCls(t2, l2, v), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), abs(h, writers0, p), allReadsOK(h), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers0), notMember(t, writers), pendingOk(p), writersOk(p, writers), ¬ FO(t2) ∈ p(l), pcf(t2) = W4 → ((h | l2) | t2) | false = (W(t2, l2, v), false) ' ∨ ((h | l2) | t2) | false = [], pcf(t2) = R2 → ctr(l2) = 0 → ((h | l2) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ l2 ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l2 = il0 ∧ v = iv0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v = ov0, pcf(t2) = R1 → l2 = il0, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = idle → apcf(t2) = idle, ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 ⊦ |
alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), alsf(t) = mkPLIBls(t, il, iv, ov), apcf(t) = ready, lsf(t) = mkFLITPSCls(t, l3, v0), lsf(t2) = mkFLITPSCls(t2, l2, v), lsf0(t) = mkFLITPSCls(t, l3, v0), pcf(t) = ready, pcf0(t) = ready, (h | t) | false = [], ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t2, ((h | l) | t2) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), mkFLITPSCls(t2, l2, v), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), abs(h, writers0, p), allReadsOK(h), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers), notMember(t, writers0), pendingOk(p), writersOk(p, writers), ¬ FO(t2) ∈ p(l), pcf(t2) = idle → apcf(t2) = idle, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = R1 → l2 = il0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v = ov0, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l2 = il0 ∧ v = iv0, pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ l2 ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = R2 → ctr(l2) = 0 → ((h | l2) | t2) | false = [], pcf(t2) = W4 → ((h | l2) | t2) | false = (W(t2, l2, v), false) ' ∨ ((h | l2) | t2) | false = [], ∀ l. ¬ FO(t) ∈ p(l), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = [], pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 ⊦
| alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), alsf(t) = mkPLIBls(t, il, iv, ov), apcf(t) = ready, lsf(t) = mkFLITPSCls(t, l3, v0), lsf(t2) = mkFLITPSCls(t2, l2, v), lsf0(t) = mkFLITPSCls(t, l3, v0), pcf(t) = ready, pcf0(t) = ready, (h | t) | false = [], ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t2, ((h | l) | t2) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), mkFLITPSCls(t2, l2, v), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), abs(h, writers0, p), allReadsOK(h), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers), notMember(t, writers0), pendingOk(p), writersOk(p, writers), ¬ FO(t2) ∈ p(l), pcf(t2) = idle → apcf(t2) = idle, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = R1 → l2 = il0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v = ov0, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l2 = il0 ∧ v = iv0, pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ l2 ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = R2 → ctr(l2) = 0 → ((h | l2) | t2) | false = [], pcf(t2) = W4 → ((h | l2) | t2) | false = (W(t2, l2, v), false) ' ∨ ((h | l2) | t2) | false = [], ∀ l. ¬ FO(t) ∈ p(l), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = [], pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 ⊦ |
Used terms: l
| alsf(t) = mkPLIBls(t, il, iv, ov), alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), apcf(t) = ready, lsf(t2) = mkFLITPSCls(t2, l2, v), lsf(t) = mkFLITPSCls(t, l3, v0), lsf0(t) = mkFLITPSCls(t, l3, v0), pcf(t) = ready, pcf0(t) = ready, (h | t) | false = [], ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t2, ((h | l0) | t2) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), mkFLITPSCls(t2, l2, v), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), abs(h, writers0, p), allReadsOK(h), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers0), notMember(t, writers), pendingOk(p), writersOk(p, writers), pcf(t2) = W4 → ((h | l2) | t2) | false = (W(t2, l2, v), false) ' ∨ ((h | l2) | t2) | false = [], pcf(t2) = R2 → ctr(l2) = 0 → ((h | l2) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ l2 ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l2 = il0 ∧ v = iv0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v = ov0, pcf(t2) = R1 → l2 = il0, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = idle → apcf(t2) = idle, ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 ⊦ |
alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), alsf(t) = mkPLIBls(t, il, iv, ov), apcf(t) = ready, lsf(t) = mkFLITPSCls(t, l3, v0), lsf(t2) = mkFLITPSCls(t2, l2, v), lsf0(t) = mkFLITPSCls(t, l3, v0), pcf(t) = ready, pcf0(t) = ready, (h | t) | false = [], ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t2, ((h | l0) | t2) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), mkFLITPSCls(t2, l2, v), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), abs(h, writers0, p), allReadsOK(h), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers), notMember(t, writers0), pendingOk(p), writersOk(p, writers), pcf(t2) = idle → apcf(t2) = idle, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = R1 → l2 = il0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v = ov0, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l2 = il0 ∧ v = iv0, pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ l2 ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = R2 → ctr(l2) = 0 → ((h | l2) | t2) | false = [], pcf(t2) = W4 → ((h | l2) | t2) | false = (W(t2, l2, v), false) ' ∨ ((h | l2) | t2) | false = [], ∀ l. ¬ FO(t) ∈ p(l), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ((h | l) | t2) | false = [], pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 ⊦
| alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), alsf(t) = mkPLIBls(t, il, iv, ov), apcf(t) = ready, lsf(t) = mkFLITPSCls(t, l3, v0), lsf(t2) = mkFLITPSCls(t2, l2, v), lsf0(t) = mkFLITPSCls(t, l3, v0), pcf(t) = ready, pcf0(t) = ready, (h | t) | false = [], ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t2, ((h | l0) | t2) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), mkFLITPSCls(t2, l2, v), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), abs(h, writers0, p), allReadsOK(h), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers), notMember(t, writers0), pendingOk(p), writersOk(p, writers), pcf(t2) = idle → apcf(t2) = idle, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = R1 → l2 = il0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v = ov0, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l2 = il0 ∧ v = iv0, pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ l2 ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = R2 → ctr(l2) = 0 → ((h | l2) | t2) | false = [], pcf(t2) = W4 → ((h | l2) | t2) | false = (W(t2, l2, v), false) ' ∨ ((h | l2) | t2) | false = [], ∀ l. ¬ FO(t) ∈ p(l), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ((h | l) | t2) | false = [], pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 ⊦ |
Used terms: l0
| alsf(t) = mkPLIBls(t, il, iv, ov), alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), apcf(t) = ready, lsf(t2) = mkFLITPSCls(t2, l2, v), lsf(t) = mkFLITPSCls(t, l3, v0), lsf0(t) = mkFLITPSCls(t, l3, v0), pcf(t) = ready, pcf0(t) = ready, (h | t) | false = [], ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, l1 ≠ l2, t ≠ t2, ((h | l1) | t2) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), mkFLITPSCls(t2, l2, v), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), abs(h, writers0, p), allReadsOK(h), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers0), notMember(t, writers), pendingOk(p), writersOk(p, writers), ¬ FO(t2) ∈ p(l1), pcf(t2) = W4 → ((h | l2) | t2) | false = (W(t2, l2, v), false) ' ∨ ((h | l2) | t2) | false = [], pcf(t2) = R2 → ctr(l2) = 0 → ((h | l2) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ l2 ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l2 = il0 ∧ v = iv0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v = ov0, pcf(t2) = R1 → l2 = il0, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = idle → apcf(t2) = idle, ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l), pcf(t2) = R2 ∨ pcf(t2) = R3 ⊦ |
alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), alsf(t) = mkPLIBls(t, il, iv, ov), apcf(t) = ready, lsf(t) = mkFLITPSCls(t, l3, v0), lsf(t2) = mkFLITPSCls(t2, l2, v), lsf0(t) = mkFLITPSCls(t, l3, v0), pcf(t) = ready, pcf0(t) = ready, (h | t) | false = [], ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, l1 ≠ l2, t ≠ t2, ((h | l1) | t2) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), mkFLITPSCls(t2, l2, v), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), abs(h, writers0, p), allReadsOK(h), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers), notMember(t, writers0), pendingOk(p), writersOk(p, writers), ¬ FO(t2) ∈ p(l1), pcf(t2) = idle → apcf(t2) = idle, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = R1 → l2 = il0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v = ov0, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l2 = il0 ∧ v = iv0, pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = R2 → ctr(l2) = 0 → ((h | l2) | t2) | false = [], pcf(t2) = W4 → ((h | l2) | t2) | false = (W(t2, l2, v), false) ' ∨ ((h | l2) | t2) | false = [], ∀ l. ¬ FO(t) ∈ p(l), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l0. l0 ≠ l2 ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 ⊦
| alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), alsf(t) = mkPLIBls(t, il, iv, ov), apcf(t) = ready, lsf(t) = mkFLITPSCls(t, l3, v0), lsf(t2) = mkFLITPSCls(t2, l2, v), lsf0(t) = mkFLITPSCls(t, l3, v0), pcf(t) = ready, pcf0(t) = ready, (h | t) | false = [], ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, l1 ≠ l2, t ≠ t2, ((h | l1) | t2) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), mkFLITPSCls(t2, l2, v), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), abs(h, writers0, p), allReadsOK(h), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers), notMember(t, writers0), pendingOk(p), writersOk(p, writers), ¬ FO(t2) ∈ p(l1), pcf(t2) = idle → apcf(t2) = idle, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = R1 → l2 = il0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v = ov0, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l2 = il0 ∧ v = iv0, pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = R2 → ctr(l2) = 0 → ((h | l2) | t2) | false = [], pcf(t2) = W4 → ((h | l2) | t2) | false = (W(t2, l2, v), false) ' ∨ ((h | l2) | t2) | false = [], ∀ l. ¬ FO(t) ∈ p(l), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l0. l0 ≠ l2 ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 ⊦ |
Used terms: l1
| ags.pm = ∅ ⊕ (ags.h | true), ags0.pm = ∅ ⊕ (ags0.h | true), ags.pm = gs.mem, alsf(t).t = t, lsf(t).t = t, lsf(t0).t = t0, ls.t = als.t, lsf(t0).t = alsf(t0).t, ags.vm = ∅ ⊕ ags.h, ags0.vm = ∅ ⊕ ags0.h, ags.vm = gs.mem ⊕ gs.p, alsf(t) = als, apc = ready, apcf(t) = apc, gs0 = gstepf(gs, ls, ready, callPSCCOMPLETE(ls.t)), ls0 = lstepf(gs, ls, ready, callPSCCOMPLETE(ls.t)), lsf(t) = ls, lsf0(t) = ls0, pcf(t) = ready, pcf0(t) = ready, ready = pcstepf(gs, ls, ready, callPSCCOMPLETE(ls.t)), t ≠ t0, FLITPSCLInv(gs, lsf(t0), pcf(t0)), FLITPSCLInv(gs0, lsf(t0), pcf(t0)), PLIBLInv(ags, als, apc), PLIBLInv(ags, alsf(t0), apcf(t0)), abs(ags.h, gs.readers, gs.p), allReadsOK(ags.h), allReadsOK(ags0.h), allWritesOK(ags.h), allWritesOK(ags0.h), ctrok(gs.ctr, gs.writers), ctrok(gs0.ctr, gs0.writers), noPendingW(t, gs.p), noPendingW(t, gs0.p), notMember(t, gs.readers), notMember(t, gs.writers), notMember(t, gs0.readers), notMember(t, gs0.writers), pendingOk(gs.p), pendingOk(gs0.p), pre(gs, ls, ready, callPSCCOMPLETE(ls.t)), writersOk(gs.p, gs.writers), writersOk(gs0.p, gs0.writers), ¬ pre(ags, als, apc, callTSync(ls.t)), pre(ags, als, apc, callTSync(ls.t)) → ags0 = gstepf(ags, als, apc, callTSync(ls.t)) ∧ als0 = lstepf(ags, als, apc, callTSync(ls.t)) ∧ apc0 = pcstepf(ags, als, apc, callTSync(ls.t)), 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 = [], pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((ags.h | lsf(t0).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) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → (∀ l. ((ags.h | l) | lsf(t0).t) | false = []), 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) = 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, ∀ t0. t0 ≠ t → lsf(t0).t = t0, ∀ t0. t0 ≠ t → alsf(t0).t = 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)), ∀ 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) ∈ 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 = []) |
gs.mem = ∅ ⊕ (ags.h | true), ags0.pm = ∅ ⊕ (ags0.h | true), ags.pm = gs.mem, alsf(t).t = t, lsf(t).t = t, lsf(t0).t = t0, ags.vm = ∅ ⊕ ags.h, ags0.vm = ∅ ⊕ ags0.h, ags.vm = gs.mem ⊕ gs.p, apcf(t) = ready, lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, t0 = alsf(t0).t, t ≠ t0, (ags.h | t) | false ≠ [], FLITPSCLInv(gs, lsf(t0), pcf(t0)), PLIBLInv(ags, alsf(t), ready), PLIBLInv(ags, alsf(t0), apcf(t0)), abs(ags.h, gs.readers, gs.p), allReadsOK(ags.h), allReadsOK(ags0.h), allWritesOK(ags.h), allWritesOK(ags0.h), ctrok(gs.ctr, gs.writers), noPendingW(t, gs.p), notMember(t, gs.readers), notMember(t, gs.writers), 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, ∀ l. ¬ FO(t) ∈ gs.p(l), ∀ 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(l) → ((ags0.h | l) | t0) | false = []) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((ags0.h | l0) | t0) | false = []) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → l1 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l1) → ((ags0.h | l1) | t0) | false = []) ∧ (pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((ags0.h | lsf(t0).l) | t0) | false = []) ∧ (pcf(t0) = W4 → ((ags0.h | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((ags0.h | lsf(t0).l) | t0) | false = [])
Used simplifier rules: ⊦ AInvRead(t, l) ≠ callTSync(t0); (s) ⊦ AInvWrite(t, l, val) ≠ callTSync(t0); (s) ⊦ callTSync(t) = callTSync(t0) ↔ t = t0; (s) ⊦ pre(gs, ls, ready, a) ↔ a = callTSync(ls.t) ∧ (gs.h | ls.t) | false = [] ∨ (∃ l, v. a = AInvWrite(ls.t, l, v)) ∨ (∃ l. a = AInvRead(ls.t, l)); (s) ⊦ gstepf(gs, ls, ready, a) = gs; (s) ⊦ callPSCCOMPLETE(t) ≠ invFLITPSCREAD(t0, l); (s) ⊦ callPSCCOMPLETE(t) ≠ invFLITPSCWRITE(t0, l, v); (s) ⊦ pre(gs, ls, ready, a) ↔ (∃ l0, v0. a = invFLITPSCWRITE(ls.t, l0, v0)) ∨ (∃ l0. a = invFLITPSCREAD(ls.t, l0)) ∨ a = callPSCCOMPLETE(ls.t) ∧ (∀ l. ¬ FO(ls.t) ∈ gs.p(l)); (s) ⊦ ls.t = t → lstepf(gs, ls, ready, callPSCCOMPLETE(t)) = ls; (s) ⊦ ls.t = t → pcstepf(gs, ls, ready, callPSCCOMPLETE(t)) = ready; (s)
| gs.mem = ∅ ⊕ (ags.h | true), ags0.pm = ∅ ⊕ (ags0.h | true), ags.pm = gs.mem, alsf(t).t = t, lsf(t).t = t, lsf(t0).t = t0, ags.vm = ∅ ⊕ ags.h, ags0.vm = ∅ ⊕ ags0.h, ags.vm = gs.mem ⊕ gs.p, apcf(t) = ready, lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, t0 = alsf(t0).t, t ≠ t0, (ags.h | t) | false ≠ [], FLITPSCLInv(gs, lsf(t0), pcf(t0)), PLIBLInv(ags, alsf(t), ready), PLIBLInv(ags, alsf(t0), apcf(t0)), abs(ags.h, gs.readers, gs.p), allReadsOK(ags.h), allReadsOK(ags0.h), allWritesOK(ags.h), allWritesOK(ags0.h), ctrok(gs.ctr, gs.writers), noPendingW(t, gs.p), notMember(t, gs.readers), notMember(t, gs.writers), 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, ∀ l. ¬ FO(t) ∈ gs.p(l), ∀ 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(l) → ((ags0.h | l) | t0) | false = []) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((ags0.h | l0) | t0) | false = []) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → l1 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l1) → ((ags0.h | l1) | t0) | false = []) ∧ (pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((ags0.h | lsf(t0).l) | t0) | false = []) ∧ (pcf(t0) = W4 → ((ags0.h | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((ags0.h | lsf(t0).l) | t0) | false = []) |
gs.mem = ∅ ⊕ (h | true), ags0.pm = ∅ ⊕ (ags0.h | true), lsf(t0).t = t0, lsf(t).t = t, alsf(t).t = t, ags0.vm = ∅ ⊕ ags0.h, ags = mkPLIBgs(mem, mem0, h), apcf(t) = ready, lsf0(t) = lsf(t), mem = gs.mem ⊕ gs.p, mem = ∅ ⊕ h, mem0 = gs.mem, pcf(t) = ready, pcf0(t) = ready, t0 = alsf(t0).t, t ≠ t0, (h | t) | false ≠ [], FLITPSCLInv(gs, lsf(t0), pcf(t0)), PLIBLInv(ags, alsf(t0), apcf(t0)), PLIBLInv(ags, alsf(t), ready), abs(h, gs.readers, gs.p), allReadsOK(ags0.h), allReadsOK(h), allWritesOK(ags0.h), allWritesOK(h), ctrok(gs.ctr, gs.writers), noPendingW(t, gs.p), notMember(t, gs.writers), notMember(t, gs.readers), 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)), ∀ l. ¬ FO(t) ∈ gs.p(l), ∀ 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(l) → ((ags0.h | l) | t0) | false = []) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((ags0.h | l0) | t0) | false = []) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → l1 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l1) → ((ags0.h | l1) | t0) | false = []) ∧ (pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((ags0.h | lsf(t0).l) | t0) | false = []) ∧ (pcf(t0) = W4 → ((ags0.h | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((ags0.h | lsf(t0).l) | t0) | false = [])
Used simplifier rules: ⊦ (vm = gs.vm ∧ pm = gs.pm) ∧ h = gs.h ↔ gs = mkPLIBgs(vm, pm, h); (elim) Used terms: ags, mem, mem0, h
| gs.mem = ∅ ⊕ (h | true), ags0.pm = ∅ ⊕ (ags0.h | true), lsf(t0).t = t0, lsf(t).t = t, alsf(t).t = t, ags0.vm = ∅ ⊕ ags0.h, ags = mkPLIBgs(mem, mem0, h), apcf(t) = ready, lsf0(t) = lsf(t), mem = gs.mem ⊕ gs.p, mem = ∅ ⊕ h, mem0 = gs.mem, pcf(t) = ready, pcf0(t) = ready, t0 = alsf(t0).t, t ≠ t0, (h | t) | false ≠ [], FLITPSCLInv(gs, lsf(t0), pcf(t0)), PLIBLInv(ags, alsf(t0), apcf(t0)), PLIBLInv(ags, alsf(t), ready), abs(h, gs.readers, gs.p), allReadsOK(ags0.h), allReadsOK(h), allWritesOK(ags0.h), allWritesOK(h), ctrok(gs.ctr, gs.writers), noPendingW(t, gs.p), notMember(t, gs.writers), notMember(t, gs.readers), 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)), ∀ l. ¬ FO(t) ∈ gs.p(l), ∀ 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(l) → ((ags0.h | l) | t0) | false = []) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((ags0.h | l0) | t0) | false = []) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → l1 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l1) → ((ags0.h | l1) | t0) | false = []) ∧ (pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((ags0.h | lsf(t0).l) | t0) | false = []) ∧ (pcf(t0) = W4 → ((ags0.h | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((ags0.h | lsf(t0).l) | t0) | false = []) |
gs.mem = ∅ ⊕ (h | true), ags0.pm = ∅ ⊕ (ags0.h | true), alsf(t).t = t, lsf(t).t = t, lsf(t0).t = t0, ags0.vm = ∅ ⊕ ags0.h, apcf(t) = ready, lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, t0 = alsf(t0).t, ∅ ⊕ h = gs.mem ⊕ gs.p, t ≠ t0, (h | t) | false ≠ [], FLITPSCLInv(gs, lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t), ready), PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t0), apcf(t0)), abs(h, gs.readers, gs.p), allReadsOK(h), allReadsOK(ags0.h), allWritesOK(h), allWritesOK(ags0.h), ctrok(gs.ctr, gs.writers), noPendingW(t, gs.p), notMember(t, gs.readers), notMember(t, gs.writers), 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, ∀ l. ¬ FO(t) ∈ gs.p(l), ∀ 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(l) → ((ags0.h | l) | t0) | false = []) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((ags0.h | l0) | t0) | false = []) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → l1 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l1) → ((ags0.h | l1) | t0) | false = []) ∧ (pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((ags0.h | lsf(t0).l) | t0) | false = []) ∧ (pcf(t0) = W4 → ((ags0.h | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((ags0.h | lsf(t0).l) | t0) | false = [])
| gs.mem = ∅ ⊕ (h | true), ags0.pm = ∅ ⊕ (ags0.h | true), alsf(t).t = t, lsf(t).t = t, lsf(t0).t = t0, ags0.vm = ∅ ⊕ ags0.h, apcf(t) = ready, lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, t0 = alsf(t0).t, ∅ ⊕ h = gs.mem ⊕ gs.p, t ≠ t0, (h | t) | false ≠ [], FLITPSCLInv(gs, lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t), ready), PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t0), apcf(t0)), abs(h, gs.readers, gs.p), allReadsOK(h), allReadsOK(ags0.h), allWritesOK(h), allWritesOK(ags0.h), ctrok(gs.ctr, gs.writers), noPendingW(t, gs.p), notMember(t, gs.readers), notMember(t, gs.writers), 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, ∀ l. ¬ FO(t) ∈ gs.p(l), ∀ 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(l) → ((ags0.h | l) | t0) | false = []) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((ags0.h | l0) | t0) | false = []) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → l1 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l1) → ((ags0.h | l1) | t0) | false = []) ∧ (pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((ags0.h | lsf(t0).l) | t0) | false = []) ∧ (pcf(t0) = W4 → ((ags0.h | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((ags0.h | lsf(t0).l) | t0) | false = []) |
gs.mem = ∅ ⊕ (h | true), lsf(t0).t = t0, lsf(t).t = t, alsf(t).t = t, ags0 = mkPLIBgs(mem, mem0, h0), apcf(t) = ready, lsf0(t) = lsf(t), mem = ∅ ⊕ h0, mem0 = ∅ ⊕ (h0 | true), pcf(t) = ready, pcf0(t) = ready, t0 = alsf(t0).t, ∅ ⊕ h = gs.mem ⊕ gs.p, t ≠ t0, (h | t) | false ≠ [], FLITPSCLInv(gs, lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t), ready), abs(h, gs.readers, gs.p), allReadsOK(h0), allReadsOK(h), allWritesOK(h0), allWritesOK(h), ctrok(gs.ctr, gs.writers), noPendingW(t, gs.p), notMember(t, gs.writers), notMember(t, gs.readers), 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)), ∀ l. ¬ FO(t) ∈ gs.p(l), ∀ 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(l) → ((h0 | l) | t0) | false = []) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h0 | l0) | t0) | false = []) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → l1 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l1) → ((h0 | l1) | t0) | false = []) ∧ (pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((h0 | lsf(t0).l) | t0) | false = []) ∧ (pcf(t0) = W4 → ((h0 | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h0 | lsf(t0).l) | t0) | false = [])
Used simplifier rules: ⊦ (vm = gs.vm ∧ pm = gs.pm) ∧ h = gs.h ↔ gs = mkPLIBgs(vm, pm, h); (elim) Used terms: ags0, mem, mem0, h0
| gs.mem = ∅ ⊕ (h | true), lsf(t0).t = t0, lsf(t).t = t, alsf(t).t = t, ags0 = mkPLIBgs(mem, mem0, h0), apcf(t) = ready, lsf0(t) = lsf(t), mem = ∅ ⊕ h0, mem0 = ∅ ⊕ (h0 | true), pcf(t) = ready, pcf0(t) = ready, t0 = alsf(t0).t, ∅ ⊕ h = gs.mem ⊕ gs.p, t ≠ t0, (h | t) | false ≠ [], FLITPSCLInv(gs, lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t), ready), abs(h, gs.readers, gs.p), allReadsOK(h0), allReadsOK(h), allWritesOK(h0), allWritesOK(h), ctrok(gs.ctr, gs.writers), noPendingW(t, gs.p), notMember(t, gs.writers), notMember(t, gs.readers), 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)), ∀ l. ¬ FO(t) ∈ gs.p(l), ∀ 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(l) → ((h0 | l) | t0) | false = []) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h0 | l0) | t0) | false = []) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → l1 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l1) → ((h0 | l1) | t0) | false = []) ∧ (pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((h0 | lsf(t0).l) | t0) | false = []) ∧ (pcf(t0) = W4 → ((h0 | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h0 | lsf(t0).l) | t0) | false = []) |
gs.mem = ∅ ⊕ (h | true), alsf(t).t = t, lsf(t).t = t, lsf(t0).t = t0, apcf(t) = ready, lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, t0 = alsf(t0).t, ∅ ⊕ h = gs.mem ⊕ gs.p, t ≠ t0, (h | t) | false ≠ [], FLITPSCLInv(gs, lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t), ready), PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t0), apcf(t0)), abs(h, gs.readers, gs.p), allReadsOK(h), allReadsOK(h0), allWritesOK(h), allWritesOK(h0), ctrok(gs.ctr, gs.writers), noPendingW(t, gs.p), notMember(t, gs.readers), notMember(t, gs.writers), 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, ∀ l. ¬ FO(t) ∈ gs.p(l), ∀ 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(l) → ((h0 | l) | t0) | false = []) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h0 | l0) | t0) | false = []) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → l1 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l1) → ((h0 | l1) | t0) | false = []) ∧ (pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((h0 | lsf(t0).l) | t0) | false = []) ∧ (pcf(t0) = W4 → ((h0 | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h0 | lsf(t0).l) | t0) | false = [])
| gs.mem = ∅ ⊕ (h | true), alsf(t).t = t, lsf(t).t = t, lsf(t0).t = t0, apcf(t) = ready, lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, t0 = alsf(t0).t, ∅ ⊕ h = gs.mem ⊕ gs.p, t ≠ t0, (h | t) | false ≠ [], FLITPSCLInv(gs, lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t), ready), PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t0), apcf(t0)), abs(h, gs.readers, gs.p), allReadsOK(h), allReadsOK(h0), allWritesOK(h), allWritesOK(h0), ctrok(gs.ctr, gs.writers), noPendingW(t, gs.p), notMember(t, gs.readers), notMember(t, gs.writers), 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, ∀ l. ¬ FO(t) ∈ gs.p(l), ∀ 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(l) → ((h0 | l) | t0) | false = []) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h0 | l0) | t0) | false = []) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → l1 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ gs.p(l1) → ((h0 | l1) | t0) | false = []) ∧ (pcf(t0) = R2 → gs.ctr(lsf(t0).l) = 0 → ((h0 | lsf(t0).l) | t0) | false = []) ∧ (pcf(t0) = W4 → ((h0 | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h0 | lsf(t0).l) | t0) | false = []) |
lsf(t0).t = t0, lsf(t).t = t, alsf(t).t = t, apcf(t) = ready, gs = mkFLITPSCgs(mem, p, ctr, writers, writers0), lsf0(t) = lsf(t), mem = ∅ ⊕ (h | true), pcf(t) = ready, pcf0(t) = ready, t0 = alsf(t0).t, ∅ ⊕ h = mem ⊕ p, t ≠ t0, (h | t) | false ≠ [], FLITPSCLInv(gs, lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, mem, h), alsf(t0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, mem, h), alsf(t), ready), abs(h, writers0, p), allReadsOK(h0), allReadsOK(h), allWritesOK(h0), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers), notMember(t, writers0), pendingOk(p), writersOk(p, 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) ∈ 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) ∈ p(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) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(gs, lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, mem, h), alsf(t1), apcf(t1)) ∧ labs(gs, lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, mem, h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l), ∀ 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) ∈ p(l) → ((h0 | l) | t0) | false = []) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h0 | l0) | t0) | false = []) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → l1 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ p(l1) → ((h0 | l1) | t0) | false = []) ∧ (pcf(t0) = R2 → ctr(lsf(t0).l) = 0 → ((h0 | lsf(t0).l) | t0) | false = []) ∧ (pcf(t0) = W4 → ((h0 | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h0 | lsf(t0).l) | 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, mem, ctr, writers, writers0, p
| lsf(t0).t = t0, lsf(t).t = t, alsf(t).t = t, apcf(t) = ready, gs = mkFLITPSCgs(mem, p, ctr, writers, writers0), lsf0(t) = lsf(t), mem = ∅ ⊕ (h | true), pcf(t) = ready, pcf0(t) = ready, t0 = alsf(t0).t, ∅ ⊕ h = mem ⊕ p, t ≠ t0, (h | t) | false ≠ [], FLITPSCLInv(gs, lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, mem, h), alsf(t0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, mem, h), alsf(t), ready), abs(h, writers0, p), allReadsOK(h0), allReadsOK(h), allWritesOK(h0), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers), notMember(t, writers0), pendingOk(p), writersOk(p, 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) ∈ 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) ∈ p(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) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(gs, lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, mem, h), alsf(t1), apcf(t1)) ∧ labs(gs, lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, mem, h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l), ∀ 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) ∈ p(l) → ((h0 | l) | t0) | false = []) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h0 | l0) | t0) | false = []) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → l1 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ p(l1) → ((h0 | l1) | t0) | false = []) ∧ (pcf(t0) = R2 → ctr(lsf(t0).l) = 0 → ((h0 | lsf(t0).l) | t0) | false = []) ∧ (pcf(t0) = W4 → ((h0 | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h0 | lsf(t0).l) | t0) | false = []) |
alsf(t).t = t, lsf(t).t = t, lsf(t0).t = t0, apcf(t) = ready, lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, t0 = alsf(t0).t, ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t0, (h | t) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t), ready), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)), abs(h, writers0, p), allReadsOK(h), allReadsOK(h0), allWritesOK(h), allWritesOK(h0), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers0), notMember(t, writers), pendingOk(p), writersOk(p, 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) ∈ 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) ∈ 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, ∀ l. ¬ FO(t) ∈ p(l), ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ 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) ∈ p(l) → ((h0 | l) | t0) | false = []) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h0 | l0) | t0) | false = []) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → l1 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ p(l1) → ((h0 | l1) | t0) | false = []) ∧ (pcf(t0) = R2 → ctr(lsf(t0).l) = 0 → ((h0 | lsf(t0).l) | t0) | false = []) ∧ (pcf(t0) = W4 → ((h0 | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h0 | lsf(t0).l) | t0) | false = [])
| alsf(t).t = t, lsf(t).t = t, lsf(t0).t = t0, apcf(t) = ready, lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, t0 = alsf(t0).t, ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t0, (h | t) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t), ready), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)), abs(h, writers0, p), allReadsOK(h), allReadsOK(h0), allWritesOK(h), allWritesOK(h0), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers0), notMember(t, writers), pendingOk(p), writersOk(p, 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) ∈ 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) ∈ 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, ∀ l. ¬ FO(t) ∈ p(l), ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ 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) ∈ p(l) → ((h0 | l) | t0) | false = []) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h0 | l0) | t0) | false = []) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → l1 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ p(l1) → ((h0 | l1) | t0) | false = []) ∧ (pcf(t0) = R2 → ctr(lsf(t0).l) = 0 → ((h0 | lsf(t0).l) | t0) | false = []) ∧ (pcf(t0) = W4 → ((h0 | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h0 | lsf(t0).l) | t0) | false = []) |
lsf(t0).t = t0, lsf(t).t = t, alsf(t) = mkPLIBls(t2, il, iv, ov), apcf(t) = ready, lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, t0 = alsf(t0).t, t2 = t, ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t0, (h | t) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t), ready), abs(h, writers0, p), allReadsOK(h0), allReadsOK(h), allWritesOK(h0), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers), notMember(t, writers0), pendingOk(p), writersOk(p, 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) ∈ 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) ∈ p(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) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l), ∀ 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) ∈ p(l) → ((h0 | l) | t0) | false = []) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h0 | l0) | t0) | false = []) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → l1 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ p(l1) → ((h0 | l1) | t0) | false = []) ∧ (pcf(t0) = R2 → ctr(lsf(t0).l) = 0 → ((h0 | lsf(t0).l) | t0) | false = []) ∧ (pcf(t0) = W4 → ((h0 | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h0 | lsf(t0).l) | 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(t0).t = t0, lsf(t).t = t, alsf(t) = mkPLIBls(t2, il, iv, ov), apcf(t) = ready, lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, t0 = alsf(t0).t, t2 = t, ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t0, (h | t) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t), ready), abs(h, writers0, p), allReadsOK(h0), allReadsOK(h), allWritesOK(h0), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers), notMember(t, writers0), pendingOk(p), writersOk(p, 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) ∈ 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) ∈ p(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) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l), ∀ 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) ∈ p(l) → ((h0 | l) | t0) | false = []) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h0 | l0) | t0) | false = []) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → l1 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ p(l1) → ((h0 | l1) | t0) | false = []) ∧ (pcf(t0) = R2 → ctr(lsf(t0).l) = 0 → ((h0 | lsf(t0).l) | t0) | false = []) ∧ (pcf(t0) = W4 → ((h0 | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h0 | lsf(t0).l) | t0) | false = []) |
lsf(t).t = t, lsf(t0).t = t0, alsf(t) = mkPLIBls(t, il, iv, ov), apcf(t) = ready, lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, t0 = alsf(t0).t, ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t0, (h | t) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)), abs(h, writers0, p), allReadsOK(h), allReadsOK(h0), allWritesOK(h), allWritesOK(h0), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers0), notMember(t, writers), pendingOk(p), writersOk(p, 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) ∈ 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) ∈ 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, ∀ l. ¬ FO(t) ∈ p(l), ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ 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) ∈ p(l) → ((h0 | l) | t0) | false = []) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h0 | l0) | t0) | false = []) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → l1 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ p(l1) → ((h0 | l1) | t0) | false = []) ∧ (pcf(t0) = R2 → ctr(lsf(t0).l) = 0 → ((h0 | lsf(t0).l) | t0) | false = []) ∧ (pcf(t0) = W4 → ((h0 | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h0 | lsf(t0).l) | t0) | false = [])
| lsf(t).t = t, lsf(t0).t = t0, alsf(t) = mkPLIBls(t, il, iv, ov), apcf(t) = ready, lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, t0 = alsf(t0).t, ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t0, (h | t) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)), abs(h, writers0, p), allReadsOK(h), allReadsOK(h0), allWritesOK(h), allWritesOK(h0), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers0), notMember(t, writers), pendingOk(p), writersOk(p, 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) ∈ 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) ∈ 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, ∀ l. ¬ FO(t) ∈ p(l), ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ 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) ∈ p(l) → ((h0 | l) | t0) | false = []) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h0 | l0) | t0) | false = []) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → l1 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ p(l1) → ((h0 | l1) | t0) | false = []) ∧ (pcf(t0) = R2 → ctr(lsf(t0).l) = 0 → ((h0 | lsf(t0).l) | t0) | false = []) ∧ (pcf(t0) = W4 → ((h0 | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h0 | lsf(t0).l) | t0) | false = []) |
lsf(t0).t = t0, lsf(t).t = t, alsf(t) = mkPLIBls(t, il, iv, ov), alsf(t0) = mkPLIBls(t2, il0, iv0, ov0), apcf(t) = ready, lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, t0 = t2, ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t0, (h | t) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), abs(h, writers0, p), allReadsOK(h0), allReadsOK(h), allWritesOK(h0), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers), notMember(t, writers0), pendingOk(p), writersOk(p, 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 = il0, 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 = il0 ∧ 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) ∈ 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) ∈ p(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) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l), ∀ 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) ∈ p(l) → ((h0 | l) | t0) | false = []) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h0 | l0) | t0) | false = []) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → l1 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ p(l1) → ((h0 | l1) | t0) | false = []) ∧ (pcf(t0) = R2 → ctr(lsf(t0).l) = 0 → ((h0 | lsf(t0).l) | t0) | false = []) ∧ (pcf(t0) = W4 → ((h0 | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h0 | lsf(t0).l) | 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, il0, ov0
| lsf(t0).t = t0, lsf(t).t = t, alsf(t) = mkPLIBls(t, il, iv, ov), alsf(t0) = mkPLIBls(t2, il0, iv0, ov0), apcf(t) = ready, lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, t0 = t2, ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t0, (h | t) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), abs(h, writers0, p), allReadsOK(h0), allReadsOK(h), allWritesOK(h0), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers), notMember(t, writers0), pendingOk(p), writersOk(p, 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 = il0, 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 = il0 ∧ 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) ∈ 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) ∈ p(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) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t0 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l), ∀ 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) ∈ p(l) → ((h0 | l) | t0) | false = []) ∧ (pcf(t0) = W2 ∨ pcf(t0) = W3 ∨ pcf(t0) = W6 ∨ pcf(t0) = W7 → ((h0 | l0) | t0) | false = []) ∧ (pcf(t0) = R2 ∨ pcf(t0) = R3 → l1 ≠ lsf(t0).l ∧ ¬ FO(t0) ∈ p(l1) → ((h0 | l1) | t0) | false = []) ∧ (pcf(t0) = R2 → ctr(lsf(t0).l) = 0 → ((h0 | lsf(t0).l) | t0) | false = []) ∧ (pcf(t0) = W4 → ((h0 | lsf(t0).l) | t0) | false = (W(t0, lsf(t0).l, lsf(t0).v), false) ' ∨ ((h0 | lsf(t0).l) | t0) | false = []) |
lsf(t).t = t, lsf(t2).t = t2, alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), alsf(t) = mkPLIBls(t, il, iv, ov), apcf(t) = ready, lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t2, (h | t) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t2), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), abs(h, writers0, p), allReadsOK(h), allReadsOK(h0), allWritesOK(h), allWritesOK(h0), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers0), notMember(t, writers), pendingOk(p), writersOk(p, writers), pcf(t2) = W4 → ((h | lsf(t2).l) | t2) | false = (W(t2, lsf(t2).l, lsf(t2).v), false) ' ∨ ((h | lsf(t2).l) | t2) | false = [], pcf(t2) = R2 → ctr(lsf(t2).l) = 0 → ((h | lsf(t2).l) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ lsf(t2).l ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → lsf(t2).l = il0 ∧ lsf(t2).v = iv0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → lsf(t2).v = ov0, pcf(t2) = R1 → lsf(t2).l = il0, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = idle → apcf(t2) = idle, ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l), ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [] ⊦ (pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ p(l) → ((h0 | l) | t2) | false = []) ∧ (pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h0 | l0) | t2) | false = []) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 → l1 ≠ lsf(t2).l ∧ ¬ FO(t2) ∈ p(l1) → ((h0 | l1) | t2) | false = []) ∧ (pcf(t2) = R2 → ctr(lsf(t2).l) = 0 → ((h0 | lsf(t2).l) | t2) | false = []) ∧ (pcf(t2) = W4 → ((h0 | lsf(t2).l) | t2) | false = (W(t2, lsf(t2).l, lsf(t2).v), false) ' ∨ ((h0 | lsf(t2).l) | t2) | false = [])
| lsf(t).t = t, lsf(t2).t = t2, alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), alsf(t) = mkPLIBls(t, il, iv, ov), apcf(t) = ready, lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t2, (h | t) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t2), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), abs(h, writers0, p), allReadsOK(h), allReadsOK(h0), allWritesOK(h), allWritesOK(h0), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers0), notMember(t, writers), pendingOk(p), writersOk(p, writers), pcf(t2) = W4 → ((h | lsf(t2).l) | t2) | false = (W(t2, lsf(t2).l, lsf(t2).v), false) ' ∨ ((h | lsf(t2).l) | t2) | false = [], pcf(t2) = R2 → ctr(lsf(t2).l) = 0 → ((h | lsf(t2).l) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ lsf(t2).l ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → lsf(t2).l = il0 ∧ lsf(t2).v = iv0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → lsf(t2).v = ov0, pcf(t2) = R1 → lsf(t2).l = il0, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = idle → apcf(t2) = idle, ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l), ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [] ⊦ (pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ p(l) → ((h0 | l) | t2) | false = []) ∧ (pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h0 | l0) | t2) | false = []) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 → l1 ≠ lsf(t2).l ∧ ¬ FO(t2) ∈ p(l1) → ((h0 | l1) | t2) | false = []) ∧ (pcf(t2) = R2 → ctr(lsf(t2).l) = 0 → ((h0 | lsf(t2).l) | t2) | false = []) ∧ (pcf(t2) = W4 → ((h0 | lsf(t2).l) | t2) | false = (W(t2, lsf(t2).l, lsf(t2).v), false) ' ∨ ((h0 | lsf(t2).l) | t2) | false = []) |
lsf(t2).t = t2, alsf(t) = mkPLIBls(t, il, iv, ov), alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), apcf(t) = ready, lsf(t) = mkFLITPSCls(t0, l2, v), lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, t0 = t, ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t2, (h | t) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t2), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), abs(h, writers0, p), allReadsOK(h0), allReadsOK(h), allWritesOK(h0), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers), notMember(t, writers0), pendingOk(p), writersOk(p, writers), pcf(t2) = idle → apcf(t2) = idle, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = R1 → lsf(t2).l = il0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → lsf(t2).v = ov0, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → lsf(t2).l = il0 ∧ lsf(t2).v = iv0, pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ lsf(t2).l ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = R2 → ctr(lsf(t2).l) = 0 → ((h | lsf(t2).l) | t2) | false = [], pcf(t2) = W4 → ((h | lsf(t2).l) | t2) | false = (W(t2, lsf(t2).l, lsf(t2).v), false) ' ∨ ((h | lsf(t2).l) | t2) | false = [], ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1 ⊦ (pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ p(l) → ((h0 | l) | t2) | false = []) ∧ (pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h0 | l0) | t2) | false = []) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 → l1 ≠ lsf(t2).l ∧ ¬ FO(t2) ∈ p(l1) → ((h0 | l1) | t2) | false = []) ∧ (pcf(t2) = R2 → ctr(lsf(t2).l) = 0 → ((h0 | lsf(t2).l) | t2) | false = []) ∧ (pcf(t2) = W4 → ((h0 | lsf(t2).l) | t2) | false = (W(t2, lsf(t2).l, lsf(t2).v), false) ' ∨ ((h0 | lsf(t2).l) | t2) | false = [])
Used simplifier rules: ⊦ (t = ls.t ∧ l = ls.l) ∧ v = ls.v ↔ ls = mkFLITPSCls(t, l, v); (elim) Used terms: lsf(t), t0, l2, v
| lsf(t2).t = t2, alsf(t) = mkPLIBls(t, il, iv, ov), alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), apcf(t) = ready, lsf(t) = mkFLITPSCls(t0, l2, v), lsf0(t) = lsf(t), pcf(t) = ready, pcf0(t) = ready, t0 = t, ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t2, (h | t) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t2), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), abs(h, writers0, p), allReadsOK(h0), allReadsOK(h), allWritesOK(h0), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers), notMember(t, writers0), pendingOk(p), writersOk(p, writers), pcf(t2) = idle → apcf(t2) = idle, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = R1 → lsf(t2).l = il0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → lsf(t2).v = ov0, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → lsf(t2).l = il0 ∧ lsf(t2).v = iv0, pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ lsf(t2).l ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = R2 → ctr(lsf(t2).l) = 0 → ((h | lsf(t2).l) | t2) | false = [], pcf(t2) = W4 → ((h | lsf(t2).l) | t2) | false = (W(t2, lsf(t2).l, lsf(t2).v), false) ' ∨ ((h | lsf(t2).l) | t2) | false = [], ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1 ⊦ (pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ p(l) → ((h0 | l) | t2) | false = []) ∧ (pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h0 | l0) | t2) | false = []) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 → l1 ≠ lsf(t2).l ∧ ¬ FO(t2) ∈ p(l1) → ((h0 | l1) | t2) | false = []) ∧ (pcf(t2) = R2 → ctr(lsf(t2).l) = 0 → ((h0 | lsf(t2).l) | t2) | false = []) ∧ (pcf(t2) = W4 → ((h0 | lsf(t2).l) | t2) | false = (W(t2, lsf(t2).l, lsf(t2).v), false) ' ∨ ((h0 | lsf(t2).l) | t2) | false = []) |
lsf(t2).t = t2, alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), alsf(t) = mkPLIBls(t, il, iv, ov), apcf(t) = ready, lsf(t) = mkFLITPSCls(t, l2, v), lsf0(t) = mkFLITPSCls(t, l2, v), pcf(t) = ready, pcf0(t) = ready, ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t2, (h | t) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t2), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), abs(h, writers0, p), allReadsOK(h), allReadsOK(h0), allWritesOK(h), allWritesOK(h0), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers0), notMember(t, writers), pendingOk(p), writersOk(p, writers), pcf(t2) = W4 → ((h | lsf(t2).l) | t2) | false = (W(t2, lsf(t2).l, lsf(t2).v), false) ' ∨ ((h | lsf(t2).l) | t2) | false = [], pcf(t2) = R2 → ctr(lsf(t2).l) = 0 → ((h | lsf(t2).l) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ lsf(t2).l ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → lsf(t2).l = il0 ∧ lsf(t2).v = iv0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → lsf(t2).v = ov0, pcf(t2) = R1 → lsf(t2).l = il0, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = idle → apcf(t2) = idle, ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l), ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [] ⊦ (pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ p(l) → ((h0 | l) | t2) | false = []) ∧ (pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h0 | l0) | t2) | false = []) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 → l1 ≠ lsf(t2).l ∧ ¬ FO(t2) ∈ p(l1) → ((h0 | l1) | t2) | false = []) ∧ (pcf(t2) = R2 → ctr(lsf(t2).l) = 0 → ((h0 | lsf(t2).l) | t2) | false = []) ∧ (pcf(t2) = W4 → ((h0 | lsf(t2).l) | t2) | false = (W(t2, lsf(t2).l, lsf(t2).v), false) ' ∨ ((h0 | lsf(t2).l) | t2) | false = [])
| lsf(t2).t = t2, alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), alsf(t) = mkPLIBls(t, il, iv, ov), apcf(t) = ready, lsf(t) = mkFLITPSCls(t, l2, v), lsf0(t) = mkFLITPSCls(t, l2, v), pcf(t) = ready, pcf0(t) = ready, ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t2, (h | t) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t2), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), abs(h, writers0, p), allReadsOK(h), allReadsOK(h0), allWritesOK(h), allWritesOK(h0), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers0), notMember(t, writers), pendingOk(p), writersOk(p, writers), pcf(t2) = W4 → ((h | lsf(t2).l) | t2) | false = (W(t2, lsf(t2).l, lsf(t2).v), false) ' ∨ ((h | lsf(t2).l) | t2) | false = [], pcf(t2) = R2 → ctr(lsf(t2).l) = 0 → ((h | lsf(t2).l) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ lsf(t2).l ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → lsf(t2).l = il0 ∧ lsf(t2).v = iv0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → lsf(t2).v = ov0, pcf(t2) = R1 → lsf(t2).l = il0, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = idle → apcf(t2) = idle, ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l), ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [] ⊦ (pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ p(l) → ((h0 | l) | t2) | false = []) ∧ (pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h0 | l0) | t2) | false = []) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 → l1 ≠ lsf(t2).l ∧ ¬ FO(t2) ∈ p(l1) → ((h0 | l1) | t2) | false = []) ∧ (pcf(t2) = R2 → ctr(lsf(t2).l) = 0 → ((h0 | lsf(t2).l) | t2) | false = []) ∧ (pcf(t2) = W4 → ((h0 | lsf(t2).l) | t2) | false = (W(t2, lsf(t2).l, lsf(t2).v), false) ' ∨ ((h0 | lsf(t2).l) | t2) | false = []) |
alsf(t) = mkPLIBls(t, il, iv, ov), alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), apcf(t) = ready, lsf(t) = mkFLITPSCls(t, l2, v), lsf(t2) = mkFLITPSCls(t0, l3, v0), lsf0(t) = mkFLITPSCls(t, l2, v), pcf(t) = ready, pcf0(t) = ready, t0 = t2, ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t2, (h | t) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t2), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), abs(h, writers0, p), allReadsOK(h0), allReadsOK(h), allWritesOK(h0), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers), notMember(t, writers0), pendingOk(p), writersOk(p, writers), pcf(t2) = idle → apcf(t2) = idle, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = R1 → l3 = il0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov0, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il0 ∧ v0 = iv0, pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ l3 ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = R2 → ctr(l3) = 0 → ((h | l3) | t2) | false = [], pcf(t2) = W4 → ((h | l3) | t2) | false = (W(t2, l3, v0), false) ' ∨ ((h | l3) | t2) | false = [], ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1 ⊦ (pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ p(l) → ((h0 | l) | t2) | false = []) ∧ (pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h0 | l0) | t2) | false = []) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 → l1 ≠ l3 ∧ ¬ FO(t2) ∈ p(l1) → ((h0 | l1) | t2) | false = []) ∧ (pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = []) ∧ (pcf(t2) = W4 → ((h0 | l3) | t2) | false = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [])
Used simplifier rules: ⊦ (t = ls.t ∧ l = ls.l) ∧ v = ls.v ↔ ls = mkFLITPSCls(t, l, v); (elim) Used terms: lsf(t2), t0, l3, v0
| alsf(t) = mkPLIBls(t, il, iv, ov), alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), apcf(t) = ready, lsf(t) = mkFLITPSCls(t, l2, v), lsf(t2) = mkFLITPSCls(t0, l3, v0), lsf0(t) = mkFLITPSCls(t, l2, v), pcf(t) = ready, pcf0(t) = ready, t0 = t2, ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t2, (h | t) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t2), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), abs(h, writers0, p), allReadsOK(h0), allReadsOK(h), allWritesOK(h0), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers), notMember(t, writers0), pendingOk(p), writersOk(p, writers), pcf(t2) = idle → apcf(t2) = idle, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = R1 → l3 = il0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov0, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il0 ∧ v0 = iv0, pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ l3 ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = R2 → ctr(l3) = 0 → ((h | l3) | t2) | false = [], pcf(t2) = W4 → ((h | l3) | t2) | false = (W(t2, l3, v0), false) ' ∨ ((h | l3) | t2) | false = [], ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1 ⊦ (pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ p(l) → ((h0 | l) | t2) | false = []) ∧ (pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h0 | l0) | t2) | false = []) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 → l1 ≠ l3 ∧ ¬ FO(t2) ∈ p(l1) → ((h0 | l1) | t2) | false = []) ∧ (pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = []) ∧ (pcf(t2) = W4 → ((h0 | l3) | t2) | false = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = []) |
alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), alsf(t) = mkPLIBls(t, il, iv, ov), apcf(t) = ready, lsf(t2) = mkFLITPSCls(t2, l3, v0), lsf(t) = mkFLITPSCls(t, l2, v), lsf0(t) = mkFLITPSCls(t, l2, v), pcf(t) = ready, pcf0(t) = ready, ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t2, (h | t) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), abs(h, writers0, p), allReadsOK(h), allReadsOK(h0), allWritesOK(h), allWritesOK(h0), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers0), notMember(t, writers), pendingOk(p), writersOk(p, writers), pcf(t2) = W4 → ((h | l3) | t2) | false = (W(t2, l3, v0), false) ' ∨ ((h | l3) | t2) | false = [], pcf(t2) = R2 → ctr(l3) = 0 → ((h | l3) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ l3 ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il0 ∧ v0 = iv0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov0, pcf(t2) = R1 → l3 = il0, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = idle → apcf(t2) = idle, ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l), ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [] ⊦ (pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ p(l) → ((h0 | l) | t2) | false = []) ∧ (pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h0 | l0) | t2) | false = []) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 → l1 ≠ l3 ∧ ¬ FO(t2) ∈ p(l1) → ((h0 | l1) | t2) | false = []) ∧ (pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = []) ∧ (pcf(t2) = W4 → ((h0 | l3) | t2) | false = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [])
| alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), alsf(t) = mkPLIBls(t, il, iv, ov), apcf(t) = ready, lsf(t2) = mkFLITPSCls(t2, l3, v0), lsf(t) = mkFLITPSCls(t, l2, v), lsf0(t) = mkFLITPSCls(t, l2, v), pcf(t) = ready, pcf0(t) = ready, ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t2, (h | t) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), abs(h, writers0, p), allReadsOK(h), allReadsOK(h0), allWritesOK(h), allWritesOK(h0), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers0), notMember(t, writers), pendingOk(p), writersOk(p, writers), pcf(t2) = W4 → ((h | l3) | t2) | false = (W(t2, l3, v0), false) ' ∨ ((h | l3) | t2) | false = [], pcf(t2) = R2 → ctr(l3) = 0 → ((h | l3) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ l3 ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il0 ∧ v0 = iv0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov0, pcf(t2) = R1 → l3 = il0, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = idle → apcf(t2) = idle, ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l), ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [] ⊦ (pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ p(l) → ((h0 | l) | t2) | false = []) ∧ (pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h0 | l0) | t2) | false = []) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 → l1 ≠ l3 ∧ ¬ FO(t2) ∈ p(l1) → ((h0 | l1) | t2) | false = []) ∧ (pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = []) ∧ (pcf(t2) = W4 → ((h0 | l3) | t2) | false = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = []) |
⊦ (h | t) | false = [] ↔ (∀ l. ((h | l) | t) | false = [])
alsf(t) = mkPLIBls(t, il, iv, ov), alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), apcf(t) = ready, lsf(t) = mkFLITPSCls(t, l2, v), lsf(t2) = mkFLITPSCls(t2, l3, v0), lsf0(t) = mkFLITPSCls(t, l2, v), pcf(t) = ready, pcf0(t) = ready, ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t2, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), abs(h, writers0, p), allReadsOK(h0), allReadsOK(h), allWritesOK(h0), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers), notMember(t, writers0), pendingOk(p), writersOk(p, writers), pcf(t2) = idle → apcf(t2) = idle, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = R1 → l3 = il0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov0, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il0 ∧ v0 = iv0, pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ l3 ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = R2 → ctr(l3) = 0 → ((h | l3) | t2) | false = [], pcf(t2) = W4 → ((h | l3) | t2) | false = (W(t2, l3, v0), false) ' ∨ ((h | l3) | t2) | false = [], ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, ∃ l. ((h | l) | t) | false ≠ [] ⊦ (pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ p(l) → ((h0 | l) | t2) | false = []) ∧ (pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h0 | l0) | t2) | false = []) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 → l1 ≠ l3 ∧ ¬ FO(t2) ∈ p(l1) → ((h0 | l1) | t2) | false = []) ∧ (pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = []) ∧ (pcf(t2) = W4 → ((h0 | l3) | t2) | false = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [])
Used terms: h, t
| ⊦ (h | t) | false = [] ↔ (∀ l. ((h | l) | t) | false = []) |
| alsf(t) = mkPLIBls(t, il, iv, ov), alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), apcf(t) = ready, lsf(t) = mkFLITPSCls(t, l2, v), lsf(t2) = mkFLITPSCls(t2, l3, v0), lsf0(t) = mkFLITPSCls(t, l2, v), pcf(t) = ready, pcf0(t) = ready, ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t2, FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), abs(h, writers0, p), allReadsOK(h0), allReadsOK(h), allWritesOK(h0), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers), notMember(t, writers0), pendingOk(p), writersOk(p, writers), pcf(t2) = idle → apcf(t2) = idle, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = R1 → l3 = il0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov0, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il0 ∧ v0 = iv0, pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ l3 ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = R2 → ctr(l3) = 0 → ((h | l3) | t2) | false = [], pcf(t2) = W4 → ((h | l3) | t2) | false = (W(t2, l3, v0), false) ' ∨ ((h | l3) | t2) | false = [], ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1, ∃ l. ((h | l) | t) | false ≠ [] ⊦ (pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ p(l) → ((h0 | l) | t2) | false = []) ∧ (pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h0 | l0) | t2) | false = []) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 → l1 ≠ l3 ∧ ¬ FO(t2) ∈ p(l1) → ((h0 | l1) | t2) | false = []) ∧ (pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = []) ∧ (pcf(t2) = W4 → ((h0 | l3) | t2) | false = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = []) |
alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), alsf(t) = mkPLIBls(t, il, iv, ov), apcf(t) = ready, lsf(t2) = mkFLITPSCls(t2, l3, v0), lsf(t) = mkFLITPSCls(t, l2, v), lsf0(t) = mkFLITPSCls(t, l2, v), pcf(t) = ready, pcf0(t) = ready, ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t2, ((h | l4) | t) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), abs(h, writers0, p), allReadsOK(h), allReadsOK(h0), allWritesOK(h), allWritesOK(h0), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers0), notMember(t, writers), pendingOk(p), writersOk(p, writers), pcf(t2) = W4 → ((h | l3) | t2) | false = (W(t2, l3, v0), false) ' ∨ ((h | l3) | t2) | false = [], pcf(t2) = R2 → ctr(l3) = 0 → ((h | l3) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ l3 ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il0 ∧ v0 = iv0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov0, pcf(t2) = R1 → l3 = il0, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = idle → apcf(t2) = idle, ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l), ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [] ⊦ (pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ p(l) → ((h0 | l) | t2) | false = []) ∧ (pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h0 | l0) | t2) | false = []) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 → l1 ≠ l3 ∧ ¬ FO(t2) ∈ p(l1) → ((h0 | l1) | t2) | false = []) ∧ (pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = []) ∧ (pcf(t2) = W4 → ((h0 | l3) | t2) | false = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [])
| alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), alsf(t) = mkPLIBls(t, il, iv, ov), apcf(t) = ready, lsf(t2) = mkFLITPSCls(t2, l3, v0), lsf(t) = mkFLITPSCls(t, l2, v), lsf0(t) = mkFLITPSCls(t, l2, v), pcf(t) = ready, pcf0(t) = ready, ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t2, ((h | l4) | t) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), abs(h, writers0, p), allReadsOK(h), allReadsOK(h0), allWritesOK(h), allWritesOK(h0), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers0), notMember(t, writers), pendingOk(p), writersOk(p, writers), pcf(t2) = W4 → ((h | l3) | t2) | false = (W(t2, l3, v0), false) ' ∨ ((h | l3) | t2) | false = [], pcf(t2) = R2 → ctr(l3) = 0 → ((h | l3) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ l3 ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il0 ∧ v0 = iv0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov0, pcf(t2) = R1 → l3 = il0, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = idle → apcf(t2) = idle, ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l), ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l) → ((h | l) | t) | false = [] ⊦ (pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ p(l) → ((h0 | l) | t2) | false = []) ∧ (pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h0 | l0) | t2) | false = []) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 → l1 ≠ l3 ∧ ¬ FO(t2) ∈ p(l1) → ((h0 | l1) | t2) | false = []) ∧ (pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = []) ∧ (pcf(t2) = W4 → ((h0 | l3) | t2) | false = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = []) |
alsf(t) = mkPLIBls(t, il, iv, ov), alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), apcf(t) = ready, lsf(t) = mkFLITPSCls(t, l2, v), lsf(t2) = mkFLITPSCls(t2, l3, v0), lsf0(t) = mkFLITPSCls(t, l2, v), pcf(t) = ready, pcf0(t) = ready, ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t2, ((h | l4) | t) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), abs(h, writers0, p), allReadsOK(h0), allReadsOK(h), allWritesOK(h0), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers), notMember(t, writers0), pendingOk(p), writersOk(p, writers), pcf(t2) = idle → apcf(t2) = idle, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = R1 → l3 = il0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov0, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il0 ∧ v0 = iv0, pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ l3 ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = R2 → ctr(l3) = 0 → ((h | l3) | t2) | false = [], pcf(t2) = W4 → ((h | l3) | t2) | false = (W(t2, l3, v0), false) ' ∨ ((h | l3) | t2) | false = [], ¬ FO(t) ∈ p(l4) → ((h | l4) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1 ⊦ (pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ p(l) → ((h0 | l) | t2) | false = []) ∧ (pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h0 | l0) | t2) | false = []) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 → l1 ≠ l3 ∧ ¬ FO(t2) ∈ p(l1) → ((h0 | l1) | t2) | false = []) ∧ (pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = []) ∧ (pcf(t2) = W4 → ((h0 | l3) | t2) | false = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [])
Used terms: l4
| alsf(t) = mkPLIBls(t, il, iv, ov), alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), apcf(t) = ready, lsf(t) = mkFLITPSCls(t, l2, v), lsf(t2) = mkFLITPSCls(t2, l3, v0), lsf0(t) = mkFLITPSCls(t, l2, v), pcf(t) = ready, pcf0(t) = ready, ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t2, ((h | l4) | t) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), abs(h, writers0, p), allReadsOK(h0), allReadsOK(h), allWritesOK(h0), allWritesOK(h), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers), notMember(t, writers0), pendingOk(p), writersOk(p, writers), pcf(t2) = idle → apcf(t2) = idle, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = R1 → l3 = il0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov0, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il0 ∧ v0 = iv0, pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ l3 ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = R2 → ctr(l3) = 0 → ((h | l3) | t2) | false = [], pcf(t2) = W4 → ((h | l3) | t2) | false = (W(t2, l3, v0), false) ' ∨ ((h | l3) | t2) | false = [], ¬ FO(t) ∈ p(l4) → ((h | l4) | t) | false = [], ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)), ∀ l. ¬ FO(t) ∈ p(l), ∀ t1. alsf(t1).t = t1, ∀ t1. lsf(t1).t = t1 ⊦ (pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ p(l) → ((h0 | l) | t2) | false = []) ∧ (pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h0 | l0) | t2) | false = []) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 → l1 ≠ l3 ∧ ¬ FO(t2) ∈ p(l1) → ((h0 | l1) | t2) | false = []) ∧ (pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = []) ∧ (pcf(t2) = W4 → ((h0 | l3) | t2) | false = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = []) |
alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), alsf(t) = mkPLIBls(t, il, iv, ov), apcf(t) = ready, lsf(t2) = mkFLITPSCls(t2, l3, v0), lsf(t) = mkFLITPSCls(t, l2, v), lsf0(t) = mkFLITPSCls(t, l2, v), pcf(t) = ready, pcf0(t) = ready, ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t2, ((h | l4) | t) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), abs(h, writers0, p), allReadsOK(h), allReadsOK(h0), allWritesOK(h), allWritesOK(h0), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers0), notMember(t, writers), pendingOk(p), writersOk(p, writers), FO(t) ∈ p(l4), pcf(t2) = W4 → ((h | l3) | t2) | false = (W(t2, l3, v0), false) ' ∨ ((h | l3) | t2) | false = [], pcf(t2) = R2 → ctr(l3) = 0 → ((h | l3) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ l3 ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il0 ∧ v0 = iv0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov0, pcf(t2) = R1 → l3 = il0, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = idle → apcf(t2) = idle, ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l), ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ⊦ (pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ p(l) → ((h0 | l) | t2) | false = []) ∧ (pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h0 | l0) | t2) | false = []) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 → l1 ≠ l3 ∧ ¬ FO(t2) ∈ p(l1) → ((h0 | l1) | t2) | false = []) ∧ (pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = []) ∧ (pcf(t2) = W4 → ((h0 | l3) | t2) | false = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [])
| alsf(t2) = mkPLIBls(t2, il0, iv0, ov0), alsf(t) = mkPLIBls(t, il, iv, ov), apcf(t) = ready, lsf(t2) = mkFLITPSCls(t2, l3, v0), lsf(t) = mkFLITPSCls(t, l2, v), lsf0(t) = mkFLITPSCls(t, l2, v), pcf(t) = ready, pcf0(t) = ready, ∅ ⊕ h = (∅ ⊕ (h | true)) ⊕ p, t ≠ t2, ((h | l4) | t) | false ≠ [], FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, il, iv, ov), ready), PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t2, il0, iv0, ov0), apcf(t2)), abs(h, writers0, p), allReadsOK(h), allReadsOK(h0), allWritesOK(h), allWritesOK(h0), ctrok(ctr, writers), noPendingW(t, p), notMember(t, writers0), notMember(t, writers), pendingOk(p), writersOk(p, writers), FO(t) ∈ p(l4), pcf(t2) = W4 → ((h | l3) | t2) | false = (W(t2, l3, v0), false) ' ∨ ((h | l3) | t2) | false = [], pcf(t2) = R2 → ctr(l3) = 0 → ((h | l3) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l0. l0 ≠ l3 ∧ ¬ FO(t2) ∈ p(l0) → ((h | l0) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l. ((h | l) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l. ¬ FO(t2) ∈ p(l) → ((h | l) | t2) | false = []), pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il0 ∧ v0 = iv0, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov0, pcf(t2) = R1 → l3 = il0, pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → apcf(t2) = resWrite, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 → apcf(t2) = invWrite, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → apcf(t2) = resRead, pcf(t2) = R1 → apcf(t2) = invRead, pcf(t2) = crashed → apcf(t2) = crashed, pcf(t2) = ready → apcf(t2) = ready, pcf(t2) = idle → apcf(t2) = idle, ∀ t1. lsf(t1).t = t1, ∀ t1. alsf(t1).t = t1, ∀ l. ¬ FO(t) ∈ p(l), ∀ t1. t1 ≠ t ∧ t1 ≠ t2 → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t1), pcf(t1), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t1), apcf(t1)) ⊦ (pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ p(l) → ((h0 | l) | t2) | false = []) ∧ (pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h0 | l0) | t2) | false = []) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 → l1 ≠ l3 ∧ ¬ FO(t2) ∈ p(l1) → ((h0 | l1) | t2) | false = []) ∧ (pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = []) ∧ (pcf(t2) = W4 → ((h0 | l3) | t2) | false = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = []) |
Used terms: l4
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.