| 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) = W3, pcf0(t) = W4, apcf(t) = apc, notMember(t, gs.readers) ∧ oneMember(t, ls.l, gs.writers) ∧ noPending(t, gs.p), notMember(t, gs0.readers) ∧ oneMember(t, ls0.l, gs0.writers) ∧ onePendingW(t, ls0.l, gs0.p), PLIBLInv(ags, als, apc), ∀ t0. t0 ≠ t → FLITPSCLInv(gs, lsf(t0), pcf(t0)) ∧ PLIBLInv(ags, alsf(t0), apcf(t0)) ∧ labs(gs, lsf(t0), pcf(t0), ags, alsf(t0), apcf(t0)), pre(ags, als, apc, ADoWrite(ls.t)) → ags0 = gstepf(ags, als, apc, ADoWrite(ls.t)) ∧ als0 = lstepf(ags, als, apc, ADoWrite(ls.t)) ∧ apc0 = pcstepf(ags, als, apc, ADoWrite(ls.t)), allReadsOK(ags0.h) ∧ allWritesOK(ags0.h) ∧ ags0.vm = ∅ ⊕ ags0.h ∧ ags0.pm = ∅ ⊕ (ags0.h | true), pre(gs, ls, W3, doWritePSC(ls.t, l, v)) ∧ gs0 = gstepf(gs, ls, W3, doWritePSC(ls.t, l, v)) ∧ ls0 = lstepf(gs, ls, W3, doWritePSC(ls.t, l, v)) ∧ W4 = pcstepf(gs, ls, W3, doWritePSC(ls.t, l, v)), ags.pm = gs.mem ∧ ags.vm = gs.mem ⊕ gs.p ∧ abs(ags.h, gs.readers, gs.p), ls.t = als.t ∧ apc = invWrite ∧ (ls.l = als.il ∧ ls.v = als.iv) ∧ (∀ l. ((ags.h | l) | ls.t) | false = []) ⊦ pre(ags, als, apc, ADoWrite(ls.t)) ∧ (ags0.pm = gs0.mem ∧ ags0.vm = gs0.mem ⊕ gs0.p ∧ abs(ags0.h, gs0.readers, gs0.p)) ∧ ls0.t = als0.t ∧ apc0 = resWrite ∧ (ls0.l = als0.il ∧ ls0.v = als0.iv) ∧ (((ags0.h | ls0.l) | ls0.t) | false = (W(ls0.t, ls0.l, ls0.v), false) ' ∨ ((ags0.h | ls0.l) | ls0.t) | false = []) |
ls.l = als.il, ags.pm = gs.mem, ags0.pm = ∅ ⊕ (ags0.h | true), ags.pm = ∅ ⊕ (ags.h | true), ls.t = als.t, lsf(t).t = t, alsf(t).t = t, ls.v = als.iv, ags.vm = gs.mem ⊕ gs.p, ags0.vm = ∅ ⊕ ags0.h, ags.vm = ∅ ⊕ ags.h, W4 = pcstepf(gs, ls, W3, doWritePSC(ls.t, l, v)), alsf(t) = als, apc = invWrite, apcf(t) = apc, gs0 = gstepf(gs, ls, W3, doWritePSC(ls.t, l, v)), ls0 = lstepf(gs, ls, W3, doWritePSC(ls.t, l, v)), lsf(t) = ls, lsf0(t) = ls0, pcf(t) = W3, pcf0(t) = W4, 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), noPending(t, gs.p), notMember(t, gs0.readers), notMember(t, gs.readers), oneMember(t, ls0.l, gs0.writers), oneMember(t, ls.l, gs.writers), onePendingW(t, ls0.l, gs0.p), pendingOk(gs0.p), pendingOk(gs.p), pre(gs, ls, W3, doWritePSC(ls.t, l, v)), writersOk(gs0.p, gs0.writers), writersOk(gs.p, gs.writers), pre(ags, als, apc, ADoWrite(ls.t)) → ags0 = gstepf(ags, als, apc, ADoWrite(ls.t)) ∧ als0 = lstepf(ags, als, apc, ADoWrite(ls.t)) ∧ apc0 = pcstepf(ags, als, apc, ADoWrite(ls.t)), ∀ l. ((ags.h | l) | ls.t) | false = [], ∀ t0. t0 ≠ t → FLITPSCLInv(gs, lsf(t0), pcf(t0)) ∧ PLIBLInv(ags, alsf(t0), apcf(t0)) ∧ labs(gs, lsf(t0), pcf(t0), ags, alsf(t0), apcf(t0)), ∀ t0. t0 ≠ t → alsf(t0).t = t0, ∀ t0. t0 ≠ t → lsf(t0).t = t0 ⊦ pre(ags, als, apc, ADoWrite(ls.t)) ∧ (ags0.pm = gs0.mem ∧ ags0.vm = gs0.mem ⊕ gs0.p ∧ abs(ags0.h, gs0.readers, gs0.p)) ∧ ls0.t = als0.t ∧ apc0 = resWrite ∧ (ls0.l = als0.il ∧ ls0.v = als0.iv) ∧ (((ags0.h | ls0.l) | ls0.t) | false = (W(ls0.t, ls0.l, ls0.v), false) ' ∨ ((ags0.h | ls0.l) | ls0.t) | false = [])
| ls.l = als.il, ags.pm = gs.mem, ags0.pm = ∅ ⊕ (ags0.h | true), ags.pm = ∅ ⊕ (ags.h | true), ls.t = als.t, lsf(t).t = t, alsf(t).t = t, ls.v = als.iv, ags.vm = gs.mem ⊕ gs.p, ags0.vm = ∅ ⊕ ags0.h, ags.vm = ∅ ⊕ ags.h, W4 = pcstepf(gs, ls, W3, doWritePSC(ls.t, l, v)), alsf(t) = als, apc = invWrite, apcf(t) = apc, gs0 = gstepf(gs, ls, W3, doWritePSC(ls.t, l, v)), ls0 = lstepf(gs, ls, W3, doWritePSC(ls.t, l, v)), lsf(t) = ls, lsf0(t) = ls0, pcf(t) = W3, pcf0(t) = W4, 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), noPending(t, gs.p), notMember(t, gs0.readers), notMember(t, gs.readers), oneMember(t, ls0.l, gs0.writers), oneMember(t, ls.l, gs.writers), onePendingW(t, ls0.l, gs0.p), pendingOk(gs0.p), pendingOk(gs.p), pre(gs, ls, W3, doWritePSC(ls.t, l, v)), writersOk(gs0.p, gs0.writers), writersOk(gs.p, gs.writers), pre(ags, als, apc, ADoWrite(ls.t)) → ags0 = gstepf(ags, als, apc, ADoWrite(ls.t)) ∧ als0 = lstepf(ags, als, apc, ADoWrite(ls.t)) ∧ apc0 = pcstepf(ags, als, apc, ADoWrite(ls.t)), ∀ l. ((ags.h | l) | ls.t) | false = [], ∀ t0. t0 ≠ t → FLITPSCLInv(gs, lsf(t0), pcf(t0)) ∧ PLIBLInv(ags, alsf(t0), apcf(t0)) ∧ labs(gs, lsf(t0), pcf(t0), ags, alsf(t0), apcf(t0)), ∀ t0. t0 ≠ t → alsf(t0).t = t0, ∀ t0. t0 ≠ t → lsf(t0).t = t0 ⊦ pre(ags, als, apc, ADoWrite(ls.t)) ∧ (ags0.pm = gs0.mem ∧ ags0.vm = gs0.mem ⊕ gs0.p ∧ abs(ags0.h, gs0.readers, gs0.p)) ∧ ls0.t = als0.t ∧ apc0 = resWrite ∧ (ls0.l = als0.il ∧ ls0.v = als0.iv) ∧ (((ags0.h | ls0.l) | ls0.t) | false = (W(ls0.t, ls0.l, ls0.v), false) ' ∨ ((ags0.h | ls0.l) | ls0.t) | false = []) |
lsf(t).l = alsf(t).il, gs.mem = ∅ ⊕ (ags.h | true), ags.pm = gs.mem, ags0.pm = ∅ ⊕ (ags0.h | true), lsf(t).t = t, alsf(t).t = t, lsf(t).v = alsf(t).iv, ags.vm = gs.mem ⊕ gs.p, ags0.vm = ∅ ⊕ ags0.h, ags.vm = ∅ ⊕ ags.h, apcf(t) = invWrite, lsf0(t) = lsf(t), pcf(t) = W3, pcf0(t) = W4, PLIBLInv(ags, alsf(t), invWrite), abs(ags.h, gs.readers, gs.p), allReadsOK(ags0.h), allReadsOK(ags.h), allWritesOK(ags0.h), allWritesOK(ags.h), ctrok(gs.ctr, gs.writers), noPending(t, gs.p), notMember(t, gs.readers), oneMember(t, alsf(t).il, gs.writers), onePendingW(t, alsf(t).il, gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) ')), pendingOk(gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) ')), pendingOk(gs.p), writersOk(gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) '), gs.writers), writersOk(gs.p, gs.writers), (ags.h | t) | false = [] → ags0 = (ags.vm:= ags.vm(alsf(t).il := alsf(t).iv)).h:= (ags.h + (W(t, alsf(t).il, alsf(t).iv), false) ') ∧ als0 = alsf(t) ∧ apc0 = resWrite, ∀ t0. alsf(t0).t = t0, ∀ t0. lsf(t0).t = t0, ∀ l. ((ags.h | l) | t) | false = [], ∀ t0. t0 ≠ t → FLITPSCLInv(gs, lsf(t0), pcf(t0)) ∧ PLIBLInv(ags, alsf(t0), apcf(t0)) ∧ labs(gs, lsf(t0), pcf(t0), ags, alsf(t0), apcf(t0)) ⊦ (ags.h | alsf(als0.t).t) | false = [] ∧ ags0.pm = gs.mem ∧ ags0.vm = ags.vm(alsf(als0.t).il := alsf(als0.t).iv) ∧ abs(ags0.h, gs.readers, gs.p(alsf(als0.t).il := gs.p(alsf(als0.t).il) + W(alsf(als0.t).iv, als0.t) ')) ∧ t = als0.t ∧ apc0 = resWrite ∧ alsf(als0.t).il = als0.il ∧ alsf(als0.t).iv = als0.iv ∧ ( ((ags0.h | alsf(als0.t).il) | als0.t) | false = (W(als0.t, alsf(als0.t).il, alsf(als0.t).iv), false) ' ∨ ((ags0.h | alsf(als0.t).il) | als0.t) | false = [])
Used simplifier rules: ⊦ ADoWrite(t) = ADoWrite(t0) ↔ t = t0; (s) ⊦ pre(gs, ls, invWrite, a) ↔ a = ADoWrite(ls.t) ∧ (gs.h | ls.t) | false = []; (s) ⊦ ls.t = t → pcstepf(gs, ls, invWrite, ADoWrite(t)) = resWrite; (s) ⊦ ls.t = t → lstepf(gs, ls, invWrite, ADoWrite(t)) = ls; (s) ⊦ x + a = x + a '; (s) ⊦ ls.t = t → gstepf(gs, ls, invWrite, ADoWrite(t)) = (gs.vm:= gs.vm(ls.il := ls.iv)).h:= (gs.h + (W(ls.t, ls.il, ls.iv), false)); (s) ⊦ (gs.p:= p).p = p; (s) ⊦ gstepf(gs, ls, W3, a) = gs.p:= gs.p(ls.l := gs.p(ls.l) + W(ls.v, ls.t)); (s) ⊦ (gs.p:= p).readers = gs.readers; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ mem ⊕ p(l := p(l) + W(v, t) ') = (mem ⊕ p)(l := v); (s) ⊦ (gs.p:= p).mem = gs.mem; (s) ⊦ (gs.p:= p).writers = gs.writers; (s) ⊦ (gs.p:= p).ctr = gs.ctr; (s) ⊦ doWritePSC(t, l, v) = doWritePSC(t0, l0, v0) ↔ t = t0 ∧ l = l0 ∧ v = v0; (ws) ⊦ pre(gs, ls, W3, a) ↔ a = doWritePSC(ls.t, ls.l, ls.v); (s) ⊦ pcstepf(gs, ls, W3, a) = W4; (s) ⊦ lstepf(gs, ls, W3, a) = ls; (s)
| lsf(t).l = alsf(t).il, gs.mem = ∅ ⊕ (ags.h | true), ags.pm = gs.mem, ags0.pm = ∅ ⊕ (ags0.h | true), lsf(t).t = t, alsf(t).t = t, lsf(t).v = alsf(t).iv, ags.vm = gs.mem ⊕ gs.p, ags0.vm = ∅ ⊕ ags0.h, ags.vm = ∅ ⊕ ags.h, apcf(t) = invWrite, lsf0(t) = lsf(t), pcf(t) = W3, pcf0(t) = W4, PLIBLInv(ags, alsf(t), invWrite), abs(ags.h, gs.readers, gs.p), allReadsOK(ags0.h), allReadsOK(ags.h), allWritesOK(ags0.h), allWritesOK(ags.h), ctrok(gs.ctr, gs.writers), noPending(t, gs.p), notMember(t, gs.readers), oneMember(t, alsf(t).il, gs.writers), onePendingW(t, alsf(t).il, gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) ')), pendingOk(gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) ')), pendingOk(gs.p), writersOk(gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) '), gs.writers), writersOk(gs.p, gs.writers), (ags.h | t) | false = [] → ags0 = (ags.vm:= ags.vm(alsf(t).il := alsf(t).iv)).h:= (ags.h + (W(t, alsf(t).il, alsf(t).iv), false) ') ∧ als0 = alsf(t) ∧ apc0 = resWrite, ∀ t0. alsf(t0).t = t0, ∀ t0. lsf(t0).t = t0, ∀ l. ((ags.h | l) | t) | false = [], ∀ t0. t0 ≠ t → FLITPSCLInv(gs, lsf(t0), pcf(t0)) ∧ PLIBLInv(ags, alsf(t0), apcf(t0)) ∧ labs(gs, lsf(t0), pcf(t0), ags, alsf(t0), apcf(t0)) ⊦ (ags.h | alsf(als0.t).t) | false = [] ∧ ags0.pm = gs.mem ∧ ags0.vm = ags.vm(alsf(als0.t).il := alsf(als0.t).iv) ∧ abs(ags0.h, gs.readers, gs.p(alsf(als0.t).il := gs.p(alsf(als0.t).il) + W(alsf(als0.t).iv, als0.t) ')) ∧ t = als0.t ∧ apc0 = resWrite ∧ alsf(als0.t).il = als0.il ∧ alsf(als0.t).iv = als0.iv ∧ ( ((ags0.h | alsf(als0.t).il) | als0.t) | false = (W(als0.t, alsf(als0.t).il, alsf(als0.t).iv), false) ' ∨ ((ags0.h | alsf(als0.t).il) | als0.t) | false = []) |
lsf(t).l = alsf(t).il, gs.mem = ∅ ⊕ (h | true), ags0.pm = ∅ ⊕ (ags0.h | true), alsf(t).t = t, lsf(t).t = t, lsf(t).v = alsf(t).iv, ags0.vm = ∅ ⊕ ags0.h, ags = mkPLIBgs(mem, mem0, h), apcf(t) = invWrite, lsf0(t) = lsf(t), mem = ∅ ⊕ h, mem = gs.mem ⊕ gs.p, mem0 = gs.mem, pcf(t) = W3, pcf0(t) = W4, PLIBLInv(ags, alsf(t), invWrite), abs(h, gs.readers, gs.p), allReadsOK(h), allReadsOK(ags0.h), allWritesOK(h), allWritesOK(ags0.h), ctrok(gs.ctr, gs.writers), noPending(t, gs.p), notMember(t, gs.readers), oneMember(t, alsf(t).il, gs.writers), onePendingW(t, alsf(t).il, gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) ')), pendingOk(gs.p), pendingOk(gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) ')), writersOk(gs.p, gs.writers), writersOk(gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) '), gs.writers), (h | t) | false = [] → ags0 = (ags.vm:= mem(alsf(t).il := alsf(t).iv)).h:= (h + (W(t, alsf(t).il, alsf(t).iv), false) ') ∧ als0 = alsf(t) ∧ apc0 = resWrite, ∀ t0. t0 ≠ t → FLITPSCLInv(gs, lsf(t0), pcf(t0)) ∧ PLIBLInv(ags, alsf(t0), apcf(t0)) ∧ labs(gs, lsf(t0), pcf(t0), ags, alsf(t0), apcf(t0)), ∀ l. ((h | l) | t) | false = [], ∀ t0. lsf(t0).t = t0, ∀ t0. alsf(t0).t = t0 ⊦ (h | alsf(als0.t).t) | false = [] ∧ ags0.pm = gs.mem ∧ ags0.vm = mem(alsf(als0.t).il := alsf(als0.t).iv) ∧ abs(ags0.h, gs.readers, gs.p(alsf(als0.t).il := gs.p(alsf(als0.t).il) + W(alsf(als0.t).iv, als0.t) ')) ∧ t = als0.t ∧ apc0 = resWrite ∧ alsf(als0.t).il = als0.il ∧ alsf(als0.t).iv = als0.iv ∧ ( ((ags0.h | alsf(als0.t).il) | als0.t) | false = (W(als0.t, alsf(als0.t).il, alsf(als0.t).iv), false) ' ∨ ((ags0.h | alsf(als0.t).il) | als0.t) | 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
| lsf(t).l = alsf(t).il, gs.mem = ∅ ⊕ (h | true), ags0.pm = ∅ ⊕ (ags0.h | true), alsf(t).t = t, lsf(t).t = t, lsf(t).v = alsf(t).iv, ags0.vm = ∅ ⊕ ags0.h, ags = mkPLIBgs(mem, mem0, h), apcf(t) = invWrite, lsf0(t) = lsf(t), mem = ∅ ⊕ h, mem = gs.mem ⊕ gs.p, mem0 = gs.mem, pcf(t) = W3, pcf0(t) = W4, PLIBLInv(ags, alsf(t), invWrite), abs(h, gs.readers, gs.p), allReadsOK(h), allReadsOK(ags0.h), allWritesOK(h), allWritesOK(ags0.h), ctrok(gs.ctr, gs.writers), noPending(t, gs.p), notMember(t, gs.readers), oneMember(t, alsf(t).il, gs.writers), onePendingW(t, alsf(t).il, gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) ')), pendingOk(gs.p), pendingOk(gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) ')), writersOk(gs.p, gs.writers), writersOk(gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) '), gs.writers), (h | t) | false = [] → ags0 = (ags.vm:= mem(alsf(t).il := alsf(t).iv)).h:= (h + (W(t, alsf(t).il, alsf(t).iv), false) ') ∧ als0 = alsf(t) ∧ apc0 = resWrite, ∀ t0. t0 ≠ t → FLITPSCLInv(gs, lsf(t0), pcf(t0)) ∧ PLIBLInv(ags, alsf(t0), apcf(t0)) ∧ labs(gs, lsf(t0), pcf(t0), ags, alsf(t0), apcf(t0)), ∀ l. ((h | l) | t) | false = [], ∀ t0. lsf(t0).t = t0, ∀ t0. alsf(t0).t = t0 ⊦ (h | alsf(als0.t).t) | false = [] ∧ ags0.pm = gs.mem ∧ ags0.vm = mem(alsf(als0.t).il := alsf(als0.t).iv) ∧ abs(ags0.h, gs.readers, gs.p(alsf(als0.t).il := gs.p(alsf(als0.t).il) + W(alsf(als0.t).iv, als0.t) ')) ∧ t = als0.t ∧ apc0 = resWrite ∧ alsf(als0.t).il = als0.il ∧ alsf(als0.t).iv = als0.iv ∧ ( ((ags0.h | alsf(als0.t).il) | als0.t) | false = (W(als0.t, alsf(als0.t).il, alsf(als0.t).iv), false) ' ∨ ((ags0.h | alsf(als0.t).il) | als0.t) | false = []) |
lsf(t).l = alsf(t).il, gs.mem = ∅ ⊕ (h | true), ags0.pm = ∅ ⊕ (ags0.h | true), lsf(t).t = t, alsf(t).t = t, lsf(t).v = alsf(t).iv, ags0.vm = ∅ ⊕ ags0.h, apcf(t) = invWrite, lsf0(t) = lsf(t), pcf(t) = W3, pcf0(t) = W4, gs.mem ⊕ gs.p = ∅ ⊕ h, PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t), invWrite), abs(h, gs.readers, gs.p), allReadsOK(ags0.h), allReadsOK(h), allWritesOK(ags0.h), allWritesOK(h), ctrok(gs.ctr, gs.writers), noPending(t, gs.p), notMember(t, gs.readers), oneMember(t, alsf(t).il, gs.writers), onePendingW(t, alsf(t).il, gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) ')), pendingOk(gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) ')), pendingOk(gs.p), writersOk(gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) '), gs.writers), writersOk(gs.p, gs.writers), (h | t) | false = [] → ags0 = mkPLIBgs((∅ ⊕ h)(alsf(t).il := alsf(t).iv), gs.mem, h + (W(t, alsf(t).il, alsf(t).iv), false) ') ∧ als0 = alsf(t) ∧ apc0 = resWrite, ∀ t0. alsf(t0).t = t0, ∀ t0. lsf(t0).t = t0, ∀ l. ((h | l) | t) | false = [], ∀ t0. t0 ≠ t → FLITPSCLInv(gs, lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t0), apcf(t0)) ∧ labs(gs, lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t0), apcf(t0)) ⊦ (h | alsf(als0.t).t) | false = [] ∧ ags0.pm = gs.mem ∧ ags0.vm = (∅ ⊕ h)(alsf(als0.t).il := alsf(als0.t).iv) ∧ abs(ags0.h, gs.readers, gs.p(alsf(als0.t).il := gs.p(alsf(als0.t).il) + W(alsf(als0.t).iv, als0.t) ')) ∧ t = als0.t ∧ apc0 = resWrite ∧ alsf(als0.t).il = als0.il ∧ alsf(als0.t).iv = als0.iv ∧ ( ((ags0.h | alsf(als0.t).il) | als0.t) | false = (W(als0.t, alsf(als0.t).il, alsf(als0.t).iv), false) ' ∨ ((ags0.h | alsf(als0.t).il) | als0.t) | false = [])
Used simplifier rules: ⊦ mkPLIBgs(vm, vm0, h).h:= h0 = mkPLIBgs(vm, vm0, h0); (s) ⊦ mkPLIBgs(vm, vm0, h).vm:= vm1 = mkPLIBgs(vm1, vm0, h); (s)
| lsf(t).l = alsf(t).il, gs.mem = ∅ ⊕ (h | true), ags0.pm = ∅ ⊕ (ags0.h | true), lsf(t).t = t, alsf(t).t = t, lsf(t).v = alsf(t).iv, ags0.vm = ∅ ⊕ ags0.h, apcf(t) = invWrite, lsf0(t) = lsf(t), pcf(t) = W3, pcf0(t) = W4, gs.mem ⊕ gs.p = ∅ ⊕ h, PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t), invWrite), abs(h, gs.readers, gs.p), allReadsOK(ags0.h), allReadsOK(h), allWritesOK(ags0.h), allWritesOK(h), ctrok(gs.ctr, gs.writers), noPending(t, gs.p), notMember(t, gs.readers), oneMember(t, alsf(t).il, gs.writers), onePendingW(t, alsf(t).il, gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) ')), pendingOk(gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) ')), pendingOk(gs.p), writersOk(gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) '), gs.writers), writersOk(gs.p, gs.writers), (h | t) | false = [] → ags0 = mkPLIBgs((∅ ⊕ h)(alsf(t).il := alsf(t).iv), gs.mem, h + (W(t, alsf(t).il, alsf(t).iv), false) ') ∧ als0 = alsf(t) ∧ apc0 = resWrite, ∀ t0. alsf(t0).t = t0, ∀ t0. lsf(t0).t = t0, ∀ l. ((h | l) | t) | false = [], ∀ t0. t0 ≠ t → FLITPSCLInv(gs, lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t0), apcf(t0)) ∧ labs(gs, lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t0), apcf(t0)) ⊦ (h | alsf(als0.t).t) | false = [] ∧ ags0.pm = gs.mem ∧ ags0.vm = (∅ ⊕ h)(alsf(als0.t).il := alsf(als0.t).iv) ∧ abs(ags0.h, gs.readers, gs.p(alsf(als0.t).il := gs.p(alsf(als0.t).il) + W(alsf(als0.t).iv, als0.t) ')) ∧ t = als0.t ∧ apc0 = resWrite ∧ alsf(als0.t).il = als0.il ∧ alsf(als0.t).iv = als0.iv ∧ ( ((ags0.h | alsf(als0.t).il) | als0.t) | false = (W(als0.t, alsf(als0.t).il, alsf(als0.t).iv), false) ' ∨ ((ags0.h | alsf(als0.t).il) | als0.t) | false = []) |
lsf(t).l = alsf(t).il, gs.mem = ∅ ⊕ (h | true), alsf(t).t = t, lsf(t).t = t, lsf(t).v = alsf(t).iv, ags0 = mkPLIBgs(mem, mem0, h0), apcf(t) = invWrite, lsf0(t) = lsf(t), mem = ∅ ⊕ h0, mem0 = ∅ ⊕ (h0 | true), pcf(t) = W3, pcf0(t) = W4, gs.mem ⊕ gs.p = ∅ ⊕ h, PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t), invWrite), abs(h, gs.readers, gs.p), allReadsOK(h), allReadsOK(h0), allWritesOK(h), allWritesOK(h0), ctrok(gs.ctr, gs.writers), noPending(t, gs.p), notMember(t, gs.readers), oneMember(t, alsf(t).il, gs.writers), onePendingW(t, alsf(t).il, gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) ')), pendingOk(gs.p), pendingOk(gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) ')), writersOk(gs.p, gs.writers), writersOk(gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) '), gs.writers), (h | t) | false = [] → ags0 = mkPLIBgs((∅ ⊕ h)(alsf(t).il := alsf(t).iv), gs.mem, h + (W(t, alsf(t).il, alsf(t).iv), false) ') ∧ als0 = alsf(t) ∧ apc0 = resWrite, ∀ t0. t0 ≠ t → FLITPSCLInv(gs, lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t0), apcf(t0)) ∧ labs(gs, lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t0), apcf(t0)), ∀ l. ((h | l) | t) | false = [], ∀ t0. lsf(t0).t = t0, ∀ t0. alsf(t0).t = t0 ⊦ (h | alsf(als0.t).t) | false = [] ∧ mem0 = gs.mem ∧ mem = (∅ ⊕ h)(alsf(als0.t).il := alsf(als0.t).iv) ∧ abs(h0, gs.readers, gs.p(alsf(als0.t).il := gs.p(alsf(als0.t).il) + W(alsf(als0.t).iv, als0.t) ')) ∧ t = als0.t ∧ apc0 = resWrite ∧ alsf(als0.t).il = als0.il ∧ alsf(als0.t).iv = als0.iv ∧ ( ((h0 | alsf(als0.t).il) | als0.t) | false = (W(als0.t, alsf(als0.t).il, alsf(als0.t).iv), false) ' ∨ ((h0 | alsf(als0.t).il) | als0.t) | 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
| lsf(t).l = alsf(t).il, gs.mem = ∅ ⊕ (h | true), alsf(t).t = t, lsf(t).t = t, lsf(t).v = alsf(t).iv, ags0 = mkPLIBgs(mem, mem0, h0), apcf(t) = invWrite, lsf0(t) = lsf(t), mem = ∅ ⊕ h0, mem0 = ∅ ⊕ (h0 | true), pcf(t) = W3, pcf0(t) = W4, gs.mem ⊕ gs.p = ∅ ⊕ h, PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t), invWrite), abs(h, gs.readers, gs.p), allReadsOK(h), allReadsOK(h0), allWritesOK(h), allWritesOK(h0), ctrok(gs.ctr, gs.writers), noPending(t, gs.p), notMember(t, gs.readers), oneMember(t, alsf(t).il, gs.writers), onePendingW(t, alsf(t).il, gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) ')), pendingOk(gs.p), pendingOk(gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) ')), writersOk(gs.p, gs.writers), writersOk(gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) '), gs.writers), (h | t) | false = [] → ags0 = mkPLIBgs((∅ ⊕ h)(alsf(t).il := alsf(t).iv), gs.mem, h + (W(t, alsf(t).il, alsf(t).iv), false) ') ∧ als0 = alsf(t) ∧ apc0 = resWrite, ∀ t0. t0 ≠ t → FLITPSCLInv(gs, lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t0), apcf(t0)) ∧ labs(gs, lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t0), apcf(t0)), ∀ l. ((h | l) | t) | false = [], ∀ t0. lsf(t0).t = t0, ∀ t0. alsf(t0).t = t0 ⊦ (h | alsf(als0.t).t) | false = [] ∧ mem0 = gs.mem ∧ mem = (∅ ⊕ h)(alsf(als0.t).il := alsf(als0.t).iv) ∧ abs(h0, gs.readers, gs.p(alsf(als0.t).il := gs.p(alsf(als0.t).il) + W(alsf(als0.t).iv, als0.t) ')) ∧ t = als0.t ∧ apc0 = resWrite ∧ alsf(als0.t).il = als0.il ∧ alsf(als0.t).iv = als0.iv ∧ ( ((h0 | alsf(als0.t).il) | als0.t) | false = (W(als0.t, alsf(als0.t).il, alsf(als0.t).iv), false) ' ∨ ((h0 | alsf(als0.t).il) | als0.t) | false = []) |
lsf(t).l = alsf(t).il, gs.mem = ∅ ⊕ (h | true), lsf(t).t = t, alsf(t).t = t, lsf(t).v = alsf(t).iv, apcf(t) = invWrite, lsf0(t) = lsf(t), pcf(t) = W3, pcf0(t) = W4, gs.mem ⊕ gs.p = ∅ ⊕ h, PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t), invWrite), abs(h, gs.readers, gs.p), allReadsOK(h0), allReadsOK(h), allWritesOK(h0), allWritesOK(h), ctrok(gs.ctr, gs.writers), noPending(t, gs.p), notMember(t, gs.readers), oneMember(t, alsf(t).il, gs.writers), onePendingW(t, alsf(t).il, gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) ')), pendingOk(gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) ')), pendingOk(gs.p), writersOk(gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) '), gs.writers), writersOk(gs.p, gs.writers), (h | t) | false = [] → mkPLIBgs(∅ ⊕ h0, ∅ ⊕ (h0 | true), h0) = mkPLIBgs((∅ ⊕ h)(alsf(t).il := alsf(t).iv), gs.mem, h + (W(t, alsf(t).il, alsf(t).iv), false) ') ∧ als0 = alsf(t) ∧ apc0 = resWrite, ∀ t0. alsf(t0).t = t0, ∀ t0. lsf(t0).t = t0, ∀ l. ((h | l) | t) | false = [], ∀ t0. t0 ≠ t → FLITPSCLInv(gs, lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t0), apcf(t0)) ∧ labs(gs, lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t0), apcf(t0)) ⊦ (h | alsf(als0.t).t) | false = [] ∧ ∅ ⊕ (h0 | true) = gs.mem ∧ ∅ ⊕ h0 = (∅ ⊕ h)(alsf(als0.t).il := alsf(als0.t).iv) ∧ abs(h0, gs.readers, gs.p(alsf(als0.t).il := gs.p(alsf(als0.t).il) + W(alsf(als0.t).iv, als0.t) ')) ∧ t = als0.t ∧ apc0 = resWrite ∧ alsf(als0.t).il = als0.il ∧ alsf(als0.t).iv = als0.iv ∧ ( ((h0 | alsf(als0.t).il) | als0.t) | false = (W(als0.t, alsf(als0.t).il, alsf(als0.t).iv), false) ' ∨ ((h0 | alsf(als0.t).il) | als0.t) | false = [])
| lsf(t).l = alsf(t).il, gs.mem = ∅ ⊕ (h | true), lsf(t).t = t, alsf(t).t = t, lsf(t).v = alsf(t).iv, apcf(t) = invWrite, lsf0(t) = lsf(t), pcf(t) = W3, pcf0(t) = W4, gs.mem ⊕ gs.p = ∅ ⊕ h, PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t), invWrite), abs(h, gs.readers, gs.p), allReadsOK(h0), allReadsOK(h), allWritesOK(h0), allWritesOK(h), ctrok(gs.ctr, gs.writers), noPending(t, gs.p), notMember(t, gs.readers), oneMember(t, alsf(t).il, gs.writers), onePendingW(t, alsf(t).il, gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) ')), pendingOk(gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) ')), pendingOk(gs.p), writersOk(gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) '), gs.writers), writersOk(gs.p, gs.writers), (h | t) | false = [] → mkPLIBgs(∅ ⊕ h0, ∅ ⊕ (h0 | true), h0) = mkPLIBgs((∅ ⊕ h)(alsf(t).il := alsf(t).iv), gs.mem, h + (W(t, alsf(t).il, alsf(t).iv), false) ') ∧ als0 = alsf(t) ∧ apc0 = resWrite, ∀ t0. alsf(t0).t = t0, ∀ t0. lsf(t0).t = t0, ∀ l. ((h | l) | t) | false = [], ∀ t0. t0 ≠ t → FLITPSCLInv(gs, lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t0), apcf(t0)) ∧ labs(gs, lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t0), apcf(t0)) ⊦ (h | alsf(als0.t).t) | false = [] ∧ ∅ ⊕ (h0 | true) = gs.mem ∧ ∅ ⊕ h0 = (∅ ⊕ h)(alsf(als0.t).il := alsf(als0.t).iv) ∧ abs(h0, gs.readers, gs.p(alsf(als0.t).il := gs.p(alsf(als0.t).il) + W(alsf(als0.t).iv, als0.t) ')) ∧ t = als0.t ∧ apc0 = resWrite ∧ alsf(als0.t).il = als0.il ∧ alsf(als0.t).iv = als0.iv ∧ ( ((h0 | alsf(als0.t).il) | als0.t) | false = (W(als0.t, alsf(als0.t).il, alsf(als0.t).iv), false) ' ∨ ((h0 | alsf(als0.t).il) | als0.t) | false = []) |
lsf(t).l = alsf(t).il, gs.mem = ∅ ⊕ (h | true), alsf(t).t = t, lsf(t).t = t, lsf(t).v = alsf(t).iv, als0 = mkPLIBls(t1, il, iv, ov), apcf(t) = invWrite, lsf0(t) = lsf(t), pcf(t) = W3, pcf0(t) = W4, gs.mem ⊕ gs.p = ∅ ⊕ h, PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t), invWrite), abs(h, gs.readers, gs.p), allReadsOK(h), allReadsOK(h0), allWritesOK(h), allWritesOK(h0), ctrok(gs.ctr, gs.writers), noPending(t, gs.p), notMember(t, gs.readers), oneMember(t, alsf(t).il, gs.writers), onePendingW(t, alsf(t).il, gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) ')), pendingOk(gs.p), pendingOk(gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) ')), writersOk(gs.p, gs.writers), writersOk(gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) '), gs.writers), (h | t) | false = [] → mkPLIBgs(∅ ⊕ h0, ∅ ⊕ (h0 | true), h0) = mkPLIBgs((∅ ⊕ h)(alsf(t).il := alsf(t).iv), gs.mem, h + (W(t, alsf(t).il, alsf(t).iv), false) ') ∧ als0 = alsf(t) ∧ apc0 = resWrite, ∀ t0. t0 ≠ t → FLITPSCLInv(gs, lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t0), apcf(t0)) ∧ labs(gs, lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t0), apcf(t0)), ∀ l. ((h | l) | t) | false = [], ∀ t0. lsf(t0).t = t0, ∀ t0. alsf(t0).t = t0 ⊦ (h | alsf(t1).t) | false = [] ∧ ∅ ⊕ (h0 | true) = gs.mem ∧ ∅ ⊕ h0 = (∅ ⊕ h)(alsf(t1).il := alsf(t1).iv) ∧ abs(h0, gs.readers, gs.p(alsf(t1).il := gs.p(alsf(t1).il) + W(alsf(t1).iv, t1) ')) ∧ t = t1 ∧ apc0 = resWrite ∧ alsf(t1).il = il ∧ alsf(t1).iv = iv ∧ (((h0 | alsf(t1).il) | t1) | false = (W(t1, alsf(t1).il, alsf(t1).iv), false) ' ∨ ((h0 | alsf(t1).il) | t1) | 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: als0, iv, t1, il, ov
| lsf(t).l = alsf(t).il, gs.mem = ∅ ⊕ (h | true), alsf(t).t = t, lsf(t).t = t, lsf(t).v = alsf(t).iv, als0 = mkPLIBls(t1, il, iv, ov), apcf(t) = invWrite, lsf0(t) = lsf(t), pcf(t) = W3, pcf0(t) = W4, gs.mem ⊕ gs.p = ∅ ⊕ h, PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t), invWrite), abs(h, gs.readers, gs.p), allReadsOK(h), allReadsOK(h0), allWritesOK(h), allWritesOK(h0), ctrok(gs.ctr, gs.writers), noPending(t, gs.p), notMember(t, gs.readers), oneMember(t, alsf(t).il, gs.writers), onePendingW(t, alsf(t).il, gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) ')), pendingOk(gs.p), pendingOk(gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) ')), writersOk(gs.p, gs.writers), writersOk(gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) '), gs.writers), (h | t) | false = [] → mkPLIBgs(∅ ⊕ h0, ∅ ⊕ (h0 | true), h0) = mkPLIBgs((∅ ⊕ h)(alsf(t).il := alsf(t).iv), gs.mem, h + (W(t, alsf(t).il, alsf(t).iv), false) ') ∧ als0 = alsf(t) ∧ apc0 = resWrite, ∀ t0. t0 ≠ t → FLITPSCLInv(gs, lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t0), apcf(t0)) ∧ labs(gs, lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t0), apcf(t0)), ∀ l. ((h | l) | t) | false = [], ∀ t0. lsf(t0).t = t0, ∀ t0. alsf(t0).t = t0 ⊦ (h | alsf(t1).t) | false = [] ∧ ∅ ⊕ (h0 | true) = gs.mem ∧ ∅ ⊕ h0 = (∅ ⊕ h)(alsf(t1).il := alsf(t1).iv) ∧ abs(h0, gs.readers, gs.p(alsf(t1).il := gs.p(alsf(t1).il) + W(alsf(t1).iv, t1) ')) ∧ t = t1 ∧ apc0 = resWrite ∧ alsf(t1).il = il ∧ alsf(t1).iv = iv ∧ (((h0 | alsf(t1).il) | t1) | false = (W(t1, alsf(t1).il, alsf(t1).iv), false) ' ∨ ((h0 | alsf(t1).il) | t1) | false = []) |
lsf(t).l = alsf(t).il, gs.mem = ∅ ⊕ (h | true), lsf(t).t = t, alsf(t).t = t, lsf(t).v = alsf(t).iv, apcf(t) = invWrite, lsf0(t) = lsf(t), pcf(t) = W3, pcf0(t) = W4, gs.mem ⊕ gs.p = ∅ ⊕ h, PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t), invWrite), abs(h, gs.readers, gs.p), allReadsOK(h0), allReadsOK(h), allWritesOK(h0), allWritesOK(h), ctrok(gs.ctr, gs.writers), noPending(t, gs.p), notMember(t, gs.readers), oneMember(t, alsf(t).il, gs.writers), onePendingW(t, alsf(t).il, gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) ')), pendingOk(gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) ')), pendingOk(gs.p), writersOk(gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) '), gs.writers), writersOk(gs.p, gs.writers), (h | t) | false = [] → mkPLIBgs(∅ ⊕ h0, ∅ ⊕ (h0 | true), h0) = mkPLIBgs((∅ ⊕ h)(alsf(t).il := alsf(t).iv), gs.mem, h + (W(t, alsf(t).il, alsf(t).iv), false) ') ∧ mkPLIBls(t1, il, iv, ov) = alsf(t) ∧ apc0 = resWrite, ∀ t0. alsf(t0).t = t0, ∀ t0. lsf(t0).t = t0, ∀ l. ((h | l) | t) | false = [], ∀ t0. t0 ≠ t → FLITPSCLInv(gs, lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t0), apcf(t0)) ∧ labs(gs, lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t0), apcf(t0)) ⊦ (h | alsf(t1).t) | false = [] ∧ ∅ ⊕ (h0 | true) = gs.mem ∧ ∅ ⊕ h0 = (∅ ⊕ h)(alsf(t1).il := alsf(t1).iv) ∧ abs(h0, gs.readers, gs.p(alsf(t1).il := gs.p(alsf(t1).il) + W(alsf(t1).iv, t1) ')) ∧ t = t1 ∧ apc0 = resWrite ∧ alsf(t1).il = il ∧ alsf(t1).iv = iv ∧ (((h0 | alsf(t1).il) | t1) | false = (W(t1, alsf(t1).il, alsf(t1).iv), false) ' ∨ ((h0 | alsf(t1).il) | t1) | false = [])
| lsf(t).l = alsf(t).il, gs.mem = ∅ ⊕ (h | true), lsf(t).t = t, alsf(t).t = t, lsf(t).v = alsf(t).iv, apcf(t) = invWrite, lsf0(t) = lsf(t), pcf(t) = W3, pcf0(t) = W4, gs.mem ⊕ gs.p = ∅ ⊕ h, PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t), invWrite), abs(h, gs.readers, gs.p), allReadsOK(h0), allReadsOK(h), allWritesOK(h0), allWritesOK(h), ctrok(gs.ctr, gs.writers), noPending(t, gs.p), notMember(t, gs.readers), oneMember(t, alsf(t).il, gs.writers), onePendingW(t, alsf(t).il, gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) ')), pendingOk(gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) ')), pendingOk(gs.p), writersOk(gs.p(alsf(t).il := gs.p(alsf(t).il) + W(alsf(t).iv, t) '), gs.writers), writersOk(gs.p, gs.writers), (h | t) | false = [] → mkPLIBgs(∅ ⊕ h0, ∅ ⊕ (h0 | true), h0) = mkPLIBgs((∅ ⊕ h)(alsf(t).il := alsf(t).iv), gs.mem, h + (W(t, alsf(t).il, alsf(t).iv), false) ') ∧ mkPLIBls(t1, il, iv, ov) = alsf(t) ∧ apc0 = resWrite, ∀ t0. alsf(t0).t = t0, ∀ t0. lsf(t0).t = t0, ∀ l. ((h | l) | t) | false = [], ∀ t0. t0 ≠ t → FLITPSCLInv(gs, lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t0), apcf(t0)) ∧ labs(gs, lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, gs.mem, h), alsf(t0), apcf(t0)) ⊦ (h | alsf(t1).t) | false = [] ∧ ∅ ⊕ (h0 | true) = gs.mem ∧ ∅ ⊕ h0 = (∅ ⊕ h)(alsf(t1).il := alsf(t1).iv) ∧ abs(h0, gs.readers, gs.p(alsf(t1).il := gs.p(alsf(t1).il) + W(alsf(t1).iv, t1) ')) ∧ t = t1 ∧ apc0 = resWrite ∧ alsf(t1).il = il ∧ alsf(t1).iv = iv ∧ (((h0 | alsf(t1).il) | t1) | false = (W(t1, alsf(t1).il, alsf(t1).iv), false) ' ∨ ((h0 | alsf(t1).il) | t1) | false = []) |
lsf(t).l = alsf(t).il, alsf(t).t = t, lsf(t).t = t, lsf(t).v = alsf(t).iv, apcf(t) = invWrite, gs = mkFLITPSCgs(mem, p, ctr, writers, writers0), lsf0(t) = lsf(t), mem = ∅ ⊕ (h | true), pcf(t) = W3, pcf0(t) = W4, mem ⊕ p = ∅ ⊕ h, PLIBLInv(mkPLIBgs(∅ ⊕ h, mem, h), alsf(t), invWrite), abs(h, writers0, p), allReadsOK(h), allReadsOK(h0), allWritesOK(h), allWritesOK(h0), ctrok(ctr, writers), noPending(t, p), notMember(t, writers0), oneMember(t, alsf(t).il, writers), onePendingW(t, alsf(t).il, p(alsf(t).il := p(alsf(t).il) + W(alsf(t).iv, t) ')), pendingOk(p), pendingOk(p(alsf(t).il := p(alsf(t).il) + W(alsf(t).iv, t) ')), writersOk(p, writers), writersOk(p(alsf(t).il := p(alsf(t).il) + W(alsf(t).iv, t) '), writers), (h | t) | false = [] → mkPLIBgs(∅ ⊕ h0, ∅ ⊕ (h0 | true), h0) = mkPLIBgs((∅ ⊕ h)(alsf(t).il := alsf(t).iv), mem, h + (W(t, alsf(t).il, alsf(t).iv), false) ') ∧ mkPLIBls(t1, il, iv, ov) = alsf(t) ∧ apc0 = resWrite, ∀ t0. t0 ≠ t → FLITPSCLInv(gs, lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, mem, h), alsf(t0), apcf(t0)) ∧ labs(gs, lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, mem, h), alsf(t0), apcf(t0)), ∀ l. ((h | l) | t) | false = [], ∀ t0. lsf(t0).t = t0, ∀ t0. alsf(t0).t = t0 ⊦ (h | alsf(t1).t) | false = [] ∧ ∅ ⊕ (h0 | true) = mem ∧ ∅ ⊕ h0 = (∅ ⊕ h)(alsf(t1).il := alsf(t1).iv) ∧ abs(h0, writers0, p(alsf(t1).il := p(alsf(t1).il) + W(alsf(t1).iv, t1) ')) ∧ t = t1 ∧ apc0 = resWrite ∧ alsf(t1).il = il ∧ alsf(t1).iv = iv ∧ (((h0 | alsf(t1).il) | t1) | false = (W(t1, alsf(t1).il, alsf(t1).iv), false) ' ∨ ((h0 | alsf(t1).il) | t1) | 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(t).l = alsf(t).il, alsf(t).t = t, lsf(t).t = t, lsf(t).v = alsf(t).iv, apcf(t) = invWrite, gs = mkFLITPSCgs(mem, p, ctr, writers, writers0), lsf0(t) = lsf(t), mem = ∅ ⊕ (h | true), pcf(t) = W3, pcf0(t) = W4, mem ⊕ p = ∅ ⊕ h, PLIBLInv(mkPLIBgs(∅ ⊕ h, mem, h), alsf(t), invWrite), abs(h, writers0, p), allReadsOK(h), allReadsOK(h0), allWritesOK(h), allWritesOK(h0), ctrok(ctr, writers), noPending(t, p), notMember(t, writers0), oneMember(t, alsf(t).il, writers), onePendingW(t, alsf(t).il, p(alsf(t).il := p(alsf(t).il) + W(alsf(t).iv, t) ')), pendingOk(p), pendingOk(p(alsf(t).il := p(alsf(t).il) + W(alsf(t).iv, t) ')), writersOk(p, writers), writersOk(p(alsf(t).il := p(alsf(t).il) + W(alsf(t).iv, t) '), writers), (h | t) | false = [] → mkPLIBgs(∅ ⊕ h0, ∅ ⊕ (h0 | true), h0) = mkPLIBgs((∅ ⊕ h)(alsf(t).il := alsf(t).iv), mem, h + (W(t, alsf(t).il, alsf(t).iv), false) ') ∧ mkPLIBls(t1, il, iv, ov) = alsf(t) ∧ apc0 = resWrite, ∀ t0. t0 ≠ t → FLITPSCLInv(gs, lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, mem, h), alsf(t0), apcf(t0)) ∧ labs(gs, lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, mem, h), alsf(t0), apcf(t0)), ∀ l. ((h | l) | t) | false = [], ∀ t0. lsf(t0).t = t0, ∀ t0. alsf(t0).t = t0 ⊦ (h | alsf(t1).t) | false = [] ∧ ∅ ⊕ (h0 | true) = mem ∧ ∅ ⊕ h0 = (∅ ⊕ h)(alsf(t1).il := alsf(t1).iv) ∧ abs(h0, writers0, p(alsf(t1).il := p(alsf(t1).il) + W(alsf(t1).iv, t1) ')) ∧ t = t1 ∧ apc0 = resWrite ∧ alsf(t1).il = il ∧ alsf(t1).iv = iv ∧ (((h0 | alsf(t1).il) | t1) | false = (W(t1, alsf(t1).il, alsf(t1).iv), false) ' ∨ ((h0 | alsf(t1).il) | t1) | false = []) |
lsf(t).l = alsf(t).il, lsf(t).t = t, alsf(t).t = t, lsf(t).v = alsf(t).iv, apcf(t) = invWrite, lsf0(t) = lsf(t), pcf(t) = W3, pcf0(t) = W4, (∅ ⊕ (h | true)) ⊕ p = ∅ ⊕ h, PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t), invWrite), abs(h, writers0, p), allReadsOK(h0), allReadsOK(h), allWritesOK(h0), allWritesOK(h), ctrok(ctr, writers), noPending(t, p), notMember(t, writers0), oneMember(t, alsf(t).il, writers), onePendingW(t, alsf(t).il, p(alsf(t).il := p(alsf(t).il) + W(alsf(t).iv, t) ')), pendingOk(p(alsf(t).il := p(alsf(t).il) + W(alsf(t).iv, t) ')), pendingOk(p), writersOk(p(alsf(t).il := p(alsf(t).il) + W(alsf(t).iv, t) '), writers), writersOk(p, writers), (h | t) | false = [] → mkPLIBgs(∅ ⊕ h0, ∅ ⊕ (h0 | true), h0) = mkPLIBgs((∅ ⊕ h)(alsf(t).il := alsf(t).iv), ∅ ⊕ (h | true), h + (W(t, alsf(t).il, alsf(t).iv), false) ') ∧ mkPLIBls(t1, il, iv, ov) = alsf(t) ∧ apc0 = resWrite, ∀ t0. alsf(t0).t = t0, ∀ t0. lsf(t0).t = t0, ∀ l. ((h | l) | t) | false = [], ∀ t0. t0 ≠ t → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ⊦ (h | alsf(t1).t) | false = [] ∧ ∅ ⊕ (h0 | true) = ∅ ⊕ (h | true) ∧ ∅ ⊕ h0 = (∅ ⊕ h)(alsf(t1).il := alsf(t1).iv) ∧ abs(h0, writers0, p(alsf(t1).il := p(alsf(t1).il) + W(alsf(t1).iv, t1) ')) ∧ t = t1 ∧ apc0 = resWrite ∧ alsf(t1).il = il ∧ alsf(t1).iv = iv ∧ (((h0 | alsf(t1).il) | t1) | false = (W(t1, alsf(t1).il, alsf(t1).iv), false) ' ∨ ((h0 | alsf(t1).il) | t1) | false = [])
| lsf(t).l = alsf(t).il, lsf(t).t = t, alsf(t).t = t, lsf(t).v = alsf(t).iv, apcf(t) = invWrite, lsf0(t) = lsf(t), pcf(t) = W3, pcf0(t) = W4, (∅ ⊕ (h | true)) ⊕ p = ∅ ⊕ h, PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t), invWrite), abs(h, writers0, p), allReadsOK(h0), allReadsOK(h), allWritesOK(h0), allWritesOK(h), ctrok(ctr, writers), noPending(t, p), notMember(t, writers0), oneMember(t, alsf(t).il, writers), onePendingW(t, alsf(t).il, p(alsf(t).il := p(alsf(t).il) + W(alsf(t).iv, t) ')), pendingOk(p(alsf(t).il := p(alsf(t).il) + W(alsf(t).iv, t) ')), pendingOk(p), writersOk(p(alsf(t).il := p(alsf(t).il) + W(alsf(t).iv, t) '), writers), writersOk(p, writers), (h | t) | false = [] → mkPLIBgs(∅ ⊕ h0, ∅ ⊕ (h0 | true), h0) = mkPLIBgs((∅ ⊕ h)(alsf(t).il := alsf(t).iv), ∅ ⊕ (h | true), h + (W(t, alsf(t).il, alsf(t).iv), false) ') ∧ mkPLIBls(t1, il, iv, ov) = alsf(t) ∧ apc0 = resWrite, ∀ t0. alsf(t0).t = t0, ∀ t0. lsf(t0).t = t0, ∀ l. ((h | l) | t) | false = [], ∀ t0. t0 ≠ t → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ⊦ (h | alsf(t1).t) | false = [] ∧ ∅ ⊕ (h0 | true) = ∅ ⊕ (h | true) ∧ ∅ ⊕ h0 = (∅ ⊕ h)(alsf(t1).il := alsf(t1).iv) ∧ abs(h0, writers0, p(alsf(t1).il := p(alsf(t1).il) + W(alsf(t1).iv, t1) ')) ∧ t = t1 ∧ apc0 = resWrite ∧ alsf(t1).il = il ∧ alsf(t1).iv = iv ∧ (((h0 | alsf(t1).il) | t1) | false = (W(t1, alsf(t1).il, alsf(t1).iv), false) ' ∨ ((h0 | alsf(t1).il) | t1) | false = []) |
lsf(t).l = il0, lsf(t).t = t, lsf(t).v = iv0, alsf(t) = mkPLIBls(t2, il0, iv0, ov0), apcf(t) = invWrite, lsf0(t) = lsf(t), pcf(t) = W3, pcf0(t) = W4, t2 = t, (∅ ⊕ (h | true)) ⊕ p = ∅ ⊕ h, PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t), invWrite), abs(h, writers0, p), allReadsOK(h), allReadsOK(h0), allWritesOK(h), allWritesOK(h0), ctrok(ctr, writers), noPending(t, p), notMember(t, writers0), oneMember(t, il0, writers), onePendingW(t, il0, p(il0 := p(il0) + W(iv0, t) ')), pendingOk(p), pendingOk(p(il0 := p(il0) + W(iv0, t) ')), writersOk(p, writers), writersOk(p(il0 := p(il0) + W(iv0, t) '), writers), (h | t) | false = [] → mkPLIBgs(∅ ⊕ h0, ∅ ⊕ (h0 | true), h0) = mkPLIBgs((∅ ⊕ h)(il0 := iv0), ∅ ⊕ (h | true), h + (W(t, il0, iv0), false) ') ∧ mkPLIBls(t1, il, iv, ov) = alsf(t) ∧ apc0 = resWrite, ∀ t0. t0 ≠ t → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)), ∀ l. ((h | l) | t) | false = [], ∀ t0. lsf(t0).t = t0, ∀ t0. alsf(t0).t = t0 ⊦ (h | alsf(t1).t) | false = [] ∧ ∅ ⊕ (h0 | true) = ∅ ⊕ (h | true) ∧ ∅ ⊕ h0 = (∅ ⊕ h)(alsf(t1).il := alsf(t1).iv) ∧ abs(h0, writers0, p(alsf(t1).il := p(alsf(t1).il) + W(alsf(t1).iv, t1) ')) ∧ t = t1 ∧ apc0 = resWrite ∧ alsf(t1).il = il ∧ alsf(t1).iv = iv ∧ (((h0 | alsf(t1).il) | t1) | false = (W(t1, alsf(t1).il, alsf(t1).iv), false) ' ∨ ((h0 | alsf(t1).il) | t1) | 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), iv0, t2, il0, ov0
| lsf(t).l = il0, lsf(t).t = t, lsf(t).v = iv0, alsf(t) = mkPLIBls(t2, il0, iv0, ov0), apcf(t) = invWrite, lsf0(t) = lsf(t), pcf(t) = W3, pcf0(t) = W4, t2 = t, (∅ ⊕ (h | true)) ⊕ p = ∅ ⊕ h, PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t), invWrite), abs(h, writers0, p), allReadsOK(h), allReadsOK(h0), allWritesOK(h), allWritesOK(h0), ctrok(ctr, writers), noPending(t, p), notMember(t, writers0), oneMember(t, il0, writers), onePendingW(t, il0, p(il0 := p(il0) + W(iv0, t) ')), pendingOk(p), pendingOk(p(il0 := p(il0) + W(iv0, t) ')), writersOk(p, writers), writersOk(p(il0 := p(il0) + W(iv0, t) '), writers), (h | t) | false = [] → mkPLIBgs(∅ ⊕ h0, ∅ ⊕ (h0 | true), h0) = mkPLIBgs((∅ ⊕ h)(il0 := iv0), ∅ ⊕ (h | true), h + (W(t, il0, iv0), false) ') ∧ mkPLIBls(t1, il, iv, ov) = alsf(t) ∧ apc0 = resWrite, ∀ t0. t0 ≠ t → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)), ∀ l. ((h | l) | t) | false = [], ∀ t0. lsf(t0).t = t0, ∀ t0. alsf(t0).t = t0 ⊦ (h | alsf(t1).t) | false = [] ∧ ∅ ⊕ (h0 | true) = ∅ ⊕ (h | true) ∧ ∅ ⊕ h0 = (∅ ⊕ h)(alsf(t1).il := alsf(t1).iv) ∧ abs(h0, writers0, p(alsf(t1).il := p(alsf(t1).il) + W(alsf(t1).iv, t1) ')) ∧ t = t1 ∧ apc0 = resWrite ∧ alsf(t1).il = il ∧ alsf(t1).iv = iv ∧ (((h0 | alsf(t1).il) | t1) | false = (W(t1, alsf(t1).il, alsf(t1).iv), false) ' ∨ ((h0 | alsf(t1).il) | t1) | false = []) |
lsf(t).t = t, alsf(t) = mkPLIBls(t, lsf(t).l, lsf(t).v, ov0), apcf(t) = invWrite, lsf0(t) = lsf(t), pcf(t) = W3, pcf0(t) = W4, (∅ ⊕ (h | true)) ⊕ p = ∅ ⊕ h, PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, lsf(t).l, lsf(t).v, ov0), invWrite), abs(h, writers0, p), allReadsOK(h0), allReadsOK(h), allWritesOK(h0), allWritesOK(h), ctrok(ctr, writers), noPending(t, p), notMember(t, writers0), oneMember(t, lsf(t).l, writers), onePendingW(t, lsf(t).l, p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')), pendingOk(p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')), pendingOk(p), writersOk(p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) '), writers), writersOk(p, writers), (h | t) | false = [] → mkPLIBgs(∅ ⊕ h0, ∅ ⊕ (h0 | true), h0) = mkPLIBgs((∅ ⊕ h)(lsf(t).l := lsf(t).v), ∅ ⊕ (h | true), h + (W(t, lsf(t).l, lsf(t).v), false) ') ∧ mkPLIBls(t1, il, iv, ov) = mkPLIBls(t, lsf(t).l, lsf(t).v, ov0) ∧ apc0 = resWrite, ∀ t0. alsf(t0).t = t0, ∀ t0. lsf(t0).t = t0, ∀ l. ((h | l) | t) | false = [], ∀ t0. t0 ≠ t → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ⊦ (h | alsf(t1).t) | false = [] ∧ ∅ ⊕ (h0 | true) = ∅ ⊕ (h | true) ∧ ∅ ⊕ h0 = (∅ ⊕ h)(alsf(t1).il := alsf(t1).iv) ∧ abs(h0, writers0, p(alsf(t1).il := p(alsf(t1).il) + W(alsf(t1).iv, t1) ')) ∧ t = t1 ∧ apc0 = resWrite ∧ alsf(t1).il = il ∧ alsf(t1).iv = iv ∧ (((h0 | alsf(t1).il) | t1) | false = (W(t1, alsf(t1).il, alsf(t1).iv), false) ' ∨ ((h0 | alsf(t1).il) | t1) | false = [])
| lsf(t).t = t, alsf(t) = mkPLIBls(t, lsf(t).l, lsf(t).v, ov0), apcf(t) = invWrite, lsf0(t) = lsf(t), pcf(t) = W3, pcf0(t) = W4, (∅ ⊕ (h | true)) ⊕ p = ∅ ⊕ h, PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, lsf(t).l, lsf(t).v, ov0), invWrite), abs(h, writers0, p), allReadsOK(h0), allReadsOK(h), allWritesOK(h0), allWritesOK(h), ctrok(ctr, writers), noPending(t, p), notMember(t, writers0), oneMember(t, lsf(t).l, writers), onePendingW(t, lsf(t).l, p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')), pendingOk(p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')), pendingOk(p), writersOk(p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) '), writers), writersOk(p, writers), (h | t) | false = [] → mkPLIBgs(∅ ⊕ h0, ∅ ⊕ (h0 | true), h0) = mkPLIBgs((∅ ⊕ h)(lsf(t).l := lsf(t).v), ∅ ⊕ (h | true), h + (W(t, lsf(t).l, lsf(t).v), false) ') ∧ mkPLIBls(t1, il, iv, ov) = mkPLIBls(t, lsf(t).l, lsf(t).v, ov0) ∧ apc0 = resWrite, ∀ t0. alsf(t0).t = t0, ∀ t0. lsf(t0).t = t0, ∀ l. ((h | l) | t) | false = [], ∀ t0. t0 ≠ t → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ⊦ (h | alsf(t1).t) | false = [] ∧ ∅ ⊕ (h0 | true) = ∅ ⊕ (h | true) ∧ ∅ ⊕ h0 = (∅ ⊕ h)(alsf(t1).il := alsf(t1).iv) ∧ abs(h0, writers0, p(alsf(t1).il := p(alsf(t1).il) + W(alsf(t1).iv, t1) ')) ∧ t = t1 ∧ apc0 = resWrite ∧ alsf(t1).il = il ∧ alsf(t1).iv = iv ∧ (((h0 | alsf(t1).il) | t1) | false = (W(t1, alsf(t1).il, alsf(t1).iv), false) ' ∨ ((h0 | alsf(t1).il) | t1) | false = []) |
lsf(t).t = t, alsf(t) = mkPLIBls(t, lsf(t).l, lsf(t).v, ov0), alsf(t1) = mkPLIBls(t2, il0, iv0, ov1), apcf(t) = invWrite, lsf0(t) = lsf(t), pcf(t) = W3, pcf0(t) = W4, (∅ ⊕ (h | true)) ⊕ p = ∅ ⊕ h, PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, lsf(t).l, lsf(t).v, ov0), invWrite), abs(h, writers0, p), allReadsOK(h), allReadsOK(h0), allWritesOK(h), allWritesOK(h0), ctrok(ctr, writers), noPending(t, p), notMember(t, writers0), oneMember(t, lsf(t).l, writers), onePendingW(t, lsf(t).l, p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')), pendingOk(p), pendingOk(p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')), writersOk(p, writers), writersOk(p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) '), writers), (h | t) | false = [] → mkPLIBgs(∅ ⊕ h0, ∅ ⊕ (h0 | true), h0) = mkPLIBgs((∅ ⊕ h)(lsf(t).l := lsf(t).v), ∅ ⊕ (h | true), h + (W(t, lsf(t).l, lsf(t).v), false) ') ∧ mkPLIBls(t1, il, iv, ov) = mkPLIBls(t, lsf(t).l, lsf(t).v, ov0) ∧ apc0 = resWrite, ∀ t0. t0 ≠ t → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)), ∀ l. ((h | l) | t) | false = [], ∀ t0. lsf(t0).t = t0, ∀ t0. alsf(t0).t = t0 ⊦ (h | t2) | false = [] ∧ ∅ ⊕ (h0 | true) = ∅ ⊕ (h | true) ∧ ∅ ⊕ h0 = (∅ ⊕ h)(il0 := iv0) ∧ abs(h0, writers0, p(il0 := p(il0) + W(iv0, t1) ')) ∧ t = t1 ∧ apc0 = resWrite ∧ il0 = il ∧ iv0 = iv ∧ (((h0 | il0) | t1) | false = (W(t1, il0, iv0), false) ' ∨ ((h0 | il0) | t1) | 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(t1), iv0, t2, il0, ov1
| lsf(t).t = t, alsf(t) = mkPLIBls(t, lsf(t).l, lsf(t).v, ov0), alsf(t1) = mkPLIBls(t2, il0, iv0, ov1), apcf(t) = invWrite, lsf0(t) = lsf(t), pcf(t) = W3, pcf0(t) = W4, (∅ ⊕ (h | true)) ⊕ p = ∅ ⊕ h, PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, lsf(t).l, lsf(t).v, ov0), invWrite), abs(h, writers0, p), allReadsOK(h), allReadsOK(h0), allWritesOK(h), allWritesOK(h0), ctrok(ctr, writers), noPending(t, p), notMember(t, writers0), oneMember(t, lsf(t).l, writers), onePendingW(t, lsf(t).l, p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')), pendingOk(p), pendingOk(p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')), writersOk(p, writers), writersOk(p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) '), writers), (h | t) | false = [] → mkPLIBgs(∅ ⊕ h0, ∅ ⊕ (h0 | true), h0) = mkPLIBgs((∅ ⊕ h)(lsf(t).l := lsf(t).v), ∅ ⊕ (h | true), h + (W(t, lsf(t).l, lsf(t).v), false) ') ∧ mkPLIBls(t1, il, iv, ov) = mkPLIBls(t, lsf(t).l, lsf(t).v, ov0) ∧ apc0 = resWrite, ∀ t0. t0 ≠ t → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)), ∀ l. ((h | l) | t) | false = [], ∀ t0. lsf(t0).t = t0, ∀ t0. alsf(t0).t = t0 ⊦ (h | t2) | false = [] ∧ ∅ ⊕ (h0 | true) = ∅ ⊕ (h | true) ∧ ∅ ⊕ h0 = (∅ ⊕ h)(il0 := iv0) ∧ abs(h0, writers0, p(il0 := p(il0) + W(iv0, t1) ')) ∧ t = t1 ∧ apc0 = resWrite ∧ il0 = il ∧ iv0 = iv ∧ (((h0 | il0) | t1) | false = (W(t1, il0, iv0), false) ' ∨ ((h0 | il0) | t1) | false = []) |
lsf(t).t = t, alsf(t1) = mkPLIBls(t2, il0, iv0, ov1), alsf(t) = mkPLIBls(t, lsf(t).l, lsf(t).v, ov0), apcf(t) = invWrite, lsf0(t) = lsf(t), pcf(t) = W3, pcf0(t) = W4, (∅ ⊕ (h | true)) ⊕ p = ∅ ⊕ h, PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, lsf(t).l, lsf(t).v, ov0), invWrite), abs(h, writers0, p), allReadsOK(h0), allReadsOK(h), allWritesOK(h0), allWritesOK(h), ctrok(ctr, writers), noPending(t, p), notMember(t, writers0), oneMember(t, lsf(t).l, writers), onePendingW(t, lsf(t).l, p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')), pendingOk(p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')), pendingOk(p), writersOk(p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) '), writers), writersOk(p, writers), (h | t) | false = [] → mkPLIBgs(∅ ⊕ h0, ∅ ⊕ (h0 | true), h0) = mkPLIBgs((∅ ⊕ h)(lsf(t).l := lsf(t).v), ∅ ⊕ (h | true), h + (W(t, lsf(t).l, lsf(t).v), false) ') ∧ mkPLIBls(t1, il, iv, ov) = mkPLIBls(t, lsf(t).l, lsf(t).v, ov0) ∧ apc0 = resWrite, ∀ t0. alsf(t0).t = t0, ∀ t0. lsf(t0).t = t0, ∀ l. ((h | l) | t) | false = [], ∀ t0. t0 ≠ t → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ⊦ (h | t2) | false = [] ∧ ∅ ⊕ (h0 | true) = ∅ ⊕ (h | true) ∧ ∅ ⊕ h0 = (∅ ⊕ h)(il := iv) ∧ abs(h0, writers0, p(il := p(il) + W(iv, t1) ')) ∧ t = t1 ∧ apc0 = resWrite ∧ il0 = il ∧ iv0 = iv ∧ (((h0 | il) | t1) | false = (W(t1, il, iv), false) ' ∨ ((h0 | il) | t1) | false = [])
| lsf(t).t = t, alsf(t1) = mkPLIBls(t2, il0, iv0, ov1), alsf(t) = mkPLIBls(t, lsf(t).l, lsf(t).v, ov0), apcf(t) = invWrite, lsf0(t) = lsf(t), pcf(t) = W3, pcf0(t) = W4, (∅ ⊕ (h | true)) ⊕ p = ∅ ⊕ h, PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, lsf(t).l, lsf(t).v, ov0), invWrite), abs(h, writers0, p), allReadsOK(h0), allReadsOK(h), allWritesOK(h0), allWritesOK(h), ctrok(ctr, writers), noPending(t, p), notMember(t, writers0), oneMember(t, lsf(t).l, writers), onePendingW(t, lsf(t).l, p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')), pendingOk(p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')), pendingOk(p), writersOk(p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) '), writers), writersOk(p, writers), (h | t) | false = [] → mkPLIBgs(∅ ⊕ h0, ∅ ⊕ (h0 | true), h0) = mkPLIBgs((∅ ⊕ h)(lsf(t).l := lsf(t).v), ∅ ⊕ (h | true), h + (W(t, lsf(t).l, lsf(t).v), false) ') ∧ mkPLIBls(t1, il, iv, ov) = mkPLIBls(t, lsf(t).l, lsf(t).v, ov0) ∧ apc0 = resWrite, ∀ t0. alsf(t0).t = t0, ∀ t0. lsf(t0).t = t0, ∀ l. ((h | l) | t) | false = [], ∀ t0. t0 ≠ t → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ⊦ (h | t2) | false = [] ∧ ∅ ⊕ (h0 | true) = ∅ ⊕ (h | true) ∧ ∅ ⊕ h0 = (∅ ⊕ h)(il := iv) ∧ abs(h0, writers0, p(il := p(il) + W(iv, t1) ')) ∧ t = t1 ∧ apc0 = resWrite ∧ il0 = il ∧ iv0 = iv ∧ (((h0 | il) | t1) | false = (W(t1, il, iv), false) ' ∨ ((h0 | il) | t1) | false = []) |
⊦ (h | t) | false = [] ↔ (∀ l. ((h | l) | t) | false = [])
lsf(t).t = t, alsf(t) = mkPLIBls(t, lsf(t).l, lsf(t).v, ov0), alsf(t1) = mkPLIBls(t2, il0, iv0, ov1), apcf(t) = invWrite, lsf0(t) = lsf(t), pcf(t) = W3, pcf0(t) = W4, (∅ ⊕ (h | true)) ⊕ p = ∅ ⊕ h, PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, lsf(t).l, lsf(t).v, ov0), invWrite), abs(h, writers0, p), allReadsOK(h), allReadsOK(h0), allWritesOK(h), allWritesOK(h0), ctrok(ctr, writers), noPending(t, p), notMember(t, writers0), oneMember(t, lsf(t).l, writers), onePendingW(t, lsf(t).l, p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')), pendingOk(p), pendingOk(p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')), writersOk(p, writers), writersOk(p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) '), writers), (∀ l. ((h | l) | t) | false = []) → mkPLIBgs(∅ ⊕ h0, ∅ ⊕ (h0 | true), h0) = mkPLIBgs((∅ ⊕ h)(lsf(t).l := lsf(t).v), ∅ ⊕ (h | true), h + (W(t, lsf(t).l, lsf(t).v), false) ') ∧ mkPLIBls(t1, il, iv, ov) = mkPLIBls(t, lsf(t).l, lsf(t).v, ov0) ∧ apc0 = resWrite, ∀ t0. t0 ≠ t → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)), ∀ l. ((h | l) | t) | false = [], ∀ t0. lsf(t0).t = t0, ∀ t0. alsf(t0).t = t0 ⊦ (h | t2) | false = [] ∧ ∅ ⊕ (h0 | true) = ∅ ⊕ (h | true) ∧ ∅ ⊕ h0 = (∅ ⊕ h)(il := iv) ∧ abs(h0, writers0, p(il := p(il) + W(iv, t1) ')) ∧ t = t1 ∧ apc0 = resWrite ∧ il0 = il ∧ iv0 = iv ∧ (((h0 | il) | t1) | false = (W(t1, il, iv), false) ' ∨ ((h0 | il) | t1) | false = [])
Used terms: h, t
| ⊦ (h | t) | false = [] ↔ (∀ l. ((h | l) | t) | false = []) |
| lsf(t).t = t, alsf(t) = mkPLIBls(t, lsf(t).l, lsf(t).v, ov0), alsf(t1) = mkPLIBls(t2, il0, iv0, ov1), apcf(t) = invWrite, lsf0(t) = lsf(t), pcf(t) = W3, pcf0(t) = W4, (∅ ⊕ (h | true)) ⊕ p = ∅ ⊕ h, PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, lsf(t).l, lsf(t).v, ov0), invWrite), abs(h, writers0, p), allReadsOK(h), allReadsOK(h0), allWritesOK(h), allWritesOK(h0), ctrok(ctr, writers), noPending(t, p), notMember(t, writers0), oneMember(t, lsf(t).l, writers), onePendingW(t, lsf(t).l, p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')), pendingOk(p), pendingOk(p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')), writersOk(p, writers), writersOk(p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) '), writers), (∀ l. ((h | l) | t) | false = []) → mkPLIBgs(∅ ⊕ h0, ∅ ⊕ (h0 | true), h0) = mkPLIBgs((∅ ⊕ h)(lsf(t).l := lsf(t).v), ∅ ⊕ (h | true), h + (W(t, lsf(t).l, lsf(t).v), false) ') ∧ mkPLIBls(t1, il, iv, ov) = mkPLIBls(t, lsf(t).l, lsf(t).v, ov0) ∧ apc0 = resWrite, ∀ t0. t0 ≠ t → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)), ∀ l. ((h | l) | t) | false = [], ∀ t0. lsf(t0).t = t0, ∀ t0. alsf(t0).t = t0 ⊦ (h | t2) | false = [] ∧ ∅ ⊕ (h0 | true) = ∅ ⊕ (h | true) ∧ ∅ ⊕ h0 = (∅ ⊕ h)(il := iv) ∧ abs(h0, writers0, p(il := p(il) + W(iv, t1) ')) ∧ t = t1 ∧ apc0 = resWrite ∧ il0 = il ∧ iv0 = iv ∧ (((h0 | il) | t1) | false = (W(t1, il, iv), false) ' ∨ ((h0 | il) | t1) | false = []) |
lsf(t).t = t, alsf(t) = mkPLIBls(t, lsf(t).l, lsf(t).v, ov1), apcf(t) = invWrite, lsf0(t) = lsf(t), pcf(t) = W3, pcf0(t) = W4, (∅ ⊕ (h | true)) ⊕ p = ∅ ⊕ h, PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, lsf(t).l, lsf(t).v, ov1), invWrite), abs(h, writers0, p), allReadsOK(h), allReadsOK(h + (W(t, lsf(t).l, lsf(t).v), false) '), allWritesOK(h), allWritesOK(h + (W(t, lsf(t).l, lsf(t).v), false) '), ctrok(ctr, writers), noPending(t, p), notMember(t, writers0), oneMember(t, lsf(t).l, writers), onePendingW(t, lsf(t).l, p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')), pendingOk(p), pendingOk(p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')), writersOk(p, writers), writersOk(p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) '), writers), ∀ t0. t0 ≠ t → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)), ∀ l. ((h | l) | t) | false = [], ∀ t0. lsf(t0).t = t0, ∀ t0. alsf(t0).t = t0 ⊦ (h | t) | false = [] ∧ abs(h + (W(t, lsf(t).l, lsf(t).v), false) ', writers0, p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')) ∧ ((h | lsf(t).l) | t) | false = []
Used simplifier rules: ⊦ mkPLIBls(t, il, iv, iv0) = mkPLIBls(t0, il0, iv1, iv2) ↔ t = t0 ∧ il = il0 ∧ iv = iv1 ∧ iv0 = iv2; (ws) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ h + (e, false) ' | false = (h | false) + (e, false) '; (s) ⊦ W(t, l, v).t = t; (s) ⊦ (e, b) ' | t = (t = e.t ⊃ (e, b) ';[]); (s) ⊦ h + h0 | t = (h | t) + (h0 | t); (s) ⊦ W(t, l, v).l = l; (s) ⊦ vpe ' | l = (vpe._1.l = l ⊃ vpe ';[]); (s) ⊦ h + h0 | l0 = (h | l0) + (h0 | l0); (s) ⊦ a ' = x + a0 ' ↔ a = a0 ∧ x = []; (ws) ⊦ mem ⊕ (h + (W(t, l, v), b) ') = (mem ⊕ h)(l := v); (s) ⊦ h + (e, false) ' | true = h | true; (s) ⊦ a ∈ a0 ' ↔ a = a0; (s) ⊦ a ∈ x + y ↔ a ∈ x ∨ a ∈ y; (s) in-15: ⊦ x + a ' = y → a ∈ y; (forward) from specification list ⊦ mkPLIBgs(vm, vm0, h) = mkPLIBgs(vm1, vm2, h0) ↔ vm = vm1 ∧ vm0 = vm2 ∧ h = h0; (ws)
| lsf(t).t = t, alsf(t) = mkPLIBls(t, lsf(t).l, lsf(t).v, ov1), apcf(t) = invWrite, lsf0(t) = lsf(t), pcf(t) = W3, pcf0(t) = W4, (∅ ⊕ (h | true)) ⊕ p = ∅ ⊕ h, PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, lsf(t).l, lsf(t).v, ov1), invWrite), abs(h, writers0, p), allReadsOK(h), allReadsOK(h + (W(t, lsf(t).l, lsf(t).v), false) '), allWritesOK(h), allWritesOK(h + (W(t, lsf(t).l, lsf(t).v), false) '), ctrok(ctr, writers), noPending(t, p), notMember(t, writers0), oneMember(t, lsf(t).l, writers), onePendingW(t, lsf(t).l, p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')), pendingOk(p), pendingOk(p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')), writersOk(p, writers), writersOk(p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) '), writers), ∀ t0. t0 ≠ t → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)), ∀ l. ((h | l) | t) | false = [], ∀ t0. lsf(t0).t = t0, ∀ t0. alsf(t0).t = t0 ⊦ (h | t) | false = [] ∧ abs(h + (W(t, lsf(t).l, lsf(t).v), false) ', writers0, p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')) ∧ ((h | lsf(t).l) | t) | false = [] |
⊦ (h | t) | false = [] ↔ (∀ l. ((h | l) | t) | false = [])
lsf(t).t = t, alsf(t) = mkPLIBls(t, lsf(t).l, lsf(t).v, ov1), apcf(t) = invWrite, lsf0(t) = lsf(t), pcf(t) = W3, pcf0(t) = W4, (∅ ⊕ (h | true)) ⊕ p = ∅ ⊕ h, PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, lsf(t).l, lsf(t).v, ov1), invWrite), abs(h, writers0, p), allReadsOK(h + (W(t, lsf(t).l, lsf(t).v), false) '), allReadsOK(h), allWritesOK(h + (W(t, lsf(t).l, lsf(t).v), false) '), allWritesOK(h), ctrok(ctr, writers), noPending(t, p), notMember(t, writers0), oneMember(t, lsf(t).l, writers), onePendingW(t, lsf(t).l, p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')), pendingOk(p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')), pendingOk(p), writersOk(p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) '), writers), writersOk(p, writers), ∀ t0. alsf(t0).t = t0, ∀ t0. lsf(t0).t = t0, ∀ l. ((h | l) | t) | false = [], ∀ t0. t0 ≠ t → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ⊦ (∀ l. ((h | l) | t) | false = []) ∧ abs(h + (W(t, lsf(t).l, lsf(t).v), false) ', writers0, p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')) ∧ ((h | lsf(t).l) | t) | false = []
Used terms: h, t
| ⊦ (h | t) | false = [] ↔ (∀ l. ((h | l) | t) | false = []) |
| lsf(t).t = t, alsf(t) = mkPLIBls(t, lsf(t).l, lsf(t).v, ov1), apcf(t) = invWrite, lsf0(t) = lsf(t), pcf(t) = W3, pcf0(t) = W4, (∅ ⊕ (h | true)) ⊕ p = ∅ ⊕ h, PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, lsf(t).l, lsf(t).v, ov1), invWrite), abs(h, writers0, p), allReadsOK(h + (W(t, lsf(t).l, lsf(t).v), false) '), allReadsOK(h), allWritesOK(h + (W(t, lsf(t).l, lsf(t).v), false) '), allWritesOK(h), ctrok(ctr, writers), noPending(t, p), notMember(t, writers0), oneMember(t, lsf(t).l, writers), onePendingW(t, lsf(t).l, p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')), pendingOk(p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')), pendingOk(p), writersOk(p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) '), writers), writersOk(p, writers), ∀ t0. alsf(t0).t = t0, ∀ t0. lsf(t0).t = t0, ∀ l. ((h | l) | t) | false = [], ∀ t0. t0 ≠ t → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ⊦ (∀ l. ((h | l) | t) | false = []) ∧ abs(h + (W(t, lsf(t).l, lsf(t).v), false) ', writers0, p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')) ∧ ((h | lsf(t).l) | t) | false = [] |
lsf(t).t = t, alsf(t) = mkPLIBls(t, lsf(t).l, lsf(t).v, ov1), apcf(t) = invWrite, lsf0(t) = lsf(t), pcf(t) = W3, pcf0(t) = W4, (∅ ⊕ (h | true)) ⊕ p = ∅ ⊕ h, PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, lsf(t).l, lsf(t).v, ov1), invWrite), abs(h, writers0, p), allReadsOK(h), allReadsOK(h + (W(t, lsf(t).l, lsf(t).v), false) '), allWritesOK(h), allWritesOK(h + (W(t, lsf(t).l, lsf(t).v), false) '), ctrok(ctr, writers), noPending(t, p), notMember(t, writers0), oneMember(t, lsf(t).l, writers), onePendingW(t, lsf(t).l, p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')), pendingOk(p), pendingOk(p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')), writersOk(p, writers), writersOk(p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) '), writers), ∀ t0. t0 ≠ t → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)), ∀ l. ((h | l) | t) | false = [], ∀ t0. lsf(t0).t = t0, ∀ t0. alsf(t0).t = t0 ⊦ abs(h + (W(t, lsf(t).l, lsf(t).v), false) ', writers0, p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')) ∧ ((h | lsf(t).l) | t) | false = []
| lsf(t).t = t, alsf(t) = mkPLIBls(t, lsf(t).l, lsf(t).v, ov1), apcf(t) = invWrite, lsf0(t) = lsf(t), pcf(t) = W3, pcf0(t) = W4, (∅ ⊕ (h | true)) ⊕ p = ∅ ⊕ h, PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, lsf(t).l, lsf(t).v, ov1), invWrite), abs(h, writers0, p), allReadsOK(h), allReadsOK(h + (W(t, lsf(t).l, lsf(t).v), false) '), allWritesOK(h), allWritesOK(h + (W(t, lsf(t).l, lsf(t).v), false) '), ctrok(ctr, writers), noPending(t, p), notMember(t, writers0), oneMember(t, lsf(t).l, writers), onePendingW(t, lsf(t).l, p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')), pendingOk(p), pendingOk(p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')), writersOk(p, writers), writersOk(p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) '), writers), ∀ t0. t0 ≠ t → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)), ∀ l. ((h | l) | t) | false = [], ∀ t0. lsf(t0).t = t0, ∀ t0. alsf(t0).t = t0 ⊦ abs(h + (W(t, lsf(t).l, lsf(t).v), false) ', writers0, p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')) ∧ ((h | lsf(t).l) | t) | false = [] |
⊦ abs(h + (W(t, l, v), false) ', rs, p(l := p(l) + W(v, t) ')) ↔ abs(h, rs, p)
lsf(t).t = t, alsf(t) = mkPLIBls(t, lsf(t).l, lsf(t).v, ov1), apcf(t) = invWrite, lsf0(t) = lsf(t), pcf(t) = W3, pcf0(t) = W4, (∅ ⊕ (h | true)) ⊕ p = ∅ ⊕ h, PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, lsf(t).l, lsf(t).v, ov1), invWrite), abs(h, writers0, p), allReadsOK(h + (W(t, lsf(t).l, lsf(t).v), false) '), allReadsOK(h), allWritesOK(h + (W(t, lsf(t).l, lsf(t).v), false) '), allWritesOK(h), ctrok(ctr, writers), noPending(t, p), notMember(t, writers0), oneMember(t, lsf(t).l, writers), onePendingW(t, lsf(t).l, p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')), pendingOk(p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')), pendingOk(p), writersOk(p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) '), writers), writersOk(p, writers), ∀ t0. alsf(t0).t = t0, ∀ t0. lsf(t0).t = t0, ∀ l. ((h | l) | t) | false = [], ∀ t0. t0 ≠ t → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ⊦ abs(h, writers0, p) ∧ ((h | lsf(t).l) | t) | false = []
Used terms: lsf(t).v, lsf(t).l, t, writers0, p, h
| ⊦ abs(h + (W(t, l, v), false) ', rs, p(l := p(l) + W(v, t) ')) ↔ abs(h, rs, p) |
| lsf(t).t = t, alsf(t) = mkPLIBls(t, lsf(t).l, lsf(t).v, ov1), apcf(t) = invWrite, lsf0(t) = lsf(t), pcf(t) = W3, pcf0(t) = W4, (∅ ⊕ (h | true)) ⊕ p = ∅ ⊕ h, PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, lsf(t).l, lsf(t).v, ov1), invWrite), abs(h, writers0, p), allReadsOK(h + (W(t, lsf(t).l, lsf(t).v), false) '), allReadsOK(h), allWritesOK(h + (W(t, lsf(t).l, lsf(t).v), false) '), allWritesOK(h), ctrok(ctr, writers), noPending(t, p), notMember(t, writers0), oneMember(t, lsf(t).l, writers), onePendingW(t, lsf(t).l, p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')), pendingOk(p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')), pendingOk(p), writersOk(p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) '), writers), writersOk(p, writers), ∀ t0. alsf(t0).t = t0, ∀ t0. lsf(t0).t = t0, ∀ l. ((h | l) | t) | false = [], ∀ t0. t0 ≠ t → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ⊦ abs(h, writers0, p) ∧ ((h | lsf(t).l) | t) | false = [] |
lsf(t).t = t, alsf(t) = mkPLIBls(t, lsf(t).l, lsf(t).v, ov1), apcf(t) = invWrite, lsf0(t) = lsf(t), pcf(t) = W3, pcf0(t) = W4, (∅ ⊕ (h | true)) ⊕ p = ∅ ⊕ h, ((h | lsf(t).l) | t) | false ≠ [], PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, lsf(t).l, lsf(t).v, ov1), invWrite), abs(h, writers0, p), allReadsOK(h), allReadsOK(h + (W(t, lsf(t).l, lsf(t).v), false) '), allWritesOK(h), allWritesOK(h + (W(t, lsf(t).l, lsf(t).v), false) '), ctrok(ctr, writers), noPending(t, p), notMember(t, writers0), oneMember(t, lsf(t).l, writers), onePendingW(t, lsf(t).l, p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')), pendingOk(p), pendingOk(p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')), writersOk(p, writers), writersOk(p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) '), writers), ∀ t0. t0 ≠ t → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)), ∀ l. ((h | l) | t) | false = [], ∀ t0. lsf(t0).t = t0, ∀ t0. alsf(t0).t = t0 ⊦
| lsf(t).t = t, alsf(t) = mkPLIBls(t, lsf(t).l, lsf(t).v, ov1), apcf(t) = invWrite, lsf0(t) = lsf(t), pcf(t) = W3, pcf0(t) = W4, (∅ ⊕ (h | true)) ⊕ p = ∅ ⊕ h, ((h | lsf(t).l) | t) | false ≠ [], PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, lsf(t).l, lsf(t).v, ov1), invWrite), abs(h, writers0, p), allReadsOK(h), allReadsOK(h + (W(t, lsf(t).l, lsf(t).v), false) '), allWritesOK(h), allWritesOK(h + (W(t, lsf(t).l, lsf(t).v), false) '), ctrok(ctr, writers), noPending(t, p), notMember(t, writers0), oneMember(t, lsf(t).l, writers), onePendingW(t, lsf(t).l, p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')), pendingOk(p), pendingOk(p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) ')), writersOk(p, writers), writersOk(p(lsf(t).l := p(lsf(t).l) + W(lsf(t).v, t) '), writers), ∀ t0. t0 ≠ t → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)), ∀ l. ((h | l) | t) | false = [], ∀ t0. lsf(t0).t = t0, ∀ t0. alsf(t0).t = t0 ⊦ |
alsf(t) = mkPLIBls(t, l0, v, ov1), apcf(t) = invWrite, lsf(t) = mkFLITPSCls(t1, l0, v), lsf0(t) = lsf(t), pcf(t) = W3, pcf0(t) = W4, t1 = t, (∅ ⊕ (h | true)) ⊕ p = ∅ ⊕ h, ((h | l0) | t) | false ≠ [], PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l0, v, ov1), invWrite), abs(h, writers0, p), allReadsOK(h + (W(t, l0, v), false) '), allReadsOK(h), allWritesOK(h + (W(t, l0, v), false) '), allWritesOK(h), ctrok(ctr, writers), noPending(t, p), notMember(t, writers0), oneMember(t, l0, writers), onePendingW(t, l0, p(l0 := p(l0) + W(v, t) ')), pendingOk(p(l0 := p(l0) + W(v, t) ')), pendingOk(p), writersOk(p(l0 := p(l0) + W(v, t) '), writers), writersOk(p, writers), ∀ t0. alsf(t0).t = t0, ∀ t0. lsf(t0).t = t0, ∀ l. ((h | l) | t) | false = [], ∀ t0. t0 ≠ t → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ⊦
Used simplifier rules: ⊦ (t = ls.t ∧ l = ls.l) ∧ v = ls.v ↔ ls = mkFLITPSCls(t, l, v); (elim) Used terms: lsf(t), t1, l0, v
| alsf(t) = mkPLIBls(t, l0, v, ov1), apcf(t) = invWrite, lsf(t) = mkFLITPSCls(t1, l0, v), lsf0(t) = lsf(t), pcf(t) = W3, pcf0(t) = W4, t1 = t, (∅ ⊕ (h | true)) ⊕ p = ∅ ⊕ h, ((h | l0) | t) | false ≠ [], PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l0, v, ov1), invWrite), abs(h, writers0, p), allReadsOK(h + (W(t, l0, v), false) '), allReadsOK(h), allWritesOK(h + (W(t, l0, v), false) '), allWritesOK(h), ctrok(ctr, writers), noPending(t, p), notMember(t, writers0), oneMember(t, l0, writers), onePendingW(t, l0, p(l0 := p(l0) + W(v, t) ')), pendingOk(p(l0 := p(l0) + W(v, t) ')), pendingOk(p), writersOk(p(l0 := p(l0) + W(v, t) '), writers), writersOk(p, writers), ∀ t0. alsf(t0).t = t0, ∀ t0. lsf(t0).t = t0, ∀ l. ((h | l) | t) | false = [], ∀ t0. t0 ≠ t → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ⊦ |
alsf(t) = mkPLIBls(t, l0, v, ov1), apcf(t) = invWrite, lsf(t) = mkFLITPSCls(t, l0, v), lsf0(t) = mkFLITPSCls(t, l0, v), pcf(t) = W3, pcf0(t) = W4, (∅ ⊕ (h | true)) ⊕ p = ∅ ⊕ h, ((h | l0) | t) | false ≠ [], PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l0, v, ov1), invWrite), abs(h, writers0, p), allReadsOK(h), allReadsOK(h + (W(t, l0, v), false) '), allWritesOK(h), allWritesOK(h + (W(t, l0, v), false) '), ctrok(ctr, writers), noPending(t, p), notMember(t, writers0), oneMember(t, l0, writers), onePendingW(t, l0, p(l0 := p(l0) + W(v, t) ')), pendingOk(p), pendingOk(p(l0 := p(l0) + W(v, t) ')), writersOk(p, writers), writersOk(p(l0 := p(l0) + W(v, t) '), writers), ∀ t0. t0 ≠ t → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)), ∀ l. ((h | l) | t) | false = [], ∀ t0. lsf(t0).t = t0, ∀ t0. alsf(t0).t = t0 ⊦
| alsf(t) = mkPLIBls(t, l0, v, ov1), apcf(t) = invWrite, lsf(t) = mkFLITPSCls(t, l0, v), lsf0(t) = mkFLITPSCls(t, l0, v), pcf(t) = W3, pcf0(t) = W4, (∅ ⊕ (h | true)) ⊕ p = ∅ ⊕ h, ((h | l0) | t) | false ≠ [], PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), mkPLIBls(t, l0, v, ov1), invWrite), abs(h, writers0, p), allReadsOK(h), allReadsOK(h + (W(t, l0, v), false) '), allWritesOK(h), allWritesOK(h + (W(t, l0, v), false) '), ctrok(ctr, writers), noPending(t, p), notMember(t, writers0), oneMember(t, l0, writers), onePendingW(t, l0, p(l0 := p(l0) + W(v, t) ')), pendingOk(p), pendingOk(p(l0 := p(l0) + W(v, t) ')), writersOk(p, writers), writersOk(p(l0 := p(l0) + W(v, t) '), writers), ∀ t0. t0 ≠ t → FLITPSCLInv(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0)) ∧ PLIBLInv(mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)) ∧ labs(mkFLITPSCgs(∅ ⊕ (h | true), p, ctr, writers, writers0), lsf(t0), pcf(t0), mkPLIBgs(∅ ⊕ h, ∅ ⊕ (h | true), h), alsf(t0), apcf(t0)), ∀ l. ((h | l) | t) | false = [], ∀ t0. lsf(t0).t = t0, ∀ t0. alsf(t0).t = t0 ⊦ |
Used terms: l0
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.