| FLITPSCInv(gs, lsf, pcf), FLITPSCInv(gs0, lsf0, pcf0), PLIBInv(ags, alsf, apcf), flitpscStep(mkstate(gs, lsf, pcf), globalPSCPERSIST_W(l), mkstate(gs0, lsf0, pcf0)), abs(mkstate(gs, lsf, pcf), mkstate(ags, alsf, apcf)) ⊦ ∃ ags0, alsf0, apcf0. plibStep(mkstate(ags, alsf, apcf), globalAPersist(l), mkstate(ags0, alsf0, apcf0)) ∧ abs(mkstate(gs0, lsf0, pcf0), mkstate(ags0, alsf0, apcf0)) |
FLITPSCInv(gs0, lsf0, pcf0), FLITPSCInv(gs, lsf, pcf), PLIBInv(ags, alsf, apcf), abs(mkstate(gs, lsf, pcf), mkstate(ags, alsf, apcf)), flitpscStep(mkstate(gs, lsf, pcf), globalPSCPERSIST_W(l), mkstate(gs0, lsf0, pcf0)) ⊦ ∃ ags0, alsf0, apcf0. plibStep(mkstate(ags, alsf, apcf), globalAPersist(l), mkstate(ags0, alsf0, apcf0)) ∧ abs(mkstate(gs0, lsf0, pcf0), mkstate(ags0, alsf0, apcf0))
| FLITPSCInv(gs0, lsf0, pcf0), FLITPSCInv(gs, lsf, pcf), PLIBInv(ags, alsf, apcf), abs(mkstate(gs, lsf, pcf), mkstate(ags, alsf, apcf)), flitpscStep(mkstate(gs, lsf, pcf), globalPSCPERSIST_W(l), mkstate(gs0, lsf0, pcf0)) ⊦ ∃ ags0, alsf0, apcf0. plibStep(mkstate(ags, alsf, apcf), globalAPersist(l), mkstate(ags0, alsf0, apcf0)) ∧ abs(mkstate(gs0, lsf0, pcf0), mkstate(ags0, alsf0, apcf0)) |
ags.pm = gs.mem, ags.vm = gs.mem ⊕ gs.p, gs.p(l0) ≠ [], firstPersistW(gs.p(l0)) < # gs.p(l0), FLITPSCInv((gs.mem:= gs.mem(l0 := gs.p(l0)[firstPersistW(gs.p(l0))].val)).p:= gs.p(l0 := gs.p(l0) -p firstPersistW(gs.p(l0))), lsf, pcf), FLITPSCInv(gs, lsf, pcf), PLIBInv(ags, alsf, apcf), abs(ags.h, gs.readers, gs.p), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ gs.mem(l0 := ags.h[firstVolWrite(l0, ags.h)]._1.v) = gs.mem(l0 := gs.p(l0)[firstPersistW(gs.p(l0))].val) ∧ ags.vm = gs.mem(l0 := gs.p(l0)[firstPersistW(gs.p(l0))].val) ⊕ gs.p(l0 := gs.p(l0) -p firstPersistW(gs.p(l0))) ∧ abs ( ags.h.take(firstVolWrite(l0, ags.h)) + (ags.h[firstVolWrite(l0, ags.h)]._1, true) ' + persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)), gs.readers, gs.p(l0 := gs.p(l0) -p firstPersistW(gs.p(l0)))) ∧ labs ((gs.mem:= gs.mem(l0 := gs.p(l0)[firstPersistW(gs.p(l0))].val)).p:= gs.p(l0 := gs.p(l0) -p firstPersistW(gs.p(l0))), lsf(t), pcf(t), (ags.pm:= gs.mem(l0 := ags.h[firstVolWrite(l0, ags.h)]._1.v)) .h:= ( ags.h.take(firstVolWrite(l0, ags.h)) + (ags.h[firstVolWrite(l0, ags.h)]._1, true) ' + persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1))), alsf(t), apcf(t))
Used simplifier rules: abs-def: ⊦ abs(mkstate(gs, lsf, pcf), mkstate(ags, alsf, apcf)) ↔ gabs(gs, lsf, pcf, ags, alsf, apcf) ∧ (∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t))); gabs-def: ⊦ gabs(gs, lsf, pcf, ags, alsf, apcf) ↔ ags.pm = gs.mem ∧ ags.vm = gs.mem ⊕ gs.p ∧ abs(ags.h, gs.readers, gs.p); ⊦ (gs.p:= p).p = p; (s) ⊦ (gs.mem:= mem).readers = gs.readers; (s) ⊦ (gs.p:= p).readers = gs.readers; (s) ⊦ (gs.mem:= mem).mem = mem; (s) ⊦ (gs.p:= p).mem = gs.mem; (s) ⊦ abs(h, rs, p) ∧ firstPersistW(p(l)) < # p(l) → (h |W | l) | false ≠ []; (as) ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ (gs.h:= h).h = h; (s) ⊦ (gs.pm:= vm0).vm = gs.vm; (s) ⊦ (gs.h:= h).vm = gs.vm; (s) ⊦ (gs.pm:= vm0).pm = vm0; (s) ⊦ (gs.h:= h).pm = gs.pm; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a + x = a ' + x; (s) ⊦ firstVolWrite(l, h) < # h ↔ (h |W | l) | false ≠ []; (s) ⊦ globalAPersist(l) = globalAPersist(l0) ↔ l = l0; (s) ⊦ globalACrash ≠ globalAPersist(l); (s) ⊦ ¬ pre(gs, ls, pc, globalAPersist(l)); (s) ⊦ lstep(gs, ls, pc, a, gs0, ls0, pc0) ↔ pre(gs, ls, pc, a) ∧ ls0 = lstepf(gs, ls, pc, a) ∧ gs0 = gstepf(gs, ls, pc, a) ∧ pc0 = pcstepf(gs, ls, pc, a); (s) ⊦ plibStep(mkstate(gs, lsf, pcf), a, mkstate(gs0, lsf0, pcf0)) ↔ (∃ t, ls, pc. lstep(gs, lsf(t), pcf(t), a, gs0, ls, pc) ∧ lsf0 = lsf(t := ls) ∧ pcf0 = pcf(t := pc)) ∨ a = globalACrash ∧ gs0 = mkPLIBgs(gs.pm, gs.pm, gs.h | true) ∧ lsf0 = lsf ∧ pcf0 = (λ t. (pcf(t) = idle ⊃ idle;crashed)) ∨ (∃ l. a = globalAPersist(l) ∧ firstVolWrite(l, gs.h) < # gs.h ∧ gs0 = (gs.pm:= gs.pm(l := gs.h[firstVolWrite(l, gs.h)]._1.v)) .h:= ( gs.h.take(firstVolWrite(l, gs.h)) + ( (gs.h[firstVolWrite(l, gs.h)]._1, true) + persistDependentReads(l, gs.h.drop(firstVolWrite(l, gs.h) + 1)))) ∧ lsf0 = lsf ∧ pcf0 = pcf); (s) ⊦ globalPSCCRASH ≠ globalPSCPERSIST_W(l); (s) ⊦ globalPSCPERSIST_FO(l) ≠ globalPSCPERSIST_W(l0); (s) ⊦ globalPSCPERSIST_W(l) = globalPSCPERSIST_W(l0) ↔ l = l0; (s) ⊦ ¬ pre(gs, ls, pc, globalPSCPERSIST_W(l)); (s) ⊦ lstep(gs, ls, pc, a, gs0, ls0, pc0) ↔ pre(gs, ls, pc, a) ∧ ls0 = lstepf(gs, ls, pc, a) ∧ gs0 = gstepf(gs, ls, pc, a) ∧ pc0 = pcstepf(gs, ls, pc, a); (s) ⊦ flitpscStep(mkstate(gs, lsf, pcf), a, mkstate(gs0, lsf0, pcf0)) ↔ (∃ t, ls, pc. lstep(gs, lsf(t), pcf(t), a, gs0, ls, pc) ∧ lsf0 = lsf(t := ls) ∧ pcf0 = pcf(t := pc)) ∨ (∃ l. a = globalPSCPERSIST_W(l) ∧ firstPersistW(gs.p(l)) < # gs.p(l) ∧ gs0 = (gs.mem:= gs.mem(l := gs.p(l)[firstPersistW(gs.p(l))].val)) .p:= gs.p(l := gs.p(l) -p firstPersistW(gs.p(l))) ∧ lsf0 = lsf ∧ pcf0 = pcf) ∨ (∃ l. a = globalPSCPERSIST_FO(l) ∧ (∃ n. isPersistFO(n, gs.p(l)) ∧ gs0 = gs.p:= gs.p(l := gs.p(l) -p n)) ∧ lsf0 = lsf ∧ pcf0 = pcf) ∨ a = globalPSCCRASH ∧ gs0 = mkFLITPSCgs(gs.mem, λ l. [], λ l. 0, λ l. ∅, λ l. ∅) ∧ lsf0 = lsf ∧ pcf0 = (λ t. (pcf(t) = idle ⊃ idle;crashed)); (s)
| ags.pm = gs.mem, ags.vm = gs.mem ⊕ gs.p, gs.p(l0) ≠ [], firstPersistW(gs.p(l0)) < # gs.p(l0), FLITPSCInv((gs.mem:= gs.mem(l0 := gs.p(l0)[firstPersistW(gs.p(l0))].val)).p:= gs.p(l0 := gs.p(l0) -p firstPersistW(gs.p(l0))), lsf, pcf), FLITPSCInv(gs, lsf, pcf), PLIBInv(ags, alsf, apcf), abs(ags.h, gs.readers, gs.p), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ gs.mem(l0 := ags.h[firstVolWrite(l0, ags.h)]._1.v) = gs.mem(l0 := gs.p(l0)[firstPersistW(gs.p(l0))].val) ∧ ags.vm = gs.mem(l0 := gs.p(l0)[firstPersistW(gs.p(l0))].val) ⊕ gs.p(l0 := gs.p(l0) -p firstPersistW(gs.p(l0))) ∧ abs ( ags.h.take(firstVolWrite(l0, ags.h)) + (ags.h[firstVolWrite(l0, ags.h)]._1, true) ' + persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)), gs.readers, gs.p(l0 := gs.p(l0) -p firstPersistW(gs.p(l0)))) ∧ labs ((gs.mem:= gs.mem(l0 := gs.p(l0)[firstPersistW(gs.p(l0))].val)).p:= gs.p(l0 := gs.p(l0) -p firstPersistW(gs.p(l0))), lsf(t), pcf(t), (ags.pm:= gs.mem(l0 := ags.h[firstVolWrite(l0, ags.h)]._1.v)) .h:= ( ags.h.take(firstVolWrite(l0, ags.h)) + (ags.h[firstVolWrite(l0, ags.h)]._1, true) ' + persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1))), alsf(t), apcf(t)) |
ags.pm = gs.mem, ags.vm = gs.mem ⊕ gs.p, ags.h[firstVolWrite(l0, ags.h)] = (e, boolvar), gs.p(l0) ≠ [], firstPersistW(gs.p(l0)) < # gs.p(l0), FLITPSCInv(gs, lsf, pcf), FLITPSCInv((gs.mem:= gs.mem(l0 := gs.p(l0)[firstPersistW(gs.p(l0))].val)).p:= gs.p(l0 := gs.p(l0) -p firstPersistW(gs.p(l0))), lsf, pcf), PLIBInv(ags, alsf, apcf), abs(ags.h, gs.readers, gs.p), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ gs.mem(l0 := e.v) = gs.mem(l0 := gs.p(l0)[firstPersistW(gs.p(l0))].val) ∧ ags.vm = gs.mem(l0 := gs.p(l0)[firstPersistW(gs.p(l0))].val) ⊕ gs.p(l0 := gs.p(l0) -p firstPersistW(gs.p(l0))) ∧ abs (ags.h.take(firstVolWrite(l0, ags.h)) + (e, true) ' + persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)), gs.readers, gs.p(l0 := gs.p(l0) -p firstPersistW(gs.p(l0)))) ∧ labs ((gs.mem:= gs.mem(l0 := gs.p(l0)[firstPersistW(gs.p(l0))].val)).p:= gs.p(l0 := gs.p(l0) -p firstPersistW(gs.p(l0))), lsf(t), pcf(t), (ags.pm:= gs.mem(l0 := e.v)) .h:= (ags.h.take(firstVolWrite(l0, ags.h)) + (e, true) ' + persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1))), alsf(t), apcf(t))
Used terms: e, boolvar
| ags.pm = gs.mem, ags.vm = gs.mem ⊕ gs.p, ags.h[firstVolWrite(l0, ags.h)] = (e, boolvar), gs.p(l0) ≠ [], firstPersistW(gs.p(l0)) < # gs.p(l0), FLITPSCInv(gs, lsf, pcf), FLITPSCInv((gs.mem:= gs.mem(l0 := gs.p(l0)[firstPersistW(gs.p(l0))].val)).p:= gs.p(l0 := gs.p(l0) -p firstPersistW(gs.p(l0))), lsf, pcf), PLIBInv(ags, alsf, apcf), abs(ags.h, gs.readers, gs.p), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ gs.mem(l0 := e.v) = gs.mem(l0 := gs.p(l0)[firstPersistW(gs.p(l0))].val) ∧ ags.vm = gs.mem(l0 := gs.p(l0)[firstPersistW(gs.p(l0))].val) ⊕ gs.p(l0 := gs.p(l0) -p firstPersistW(gs.p(l0))) ∧ abs (ags.h.take(firstVolWrite(l0, ags.h)) + (e, true) ' + persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)), gs.readers, gs.p(l0 := gs.p(l0) -p firstPersistW(gs.p(l0)))) ∧ labs ((gs.mem:= gs.mem(l0 := gs.p(l0)[firstPersistW(gs.p(l0))].val)).p:= gs.p(l0 := gs.p(l0) -p firstPersistW(gs.p(l0))), lsf(t), pcf(t), (ags.pm:= gs.mem(l0 := e.v)) .h:= (ags.h.take(firstVolWrite(l0, ags.h)) + (e, true) ' + persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1))), alsf(t), apcf(t)) |
ags.pm = gs.mem, ags.vm = gs.mem ⊕ gs.p, ags.h[firstVolWrite(l0, ags.h)] = (e, boolvar), gs.p(l0) ≠ [], firstPersistW(gs.p(l0)) < # gs.p(l0), FLITPSCInv(gs, lsf, pcf), FLITPSCInv((gs.mem:= gs.mem(l0 := e.v)).p:= gs.p(l0 := gs.p(l0) -p firstPersistW(gs.p(l0))), lsf, pcf), PLIBInv(ags, alsf, apcf), abs(ags.h, gs.readers, gs.p), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf(t).t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = invRead) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → apcf(t) = resRead) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 → apcf(t) = invWrite) ∧ (pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → apcf(t) = resWrite) ∧ (pcf(t) = R1 → lsf(t).l = alsf(t).il) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).v = alsf(t).ov) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).l = alsf(t).il ∧ lsf(t).v = alsf(t).iv) ∧ ( pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = R1 ∨ pcf(t) = R4 ∨ pcf(t) = W1 ∨ pcf(t) = W5 → ¬ FO(lsf(t).t) ∈ (l0 = l ⊃ gs.p(l) -p firstPersistW(gs.p(l));gs.p(l)) → ((ags.h.take(firstVolWrite(l0, ags.h)) | l) | lsf(t).t) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)) | l) | lsf(t).t) | false = []) ∧ ( pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → ((ags.h.take(firstVolWrite(l0, ags.h)) | l1) | lsf(t).t) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)) | l1) | lsf(t).t) | false = []) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 → l2 ≠ lsf(t).l ∧ ¬ FO(lsf(t).t) ∈ (l0 = l2 ⊃ gs.p(l2) -p firstPersistW(gs.p(l2));gs.p(l2)) → ((ags.h.take(firstVolWrite(l0, ags.h)) | l2) | lsf(t).t) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)) | l2) | lsf(t).t) | false = []) ∧ ( pcf(t) = R2 → gs.ctr(lsf(t).l) = 0 → ((ags.h.take(firstVolWrite(l0, ags.h)) | lsf(t).l) | lsf(t).t) | false = [] ∧ ((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)) | lsf(t).l) | lsf(t).t) | false = []) ∧ ( pcf(t) = W4 → (((ags.h.take(firstVolWrite(l0, ags.h)) | lsf(t).l) | lsf(t).t) | false) + (((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false) + (((persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)) | lsf(t).l) | lsf(t).t) | false) = (W(lsf(t).t, lsf(t).l, lsf(t).v), false) ' ∨ ((ags.h.take(firstVolWrite(l0, ags.h)) | lsf(t).l) | lsf(t).t) | false = [] ∧ ((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)) | lsf(t).l) | lsf(t).t) | false = [])
Used simplifier rules: labs-def: ⊦ labs(gs, ls, pc, ags, als, apc) ↔ ls.t = als.t ∧ (pc = idle → apc = idle) ∧ (pc = ready → apc = ready) ∧ (pc = crashed → apc = crashed) ∧ (pc = R1 → apc = invRead) ∧ (pc = R2 ∨ pc = R3 ∨ pc = R4 → apc = resRead) ∧ (pc = W1 ∨ pc = W2 ∨ pc = W3 → apc = invWrite) ∧ (pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → apc = resWrite) ∧ (pc = R1 → ls.l = als.il) ∧ (pc = R2 ∨ pc = R3 ∨ pc = R4 → ls.v = als.ov) ∧ ( pc = W1 ∨ pc = W2 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → ls.l = als.il ∧ ls.v = als.iv) ∧ ( pc = idle ∨ pc = ready ∨ pc = R1 ∨ pc = R4 ∨ pc = W1 ∨ pc = W5 → (∀ l. ¬ FO(ls.t) ∈ gs.p(l) → ((ags.h | l) | ls.t) | false = [])) ∧ (pc = W2 ∨ pc = W3 ∨ pc = W6 ∨ pc = W7 → (∀ l. ((ags.h | l) | ls.t) | false = [])) ∧ ( pc = R2 ∨ pc = R3 → (∀ l0. l0 ≠ ls.l ∧ ¬ FO(ls.t) ∈ gs.p(l0) → ((ags.h | l0) | ls.t) | false = [])) ∧ (pc = R2 → gs.ctr(ls.l) = 0 → ((ags.h | ls.l) | ls.t) | false = []) ∧ ( pc = W4 → ((ags.h | ls.l) | ls.t) | false = (W(ls.t, ls.l, ls.v), false) ' ∨ ((ags.h | ls.l) | ls.t) | false = []); a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ h + h0 | b = (h | b) + (h0 | b); (s) ⊦ h + h0 | t = (h | t) + (h0 | t); (s) ⊦ abs(h, rs, p) ∧ firstPersistW(p(l)) < # p(l) ∧ h[firstVolWrite(l, h)] = (e, bv) → e.l = l; (s) ⊦ vpe ' | l = (vpe._1.l = l ⊃ vpe ';[]); (s) ⊦ h + h0 | l0 = (h | l0) + (h0 | l0); (s) ⊦ (gs.h:= h).h = h; (s) ⊦ (gs.mem:= mem).ctr = gs.ctr; (s) ⊦ (gs.p:= p).ctr = gs.ctr; (s) ⊦ (gs.p:= p).p = p; (s) ⊦ abs(h, rs, p) ∧ firstPersistW(p(l)) < # p(l) ∧ h[firstVolWrite(l, h)] = (e, bv) → p(l)[firstPersistW(p(l))].val = e.v; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ abs(h, rs, p) ∧ firstPersistW(p(l)) < # p(l) ∧ h[firstVolWrite(l, h)] = (e, bv) → abs ( h.take(firstVolWrite(l, h)) + (e, true) ' + persistDependentReads(l, h.drop(firstVolWrite(l, h) + 1)), rs, p(l := p(l) -p firstPersistW(p(l)))); (ss) ⊦ abs(h, rs, p) ∧ firstPersistW(p(l)) < # p(l) ∧ h[firstVolWrite(l, h)] = (e, bv) → mem(l := e.v) ⊕ p(l := p(l) -p firstPersistW(p(l))) = mem ⊕ p; (s)
| ags.pm = gs.mem, ags.vm = gs.mem ⊕ gs.p, ags.h[firstVolWrite(l0, ags.h)] = (e, boolvar), gs.p(l0) ≠ [], firstPersistW(gs.p(l0)) < # gs.p(l0), FLITPSCInv(gs, lsf, pcf), FLITPSCInv((gs.mem:= gs.mem(l0 := e.v)).p:= gs.p(l0 := gs.p(l0) -p firstPersistW(gs.p(l0))), lsf, pcf), PLIBInv(ags, alsf, apcf), abs(ags.h, gs.readers, gs.p), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf(t).t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = invRead) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → apcf(t) = resRead) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 → apcf(t) = invWrite) ∧ (pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → apcf(t) = resWrite) ∧ (pcf(t) = R1 → lsf(t).l = alsf(t).il) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).v = alsf(t).ov) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).l = alsf(t).il ∧ lsf(t).v = alsf(t).iv) ∧ ( pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = R1 ∨ pcf(t) = R4 ∨ pcf(t) = W1 ∨ pcf(t) = W5 → ¬ FO(lsf(t).t) ∈ (l0 = l ⊃ gs.p(l) -p firstPersistW(gs.p(l));gs.p(l)) → ((ags.h.take(firstVolWrite(l0, ags.h)) | l) | lsf(t).t) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)) | l) | lsf(t).t) | false = []) ∧ ( pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → ((ags.h.take(firstVolWrite(l0, ags.h)) | l1) | lsf(t).t) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)) | l1) | lsf(t).t) | false = []) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 → l2 ≠ lsf(t).l ∧ ¬ FO(lsf(t).t) ∈ (l0 = l2 ⊃ gs.p(l2) -p firstPersistW(gs.p(l2));gs.p(l2)) → ((ags.h.take(firstVolWrite(l0, ags.h)) | l2) | lsf(t).t) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)) | l2) | lsf(t).t) | false = []) ∧ ( pcf(t) = R2 → gs.ctr(lsf(t).l) = 0 → ((ags.h.take(firstVolWrite(l0, ags.h)) | lsf(t).l) | lsf(t).t) | false = [] ∧ ((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)) | lsf(t).l) | lsf(t).t) | false = []) ∧ ( pcf(t) = W4 → (((ags.h.take(firstVolWrite(l0, ags.h)) | lsf(t).l) | lsf(t).t) | false) + (((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false) + (((persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)) | lsf(t).l) | lsf(t).t) | false) = (W(lsf(t).t, lsf(t).l, lsf(t).v), false) ' ∨ ((ags.h.take(firstVolWrite(l0, ags.h)) | lsf(t).l) | lsf(t).t) | false = [] ∧ ((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)) | lsf(t).l) | lsf(t).t) | false = []) |
ags.pm = mem, ags.vm = mem ⊕ p, ags.h[firstVolWrite(l0, ags.h)] = (e, boolvar), gs = mkFLITPSCgs(mem, p, ctr, writers, writers0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCInv((gs.mem:= mem(l0 := e.v)).p:= p(l0 := p(l0) -p firstPersistW(p(l0))), lsf, pcf), FLITPSCInv(gs, lsf, pcf), PLIBInv(ags, alsf, apcf), abs(ags.h, writers0, p), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf(t).t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = invRead) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → apcf(t) = resRead) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 → apcf(t) = invWrite) ∧ (pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → apcf(t) = resWrite) ∧ (pcf(t) = R1 → lsf(t).l = alsf(t).il) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).v = alsf(t).ov) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).l = alsf(t).il ∧ lsf(t).v = alsf(t).iv) ∧ ( pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = R1 ∨ pcf(t) = R4 ∨ pcf(t) = W1 ∨ pcf(t) = W5 → ¬ FO(lsf(t).t) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((ags.h.take(firstVolWrite(l0, ags.h)) | l) | lsf(t).t) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)) | l) | lsf(t).t) | false = []) ∧ ( pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → ((ags.h.take(firstVolWrite(l0, ags.h)) | l1) | lsf(t).t) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)) | l1) | lsf(t).t) | false = []) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 → l2 ≠ lsf(t).l ∧ ¬ FO(lsf(t).t) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((ags.h.take(firstVolWrite(l0, ags.h)) | l2) | lsf(t).t) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)) | l2) | lsf(t).t) | false = []) ∧ ( pcf(t) = R2 → ctr(lsf(t).l) = 0 → ((ags.h.take(firstVolWrite(l0, ags.h)) | lsf(t).l) | lsf(t).t) | false = [] ∧ ((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)) | lsf(t).l) | lsf(t).t) | false = []) ∧ ( pcf(t) = W4 → (((ags.h.take(firstVolWrite(l0, ags.h)) | lsf(t).l) | lsf(t).t) | false) + (((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false) + (((persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)) | lsf(t).l) | lsf(t).t) | false) = (W(lsf(t).t, lsf(t).l, lsf(t).v), false) ' ∨ ((ags.h.take(firstVolWrite(l0, ags.h)) | lsf(t).l) | lsf(t).t) | false = [] ∧ ((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)) | lsf(t).l) | lsf(t).t) | 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
| ags.pm = mem, ags.vm = mem ⊕ p, ags.h[firstVolWrite(l0, ags.h)] = (e, boolvar), gs = mkFLITPSCgs(mem, p, ctr, writers, writers0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCInv((gs.mem:= mem(l0 := e.v)).p:= p(l0 := p(l0) -p firstPersistW(p(l0))), lsf, pcf), FLITPSCInv(gs, lsf, pcf), PLIBInv(ags, alsf, apcf), abs(ags.h, writers0, p), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf(t).t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = invRead) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → apcf(t) = resRead) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 → apcf(t) = invWrite) ∧ (pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → apcf(t) = resWrite) ∧ (pcf(t) = R1 → lsf(t).l = alsf(t).il) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).v = alsf(t).ov) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).l = alsf(t).il ∧ lsf(t).v = alsf(t).iv) ∧ ( pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = R1 ∨ pcf(t) = R4 ∨ pcf(t) = W1 ∨ pcf(t) = W5 → ¬ FO(lsf(t).t) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((ags.h.take(firstVolWrite(l0, ags.h)) | l) | lsf(t).t) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)) | l) | lsf(t).t) | false = []) ∧ ( pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → ((ags.h.take(firstVolWrite(l0, ags.h)) | l1) | lsf(t).t) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)) | l1) | lsf(t).t) | false = []) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 → l2 ≠ lsf(t).l ∧ ¬ FO(lsf(t).t) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((ags.h.take(firstVolWrite(l0, ags.h)) | l2) | lsf(t).t) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)) | l2) | lsf(t).t) | false = []) ∧ ( pcf(t) = R2 → ctr(lsf(t).l) = 0 → ((ags.h.take(firstVolWrite(l0, ags.h)) | lsf(t).l) | lsf(t).t) | false = [] ∧ ((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)) | lsf(t).l) | lsf(t).t) | false = []) ∧ ( pcf(t) = W4 → (((ags.h.take(firstVolWrite(l0, ags.h)) | lsf(t).l) | lsf(t).t) | false) + (((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false) + (((persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)) | lsf(t).l) | lsf(t).t) | false) = (W(lsf(t).t, lsf(t).l, lsf(t).v), false) ' ∨ ((ags.h.take(firstVolWrite(l0, ags.h)) | lsf(t).l) | lsf(t).t) | false = [] ∧ ((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)) | lsf(t).l) | lsf(t).t) | false = []) |
ags.vm = ags.pm ⊕ p, ags.h[firstVolWrite(l0, ags.h)] = (e, boolvar), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCInv(mkFLITPSCgs(ags.pm(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCInv(mkFLITPSCgs(ags.pm, p, ctr, writers, writers0), lsf, pcf), PLIBInv(ags, alsf, apcf), abs(ags.h, writers0, p), ∀ t. labs(mkFLITPSCgs(ags.pm, p, ctr, writers, writers0), lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf(t).t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = invRead) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → apcf(t) = resRead) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 → apcf(t) = invWrite) ∧ (pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → apcf(t) = resWrite) ∧ (pcf(t) = R1 → lsf(t).l = alsf(t).il) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).v = alsf(t).ov) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).l = alsf(t).il ∧ lsf(t).v = alsf(t).iv) ∧ ( pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = R1 ∨ pcf(t) = R4 ∨ pcf(t) = W1 ∨ pcf(t) = W5 → ¬ FO(lsf(t).t) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((ags.h.take(firstVolWrite(l0, ags.h)) | l) | lsf(t).t) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)) | l) | lsf(t).t) | false = []) ∧ ( pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → ((ags.h.take(firstVolWrite(l0, ags.h)) | l1) | lsf(t).t) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)) | l1) | lsf(t).t) | false = []) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 → l2 ≠ lsf(t).l ∧ ¬ FO(lsf(t).t) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((ags.h.take(firstVolWrite(l0, ags.h)) | l2) | lsf(t).t) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)) | l2) | lsf(t).t) | false = []) ∧ ( pcf(t) = R2 → ctr(lsf(t).l) = 0 → ((ags.h.take(firstVolWrite(l0, ags.h)) | lsf(t).l) | lsf(t).t) | false = [] ∧ ((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)) | lsf(t).l) | lsf(t).t) | false = []) ∧ ( pcf(t) = W4 → (((ags.h.take(firstVolWrite(l0, ags.h)) | lsf(t).l) | lsf(t).t) | false) + (((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false) + (((persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)) | lsf(t).l) | lsf(t).t) | false) = (W(lsf(t).t, lsf(t).l, lsf(t).v), false) ' ∨ ((ags.h.take(firstVolWrite(l0, ags.h)) | lsf(t).l) | lsf(t).t) | false = [] ∧ ((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)) | lsf(t).l) | lsf(t).t) | false = [])
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ mkFLITPSCgs(mem, p, ctr, writers, writers0).p:= p0 = mkFLITPSCgs(mem, p0, ctr, writers, writers0); (s) ⊦ mkFLITPSCgs(mem, p, ctr, writers, writers0).mem:= mem0 = mkFLITPSCgs(mem0, p, ctr, writers, writers0); (s)
| ags.vm = ags.pm ⊕ p, ags.h[firstVolWrite(l0, ags.h)] = (e, boolvar), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCInv(mkFLITPSCgs(ags.pm(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCInv(mkFLITPSCgs(ags.pm, p, ctr, writers, writers0), lsf, pcf), PLIBInv(ags, alsf, apcf), abs(ags.h, writers0, p), ∀ t. labs(mkFLITPSCgs(ags.pm, p, ctr, writers, writers0), lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf(t).t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = invRead) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → apcf(t) = resRead) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 → apcf(t) = invWrite) ∧ (pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → apcf(t) = resWrite) ∧ (pcf(t) = R1 → lsf(t).l = alsf(t).il) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).v = alsf(t).ov) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).l = alsf(t).il ∧ lsf(t).v = alsf(t).iv) ∧ ( pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = R1 ∨ pcf(t) = R4 ∨ pcf(t) = W1 ∨ pcf(t) = W5 → ¬ FO(lsf(t).t) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((ags.h.take(firstVolWrite(l0, ags.h)) | l) | lsf(t).t) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)) | l) | lsf(t).t) | false = []) ∧ ( pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → ((ags.h.take(firstVolWrite(l0, ags.h)) | l1) | lsf(t).t) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)) | l1) | lsf(t).t) | false = []) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 → l2 ≠ lsf(t).l ∧ ¬ FO(lsf(t).t) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((ags.h.take(firstVolWrite(l0, ags.h)) | l2) | lsf(t).t) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)) | l2) | lsf(t).t) | false = []) ∧ ( pcf(t) = R2 → ctr(lsf(t).l) = 0 → ((ags.h.take(firstVolWrite(l0, ags.h)) | lsf(t).l) | lsf(t).t) | false = [] ∧ ((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)) | lsf(t).l) | lsf(t).t) | false = []) ∧ ( pcf(t) = W4 → (((ags.h.take(firstVolWrite(l0, ags.h)) | lsf(t).l) | lsf(t).t) | false) + (((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false) + (((persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)) | lsf(t).l) | lsf(t).t) | false) = (W(lsf(t).t, lsf(t).l, lsf(t).v), false) ' ∨ ((ags.h.take(firstVolWrite(l0, ags.h)) | lsf(t).l) | lsf(t).t) | false = [] ∧ ((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, ags.h.drop(firstVolWrite(l0, ags.h) + 1)) | lsf(t).l) | lsf(t).t) | false = []) |
h[firstVolWrite(l0, h)] = (e, boolvar), ags = mkPLIBgs(mem, mem0, h), mem = mem0 ⊕ p, p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf, pcf), FLITPSCInv(mkFLITPSCgs(mem0(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), PLIBInv(ags, alsf, apcf), abs(h, writers0, p), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf(t).t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = invRead) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → apcf(t) = resRead) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 → apcf(t) = invWrite) ∧ (pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → apcf(t) = resWrite) ∧ (pcf(t) = R1 → lsf(t).l = alsf(t).il) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).v = alsf(t).ov) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).l = alsf(t).il ∧ lsf(t).v = alsf(t).iv) ∧ ( pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = R1 ∨ pcf(t) = R4 ∨ pcf(t) = W1 ∨ pcf(t) = W5 → ¬ FO(lsf(t).t) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h.take(firstVolWrite(l0, h)) | l) | lsf(t).t) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l) | lsf(t).t) | false = []) ∧ ( pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → ((h.take(firstVolWrite(l0, h)) | l1) | lsf(t).t) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l1) | lsf(t).t) | false = []) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 → l2 ≠ lsf(t).l ∧ ¬ FO(lsf(t).t) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h.take(firstVolWrite(l0, h)) | l2) | lsf(t).t) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l2) | lsf(t).t) | false = []) ∧ ( pcf(t) = R2 → ctr(lsf(t).l) = 0 → ((h.take(firstVolWrite(l0, h)) | lsf(t).l) | lsf(t).t) | false = [] ∧ ((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | lsf(t).l) | lsf(t).t) | false = []) ∧ ( pcf(t) = W4 → (((h.take(firstVolWrite(l0, h)) | lsf(t).l) | lsf(t).t) | false) + (((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false) + (((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | lsf(t).l) | lsf(t).t) | false) = (W(lsf(t).t, lsf(t).l, lsf(t).v), false) ' ∨ ((h.take(firstVolWrite(l0, h)) | lsf(t).l) | lsf(t).t) | false = [] ∧ ((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | lsf(t).l) | lsf(t).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
| h[firstVolWrite(l0, h)] = (e, boolvar), ags = mkPLIBgs(mem, mem0, h), mem = mem0 ⊕ p, p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf, pcf), FLITPSCInv(mkFLITPSCgs(mem0(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), PLIBInv(ags, alsf, apcf), abs(h, writers0, p), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf(t).t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = invRead) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → apcf(t) = resRead) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 → apcf(t) = invWrite) ∧ (pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → apcf(t) = resWrite) ∧ (pcf(t) = R1 → lsf(t).l = alsf(t).il) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).v = alsf(t).ov) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).l = alsf(t).il ∧ lsf(t).v = alsf(t).iv) ∧ ( pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = R1 ∨ pcf(t) = R4 ∨ pcf(t) = W1 ∨ pcf(t) = W5 → ¬ FO(lsf(t).t) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h.take(firstVolWrite(l0, h)) | l) | lsf(t).t) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l) | lsf(t).t) | false = []) ∧ ( pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → ((h.take(firstVolWrite(l0, h)) | l1) | lsf(t).t) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l1) | lsf(t).t) | false = []) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 → l2 ≠ lsf(t).l ∧ ¬ FO(lsf(t).t) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h.take(firstVolWrite(l0, h)) | l2) | lsf(t).t) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l2) | lsf(t).t) | false = []) ∧ ( pcf(t) = R2 → ctr(lsf(t).l) = 0 → ((h.take(firstVolWrite(l0, h)) | lsf(t).l) | lsf(t).t) | false = [] ∧ ((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | lsf(t).l) | lsf(t).t) | false = []) ∧ ( pcf(t) = W4 → (((h.take(firstVolWrite(l0, h)) | lsf(t).l) | lsf(t).t) | false) + (((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false) + (((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | lsf(t).l) | lsf(t).t) | false) = (W(lsf(t).t, lsf(t).l, lsf(t).v), false) ' ∨ ((h.take(firstVolWrite(l0, h)) | lsf(t).l) | lsf(t).t) | false = [] ∧ ((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | lsf(t).l) | lsf(t).t) | false = []) |
h[firstVolWrite(l0, h)] = (e, boolvar), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCInv(mkFLITPSCgs(mem0(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf, pcf), PLIBInv(mkPLIBgs(mem0 ⊕ p, mem0, h), alsf, apcf), abs(h, writers0, p), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)) ⊦ lsf(t).t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = invRead) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → apcf(t) = resRead) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 → apcf(t) = invWrite) ∧ (pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → apcf(t) = resWrite) ∧ (pcf(t) = R1 → lsf(t).l = alsf(t).il) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).v = alsf(t).ov) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).l = alsf(t).il ∧ lsf(t).v = alsf(t).iv) ∧ ( pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = R1 ∨ pcf(t) = R4 ∨ pcf(t) = W1 ∨ pcf(t) = W5 → ¬ FO(lsf(t).t) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h.take(firstVolWrite(l0, h)) | l) | lsf(t).t) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l) | lsf(t).t) | false = []) ∧ ( pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → ((h.take(firstVolWrite(l0, h)) | l1) | lsf(t).t) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l1) | lsf(t).t) | false = []) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 → l2 ≠ lsf(t).l ∧ ¬ FO(lsf(t).t) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h.take(firstVolWrite(l0, h)) | l2) | lsf(t).t) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l2) | lsf(t).t) | false = []) ∧ ( pcf(t) = R2 → ctr(lsf(t).l) = 0 → ((h.take(firstVolWrite(l0, h)) | lsf(t).l) | lsf(t).t) | false = [] ∧ ((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | lsf(t).l) | lsf(t).t) | false = []) ∧ ( pcf(t) = W4 → (((h.take(firstVolWrite(l0, h)) | lsf(t).l) | lsf(t).t) | false) + (((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false) + (((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | lsf(t).l) | lsf(t).t) | false) = (W(lsf(t).t, lsf(t).l, lsf(t).v), false) ' ∨ ((h.take(firstVolWrite(l0, h)) | lsf(t).l) | lsf(t).t) | false = [] ∧ ((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | lsf(t).l) | lsf(t).t) | false = [])
| h[firstVolWrite(l0, h)] = (e, boolvar), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCInv(mkFLITPSCgs(mem0(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf, pcf), PLIBInv(mkPLIBgs(mem0 ⊕ p, mem0, h), alsf, apcf), abs(h, writers0, p), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)) ⊦ lsf(t).t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = invRead) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → apcf(t) = resRead) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 → apcf(t) = invWrite) ∧ (pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → apcf(t) = resWrite) ∧ (pcf(t) = R1 → lsf(t).l = alsf(t).il) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).v = alsf(t).ov) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).l = alsf(t).il ∧ lsf(t).v = alsf(t).iv) ∧ ( pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = R1 ∨ pcf(t) = R4 ∨ pcf(t) = W1 ∨ pcf(t) = W5 → ¬ FO(lsf(t).t) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h.take(firstVolWrite(l0, h)) | l) | lsf(t).t) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l) | lsf(t).t) | false = []) ∧ ( pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → ((h.take(firstVolWrite(l0, h)) | l1) | lsf(t).t) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l1) | lsf(t).t) | false = []) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 → l2 ≠ lsf(t).l ∧ ¬ FO(lsf(t).t) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h.take(firstVolWrite(l0, h)) | l2) | lsf(t).t) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l2) | lsf(t).t) | false = []) ∧ ( pcf(t) = R2 → ctr(lsf(t).l) = 0 → ((h.take(firstVolWrite(l0, h)) | lsf(t).l) | lsf(t).t) | false = [] ∧ ((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | lsf(t).l) | lsf(t).t) | false = []) ∧ ( pcf(t) = W4 → (((h.take(firstVolWrite(l0, h)) | lsf(t).l) | lsf(t).t) | false) + (((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false) + (((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | lsf(t).l) | lsf(t).t) | false) = (W(lsf(t).t, lsf(t).l, lsf(t).v), false) ' ∨ ((h.take(firstVolWrite(l0, h)) | lsf(t).l) | lsf(t).t) | false = [] ∧ ((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | lsf(t).l) | lsf(t).t) | false = []) |
⊦ firstVolWrite(l, h) < # h → (∃ t, v. h = h.take(firstVolWrite(l, h)) + ((W(t, l, v), false) + h.drop(firstVolWrite(l, h) + 1)))
h[firstVolWrite(l0, h)] = (e, boolvar), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf, pcf), FLITPSCInv(mkFLITPSCgs(mem0(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), PLIBInv(mkPLIBgs(mem0 ⊕ p, mem0, h), alsf, apcf), abs(h, writers0, p), firstVolWrite(l0, h) < # h → (∃ t, v. h = h.take(firstVolWrite(l0, h)) + ((W(t, l0, v), false) + h.drop(firstVolWrite(l0, h) + 1))), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)) ⊦ lsf(t).t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = invRead) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → apcf(t) = resRead) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 → apcf(t) = invWrite) ∧ (pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → apcf(t) = resWrite) ∧ (pcf(t) = R1 → lsf(t).l = alsf(t).il) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).v = alsf(t).ov) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).l = alsf(t).il ∧ lsf(t).v = alsf(t).iv) ∧ ( pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = R1 ∨ pcf(t) = R4 ∨ pcf(t) = W1 ∨ pcf(t) = W5 → ¬ FO(lsf(t).t) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h.take(firstVolWrite(l0, h)) | l) | lsf(t).t) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l) | lsf(t).t) | false = []) ∧ ( pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → ((h.take(firstVolWrite(l0, h)) | l1) | lsf(t).t) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l1) | lsf(t).t) | false = []) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 → l2 ≠ lsf(t).l ∧ ¬ FO(lsf(t).t) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h.take(firstVolWrite(l0, h)) | l2) | lsf(t).t) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l2) | lsf(t).t) | false = []) ∧ ( pcf(t) = R2 → ctr(lsf(t).l) = 0 → ((h.take(firstVolWrite(l0, h)) | lsf(t).l) | lsf(t).t) | false = [] ∧ ((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | lsf(t).l) | lsf(t).t) | false = []) ∧ ( pcf(t) = W4 → (((h.take(firstVolWrite(l0, h)) | lsf(t).l) | lsf(t).t) | false) + (((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false) + (((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | lsf(t).l) | lsf(t).t) | false) = (W(lsf(t).t, lsf(t).l, lsf(t).v), false) ' ∨ ((h.take(firstVolWrite(l0, h)) | lsf(t).l) | lsf(t).t) | false = [] ∧ ((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | lsf(t).l) | lsf(t).t) | false = [])
Used terms: l0, h
| ⊦ firstVolWrite(l, h) < # h → (∃ t, v. h = h.take(firstVolWrite(l, h)) + ((W(t, l, v), false) + h.drop(firstVolWrite(l, h) + 1))) |
| h[firstVolWrite(l0, h)] = (e, boolvar), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf, pcf), FLITPSCInv(mkFLITPSCgs(mem0(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), PLIBInv(mkPLIBgs(mem0 ⊕ p, mem0, h), alsf, apcf), abs(h, writers0, p), firstVolWrite(l0, h) < # h → (∃ t, v. h = h.take(firstVolWrite(l0, h)) + ((W(t, l0, v), false) + h.drop(firstVolWrite(l0, h) + 1))), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)) ⊦ lsf(t).t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = invRead) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → apcf(t) = resRead) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 → apcf(t) = invWrite) ∧ (pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → apcf(t) = resWrite) ∧ (pcf(t) = R1 → lsf(t).l = alsf(t).il) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).v = alsf(t).ov) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).l = alsf(t).il ∧ lsf(t).v = alsf(t).iv) ∧ ( pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = R1 ∨ pcf(t) = R4 ∨ pcf(t) = W1 ∨ pcf(t) = W5 → ¬ FO(lsf(t).t) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h.take(firstVolWrite(l0, h)) | l) | lsf(t).t) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l) | lsf(t).t) | false = []) ∧ ( pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → ((h.take(firstVolWrite(l0, h)) | l1) | lsf(t).t) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l1) | lsf(t).t) | false = []) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 → l2 ≠ lsf(t).l ∧ ¬ FO(lsf(t).t) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h.take(firstVolWrite(l0, h)) | l2) | lsf(t).t) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l2) | lsf(t).t) | false = []) ∧ ( pcf(t) = R2 → ctr(lsf(t).l) = 0 → ((h.take(firstVolWrite(l0, h)) | lsf(t).l) | lsf(t).t) | false = [] ∧ ((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | lsf(t).l) | lsf(t).t) | false = []) ∧ ( pcf(t) = W4 → (((h.take(firstVolWrite(l0, h)) | lsf(t).l) | lsf(t).t) | false) + (((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false) + (((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | lsf(t).l) | lsf(t).t) | false) = (W(lsf(t).t, lsf(t).l, lsf(t).v), false) ' ∨ ((h.take(firstVolWrite(l0, h)) | lsf(t).l) | lsf(t).t) | false = [] ∧ ((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | lsf(t).l) | lsf(t).t) | false = []) |
h[firstVolWrite(l0, h)] = (e, boolvar), h = h.take(firstVolWrite(l0, h)) + (W(t0, l0, v), false) ' + h.drop(firstVolWrite(l0, h) + 1), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCInv(mkFLITPSCgs(mem0(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf, pcf), PLIBInv(mkPLIBgs(mem0 ⊕ p, mem0, h), alsf, apcf), abs(h, writers0, p), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)) ⊦ lsf(t).t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = invRead) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → apcf(t) = resRead) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 → apcf(t) = invWrite) ∧ (pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → apcf(t) = resWrite) ∧ (pcf(t) = R1 → lsf(t).l = alsf(t).il) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).v = alsf(t).ov) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).l = alsf(t).il ∧ lsf(t).v = alsf(t).iv) ∧ ( pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = R1 ∨ pcf(t) = R4 ∨ pcf(t) = W1 ∨ pcf(t) = W5 → ¬ FO(lsf(t).t) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h.take(firstVolWrite(l0, h)) | l) | lsf(t).t) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l) | lsf(t).t) | false = []) ∧ ( pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → ((h.take(firstVolWrite(l0, h)) | l1) | lsf(t).t) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l1) | lsf(t).t) | false = []) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 → l2 ≠ lsf(t).l ∧ ¬ FO(lsf(t).t) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h.take(firstVolWrite(l0, h)) | l2) | lsf(t).t) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l2) | lsf(t).t) | false = []) ∧ ( pcf(t) = R2 → ctr(lsf(t).l) = 0 → ((h.take(firstVolWrite(l0, h)) | lsf(t).l) | lsf(t).t) | false = [] ∧ ((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | lsf(t).l) | lsf(t).t) | false = []) ∧ ( pcf(t) = W4 → (((h.take(firstVolWrite(l0, h)) | lsf(t).l) | lsf(t).t) | false) + (((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false) + (((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | lsf(t).l) | lsf(t).t) | false) = (W(lsf(t).t, lsf(t).l, lsf(t).v), false) ' ∨ ((h.take(firstVolWrite(l0, h)) | lsf(t).l) | lsf(t).t) | false = [] ∧ ((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | lsf(t).l) | lsf(t).t) | false = [])
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a + x = a ' + x; (s) ⊦ abs(h, rs, p) ∧ firstPersistW(p(l)) < # p(l) → (h |W | l) | false ≠ []; (as) ⊦ firstVolWrite(l, h) < # h ↔ (h |W | l) | false ≠ []; (s)
| h[firstVolWrite(l0, h)] = (e, boolvar), h = h.take(firstVolWrite(l0, h)) + (W(t0, l0, v), false) ' + h.drop(firstVolWrite(l0, h) + 1), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCInv(mkFLITPSCgs(mem0(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf, pcf), PLIBInv(mkPLIBgs(mem0 ⊕ p, mem0, h), alsf, apcf), abs(h, writers0, p), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)) ⊦ lsf(t).t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = invRead) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → apcf(t) = resRead) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 → apcf(t) = invWrite) ∧ (pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → apcf(t) = resWrite) ∧ (pcf(t) = R1 → lsf(t).l = alsf(t).il) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).v = alsf(t).ov) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).l = alsf(t).il ∧ lsf(t).v = alsf(t).iv) ∧ ( pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = R1 ∨ pcf(t) = R4 ∨ pcf(t) = W1 ∨ pcf(t) = W5 → ¬ FO(lsf(t).t) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h.take(firstVolWrite(l0, h)) | l) | lsf(t).t) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l) | lsf(t).t) | false = []) ∧ ( pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → ((h.take(firstVolWrite(l0, h)) | l1) | lsf(t).t) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l1) | lsf(t).t) | false = []) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 → l2 ≠ lsf(t).l ∧ ¬ FO(lsf(t).t) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h.take(firstVolWrite(l0, h)) | l2) | lsf(t).t) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l2) | lsf(t).t) | false = []) ∧ ( pcf(t) = R2 → ctr(lsf(t).l) = 0 → ((h.take(firstVolWrite(l0, h)) | lsf(t).l) | lsf(t).t) | false = [] ∧ ((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | lsf(t).l) | lsf(t).t) | false = []) ∧ ( pcf(t) = W4 → (((h.take(firstVolWrite(l0, h)) | lsf(t).l) | lsf(t).t) | false) + (((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false) + (((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | lsf(t).l) | lsf(t).t) | false) = (W(lsf(t).t, lsf(t).l, lsf(t).v), false) ' ∨ ((h.take(firstVolWrite(l0, h)) | lsf(t).l) | lsf(t).t) | false = [] ∧ ((l0 = lsf(t).l ⊃ (e, true) ';[]) | lsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | lsf(t).l) | lsf(t).t) | false = []) |
h[firstVolWrite(l0, h)] = (e, boolvar), h = h.take(firstVolWrite(l0, h)) + (W(t0, l0, v), false) ' + h.drop(firstVolWrite(l0, h) + 1), lsf(t) = mkFLITPSCls(t1, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf, pcf), FLITPSCInv(mkFLITPSCgs(mem0(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), PLIBInv(mkPLIBgs(mem0 ⊕ p, mem0, h), alsf, apcf), abs(h, writers0, p), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)) ⊦ t1 = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = invRead) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → apcf(t) = resRead) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 → apcf(t) = invWrite) ∧ (pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → apcf(t) = resWrite) ∧ (pcf(t) = R1 → l3 = alsf(t).il) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → v0 = alsf(t).ov) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → l3 = alsf(t).il ∧ v0 = alsf(t).iv) ∧ ( pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = R1 ∨ pcf(t) = R4 ∨ pcf(t) = W1 ∨ pcf(t) = W5 → ¬ FO(t1) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h.take(firstVolWrite(l0, h)) | l) | t1) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | t1) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l) | t1) | false = []) ∧ ( pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → ((h.take(firstVolWrite(l0, h)) | l1) | t1) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | t1) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l1) | t1) | false = []) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 → l2 ≠ l3 ∧ ¬ FO(t1) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h.take(firstVolWrite(l0, h)) | l2) | t1) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | t1) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l2) | t1) | false = []) ∧ ( pcf(t) = R2 → ctr(l3) = 0 → ((h.take(firstVolWrite(l0, h)) | l3) | t1) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t1) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t1) | false = []) ∧ ( pcf(t) = W4 → (((h.take(firstVolWrite(l0, h)) | l3) | t1) | false) + (((l0 = l3 ⊃ (e, true) ';[]) | t1) | false) + (((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t1) | false) = (W(t1, l3, v0), false) ' ∨ ((h.take(firstVolWrite(l0, h)) | l3) | t1) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t1) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t1) | false = [])
Used simplifier rules: ⊦ (t = ls.t ∧ l = ls.l) ∧ v = ls.v ↔ ls = mkFLITPSCls(t, l, v); (elim) Used terms: lsf(t), t1, l3, v0
| h[firstVolWrite(l0, h)] = (e, boolvar), h = h.take(firstVolWrite(l0, h)) + (W(t0, l0, v), false) ' + h.drop(firstVolWrite(l0, h) + 1), lsf(t) = mkFLITPSCls(t1, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf, pcf), FLITPSCInv(mkFLITPSCgs(mem0(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), PLIBInv(mkPLIBgs(mem0 ⊕ p, mem0, h), alsf, apcf), abs(h, writers0, p), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)) ⊦ t1 = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = invRead) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → apcf(t) = resRead) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 → apcf(t) = invWrite) ∧ (pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → apcf(t) = resWrite) ∧ (pcf(t) = R1 → l3 = alsf(t).il) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → v0 = alsf(t).ov) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → l3 = alsf(t).il ∧ v0 = alsf(t).iv) ∧ ( pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = R1 ∨ pcf(t) = R4 ∨ pcf(t) = W1 ∨ pcf(t) = W5 → ¬ FO(t1) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h.take(firstVolWrite(l0, h)) | l) | t1) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | t1) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l) | t1) | false = []) ∧ ( pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → ((h.take(firstVolWrite(l0, h)) | l1) | t1) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | t1) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l1) | t1) | false = []) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 → l2 ≠ l3 ∧ ¬ FO(t1) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h.take(firstVolWrite(l0, h)) | l2) | t1) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | t1) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l2) | t1) | false = []) ∧ ( pcf(t) = R2 → ctr(l3) = 0 → ((h.take(firstVolWrite(l0, h)) | l3) | t1) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t1) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t1) | false = []) ∧ ( pcf(t) = W4 → (((h.take(firstVolWrite(l0, h)) | l3) | t1) | false) + (((l0 = l3 ⊃ (e, true) ';[]) | t1) | false) + (((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t1) | false) = (W(t1, l3, v0), false) ' ∨ ((h.take(firstVolWrite(l0, h)) | l3) | t1) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t1) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t1) | false = []) |
h[firstVolWrite(l0, h)] = (e, boolvar), h = h.take(firstVolWrite(l0, h)) + (W(t0, l0, v), false) ' + h.drop(firstVolWrite(l0, h) + 1), lsf(t) = mkFLITPSCls(t1, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCInv(mkFLITPSCgs(mem0(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf, pcf), PLIBInv(mkPLIBgs(mem0 ⊕ p, mem0, h), alsf, apcf), abs(h, writers0, p), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)) ⊦ t1 = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = invRead) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → apcf(t) = resRead) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 → apcf(t) = invWrite) ∧ (pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → apcf(t) = resWrite) ∧ (pcf(t) = R1 → l3 = alsf(t).il) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → v0 = alsf(t).ov) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → l3 = alsf(t).il ∧ v0 = alsf(t).iv) ∧ ( pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = R1 ∨ pcf(t) = R4 ∨ pcf(t) = W1 ∨ pcf(t) = W5 → ¬ FO(alsf(t).t) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h.take(firstVolWrite(l0, h)) | l) | alsf(t).t) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | alsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l) | alsf(t).t) | false = []) ∧ ( pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → ((h.take(firstVolWrite(l0, h)) | l1) | alsf(t).t) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | alsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l1) | alsf(t).t) | false = []) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 → l2 ≠ l3 ∧ ¬ FO(alsf(t).t) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h.take(firstVolWrite(l0, h)) | l2) | alsf(t).t) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | alsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l2) | alsf(t).t) | false = []) ∧ ( pcf(t) = R2 → ctr(l3) = 0 → ((h.take(firstVolWrite(l0, h)) | l3) | alsf(t).t) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | alsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | alsf(t).t) | false = []) ∧ ( pcf(t) = W4 → (((h.take(firstVolWrite(l0, h)) | l3) | alsf(t).t) | false) + (((l0 = l3 ⊃ (e, true) ';[]) | alsf(t).t) | false) + (((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | alsf(t).t) | false) = (W(alsf(t).t, l3, v0), false) ' ∨ ((h.take(firstVolWrite(l0, h)) | l3) | alsf(t).t) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | alsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | alsf(t).t) | false = [])
| h[firstVolWrite(l0, h)] = (e, boolvar), h = h.take(firstVolWrite(l0, h)) + (W(t0, l0, v), false) ' + h.drop(firstVolWrite(l0, h) + 1), lsf(t) = mkFLITPSCls(t1, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCInv(mkFLITPSCgs(mem0(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf, pcf), PLIBInv(mkPLIBgs(mem0 ⊕ p, mem0, h), alsf, apcf), abs(h, writers0, p), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)) ⊦ t1 = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = invRead) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → apcf(t) = resRead) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 → apcf(t) = invWrite) ∧ (pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → apcf(t) = resWrite) ∧ (pcf(t) = R1 → l3 = alsf(t).il) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → v0 = alsf(t).ov) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → l3 = alsf(t).il ∧ v0 = alsf(t).iv) ∧ ( pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = R1 ∨ pcf(t) = R4 ∨ pcf(t) = W1 ∨ pcf(t) = W5 → ¬ FO(alsf(t).t) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h.take(firstVolWrite(l0, h)) | l) | alsf(t).t) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | alsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l) | alsf(t).t) | false = []) ∧ ( pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → ((h.take(firstVolWrite(l0, h)) | l1) | alsf(t).t) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | alsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l1) | alsf(t).t) | false = []) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 → l2 ≠ l3 ∧ ¬ FO(alsf(t).t) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h.take(firstVolWrite(l0, h)) | l2) | alsf(t).t) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | alsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l2) | alsf(t).t) | false = []) ∧ ( pcf(t) = R2 → ctr(l3) = 0 → ((h.take(firstVolWrite(l0, h)) | l3) | alsf(t).t) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | alsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | alsf(t).t) | false = []) ∧ ( pcf(t) = W4 → (((h.take(firstVolWrite(l0, h)) | l3) | alsf(t).t) | false) + (((l0 = l3 ⊃ (e, true) ';[]) | alsf(t).t) | false) + (((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | alsf(t).t) | false) = (W(alsf(t).t, l3, v0), false) ' ∨ ((h.take(firstVolWrite(l0, h)) | l3) | alsf(t).t) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | alsf(t).t) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | alsf(t).t) | false = []) |
h[firstVolWrite(l0, h)] = (e, boolvar), alsf(t) = mkPLIBls(t2, il, iv, ov), h = h.take(firstVolWrite(l0, h)) + (W(t0, l0, v), false) ' + h.drop(firstVolWrite(l0, h) + 1), lsf(t) = mkFLITPSCls(t1, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf, pcf), FLITPSCInv(mkFLITPSCgs(mem0(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), PLIBInv(mkPLIBgs(mem0 ⊕ p, mem0, h), alsf, apcf), abs(h, writers0, p), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)) ⊦ t1 = t2 ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = invRead) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → apcf(t) = resRead) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 → apcf(t) = invWrite) ∧ (pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → apcf(t) = resWrite) ∧ (pcf(t) = R1 → l3 = il) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → v0 = ov) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → l3 = il ∧ v0 = iv) ∧ ( pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = R1 ∨ pcf(t) = R4 ∨ pcf(t) = W1 ∨ pcf(t) = W5 → ¬ FO(t2) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h.take(firstVolWrite(l0, h)) | l) | t2) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l) | t2) | false = []) ∧ ( pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → ((h.take(firstVolWrite(l0, h)) | l1) | t2) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l1) | t2) | false = []) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 → l2 ≠ l3 ∧ ¬ FO(t2) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h.take(firstVolWrite(l0, h)) | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l2) | t2) | false = []) ∧ ( pcf(t) = R2 → ctr(l3) = 0 → ((h.take(firstVolWrite(l0, h)) | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = []) ∧ ( pcf(t) = W4 → (((h.take(firstVolWrite(l0, h)) | l3) | t2) | false) + (((l0 = l3 ⊃ (e, true) ';[]) | t2) | false) + (((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h.take(firstVolWrite(l0, h)) | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | 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
| h[firstVolWrite(l0, h)] = (e, boolvar), alsf(t) = mkPLIBls(t2, il, iv, ov), h = h.take(firstVolWrite(l0, h)) + (W(t0, l0, v), false) ' + h.drop(firstVolWrite(l0, h) + 1), lsf(t) = mkFLITPSCls(t1, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf, pcf), FLITPSCInv(mkFLITPSCgs(mem0(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), PLIBInv(mkPLIBgs(mem0 ⊕ p, mem0, h), alsf, apcf), abs(h, writers0, p), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)) ⊦ t1 = t2 ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = invRead) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → apcf(t) = resRead) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 → apcf(t) = invWrite) ∧ (pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → apcf(t) = resWrite) ∧ (pcf(t) = R1 → l3 = il) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → v0 = ov) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → l3 = il ∧ v0 = iv) ∧ ( pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = R1 ∨ pcf(t) = R4 ∨ pcf(t) = W1 ∨ pcf(t) = W5 → ¬ FO(t2) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h.take(firstVolWrite(l0, h)) | l) | t2) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l) | t2) | false = []) ∧ ( pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → ((h.take(firstVolWrite(l0, h)) | l1) | t2) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l1) | t2) | false = []) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 → l2 ≠ l3 ∧ ¬ FO(t2) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h.take(firstVolWrite(l0, h)) | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l2) | t2) | false = []) ∧ ( pcf(t) = R2 → ctr(l3) = 0 → ((h.take(firstVolWrite(l0, h)) | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = []) ∧ ( pcf(t) = W4 → (((h.take(firstVolWrite(l0, h)) | l3) | t2) | false) + (((l0 = l3 ⊃ (e, true) ';[]) | t2) | false) + (((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h.take(firstVolWrite(l0, h)) | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = []) |
⊦ FLITPSCInv(gs, lsf, pcf) ↔ FLITPSCGInv(gs) ∧ (∀ t. lsf(t).t = t ∧ FLITPSCLInv(gs, lsf(t), pcf(t)))
h[firstVolWrite(l0, h)] = (e, boolvar), alsf(t) = mkPLIBls(t2, il, iv, ov), h = h.take(firstVolWrite(l0, h)) + (W(t0, l0, v), false) ' + h.drop(firstVolWrite(l0, h) + 1), lsf(t) = mkFLITPSCls(t1, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), PLIBInv(mkPLIBgs(mem0 ⊕ p, mem0, h), alsf, apcf), abs(h, writers0, p), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)) ⊦ t1 = t2 ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = invRead) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → apcf(t) = resRead) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 → apcf(t) = invWrite) ∧ (pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → apcf(t) = resWrite) ∧ (pcf(t) = R1 → l3 = il) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → v0 = ov) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → l3 = il ∧ v0 = iv) ∧ ( pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = R1 ∨ pcf(t) = R4 ∨ pcf(t) = W1 ∨ pcf(t) = W5 → ¬ FO(t2) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h.take(firstVolWrite(l0, h)) | l) | t2) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l) | t2) | false = []) ∧ ( pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → ((h.take(firstVolWrite(l0, h)) | l1) | t2) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l1) | t2) | false = []) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 → l2 ≠ l3 ∧ ¬ FO(t2) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h.take(firstVolWrite(l0, h)) | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l2) | t2) | false = []) ∧ ( pcf(t) = R2 → ctr(l3) = 0 → ((h.take(firstVolWrite(l0, h)) | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = []) ∧ ( pcf(t) = W4 → (((h.take(firstVolWrite(l0, h)) | l3) | t2) | false) + (((l0 = l3 ⊃ (e, true) ';[]) | t2) | false) + (((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h.take(firstVolWrite(l0, h)) | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = [])
Used terms: mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf, pcf
| ⊦ FLITPSCInv(gs, lsf, pcf) ↔ FLITPSCGInv(gs) ∧ (∀ t. lsf(t).t = t ∧ FLITPSCLInv(gs, lsf(t), pcf(t))) |
| h[firstVolWrite(l0, h)] = (e, boolvar), alsf(t) = mkPLIBls(t2, il, iv, ov), h = h.take(firstVolWrite(l0, h)) + (W(t0, l0, v), false) ' + h.drop(firstVolWrite(l0, h) + 1), lsf(t) = mkFLITPSCls(t1, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), PLIBInv(mkPLIBgs(mem0 ⊕ p, mem0, h), alsf, apcf), abs(h, writers0, p), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)) ⊦ t1 = t2 ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = invRead) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → apcf(t) = resRead) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 → apcf(t) = invWrite) ∧ (pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → apcf(t) = resWrite) ∧ (pcf(t) = R1 → l3 = il) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → v0 = ov) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → l3 = il ∧ v0 = iv) ∧ ( pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = R1 ∨ pcf(t) = R4 ∨ pcf(t) = W1 ∨ pcf(t) = W5 → ¬ FO(t2) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h.take(firstVolWrite(l0, h)) | l) | t2) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l) | t2) | false = []) ∧ ( pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → ((h.take(firstVolWrite(l0, h)) | l1) | t2) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l1) | t2) | false = []) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 → l2 ≠ l3 ∧ ¬ FO(t2) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h.take(firstVolWrite(l0, h)) | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l2) | t2) | false = []) ∧ ( pcf(t) = R2 → ctr(l3) = 0 → ((h.take(firstVolWrite(l0, h)) | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = []) ∧ ( pcf(t) = W4 → (((h.take(firstVolWrite(l0, h)) | l3) | t2) | false) + (((l0 = l3 ⊃ (e, true) ';[]) | t2) | false) + (((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h.take(firstVolWrite(l0, h)) | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = []) |
lsf(t).t = t, h[firstVolWrite(l0, h)] = (e, boolvar), alsf(t) = mkPLIBls(t2, il, iv, ov), h = h.take(firstVolWrite(l0, h)) + (W(t0, l0, v), false) ' + h.drop(firstVolWrite(l0, h) + 1), lsf(t) = mkFLITPSCls(t1, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), PLIBInv(mkPLIBgs(mem0 ⊕ p, mem0, h), alsf, apcf), abs(h, writers0, p), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)) ⊦ t1 = t2 ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = invRead) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → apcf(t) = resRead) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 → apcf(t) = invWrite) ∧ (pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → apcf(t) = resWrite) ∧ (pcf(t) = R1 → l3 = il) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → v0 = ov) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → l3 = il ∧ v0 = iv) ∧ ( pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = R1 ∨ pcf(t) = R4 ∨ pcf(t) = W1 ∨ pcf(t) = W5 → ¬ FO(t2) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h.take(firstVolWrite(l0, h)) | l) | t2) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l) | t2) | false = []) ∧ ( pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → ((h.take(firstVolWrite(l0, h)) | l1) | t2) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l1) | t2) | false = []) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 → l2 ≠ l3 ∧ ¬ FO(t2) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h.take(firstVolWrite(l0, h)) | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l2) | t2) | false = []) ∧ ( pcf(t) = R2 → ctr(l3) = 0 → ((h.take(firstVolWrite(l0, h)) | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = []) ∧ ( pcf(t) = W4 → (((h.take(firstVolWrite(l0, h)) | l3) | t2) | false) + (((l0 = l3 ⊃ (e, true) ';[]) | t2) | false) + (((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h.take(firstVolWrite(l0, h)) | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = [])
Used terms: t
| lsf(t).t = t, h[firstVolWrite(l0, h)] = (e, boolvar), alsf(t) = mkPLIBls(t2, il, iv, ov), h = h.take(firstVolWrite(l0, h)) + (W(t0, l0, v), false) ' + h.drop(firstVolWrite(l0, h) + 1), lsf(t) = mkFLITPSCls(t1, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), PLIBInv(mkPLIBgs(mem0 ⊕ p, mem0, h), alsf, apcf), abs(h, writers0, p), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)) ⊦ t1 = t2 ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = invRead) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → apcf(t) = resRead) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 → apcf(t) = invWrite) ∧ (pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → apcf(t) = resWrite) ∧ (pcf(t) = R1 → l3 = il) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → v0 = ov) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → l3 = il ∧ v0 = iv) ∧ ( pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = R1 ∨ pcf(t) = R4 ∨ pcf(t) = W1 ∨ pcf(t) = W5 → ¬ FO(t2) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h.take(firstVolWrite(l0, h)) | l) | t2) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l) | t2) | false = []) ∧ ( pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → ((h.take(firstVolWrite(l0, h)) | l1) | t2) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l1) | t2) | false = []) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 → l2 ≠ l3 ∧ ¬ FO(t2) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h.take(firstVolWrite(l0, h)) | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l2) | t2) | false = []) ∧ ( pcf(t) = R2 → ctr(l3) = 0 → ((h.take(firstVolWrite(l0, h)) | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = []) ∧ ( pcf(t) = W4 → (((h.take(firstVolWrite(l0, h)) | l3) | t2) | false) + (((l0 = l3 ⊃ (e, true) ';[]) | t2) | false) + (((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h.take(firstVolWrite(l0, h)) | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = []) |
h[firstVolWrite(l0, h)] = (e, boolvar), alsf(t1) = mkPLIBls(t2, il, iv, ov), h = h.take(firstVolWrite(l0, h)) + (W(t0, l0, v), false) ' + h.drop(firstVolWrite(l0, h) + 1), lsf(t1) = mkFLITPSCls(t1, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t1, l3, v0), pcf(t1)), PLIBInv(mkPLIBgs(mem0 ⊕ p, mem0, h), alsf, apcf), abs(h, writers0, p), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)) ⊦ t1 = t2 ∧ (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 = il) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov) ∧ (pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv) ∧ ( pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h.take(firstVolWrite(l0, h)) | l) | t2) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l) | t2) | false = []) ∧ ( pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h.take(firstVolWrite(l0, h)) | l1) | t2) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l1) | t2) | false = []) ∧ ( pcf(t2) = R2 ∨ pcf(t2) = R3 → l2 ≠ l3 ∧ ¬ FO(t2) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h.take(firstVolWrite(l0, h)) | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l2) | t2) | false = []) ∧ ( pcf(t2) = R2 → ctr(l3) = 0 → ((h.take(firstVolWrite(l0, h)) | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = []) ∧ ( pcf(t2) = W4 → (((h.take(firstVolWrite(l0, h)) | l3) | t2) | false) + (((l0 = l3 ⊃ (e, true) ';[]) | t2) | false) + (((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h.take(firstVolWrite(l0, h)) | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = [])
Used simplifier rules: ⊦ mkFLITPSCls(t, l, v).t = t; (s)
| h[firstVolWrite(l0, h)] = (e, boolvar), alsf(t1) = mkPLIBls(t2, il, iv, ov), h = h.take(firstVolWrite(l0, h)) + (W(t0, l0, v), false) ' + h.drop(firstVolWrite(l0, h) + 1), lsf(t1) = mkFLITPSCls(t1, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t1, l3, v0), pcf(t1)), PLIBInv(mkPLIBgs(mem0 ⊕ p, mem0, h), alsf, apcf), abs(h, writers0, p), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)) ⊦ t1 = t2 ∧ (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 = il) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov) ∧ (pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv) ∧ ( pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h.take(firstVolWrite(l0, h)) | l) | t2) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l) | t2) | false = []) ∧ ( pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h.take(firstVolWrite(l0, h)) | l1) | t2) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l1) | t2) | false = []) ∧ ( pcf(t2) = R2 ∨ pcf(t2) = R3 → l2 ≠ l3 ∧ ¬ FO(t2) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h.take(firstVolWrite(l0, h)) | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l2) | t2) | false = []) ∧ ( pcf(t2) = R2 → ctr(l3) = 0 → ((h.take(firstVolWrite(l0, h)) | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = []) ∧ ( pcf(t2) = W4 → (((h.take(firstVolWrite(l0, h)) | l3) | t2) | false) + (((l0 = l3 ⊃ (e, true) ';[]) | t2) | false) + (((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h.take(firstVolWrite(l0, h)) | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = []) |
⊦ PLIBInv(gs, lsf, pcf) ↔ PLIBGInv(gs) ∧ (∀ t. lsf(t).t = t ∧ PLIBLInv(gs, lsf(t), pcf(t)))
h[firstVolWrite(l0, h)] = (e, boolvar), alsf(t1) = mkPLIBls(t2, il, iv, ov), h = h.take(firstVolWrite(l0, h)) + (W(t0, l0, v), false) ' + h.drop(firstVolWrite(l0, h) + 1), lsf(t1) = mkFLITPSCls(t1, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t1, l3, v0), pcf(t1)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h)), abs(h, writers0, p), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)) ⊦ t1 = t2 ∧ (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 = il) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov) ∧ (pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv) ∧ ( pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h.take(firstVolWrite(l0, h)) | l) | t2) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l) | t2) | false = []) ∧ ( pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h.take(firstVolWrite(l0, h)) | l1) | t2) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l1) | t2) | false = []) ∧ ( pcf(t2) = R2 ∨ pcf(t2) = R3 → l2 ≠ l3 ∧ ¬ FO(t2) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h.take(firstVolWrite(l0, h)) | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l2) | t2) | false = []) ∧ ( pcf(t2) = R2 → ctr(l3) = 0 → ((h.take(firstVolWrite(l0, h)) | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = []) ∧ ( pcf(t2) = W4 → (((h.take(firstVolWrite(l0, h)) | l3) | t2) | false) + (((l0 = l3 ⊃ (e, true) ';[]) | t2) | false) + (((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h.take(firstVolWrite(l0, h)) | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = [])
Used terms: mkPLIBgs(mem0 ⊕ p, mem0, h), alsf, apcf
| ⊦ PLIBInv(gs, lsf, pcf) ↔ PLIBGInv(gs) ∧ (∀ t. lsf(t).t = t ∧ PLIBLInv(gs, lsf(t), pcf(t))) |
| h[firstVolWrite(l0, h)] = (e, boolvar), alsf(t1) = mkPLIBls(t2, il, iv, ov), h = h.take(firstVolWrite(l0, h)) + (W(t0, l0, v), false) ' + h.drop(firstVolWrite(l0, h) + 1), lsf(t1) = mkFLITPSCls(t1, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t1, l3, v0), pcf(t1)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h)), abs(h, writers0, p), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)) ⊦ t1 = t2 ∧ (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 = il) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov) ∧ (pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv) ∧ ( pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h.take(firstVolWrite(l0, h)) | l) | t2) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l) | t2) | false = []) ∧ ( pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h.take(firstVolWrite(l0, h)) | l1) | t2) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l1) | t2) | false = []) ∧ ( pcf(t2) = R2 ∨ pcf(t2) = R3 → l2 ≠ l3 ∧ ¬ FO(t2) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h.take(firstVolWrite(l0, h)) | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l2) | t2) | false = []) ∧ ( pcf(t2) = R2 → ctr(l3) = 0 → ((h.take(firstVolWrite(l0, h)) | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = []) ∧ ( pcf(t2) = W4 → (((h.take(firstVolWrite(l0, h)) | l3) | t2) | false) + (((l0 = l3 ⊃ (e, true) ';[]) | t2) | false) + (((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h.take(firstVolWrite(l0, h)) | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = []) |
alsf(t1).t = t1, h[firstVolWrite(l0, h)] = (e, boolvar), alsf(t1) = mkPLIBls(t2, il, iv, ov), h = h.take(firstVolWrite(l0, h)) + (W(t0, l0, v), false) ' + h.drop(firstVolWrite(l0, h) + 1), lsf(t1) = mkFLITPSCls(t1, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t1, l3, v0), pcf(t1)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t1), apcf(t1)), abs(h, writers0, p), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)) ⊦ t1 = t2 ∧ (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 = il) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov) ∧ (pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv) ∧ ( pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h.take(firstVolWrite(l0, h)) | l) | t2) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l) | t2) | false = []) ∧ ( pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h.take(firstVolWrite(l0, h)) | l1) | t2) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l1) | t2) | false = []) ∧ ( pcf(t2) = R2 ∨ pcf(t2) = R3 → l2 ≠ l3 ∧ ¬ FO(t2) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h.take(firstVolWrite(l0, h)) | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l2) | t2) | false = []) ∧ ( pcf(t2) = R2 → ctr(l3) = 0 → ((h.take(firstVolWrite(l0, h)) | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = []) ∧ ( pcf(t2) = W4 → (((h.take(firstVolWrite(l0, h)) | l3) | t2) | false) + (((l0 = l3 ⊃ (e, true) ';[]) | t2) | false) + (((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h.take(firstVolWrite(l0, h)) | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = [])
Used terms: t1
| alsf(t1).t = t1, h[firstVolWrite(l0, h)] = (e, boolvar), alsf(t1) = mkPLIBls(t2, il, iv, ov), h = h.take(firstVolWrite(l0, h)) + (W(t0, l0, v), false) ' + h.drop(firstVolWrite(l0, h) + 1), lsf(t1) = mkFLITPSCls(t1, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t1, l3, v0), pcf(t1)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t1), apcf(t1)), abs(h, writers0, p), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)) ⊦ t1 = t2 ∧ (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 = il) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov) ∧ (pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv) ∧ ( pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h.take(firstVolWrite(l0, h)) | l) | t2) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l) | t2) | false = []) ∧ ( pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h.take(firstVolWrite(l0, h)) | l1) | t2) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l1) | t2) | false = []) ∧ ( pcf(t2) = R2 ∨ pcf(t2) = R3 → l2 ≠ l3 ∧ ¬ FO(t2) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h.take(firstVolWrite(l0, h)) | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l2) | t2) | false = []) ∧ ( pcf(t2) = R2 → ctr(l3) = 0 → ((h.take(firstVolWrite(l0, h)) | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = []) ∧ ( pcf(t2) = W4 → (((h.take(firstVolWrite(l0, h)) | l3) | t2) | false) + (((l0 = l3 ⊃ (e, true) ';[]) | t2) | false) + (((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h.take(firstVolWrite(l0, h)) | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = []) |
h[firstVolWrite(l0, h)] = (e, boolvar), alsf(t2) = mkPLIBls(t2, il, iv, ov), h = h.take(firstVolWrite(l0, h)) + (W(t0, l0, v), false) ' + h.drop(firstVolWrite(l0, h) + 1), lsf(t2) = mkFLITPSCls(t2, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h, writers0, p), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)) ⊦ (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 = il) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov) ∧ (pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv) ∧ ( pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h.take(firstVolWrite(l0, h)) | l) | t2) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l) | t2) | false = []) ∧ ( pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h.take(firstVolWrite(l0, h)) | l1) | t2) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l1) | t2) | false = []) ∧ ( pcf(t2) = R2 ∨ pcf(t2) = R3 → l2 ≠ l3 ∧ ¬ FO(t2) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h.take(firstVolWrite(l0, h)) | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l2) | t2) | false = []) ∧ ( pcf(t2) = R2 → ctr(l3) = 0 → ((h.take(firstVolWrite(l0, h)) | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = []) ∧ ( pcf(t2) = W4 → (((h.take(firstVolWrite(l0, h)) | l3) | t2) | false) + (((l0 = l3 ⊃ (e, true) ';[]) | t2) | false) + (((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h.take(firstVolWrite(l0, h)) | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = [])
Used simplifier rules: ⊦ mkPLIBls(t, il, iv, iv0).t = t; (s)
| h[firstVolWrite(l0, h)] = (e, boolvar), alsf(t2) = mkPLIBls(t2, il, iv, ov), h = h.take(firstVolWrite(l0, h)) + (W(t0, l0, v), false) ' + h.drop(firstVolWrite(l0, h) + 1), lsf(t2) = mkFLITPSCls(t2, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h, writers0, p), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)) ⊦ (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 = il) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov) ∧ (pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv) ∧ ( pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h.take(firstVolWrite(l0, h)) | l) | t2) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l) | t2) | false = []) ∧ ( pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h.take(firstVolWrite(l0, h)) | l1) | t2) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l1) | t2) | false = []) ∧ ( pcf(t2) = R2 ∨ pcf(t2) = R3 → l2 ≠ l3 ∧ ¬ FO(t2) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h.take(firstVolWrite(l0, h)) | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l2) | t2) | false = []) ∧ ( pcf(t2) = R2 → ctr(l3) = 0 → ((h.take(firstVolWrite(l0, h)) | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = []) ∧ ( pcf(t2) = W4 → (((h.take(firstVolWrite(l0, h)) | l3) | t2) | false) + (((l0 = l3 ⊃ (e, true) ';[]) | t2) | false) + (((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h.take(firstVolWrite(l0, h)) | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = []) |
h[firstVolWrite(l0, h)] = (e, boolvar), alsf(t2) = mkPLIBls(t2, il, iv, ov), h = h.take(firstVolWrite(l0, h)) + (W(t0, l0, v), false) ' + h.drop(firstVolWrite(l0, h) + 1), lsf(t2) = mkFLITPSCls(t2, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h, writers0, p), labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t2), pcf(t2), mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t2), apcf(t2)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)) ⊦ (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 = il) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov) ∧ (pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv) ∧ ( pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h.take(firstVolWrite(l0, h)) | l) | t2) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l) | t2) | false = []) ∧ ( pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h.take(firstVolWrite(l0, h)) | l1) | t2) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l1) | t2) | false = []) ∧ ( pcf(t2) = R2 ∨ pcf(t2) = R3 → l2 ≠ l3 ∧ ¬ FO(t2) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h.take(firstVolWrite(l0, h)) | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l2) | t2) | false = []) ∧ ( pcf(t2) = R2 → ctr(l3) = 0 → ((h.take(firstVolWrite(l0, h)) | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = []) ∧ ( pcf(t2) = W4 → (((h.take(firstVolWrite(l0, h)) | l3) | t2) | false) + (((l0 = l3 ⊃ (e, true) ';[]) | t2) | false) + (((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h.take(firstVolWrite(l0, h)) | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = [])
Used terms: t2
| h[firstVolWrite(l0, h)] = (e, boolvar), alsf(t2) = mkPLIBls(t2, il, iv, ov), h = h.take(firstVolWrite(l0, h)) + (W(t0, l0, v), false) ' + h.drop(firstVolWrite(l0, h) + 1), lsf(t2) = mkFLITPSCls(t2, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h, writers0, p), labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t2), pcf(t2), mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t2), apcf(t2)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)) ⊦ (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 = il) ∧ (pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov) ∧ (pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv) ∧ ( pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h.take(firstVolWrite(l0, h)) | l) | t2) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l) | t2) | false = []) ∧ ( pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h.take(firstVolWrite(l0, h)) | l1) | t2) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l1) | t2) | false = []) ∧ ( pcf(t2) = R2 ∨ pcf(t2) = R3 → l2 ≠ l3 ∧ ¬ FO(t2) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h.take(firstVolWrite(l0, h)) | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l2) | t2) | false = []) ∧ ( pcf(t2) = R2 → ctr(l3) = 0 → ((h.take(firstVolWrite(l0, h)) | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = []) ∧ ( pcf(t2) = W4 → (((h.take(firstVolWrite(l0, h)) | l3) | t2) | false) + (((l0 = l3 ⊃ (e, true) ';[]) | t2) | false) + (((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h.take(firstVolWrite(l0, h)) | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = []) |
h[firstVolWrite(l0, h)] = (e, boolvar), alsf(t2) = mkPLIBls(t2, il, iv, ov), h = h.take(firstVolWrite(l0, h)) + (W(t0, l0, v), false) ' + h.drop(firstVolWrite(l0, h) + 1), lsf(t2) = mkFLITPSCls(t2, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h, writers0, p), 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, 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 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h | l4) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h | l4) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h | l4) | t2) | false = []), pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = R1 → l3 = il, ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)) ⊦ ( pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h.take(firstVolWrite(l0, h)) | l) | t2) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l) | t2) | false = []) ∧ ( pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h.take(firstVolWrite(l0, h)) | l1) | t2) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l1) | t2) | false = []) ∧ ( pcf(t2) = R2 ∨ pcf(t2) = R3 → l2 ≠ l3 ∧ ¬ FO(t2) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h.take(firstVolWrite(l0, h)) | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l2) | t2) | false = []) ∧ ( pcf(t2) = R2 → ctr(l3) = 0 → ((h.take(firstVolWrite(l0, h)) | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = []) ∧ ( pcf(t2) = W4 → (((h.take(firstVolWrite(l0, h)) | l3) | t2) | false) + (((l0 = l3 ⊃ (e, true) ';[]) | t2) | false) + (((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h.take(firstVolWrite(l0, h)) | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = [])
Used simplifier rules: labs-def: ⊦ labs(gs, ls, pc, ags, als, apc) ↔ ls.t = als.t ∧ (pc = idle → apc = idle) ∧ (pc = ready → apc = ready) ∧ (pc = crashed → apc = crashed) ∧ (pc = R1 → apc = invRead) ∧ (pc = R2 ∨ pc = R3 ∨ pc = R4 → apc = resRead) ∧ (pc = W1 ∨ pc = W2 ∨ pc = W3 → apc = invWrite) ∧ (pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → apc = resWrite) ∧ (pc = R1 → ls.l = als.il) ∧ (pc = R2 ∨ pc = R3 ∨ pc = R4 → ls.v = als.ov) ∧ ( pc = W1 ∨ pc = W2 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → ls.l = als.il ∧ ls.v = als.iv) ∧ ( pc = idle ∨ pc = ready ∨ pc = R1 ∨ pc = R4 ∨ pc = W1 ∨ pc = W5 → (∀ l. ¬ FO(ls.t) ∈ gs.p(l) → ((ags.h | l) | ls.t) | false = [])) ∧ (pc = W2 ∨ pc = W3 ∨ pc = W6 ∨ pc = W7 → (∀ l. ((ags.h | l) | ls.t) | false = [])) ∧ ( pc = R2 ∨ pc = R3 → (∀ l0. l0 ≠ ls.l ∧ ¬ FO(ls.t) ∈ gs.p(l0) → ((ags.h | l0) | ls.t) | false = [])) ∧ (pc = R2 → gs.ctr(ls.l) = 0 → ((ags.h | ls.l) | ls.t) | false = []) ∧ ( pc = W4 → ((ags.h | ls.l) | ls.t) | false = (W(ls.t, ls.l, ls.v), false) ' ∨ ((ags.h | ls.l) | ls.t) | false = []); ⊦ mkPLIBls(t, il, iv, iv0).il = il; (s) ⊦ mkFLITPSCls(t, l, v).l = l; (s) ⊦ mkPLIBls(t, il, iv, iv0).ov = iv0; (s) ⊦ mkFLITPSCls(t, l, v).v = v; (s) ⊦ mkPLIBls(t, il, iv, iv0).iv = iv; (s) ⊦ mkPLIBls(t, il, iv, iv0).t = t; (s) ⊦ mkFLITPSCls(t, l, v).t = t; (s) ⊦ mkPLIBgs(vm, vm0, h).h = h; (s) ⊦ mkFLITPSCgs(mem, p, ctr, writers, writers0).ctr = ctr; (s) ⊦ mkFLITPSCgs(mem, p, ctr, writers, writers0).p = p; (s)
| h[firstVolWrite(l0, h)] = (e, boolvar), alsf(t2) = mkPLIBls(t2, il, iv, ov), h = h.take(firstVolWrite(l0, h)) + (W(t0, l0, v), false) ' + h.drop(firstVolWrite(l0, h) + 1), lsf(t2) = mkFLITPSCls(t2, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h, writers0, p), 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, 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 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h | l4) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h | l4) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h | l4) | t2) | false = []), pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = R1 → l3 = il, ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)) ⊦ ( pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h.take(firstVolWrite(l0, h)) | l) | t2) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l) | t2) | false = []) ∧ ( pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h.take(firstVolWrite(l0, h)) | l1) | t2) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l1) | t2) | false = []) ∧ ( pcf(t2) = R2 ∨ pcf(t2) = R3 → l2 ≠ l3 ∧ ¬ FO(t2) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h.take(firstVolWrite(l0, h)) | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l2) | t2) | false = []) ∧ ( pcf(t2) = R2 → ctr(l3) = 0 → ((h.take(firstVolWrite(l0, h)) | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = []) ∧ ( pcf(t2) = W4 → (((h.take(firstVolWrite(l0, h)) | l3) | t2) | false) + (((l0 = l3 ⊃ (e, true) ';[]) | t2) | false) + (((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h.take(firstVolWrite(l0, h)) | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = []) |
# h0 = firstVolWrite(l0, h), h[firstVolWrite(l0, h)] = (e, boolvar), alsf(t2) = mkPLIBls(t2, il, iv, ov), h = h0 + (W(t0, l0, v), false) ' + h.drop(firstVolWrite(l0, h) + 1), h = h0 + h1, lsf(t2) = mkFLITPSCls(t2, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h, writers0, p), firstVolWrite(l0, h) ≤ # h, pcf(t2) = R1 → l3 = il, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h | l4) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h | l4) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h | l4) | 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 = [], 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, ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)) ⊦ ( pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h0 | l) | t2) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l) | t2) | false = []) ∧ ( pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h0 | l1) | t2) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l1) | t2) | false = []) ∧ ( pcf(t2) = R2 ∨ pcf(t2) = R3 → l2 ≠ l3 ∧ ¬ FO(t2) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h0 | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l2) | t2) | false = []) ∧ ( pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = []) ∧ ( pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (e, true) ';[]) | t2) | false) + (((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = [])
Used simplifier rules: ⊦ m ≤ n ↔ ¬ n < m; (ss) ⊦ ¬ # h < firstVolWrite(l, h); (s) ⊦ n ≤ # x → (y = x.take(n) ∧ z = x.drop(n) ↔ x = y + z ∧ # y = n); (elim) Used terms: h, firstVolWrite(l0, h), h0, h1
| # h0 = firstVolWrite(l0, h), h[firstVolWrite(l0, h)] = (e, boolvar), alsf(t2) = mkPLIBls(t2, il, iv, ov), h = h0 + (W(t0, l0, v), false) ' + h.drop(firstVolWrite(l0, h) + 1), h = h0 + h1, lsf(t2) = mkFLITPSCls(t2, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h, writers0, p), firstVolWrite(l0, h) ≤ # h, pcf(t2) = R1 → l3 = il, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h | l4) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h | l4) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h | l4) | 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 = [], 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, ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h), alsf(t), apcf(t)) ⊦ ( pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h0 | l) | t2) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l) | t2) | false = []) ∧ ( pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h0 | l1) | t2) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l1) | t2) | false = []) ∧ ( pcf(t2) = R2 ∨ pcf(t2) = R3 → l2 ≠ l3 ∧ ¬ FO(t2) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h0 | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l2) | t2) | false = []) ∧ ( pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = []) ∧ ( pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (e, true) ';[]) | t2) | false) + (((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h.drop(firstVolWrite(l0, h) + 1)) | l3) | t2) | false = []) |
# h0 = firstVolWrite(l0, h0 + h1), (h0 + h1)[# h0] = (e, boolvar), alsf(t2) = mkPLIBls(t2, il, iv, ov), h1 = (W(t0, l0, v), false) ' + h1.drop(1), lsf(t2) = mkFLITPSCls(t2, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + h1)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + h1), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + h1, writers0, p), (W(t0, l0, v), false) ∈ h1, pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((h1 | l4) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((h1 | l4) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((h1 | l4) | t2) | false = []), pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((h1 | l3) | t2) | false = [], pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((h1 | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((h1 | l3) | t2) | false = [], pcf(t2) = R1 → l3 = il, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, 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, ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + h1), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + h1), alsf(t), apcf(t)) ⊦ ( pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h0 | l) | t2) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h1.drop(1)) | l) | t2) | false = []) ∧ ( pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h0 | l1) | t2) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h1.drop(1)) | l1) | t2) | false = []) ∧ ( pcf(t2) = R2 ∨ pcf(t2) = R3 → l2 ≠ l3 ∧ ¬ FO(t2) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h0 | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h1.drop(1)) | l2) | t2) | false = []) ∧ ( pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h1.drop(1)) | l3) | t2) | false = []) ∧ ( pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (e, true) ';[]) | t2) | false) + (((persistDependentReads(l0, h1.drop(1)) | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h1.drop(1)) | l3) | t2) | false = [])
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ (x + y).drop(# x + n) = y.drop(n); (s) ⊦ m ≤ m + n; (s) in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ h + h0 | b = (h | b) + (h0 | b); (s) ⊦ h + h0 | t = (h | t) + (h0 | t); (s) ⊦ h + h0 | l0 = (h | l0) + (h0 | l0); (s) ⊦ #(x + y) = # x + # y; (s) ⊦ # x = # z → (x + y = z + y0 ↔ x = z ∧ y = y0); (ws)
| # h0 = firstVolWrite(l0, h0 + h1), (h0 + h1)[# h0] = (e, boolvar), alsf(t2) = mkPLIBls(t2, il, iv, ov), h1 = (W(t0, l0, v), false) ' + h1.drop(1), lsf(t2) = mkFLITPSCls(t2, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + h1)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + h1), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + h1, writers0, p), (W(t0, l0, v), false) ∈ h1, pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((h1 | l4) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((h1 | l4) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((h1 | l4) | t2) | false = []), pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((h1 | l3) | t2) | false = [], pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((h1 | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((h1 | l3) | t2) | false = [], pcf(t2) = R1 → l3 = il, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, 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, ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + h1), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + h1), alsf(t), apcf(t)) ⊦ ( pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h0 | l) | t2) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h1.drop(1)) | l) | t2) | false = []) ∧ ( pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h0 | l1) | t2) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h1.drop(1)) | l1) | t2) | false = []) ∧ ( pcf(t2) = R2 ∨ pcf(t2) = R3 → l2 ≠ l3 ∧ ¬ FO(t2) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h0 | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h1.drop(1)) | l2) | t2) | false = []) ∧ ( pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h1.drop(1)) | l3) | t2) | false = []) ∧ ( pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (e, true) ';[]) | t2) | false) + (((persistDependentReads(l0, h1.drop(1)) | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h1.drop(1)) | l3) | t2) | false = []) |
# h0 = firstVolWrite(l0, h0 + h1), (h0 + h1)[# h0] = (e, boolvar), alsf(t2) = mkPLIBls(t2, il, iv, ov), h1 = (W(t0, l0, v), false) ' + h1.drop(1), h1 = vpe + h, lsf(t2) = mkFLITPSCls(t2, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + h1)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + h1), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + h1, writers0, p), (W(t0, l0, v), false) ∈ h1, 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, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = R1 → l3 = il, pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((h1 | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((h1 | l3) | t2) | false = [], pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((h1 | l3) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((h1 | l4) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((h1 | l4) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((h1 | l4) | t2) | false = []), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + h1), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + h1), alsf(t), apcf(t)) ⊦ ( pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h0 | l) | t2) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h1.drop(1)) | l) | t2) | false = []) ∧ ( pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h0 | l1) | t2) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h1.drop(1)) | l1) | t2) | false = []) ∧ ( pcf(t2) = R2 ∨ pcf(t2) = R3 → l2 ≠ l3 ∧ ¬ FO(t2) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h0 | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h1.drop(1)) | l2) | t2) | false = []) ∧ ( pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h1.drop(1)) | l3) | t2) | false = []) ∧ ( pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (e, true) ';[]) | t2) | false) + (((persistDependentReads(l0, h1.drop(1)) | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h1.drop(1)) | l3) | t2) | false = [])
Used simplifier rules: List('a) freely generated by [], +;; ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ a ' ≠ []; (s) a: ⊦ (x + y) + z = x + y + z; from specification list
| # h0 = firstVolWrite(l0, h0 + h1), (h0 + h1)[# h0] = (e, boolvar), alsf(t2) = mkPLIBls(t2, il, iv, ov), h1 = (W(t0, l0, v), false) ' + h1.drop(1), h1 = vpe + h, lsf(t2) = mkFLITPSCls(t2, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := e.v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + h1)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + h1), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + h1, writers0, p), (W(t0, l0, v), false) ∈ h1, 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, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = R1 → l3 = il, pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((h1 | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((h1 | l3) | t2) | false = [], pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((h1 | l3) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((h1 | l4) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((h1 | l4) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((h1 | l4) | t2) | false = []), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + h1), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + h1), alsf(t), apcf(t)) ⊦ ( pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h0 | l) | t2) | false = [] ∧ ((l0 = l ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h1.drop(1)) | l) | t2) | false = []) ∧ ( pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h0 | l1) | t2) | false = [] ∧ ((l0 = l1 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h1.drop(1)) | l1) | t2) | false = []) ∧ ( pcf(t2) = R2 ∨ pcf(t2) = R3 → l2 ≠ l3 ∧ ¬ FO(t2) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h0 | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h1.drop(1)) | l2) | t2) | false = []) ∧ ( pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h1.drop(1)) | l3) | t2) | false = []) ∧ ( pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (e, true) ';[]) | t2) | false) + (((persistDependentReads(l0, h1.drop(1)) | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (e, true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h1.drop(1)) | l3) | t2) | false = []) |
# h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), pcf(t2) = R1 → l3 = il, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, 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) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)) ⊦ ( pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h0 | l) | t2) | false = [] ∧ ((l0 = l ⊃ (W(t0, l, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l) | t2) | false = []) ∧ ( pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h0 | l1) | t2) | false = [] ∧ ((l0 = l1 ⊃ (W(t0, l1, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l1) | t2) | false = []) ∧ ( pcf(t2) = R2 ∨ pcf(t2) = R3 → l2 ≠ l3 ∧ ¬ FO(t2) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h0 | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (W(t0, l2, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l2) | t2) | false = []) ∧ ( pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l3) | t2) | false = []) ∧ ( pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), true) ';[]) | t2) | false) + (((persistDependentReads(l0, h) | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l3) | t2) | false = [])
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ W(t, l, v).l = l; (s) ⊦ W(t, l, v).v = v; (s) ⊦ (a ' + x).drop(1) = x; (s) ⊦ a + x = a ' + x; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ h + h0 | b = (h | b) + (h0 | b); (s) ⊦ h + h0 | t = (h | t) + (h0 | t); (s) ⊦ vpe ' | l = (vpe._1.l = l ⊃ vpe ';[]); (s) ⊦ h + h0 | l0 = (h | l0) + (h0 | l0); (s) ⊦ a ∈ a0 ' + x ↔ a = a0 ∨ a ∈ x; (s) ⊦ (x + a ' + y)[# x] = a; (s) ⊦ a ' = a0 ' ↔ a = a0; (s) ⊦ # y = # y0 → (x + y = z + y0 ↔ x = z ∧ y = y0); (ws)
| # h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), pcf(t2) = R1 → l3 = il, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, 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) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)) ⊦ ( pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → ¬ FO(t2) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)) → ((h0 | l) | t2) | false = [] ∧ ((l0 = l ⊃ (W(t0, l, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l) | t2) | false = []) ∧ ( pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → ((h0 | l1) | t2) | false = [] ∧ ((l0 = l1 ⊃ (W(t0, l1, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l1) | t2) | false = []) ∧ ( pcf(t2) = R2 ∨ pcf(t2) = R3 → l2 ≠ l3 ∧ ¬ FO(t2) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)) → ((h0 | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (W(t0, l2, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l2) | t2) | false = []) ∧ ( pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l3) | t2) | false = []) ∧ ( pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), true) ';[]) | t2) | false) + (((persistDependentReads(l0, h) | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l3) | t2) | false = []) |
# h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), ¬ FO(t2) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)), pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), 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, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = R1 → l3 = il, ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 ⊦ ((h0 | l) | t2) | false = [] ∧ ((l0 = l ⊃ (W(t0, l, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l) | t2) | false = []
# h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), 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, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = R1 → l3 = il, ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 ⊦ ((h0 | l1) | t2) | false = [] ∧ ((l0 = l1 ⊃ (W(t0, l1, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l1) | t2) | false = []
# h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), l2 ≠ l3, p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), ¬ FO(t2) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)), pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), 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, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = R1 → l3 = il, ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), pcf(t2) = R2 ∨ pcf(t2) = R3 ⊦ ((h0 | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (W(t0, l2, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l2) | t2) | false = []
# h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), ctr(l3) = 0, lsf(t2) = mkFLITPSCls(t2, l3, v0), pcf(t2) = R2, p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), 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, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = R1 → l3 = il, ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)) ⊦ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l3) | t2) | false = []
# h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), pcf(t2) = W4, (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), true) ';[]) | t2) | false) + (((persistDependentReads(l0, h) | l3) | t2) | false) ≠ (W(t2, l3, v0), false) ', p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), 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, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = R1 → l3 = il, ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)) ⊦ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l3) | t2) | false = []
| # h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), ¬ FO(t2) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)), pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), 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, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = R1 → l3 = il, ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 ⊦ ((h0 | l) | t2) | false = [] ∧ ((l0 = l ⊃ (W(t0, l, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l) | t2) | false = [] |
# h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), ¬ FO(t2) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)), pcf(t2) = R1 → l3 = il, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, 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) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = [], pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 ⊦ ((h0 | l) | t2) | false = [] ∧ ((l0 = l ⊃ (W(t0, l, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l) | t2) | false = []
| # h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), ¬ FO(t2) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)), pcf(t2) = R1 → l3 = il, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, 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) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = [], pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 ⊦ ((h0 | l) | t2) | false = [] ∧ ((l0 = l ⊃ (W(t0, l, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l) | t2) | false = [] |
# h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), ¬ FO(t2) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)), pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), 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, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = R1 → l3 = il, ¬ FO(t2) ∈ p(l) → ((h0 | l) | t2) | false = [] ∧ ((l0 = l ⊃ (W(t0, l, v), false) ';[]) | t2) | false = [] ∧ ((h | l) | t2) | false = [], ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 ⊦ ((h0 | l) | t2) | false = [] ∧ ((l0 = l ⊃ (W(t0, l, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l) | t2) | false = []
Used terms: l
| # h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), ¬ FO(t2) ∈ (l0 = l ⊃ p(l) -p firstPersistW(p(l));p(l)), pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), 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, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = R1 → l3 = il, ¬ FO(t2) ∈ p(l) → ((h0 | l) | t2) | false = [] ∧ ((l0 = l ⊃ (W(t0, l, v), false) ';[]) | t2) | false = [] ∧ ((h | l) | t2) | false = [], ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 ⊦ ((h0 | l) | t2) | false = [] ∧ ((l0 = l ⊃ (W(t0, l, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l) | t2) | false = [] |
# h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), l0 = l, lsf(t2) = mkFLITPSCls(t2, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), ¬ FO(t2) ∈ p(l) -p firstPersistW(p(l)), ¬ FO(t2) ∈ p(l) → ((h0 | l) | t2) | false = [] ∧ ((l0 = l ⊃ (W(t0, l, v), false) ';[]) | t2) | false = [] ∧ ((h | l) | t2) | false = [], pcf(t2) = R1 → l3 = il, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, 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) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 ⊦ ((h0 | l) | t2) | false = [] ∧ ((l0 = l ⊃ (W(t0, l, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l) | t2) | false = []
Used simplifier rules: ⊦ [] | t = []; (s) ⊦ [] | b = []; (s) ⊦ l ≠ l0 → persistDependentReads(l, h) | l0 = h | l0; (s)
| # h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), l0 = l, lsf(t2) = mkFLITPSCls(t2, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), ¬ FO(t2) ∈ p(l) -p firstPersistW(p(l)), ¬ FO(t2) ∈ p(l) → ((h0 | l) | t2) | false = [] ∧ ((l0 = l ⊃ (W(t0, l, v), false) ';[]) | t2) | false = [] ∧ ((h | l) | t2) | false = [], pcf(t2) = R1 → l3 = il, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, 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) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 ⊦ ((h0 | l) | t2) | false = [] ∧ ((l0 = l ⊃ (W(t0, l, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l) | t2) | false = [] |
# h0 = firstVolWrite(l, h0 + (W(t0, l, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), ((h | l) | t2) | false = [], (t2 = t0 ⊃ (W(t0, l, v), false) ';[]) | false = [], ((h0 | l) | t2) | false = [], p(l) ≠ [], (t2 = t0 ⊃ (W(t0, l, v), true) ';[]) | false ≠ [], firstPersistW(p(l)) < # p(l), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l := v), p(l := p(l) -p firstPersistW(p(l))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l, v), false) ' + h, writers0, p), ¬ FO(t2) ∈ p(l), pcf(t2) = R1 → l3 = il, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, 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) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((l = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l, v), false) ' + h), alsf(t), apcf(t)), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ ((h | l) | t) | false = [] → ((persistDependentReads(l, h) | l) | t) | false = []; (s) ⊦ W(t, l, v).t = t; (s) ⊦ (e, b) ' | t = (t = e.t ⊃ (e, b) ';[]); (s) ⊦ FO(t) ∈ fowl -p firstPersistW(fowl) ↔ FO(t) ∈ fowl; (s)
| # h0 = firstVolWrite(l, h0 + (W(t0, l, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), ((h | l) | t2) | false = [], (t2 = t0 ⊃ (W(t0, l, v), false) ';[]) | false = [], ((h0 | l) | t2) | false = [], p(l) ≠ [], (t2 = t0 ⊃ (W(t0, l, v), true) ';[]) | false ≠ [], firstPersistW(p(l)) < # p(l), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l := v), p(l := p(l) -p firstPersistW(p(l))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l, v), false) ' + h, writers0, p), ¬ FO(t2) ∈ p(l), pcf(t2) = R1 → l3 = il, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, 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) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((l = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l, v), false) ' + h), alsf(t), apcf(t)), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 ⊦ |
Used simplifier rules: ⊦ [] | b = []; (s) ⊦ (e, b) ' | b0 = (b ↔ b0 ⊃ (e, b) ';[]); (s) ⊦ a ' ≠ []; (s) Used formulas: t2 = t0
| # h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), 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, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = R1 → l3 = il, ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 ⊦ ((h0 | l1) | t2) | false = [] ∧ ((l0 = l1 ⊃ (W(t0, l1, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l1) | t2) | false = [] |
# h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), pcf(t2) = R1 → l3 = il, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, 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) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = [], pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 ⊦ ((h0 | l1) | t2) | false = [] ∧ ((l0 = l1 ⊃ (W(t0, l1, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l1) | t2) | false = []
| # h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), pcf(t2) = R1 → l3 = il, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, 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) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = [], pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 ⊦ ((h0 | l1) | t2) | false = [] ∧ ((l0 = l1 ⊃ (W(t0, l1, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l1) | t2) | false = [] |
# h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), ((h0 | l1) | t2) | false = [], ((l0 = l1 ⊃ (W(t0, l1, v), false) ';[]) | t2) | false = [], ((h | l1) | t2) | false = [], p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), 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, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = R1 → l3 = il, ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 ⊦ ((h0 | l1) | t2) | false = [] ∧ ((l0 = l1 ⊃ (W(t0, l1, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l1) | t2) | false = []
Used terms: l1
| # h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), ((h0 | l1) | t2) | false = [], ((l0 = l1 ⊃ (W(t0, l1, v), false) ';[]) | t2) | false = [], ((h | l1) | t2) | false = [], p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), 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, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = R1 → l3 = il, ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 ⊦ ((h0 | l1) | t2) | false = [] ∧ ((l0 = l1 ⊃ (W(t0, l1, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l1) | t2) | false = [] |
# h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), ((h | l1) | t2) | false = [], ((l0 = l1 ⊃ (W(t0, l1, v), false) ';[]) | t2) | false = [], ((h0 | l1) | t2) | false = [], p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), pcf(t2) = R1 → l3 = il, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, 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) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 ⊦ ((l0 = l1 ⊃ (W(t0, l1, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l1) | t2) | false = []
| # h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), ((h | l1) | t2) | false = [], ((l0 = l1 ⊃ (W(t0, l1, v), false) ';[]) | t2) | false = [], ((h0 | l1) | t2) | false = [], p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), pcf(t2) = R1 → l3 = il, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, 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) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 ⊦ ((l0 = l1 ⊃ (W(t0, l1, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l1) | t2) | false = [] |
# h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), ((h0 | l1) | t2) | false = [], ((l0 = l1 ⊃ (W(t0, l1, v), false) ';[]) | t2) | false = [], ((h | l1) | t2) | false = [], p(l0) ≠ [], ((l0 = l1 ⊃ (W(t0, l1, v), true) ';[]) | t2) | false ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), 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, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = R1 → l3 = il, ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 ⊦
# h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), ((h0 | l1) | t2) | false = [], ((l0 = l1 ⊃ (W(t0, l1, v), false) ';[]) | t2) | false = [], ((h | l1) | t2) | false = [], p(l0) ≠ [], ((persistDependentReads(l0, h) | l1) | t2) | false ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), 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, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = R1 → l3 = il, ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 ⊦
| # h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), ((h0 | l1) | t2) | false = [], ((l0 = l1 ⊃ (W(t0, l1, v), false) ';[]) | t2) | false = [], ((h | l1) | t2) | false = [], p(l0) ≠ [], ((l0 = l1 ⊃ (W(t0, l1, v), true) ';[]) | t2) | false ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), 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, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = R1 → l3 = il, ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 ⊦ |
# h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), l0 = l1, lsf(t2) = mkFLITPSCls(t2, l3, v0), ((h | l1) | t2) | false = [], ((l0 = l1 ⊃ (W(t0, l1, v), false) ';[]) | t2) | false = [], ((h0 | l1) | t2) | false = [], p(l0) ≠ [], ((W(t0, l1, v), true) ' | t2) | false ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), pcf(t2) = R1 → l3 = il, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, 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) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 ⊦
Used simplifier rules: ⊦ [] | t = []; (s) ⊦ [] | b = []; (s)
| # h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), l0 = l1, lsf(t2) = mkFLITPSCls(t2, l3, v0), ((h | l1) | t2) | false = [], ((l0 = l1 ⊃ (W(t0, l1, v), false) ';[]) | t2) | false = [], ((h0 | l1) | t2) | false = [], p(l0) ≠ [], ((W(t0, l1, v), true) ' | t2) | false ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), pcf(t2) = R1 → l3 = il, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, 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) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 ⊦ |
# h0 = firstVolWrite(l1, h0 + (W(t0, l1, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), (t2 = t0 ⊃ (W(t0, l1, v), false) ';[]) | false = [], ((h0 | l1) | t2) | false = [], ((h | l1) | t2) | false = [], p(l1) ≠ [], (t2 = t0 ⊃ (W(t0, l1, v), true) ';[]) | false ≠ [], firstPersistW(p(l1)) < # p(l1), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l1 := v), p(l1 := p(l1) -p firstPersistW(p(l1))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l1, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l1, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l1, v), false) ' + h, writers0, p), pcf(t2) = R1 → l3 = il, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, 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) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l1 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l1 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l1 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l1 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l1 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l1, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l1, v), false) ' + h), alsf(t), apcf(t)), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ W(t, l, v).t = t; (s) ⊦ (e, b) ' | t = (t = e.t ⊃ (e, b) ';[]); (s)
| # h0 = firstVolWrite(l1, h0 + (W(t0, l1, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), (t2 = t0 ⊃ (W(t0, l1, v), false) ';[]) | false = [], ((h0 | l1) | t2) | false = [], ((h | l1) | t2) | false = [], p(l1) ≠ [], (t2 = t0 ⊃ (W(t0, l1, v), true) ';[]) | false ≠ [], firstPersistW(p(l1)) < # p(l1), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l1 := v), p(l1 := p(l1) -p firstPersistW(p(l1))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l1, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l1, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l1, v), false) ' + h, writers0, p), pcf(t2) = R1 → l3 = il, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, 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) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l1 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l1 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l1 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l1 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l1 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l1, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l1, v), false) ' + h), alsf(t), apcf(t)), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 ⊦ |
Used simplifier rules: ⊦ [] | b = []; (s) ⊦ (e, b) ' | b0 = (b ↔ b0 ⊃ (e, b) ';[]); (s) ⊦ a ' ≠ []; (s)
| # h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), ((h0 | l1) | t2) | false = [], ((l0 = l1 ⊃ (W(t0, l1, v), false) ';[]) | t2) | false = [], ((h | l1) | t2) | false = [], p(l0) ≠ [], ((persistDependentReads(l0, h) | l1) | t2) | false ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), 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, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = R1 → l3 = il, ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 ⊦ |
⊦ l ≠ l0 → persistDependentReads(l, h) | l0 = h | l0
Used simplifier rules: ⊦ (e, b) ' | t = (t = e.t ⊃ (e, b) ';[]); (s) ⊦ W(t, l, v).t = t; (s) ⊦ ((h | l) | t) | false = [] → ((persistDependentReads(l, h) | l) | t) | false = []; (s) Used terms: l0, h, l1
| ⊦ l ≠ l0 → persistDependentReads(l, h) | l0 = h | l0 |
| # h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), l2 ≠ l3, p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), ¬ FO(t2) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)), pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), 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, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = R1 → l3 = il, ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), pcf(t2) = R2 ∨ pcf(t2) = R3 ⊦ ((h0 | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (W(t0, l2, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l2) | t2) | false = [] |
# h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), l2 ≠ l3, p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), ¬ FO(t2) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)), pcf(t2) = R1 → l3 = il, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, 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) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 ⊦ ((h0 | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (W(t0, l2, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l2) | t2) | false = []
| # h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), l2 ≠ l3, p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), ¬ FO(t2) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)), pcf(t2) = R1 → l3 = il, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, 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) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 ⊦ ((h0 | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (W(t0, l2, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l2) | t2) | false = [] |
# h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), l2 ≠ l3, p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), ¬ FO(t2) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)), pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), 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, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = R1 → l3 = il, l2 ≠ l3 ∧ ¬ FO(t2) ∈ p(l2) → ((h0 | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (W(t0, l2, v), false) ';[]) | t2) | false = [] ∧ ((h | l2) | t2) | false = [], ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), pcf(t2) = R2 ∨ pcf(t2) = R3 ⊦ ((h0 | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (W(t0, l2, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l2) | t2) | false = []
Used terms: l2
| # h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), l2 ≠ l3, p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), ¬ FO(t2) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)), pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), 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, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = R1 → l3 = il, l2 ≠ l3 ∧ ¬ FO(t2) ∈ p(l2) → ((h0 | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (W(t0, l2, v), false) ';[]) | t2) | false = [] ∧ ((h | l2) | t2) | false = [], ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), pcf(t2) = R2 ∨ pcf(t2) = R3 ⊦ ((h0 | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (W(t0, l2, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l2) | t2) | false = [] |
# h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), l2 ≠ l3, p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), ¬ FO(t2) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)), pcf(t2) = R1 → l3 = il, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, 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) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], ¬ FO(t2) ∈ p(l2) → ((h0 | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (W(t0, l2, v), false) ';[]) | t2) | false = [] ∧ ((h | l2) | t2) | false = [], ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), pcf(t2) = R2 ∨ pcf(t2) = R3 ⊦ ((h0 | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (W(t0, l2, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l2) | t2) | false = []
| # h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), l2 ≠ l3, p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), ¬ FO(t2) ∈ (l0 = l2 ⊃ p(l2) -p firstPersistW(p(l2));p(l2)), pcf(t2) = R1 → l3 = il, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, 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) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], ¬ FO(t2) ∈ p(l2) → ((h0 | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (W(t0, l2, v), false) ';[]) | t2) | false = [] ∧ ((h | l2) | t2) | false = [], ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), pcf(t2) = R2 ∨ pcf(t2) = R3 ⊦ ((h0 | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (W(t0, l2, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l2) | t2) | false = [] |
# h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), l0 = l2, lsf(t2) = mkFLITPSCls(t2, l3, v0), l2 ≠ l3, p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), ¬ FO(t2) ∈ p(l2) -p firstPersistW(p(l2)), ¬ FO(t2) ∈ p(l2) → ((h0 | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (W(t0, l2, v), false) ';[]) | t2) | false = [] ∧ ((h | l2) | t2) | false = [], pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), 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, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = R1 → l3 = il, ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), pcf(t2) = R2 ∨ pcf(t2) = R3 ⊦ ((h0 | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (W(t0, l2, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l2) | t2) | false = []
Used simplifier rules: ⊦ [] | t = []; (s) ⊦ [] | b = []; (s) ⊦ l ≠ l0 → persistDependentReads(l, h) | l0 = h | l0; (s)
| # h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), l0 = l2, lsf(t2) = mkFLITPSCls(t2, l3, v0), l2 ≠ l3, p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), ¬ FO(t2) ∈ p(l2) -p firstPersistW(p(l2)), ¬ FO(t2) ∈ p(l2) → ((h0 | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (W(t0, l2, v), false) ';[]) | t2) | false = [] ∧ ((h | l2) | t2) | false = [], pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), 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, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = R1 → l3 = il, ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), pcf(t2) = R2 ∨ pcf(t2) = R3 ⊦ ((h0 | l2) | t2) | false = [] ∧ ((l0 = l2 ⊃ (W(t0, l2, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l2) | t2) | false = [] |
# h0 = firstVolWrite(l2, h0 + (W(t0, l2, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), ((h | l2) | t2) | false = [], (t2 = t0 ⊃ (W(t0, l2, v), false) ';[]) | false = [], ((h0 | l2) | t2) | false = [], l2 ≠ l3, p(l2) ≠ [], (t2 = t0 ⊃ (W(t0, l2, v), true) ';[]) | false ≠ [], firstPersistW(p(l2)) < # p(l2), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l2 := v), p(l2 := p(l2) -p firstPersistW(p(l2))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l2, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l2, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l2, v), false) ' + h, writers0, p), ¬ FO(t2) ∈ p(l2), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((l2 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l2 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), 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, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = R1 → l3 = il, pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l2, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l2, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), pcf(t2) = R2 ∨ pcf(t2) = R3 ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ ((h | l) | t) | false = [] → ((persistDependentReads(l, h) | l) | t) | false = []; (s) ⊦ W(t, l, v).t = t; (s) ⊦ (e, b) ' | t = (t = e.t ⊃ (e, b) ';[]); (s) ⊦ [] | b = []; (s) ⊦ [] | t = []; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s) ⊦ FO(t) ∈ fowl -p firstPersistW(fowl) ↔ FO(t) ∈ fowl; (s)
| # h0 = firstVolWrite(l2, h0 + (W(t0, l2, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), ((h | l2) | t2) | false = [], (t2 = t0 ⊃ (W(t0, l2, v), false) ';[]) | false = [], ((h0 | l2) | t2) | false = [], l2 ≠ l3, p(l2) ≠ [], (t2 = t0 ⊃ (W(t0, l2, v), true) ';[]) | false ≠ [], firstPersistW(p(l2)) < # p(l2), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l2 := v), p(l2 := p(l2) -p firstPersistW(p(l2))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l2, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l2, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l2, v), false) ' + h, writers0, p), ¬ FO(t2) ∈ p(l2), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((l2 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l2 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), 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, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = R1 → l3 = il, pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l2, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l2, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), pcf(t2) = R2 ∨ pcf(t2) = R3 ⊦ |
⊦ a ∈ x ↔ (∃ n. n < # x ∧ x[n] = a)
# h0 = firstVolWrite(l2, h0 + (W(t0, l2, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), ((h0 | l2) | t2) | false = [], (t2 = t0 ⊃ (W(t0, l2, v), false) ';[]) | false = [], ((h | l2) | t2) | false = [], l2 ≠ l3, p(l2) ≠ [], (t2 = t0 ⊃ (W(t0, l2, v), true) ';[]) | false ≠ [], firstPersistW(p(l2)) < # p(l2), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l2 := v), p(l2 := p(l2) -p firstPersistW(p(l2))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l2, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l2, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l2, v), false) ' + h, writers0, p), pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R1 → l3 = il, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, 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) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l2 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((l2 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l2, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l2, v), false) ' + h), alsf(t), apcf(t)), ∀ n. ¬(n < # p(l2) ∧ p(l2)[n] = FO(t2)), pcf(t2) = R2 ∨ pcf(t2) = R3 ⊦
Used terms: FO(t2), p(l2)
| ⊦ a ∈ x ↔ (∃ n. n < # x ∧ x[n] = a) |
| # h0 = firstVolWrite(l2, h0 + (W(t0, l2, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), ((h0 | l2) | t2) | false = [], (t2 = t0 ⊃ (W(t0, l2, v), false) ';[]) | false = [], ((h | l2) | t2) | false = [], l2 ≠ l3, p(l2) ≠ [], (t2 = t0 ⊃ (W(t0, l2, v), true) ';[]) | false ≠ [], firstPersistW(p(l2)) < # p(l2), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l2 := v), p(l2 := p(l2) -p firstPersistW(p(l2))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l2, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l2, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l2, v), false) ' + h, writers0, p), pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R1 → l3 = il, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, 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) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l2 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((l2 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l2, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l2, v), false) ' + h), alsf(t), apcf(t)), ∀ n. ¬(n < # p(l2) ∧ p(l2)[n] = FO(t2)), pcf(t2) = R2 ∨ pcf(t2) = R3 ⊦ |
# h0 = firstVolWrite(l2, h0 + (W(t0, l2, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), ((h | l2) | t2) | false = [], (t2 = t0 ⊃ (W(t0, l2, v), false) ';[]) | false = [], ((h0 | l2) | t2) | false = [], l2 ≠ l3, p(l2) ≠ [], (t2 = t0 ⊃ (W(t0, l2, v), true) ';[]) | false ≠ [], firstPersistW(p(l2)) < # p(l2), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l2 := v), p(l2 := p(l2) -p firstPersistW(p(l2))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l2, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l2, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l2, v), false) ' + h, writers0, p), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((l2 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l2 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), 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, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = R1 → l3 = il, pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l2, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l2, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ n. ¬ n < # p(l2) ∨ p(l2)[n] ≠ FO(t2), pcf(t2) = R2 ∨ pcf(t2) = R3 ⊦
| # h0 = firstVolWrite(l2, h0 + (W(t0, l2, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), ((h | l2) | t2) | false = [], (t2 = t0 ⊃ (W(t0, l2, v), false) ';[]) | false = [], ((h0 | l2) | t2) | false = [], l2 ≠ l3, p(l2) ≠ [], (t2 = t0 ⊃ (W(t0, l2, v), true) ';[]) | false ≠ [], firstPersistW(p(l2)) < # p(l2), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l2 := v), p(l2 := p(l2) -p firstPersistW(p(l2))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l2, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l2, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l2, v), false) ' + h, writers0, p), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((l2 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l2 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), 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, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = R1 → l3 = il, pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l2, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l2, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ n. ¬ n < # p(l2) ∨ p(l2)[n] ≠ FO(t2), pcf(t2) = R2 ∨ pcf(t2) = R3 ⊦ |
Used simplifier rules: ⊦ [] | b = []; (s) ⊦ (e, b) ' | b0 = (b ↔ b0 ⊃ (e, b) ';[]); (s) ⊦ a ' ≠ []; (s)
| # h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), ctr(l3) = 0, lsf(t2) = mkFLITPSCls(t2, l3, v0), pcf(t2) = R2, p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), 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, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = R1 → l3 = il, ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)) ⊦ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l3) | t2) | false = [] |
# h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resRead, ctr(l3) = 0, lsf(t2) = mkFLITPSCls(t2, l3, ov), pcf(t2) = R2, ((h | l3) | t2) | false = [], ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [], ((h0 | l3) | t2) | false = [], p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, ov), R2), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resRead), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), ∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = [], ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)) ⊦ ((l0 = l3 ⊃ (W(t0, l3, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l3) | t2) | false = []
Used simplifier rules: ⊦ R1 ≠ R2; (s) ⊦ R2 ≠ W7; (s) ⊦ R2 ≠ W6; (s) ⊦ R2 ≠ W5; (s) ⊦ R2 ≠ W4; (s) ⊦ R2 ≠ W3; (s) ⊦ R2 ≠ W2; (s) ⊦ R2 ≠ W1; (s) ⊦ R2 ≠ idle; (s) ⊦ R2 ≠ ready; (s) ⊦ R2 ≠ crashed; (s) ⊦ R2 ≠ R4; (s)
| # h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resRead, ctr(l3) = 0, lsf(t2) = mkFLITPSCls(t2, l3, ov), pcf(t2) = R2, ((h | l3) | t2) | false = [], ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [], ((h0 | l3) | t2) | false = [], p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, ov), R2), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resRead), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), ∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = [], ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)) ⊦ ((l0 = l3 ⊃ (W(t0, l3, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l3) | t2) | false = [] |
# h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resRead, ctr(l3) = 0, l0 = l3, lsf(t2) = mkFLITPSCls(t2, l3, ov), pcf(t2) = R2, ((h0 | l3) | t2) | false = [], ((h | l3) | t2) | false = [], ((W(t0, l3, v), false) ' | t2) | false = [], p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, ov), R2), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resRead), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = [] ⊦ ((l0 = l3 ⊃ (W(t0, l3, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l3) | t2) | false = []
Used simplifier rules: ⊦ [] | t = []; (s) ⊦ [] | b = []; (s) ⊦ l ≠ l0 → persistDependentReads(l, h) | l0 = h | l0; (s)
| # h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resRead, ctr(l3) = 0, l0 = l3, lsf(t2) = mkFLITPSCls(t2, l3, ov), pcf(t2) = R2, ((h0 | l3) | t2) | false = [], ((h | l3) | t2) | false = [], ((W(t0, l3, v), false) ' | t2) | false = [], p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, ov), R2), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resRead), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = [] ⊦ ((l0 = l3 ⊃ (W(t0, l3, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l3) | t2) | false = [] |
# h0 = firstVolWrite(l3, h0 + (W(t0, l3, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resRead, ctr(l3) = 0, lsf(t2) = mkFLITPSCls(t2, l3, ov), pcf(t2) = R2, (t2 = t0 ⊃ (W(t0, l3, v), false) ';[]) | false = [], ((h0 | l3) | t2) | false = [], ((h | l3) | t2) | false = [], p(l3) ≠ [], (t2 = t0 ⊃ (W(t0, l3, v), true) ';[]) | false ≠ [], firstPersistW(p(l3)) < # p(l3), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l3 := v), p(l3 := p(l3) -p firstPersistW(p(l3))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, ov), R2), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l3, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l3, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resRead), abs(h0 + (W(t0, l3, v), false) ' + h, writers0, p), ∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((h | l4) | t2) | false = [], ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l3, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l3, v), false) ' + h), alsf(t), apcf(t)) ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ ((h | l) | t) | false = [] → ((persistDependentReads(l, h) | l) | t) | false = []; (s) ⊦ W(t, l, v).t = t; (s) ⊦ (e, b) ' | t = (t = e.t ⊃ (e, b) ';[]); (s) ⊦ [] | b = []; (s) ⊦ [] | t = []; (s)
| # h0 = firstVolWrite(l3, h0 + (W(t0, l3, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resRead, ctr(l3) = 0, lsf(t2) = mkFLITPSCls(t2, l3, ov), pcf(t2) = R2, (t2 = t0 ⊃ (W(t0, l3, v), false) ';[]) | false = [], ((h0 | l3) | t2) | false = [], ((h | l3) | t2) | false = [], p(l3) ≠ [], (t2 = t0 ⊃ (W(t0, l3, v), true) ';[]) | false ≠ [], firstPersistW(p(l3)) < # p(l3), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l3 := v), p(l3 := p(l3) -p firstPersistW(p(l3))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, ov), R2), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l3, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l3, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resRead), abs(h0 + (W(t0, l3, v), false) ' + h, writers0, p), ∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((h | l4) | t2) | false = [], ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l3, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l3, v), false) ' + h), alsf(t), apcf(t)) ⊦ |
Used simplifier rules: ⊦ [] | b = []; (s) ⊦ (e, b) ' | b0 = (b ↔ b0 ⊃ (e, b) ';[]); (s) ⊦ a ' ≠ []; (s)
| # h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), lsf(t2) = mkFLITPSCls(t2, l3, v0), pcf(t2) = W4, (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), true) ';[]) | t2) | false) + (((persistDependentReads(l0, h) | l3) | t2) | false) ≠ (W(t2, l3, v0), false) ', p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, l3, v0), pcf(t2)), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), apcf(t2)), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), pcf(t2) = W4 → (((h0 | l3) | t2) | false) + (((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false) + (((h | l3) | t2) | false) = (W(t2, l3, v0), false) ' ∨ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 → ctr(l3) = 0 → ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), false) ';[]) | t2) | false = [] ∧ ((h | l3) | t2) | false = [], pcf(t2) = R2 ∨ pcf(t2) = R3 → (∀ l4. l4 ≠ l3 ∧ ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → (∀ l4. ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), pcf(t2) = idle ∨ pcf(t2) = ready ∨ pcf(t2) = R1 ∨ pcf(t2) = R4 ∨ pcf(t2) = W1 ∨ pcf(t2) = W5 → (∀ l4. ¬ FO(t2) ∈ p(l4) → ((h0 | l4) | t2) | false = [] ∧ ((l0 = l4 ⊃ (W(t0, l4, v), false) ';[]) | t2) | false = [] ∧ ((h | l4) | t2) | false = []), 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, pcf(t2) = W1 ∨ pcf(t2) = W2 ∨ pcf(t2) = W3 ∨ pcf(t2) = W4 ∨ pcf(t2) = W5 ∨ pcf(t2) = W6 ∨ pcf(t2) = W7 → l3 = il ∧ v0 = iv, pcf(t2) = R2 ∨ pcf(t2) = R3 ∨ pcf(t2) = R4 → v0 = ov, pcf(t2) = R1 → l3 = il, ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)) ⊦ ((h0 | l3) | t2) | false = [] ∧ ((l0 = l3 ⊃ (W(t0, l3, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | l3) | t2) | false = [] |
# h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resWrite, lsf(t2) = mkFLITPSCls(t2, il, iv), pcf(t2) = W4, (((h0 | il) | t2) | false) + (((l0 = il ⊃ (W(t0, il, v), true) ';[]) | t2) | false) + (((persistDependentReads(l0, h) | il) | t2) | false) ≠ (W(t2, il, iv), false) ', p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, il, iv), W4), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resWrite), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), (((h0 | il) | t2) | false) + (((l0 = il ⊃ (W(t0, il, v), false) ';[]) | t2) | false) + (((h | il) | t2) | false) = (W(t2, il, iv), false) ' ∨ ((h0 | il) | t2) | false = [] ∧ ((l0 = il ⊃ (W(t0, il, v), false) ';[]) | t2) | false = [] ∧ ((h | il) | t2) | false = [] ⊦ ((h0 | il) | t2) | false = [] ∧ ((l0 = il ⊃ (W(t0, il, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | il) | t2) | false = []
Used simplifier rules: ⊦ W4 ≠ W5; (s) ⊦ W1 ≠ W4; (s) ⊦ R4 ≠ W4; (s) ⊦ R1 ≠ W4; (s) ⊦ W4 ≠ ready; (s) ⊦ W4 ≠ idle; (s) ⊦ W4 ≠ W7; (s) ⊦ W4 ≠ W6; (s) ⊦ W3 ≠ W4; (s) ⊦ W2 ≠ W4; (s) ⊦ R3 ≠ W4; (s) ⊦ R2 ≠ W4; (s) ⊦ W4 ≠ crashed; (s)
| # h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resWrite, lsf(t2) = mkFLITPSCls(t2, il, iv), pcf(t2) = W4, (((h0 | il) | t2) | false) + (((l0 = il ⊃ (W(t0, il, v), true) ';[]) | t2) | false) + (((persistDependentReads(l0, h) | il) | t2) | false) ≠ (W(t2, il, iv), false) ', p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, il, iv), W4), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resWrite), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), (((h0 | il) | t2) | false) + (((l0 = il ⊃ (W(t0, il, v), false) ';[]) | t2) | false) + (((h | il) | t2) | false) = (W(t2, il, iv), false) ' ∨ ((h0 | il) | t2) | false = [] ∧ ((l0 = il ⊃ (W(t0, il, v), false) ';[]) | t2) | false = [] ∧ ((h | il) | t2) | false = [] ⊦ ((h0 | il) | t2) | false = [] ∧ ((l0 = il ⊃ (W(t0, il, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | il) | t2) | false = [] |
# h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resWrite, l0 = il, lsf(t2) = mkFLITPSCls(t2, il, iv), pcf(t2) = W4, (((h0 | il) | t2) | false) + (((W(t0, il, v), true) ' | t2) | false) + (((persistDependentReads(l0, h) | il) | t2) | false) ≠ (W(t2, il, iv), false) ', p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, il, iv), W4), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resWrite), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), (((h0 | il) | t2) | false) + (((l0 = il ⊃ (W(t0, il, v), false) ';[]) | t2) | false) + (((h | il) | t2) | false) = (W(t2, il, iv), false) ' ∨ ((h0 | il) | t2) | false = [] ∧ ((l0 = il ⊃ (W(t0, il, v), false) ';[]) | t2) | false = [] ∧ ((h | il) | t2) | false = [] ⊦ ((h0 | il) | t2) | false = [] ∧ ((l0 = il ⊃ (W(t0, il, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | il) | t2) | false = []
Used simplifier rules: ⊦ [] + x = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] | t = []; (s) ⊦ [] | b = []; (s) ⊦ l ≠ l0 → persistDependentReads(l, h) | l0 = h | l0; (s)
| # h0 = firstVolWrite(l0, h0 + (W(t0, l0, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resWrite, l0 = il, lsf(t2) = mkFLITPSCls(t2, il, iv), pcf(t2) = W4, (((h0 | il) | t2) | false) + (((W(t0, il, v), true) ' | t2) | false) + (((persistDependentReads(l0, h) | il) | t2) | false) ≠ (W(t2, il, iv), false) ', p(l0) ≠ [], firstPersistW(p(l0)) < # p(l0), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(l0 := v), p(l0 := p(l0) -p firstPersistW(p(l0))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, il, iv), W4), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resWrite), abs(h0 + (W(t0, l0, v), false) ' + h, writers0, p), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, l0, v), false) ' + h), alsf(t), apcf(t)), (((h0 | il) | t2) | false) + (((l0 = il ⊃ (W(t0, il, v), false) ';[]) | t2) | false) + (((h | il) | t2) | false) = (W(t2, il, iv), false) ' ∨ ((h0 | il) | t2) | false = [] ∧ ((l0 = il ⊃ (W(t0, il, v), false) ';[]) | t2) | false = [] ∧ ((h | il) | t2) | false = [] ⊦ ((h0 | il) | t2) | false = [] ∧ ((l0 = il ⊃ (W(t0, il, v), true) ';[]) | t2) | false = [] ∧ ((persistDependentReads(l0, h) | il) | t2) | false = [] |
# h0 = firstVolWrite(il, h0 + (W(t0, il, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resWrite, lsf(t2) = mkFLITPSCls(t2, il, iv), pcf(t2) = W4, (((h0 | il) | t2) | false) + ((t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false) + (((persistDependentReads(il, h) | il) | t2) | false) ≠ (W(t2, il, iv), false) ', p(il) ≠ [], firstPersistW(p(il)) < # p(il), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(il := v), p(il := p(il) -p firstPersistW(p(il))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, il, iv), W4), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resWrite), abs(h0 + (W(t0, il, v), false) ' + h, writers0, p), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), (((h0 | il) | t2) | false) + ((t2 = t0 ⊃ (W(t0, il, v), false) ';[]) | false) + (((h | il) | t2) | false) = (W(t2, il, iv), false) ' ∨ ((h0 | il) | t2) | false = [] ∧ (t2 = t0 ⊃ (W(t0, il, v), false) ';[]) | false = [] ∧ ((h | il) | t2) | false = [] ⊦ ((h0 | il) | t2) | false = [] ∧ (t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false = [] ∧ ((persistDependentReads(il, h) | il) | t2) | false = []
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ W(t, l, v).t = t; (s) ⊦ (e, b) ' | t = (t = e.t ⊃ (e, b) ';[]); (s) a: ⊦ (x + y) + z = x + y + z; from specification list
| # h0 = firstVolWrite(il, h0 + (W(t0, il, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resWrite, lsf(t2) = mkFLITPSCls(t2, il, iv), pcf(t2) = W4, (((h0 | il) | t2) | false) + ((t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false) + (((persistDependentReads(il, h) | il) | t2) | false) ≠ (W(t2, il, iv), false) ', p(il) ≠ [], firstPersistW(p(il)) < # p(il), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(il := v), p(il := p(il) -p firstPersistW(p(il))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, il, iv), W4), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resWrite), abs(h0 + (W(t0, il, v), false) ' + h, writers0, p), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), (((h0 | il) | t2) | false) + ((t2 = t0 ⊃ (W(t0, il, v), false) ';[]) | false) + (((h | il) | t2) | false) = (W(t2, il, iv), false) ' ∨ ((h0 | il) | t2) | false = [] ∧ (t2 = t0 ⊃ (W(t0, il, v), false) ';[]) | false = [] ∧ ((h | il) | t2) | false = [] ⊦ ((h0 | il) | t2) | false = [] ∧ (t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false = [] ∧ ((persistDependentReads(il, h) | il) | t2) | false = [] |
# h0 = firstVolWrite(il, h0 + (W(t0, il, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resWrite, lsf(t2) = mkFLITPSCls(t2, il, iv), pcf(t2) = W4, (t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false = [], (((h0 | il) | t2) | false) + ((t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false) + (((persistDependentReads(il, h) | il) | t2) | false) ≠ (W(t2, il, iv), false) ', p(il) ≠ [], firstPersistW(p(il)) < # p(il), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(il := v), p(il := p(il) -p firstPersistW(p(il))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, il, iv), W4), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resWrite), abs(h0 + (W(t0, il, v), false) ' + h, writers0, p), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), (((h0 | il) | t2) | false) + ((t2 = t0 ⊃ (W(t0, il, v), false) ';[]) | false) + (((h | il) | t2) | false) = (W(t2, il, iv), false) ' ∨ ((h0 | il) | t2) | false = [] ∧ (t2 = t0 ⊃ (W(t0, il, v), false) ';[]) | false = [] ∧ ((h | il) | t2) | false = [] ⊦ ((h0 | il) | t2) | false = [] ∧ (t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false = [] ∧ ((persistDependentReads(il, h) | il) | t2) | false = []
# h0 = firstVolWrite(il, h0 + (W(t0, il, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resWrite, lsf(t2) = mkFLITPSCls(t2, il, iv), pcf(t2) = W4, (((h0 | il) | t2) | false) + ((t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false) + (((persistDependentReads(il, h) | il) | t2) | false) ≠ (W(t2, il, iv), false) ', p(il) ≠ [], (t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false ≠ [], firstPersistW(p(il)) < # p(il), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(il := v), p(il := p(il) -p firstPersistW(p(il))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, il, iv), W4), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resWrite), abs(h0 + (W(t0, il, v), false) ' + h, writers0, p), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), (((h0 | il) | t2) | false) + ((t2 = t0 ⊃ (W(t0, il, v), false) ';[]) | false) + (((h | il) | t2) | false) = (W(t2, il, iv), false) ' ∨ ((h0 | il) | t2) | false = [] ∧ (t2 = t0 ⊃ (W(t0, il, v), false) ';[]) | false = [] ∧ ((h | il) | t2) | false = [] ⊦ ((h0 | il) | t2) | false = [] ∧ (t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false = [] ∧ ((persistDependentReads(il, h) | il) | t2) | false = []
Used formulas: (t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false = []
| # h0 = firstVolWrite(il, h0 + (W(t0, il, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resWrite, lsf(t2) = mkFLITPSCls(t2, il, iv), pcf(t2) = W4, (t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false = [], (((h0 | il) | t2) | false) + ((t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false) + (((persistDependentReads(il, h) | il) | t2) | false) ≠ (W(t2, il, iv), false) ', p(il) ≠ [], firstPersistW(p(il)) < # p(il), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(il := v), p(il := p(il) -p firstPersistW(p(il))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, il, iv), W4), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resWrite), abs(h0 + (W(t0, il, v), false) ' + h, writers0, p), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), (((h0 | il) | t2) | false) + ((t2 = t0 ⊃ (W(t0, il, v), false) ';[]) | false) + (((h | il) | t2) | false) = (W(t2, il, iv), false) ' ∨ ((h0 | il) | t2) | false = [] ∧ (t2 = t0 ⊃ (W(t0, il, v), false) ';[]) | false = [] ∧ ((h | il) | t2) | false = [] ⊦ ((h0 | il) | t2) | false = [] ∧ (t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false = [] ∧ ((persistDependentReads(il, h) | il) | t2) | false = [] |
# h0 = firstVolWrite(il, h0 + (W(t0, il, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resWrite, lsf(t2) = mkFLITPSCls(t2, il, iv), pcf(t2) = W4, (t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false = [], (((h0 | il) | t2) | false) + (((persistDependentReads(il, h) | il) | t2) | false) ≠ (W(t2, il, iv), false) ', p(il) ≠ [], firstPersistW(p(il)) < # p(il), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(il := v), p(il := p(il) -p firstPersistW(p(il))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, il, iv), W4), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resWrite), abs(h0 + (W(t0, il, v), false) ' + h, writers0, p), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), (((h0 | il) | t2) | false) + ((t2 = t0 ⊃ (W(t0, il, v), false) ';[]) | false) + (((h | il) | t2) | false) = (W(t2, il, iv), false) ' ∨ ((h0 | il) | t2) | false = [] ∧ (t2 = t0 ⊃ (W(t0, il, v), false) ';[]) | false = [] ∧ ((h | il) | t2) | false = [] ⊦ ((h0 | il) | t2) | false = [] ∧ ((persistDependentReads(il, h) | il) | t2) | false = []
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s)
| # h0 = firstVolWrite(il, h0 + (W(t0, il, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resWrite, lsf(t2) = mkFLITPSCls(t2, il, iv), pcf(t2) = W4, (t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false = [], (((h0 | il) | t2) | false) + (((persistDependentReads(il, h) | il) | t2) | false) ≠ (W(t2, il, iv), false) ', p(il) ≠ [], firstPersistW(p(il)) < # p(il), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(il := v), p(il := p(il) -p firstPersistW(p(il))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, il, iv), W4), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resWrite), abs(h0 + (W(t0, il, v), false) ' + h, writers0, p), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), (((h0 | il) | t2) | false) + ((t2 = t0 ⊃ (W(t0, il, v), false) ';[]) | false) + (((h | il) | t2) | false) = (W(t2, il, iv), false) ' ∨ ((h0 | il) | t2) | false = [] ∧ (t2 = t0 ⊃ (W(t0, il, v), false) ';[]) | false = [] ∧ ((h | il) | t2) | false = [] ⊦ ((h0 | il) | t2) | false = [] ∧ ((persistDependentReads(il, h) | il) | t2) | false = [] |
⊦ y ≠ [] → (a ' = x + y ↔ x = [] ∧ a ' = y)
# h0 = firstVolWrite(il, h0 + (W(t0, il, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resWrite, lsf(t2) = mkFLITPSCls(t2, il, iv), pcf(t2) = W4, ((persistDependentReads(il, h) | il) | t2) | false = [], (t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false = [], (((h0 | il) | t2) | false) + (((persistDependentReads(il, h) | il) | t2) | false) ≠ (W(t2, il, iv), false) ', p(il) ≠ [], firstPersistW(p(il)) < # p(il), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(il := v), p(il := p(il) -p firstPersistW(p(il))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, il, iv), W4), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resWrite), abs(h0 + (W(t0, il, v), false) ' + h, writers0, p), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), (((h0 | il) | t2) | false) + ((t2 = t0 ⊃ (W(t0, il, v), false) ';[]) | false) + (((h | il) | t2) | false) = (W(t2, il, iv), false) ' ∨ ((h0 | il) | t2) | false = [] ∧ (t2 = t0 ⊃ (W(t0, il, v), false) ';[]) | false = [] ∧ ((h | il) | t2) | false = [] ⊦ ((h0 | il) | t2) | false = [] ∧ ((persistDependentReads(il, h) | il) | t2) | false = []
# h0 = firstVolWrite(il, h0 + (W(t0, il, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resWrite, lsf(t2) = mkFLITPSCls(t2, il, iv), pcf(t2) = W4, (t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false = [], p(il) ≠ [], ((persistDependentReads(il, h) | il) | t2) | false ≠ [], firstPersistW(p(il)) < # p(il), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(il := v), p(il := p(il) -p firstPersistW(p(il))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, il, iv), W4), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resWrite), abs(h0 + (W(t0, il, v), false) ' + h, writers0, p), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), (((h0 | il) | t2) | false) + ((t2 = t0 ⊃ (W(t0, il, v), false) ';[]) | false) + (((h | il) | t2) | false) = (W(t2, il, iv), false) ' ∨ ((h0 | il) | t2) | false = [] ∧ (t2 = t0 ⊃ (W(t0, il, v), false) ';[]) | false = [] ∧ ((h | il) | t2) | false = [], ((h0 | il) | t2) | false ≠ [] ∨ (W(t2, il, iv), false) ' ≠ ((persistDependentReads(il, h) | il) | t2) | false ⊦ ((h0 | il) | t2) | false = [] ∧ ((persistDependentReads(il, h) | il) | t2) | false = []
Used terms: (W(t2, il, iv), false), ((h0 | il) | t2) | false, ((persistDependentReads(il, h) | il) | t2) | false
| ⊦ y ≠ [] → (a ' = x + y ↔ x = [] ∧ a ' = y) |
| # h0 = firstVolWrite(il, h0 + (W(t0, il, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resWrite, lsf(t2) = mkFLITPSCls(t2, il, iv), pcf(t2) = W4, ((persistDependentReads(il, h) | il) | t2) | false = [], (t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false = [], (((h0 | il) | t2) | false) + (((persistDependentReads(il, h) | il) | t2) | false) ≠ (W(t2, il, iv), false) ', p(il) ≠ [], firstPersistW(p(il)) < # p(il), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(il := v), p(il := p(il) -p firstPersistW(p(il))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, il, iv), W4), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resWrite), abs(h0 + (W(t0, il, v), false) ' + h, writers0, p), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), (((h0 | il) | t2) | false) + ((t2 = t0 ⊃ (W(t0, il, v), false) ';[]) | false) + (((h | il) | t2) | false) = (W(t2, il, iv), false) ' ∨ ((h0 | il) | t2) | false = [] ∧ (t2 = t0 ⊃ (W(t0, il, v), false) ';[]) | false = [] ∧ ((h | il) | t2) | false = [] ⊦ ((h0 | il) | t2) | false = [] ∧ ((persistDependentReads(il, h) | il) | t2) | false = [] |
# h0 = firstVolWrite(il, h0 + (W(t0, il, v), false) ' + h), (((h0 | il) | t2) | false) + ((t2 = t0 ⊃ (W(t0, il, v), false) ';[]) | false) + (((h | il) | t2) | false) = (W(t2, il, iv), false) ', alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resWrite, lsf(t2) = mkFLITPSCls(t2, il, iv), pcf(t2) = W4, ((persistDependentReads(il, h) | il) | t2) | false = [], (t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false = [], p(il) ≠ [], ((h0 | il) | t2) | false ≠ [], ((h0 | il) | t2) | false ≠ (W(t2, il, iv), false) ', firstPersistW(p(il)) < # p(il), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(il := v), p(il := p(il) -p firstPersistW(p(il))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, il, iv), W4), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resWrite), abs(h0 + (W(t0, il, v), false) ' + h, writers0, p), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x + [] = x; (s)
| # h0 = firstVolWrite(il, h0 + (W(t0, il, v), false) ' + h), (((h0 | il) | t2) | false) + ((t2 = t0 ⊃ (W(t0, il, v), false) ';[]) | false) + (((h | il) | t2) | false) = (W(t2, il, iv), false) ', alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resWrite, lsf(t2) = mkFLITPSCls(t2, il, iv), pcf(t2) = W4, ((persistDependentReads(il, h) | il) | t2) | false = [], (t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false = [], p(il) ≠ [], ((h0 | il) | t2) | false ≠ [], ((h0 | il) | t2) | false ≠ (W(t2, il, iv), false) ', firstPersistW(p(il)) < # p(il), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(il := v), p(il := p(il) -p firstPersistW(p(il))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, il, iv), W4), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resWrite), abs(h0 + (W(t0, il, v), false) ' + h, writers0, p), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)) ⊦ |
# h0 = firstVolWrite(il, h0 + (W(t0, il, v), false) ' + h), (((h0 | il) | t2) | false) + ([] | false) + (((h | il) | t2) | false) = (W(t2, il, iv), false) ', alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resWrite, lsf(t2) = mkFLITPSCls(t2, il, iv), pcf(t2) = W4, (t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false = [], ((persistDependentReads(il, h) | il) | t2) | false = [], p(il) ≠ [], t2 ≠ t0, ((h0 | il) | t2) | false ≠ [], ((h0 | il) | t2) | false ≠ (W(t2, il, iv), false) ', firstPersistW(p(il)) < # p(il), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(il := v), p(il := p(il) -p firstPersistW(p(il))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, il, iv), W4), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resWrite), abs(h0 + (W(t0, il, v), false) ' + h, writers0, p), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)) ⊦
Used simplifier rules: ⊦ (e, b) ' | b0 = (b ↔ b0 ⊃ (e, b) ';[]); (s) ⊦ x + a ' + y = a0 ' ↔ x = [] ∧ a = a0 ∧ y = []; (ws) a: ⊦ (x + y) + z = x + y + z; from specification list
| # h0 = firstVolWrite(il, h0 + (W(t0, il, v), false) ' + h), (((h0 | il) | t2) | false) + ([] | false) + (((h | il) | t2) | false) = (W(t2, il, iv), false) ', alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resWrite, lsf(t2) = mkFLITPSCls(t2, il, iv), pcf(t2) = W4, (t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false = [], ((persistDependentReads(il, h) | il) | t2) | false = [], p(il) ≠ [], t2 ≠ t0, ((h0 | il) | t2) | false ≠ [], ((h0 | il) | t2) | false ≠ (W(t2, il, iv), false) ', firstPersistW(p(il)) < # p(il), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(il := v), p(il := p(il) -p firstPersistW(p(il))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, il, iv), W4), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resWrite), abs(h0 + (W(t0, il, v), false) ' + h, writers0, p), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)) ⊦ |
# h0 = firstVolWrite(il, h0 + (W(t0, il, v), false) ' + h), (((h0 | il) | t2) | false) + (((h | il) | t2) | false) = (W(t2, il, iv), false) ', alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resWrite, lsf(t2) = mkFLITPSCls(t2, il, iv), pcf(t2) = W4, ((persistDependentReads(il, h) | il) | t2) | false = [], p(il) ≠ [], t2 ≠ t0, ((h0 | il) | t2) | false ≠ [], ((h0 | il) | t2) | false ≠ (W(t2, il, iv), false) ', firstPersistW(p(il)) < # p(il), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(il := v), p(il := p(il) -p firstPersistW(p(il))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, il, iv), W4), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resWrite), abs(h0 + (W(t0, il, v), false) ' + h, writers0, p), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s) ⊦ [] | b = []; (s)
| # h0 = firstVolWrite(il, h0 + (W(t0, il, v), false) ' + h), (((h0 | il) | t2) | false) + (((h | il) | t2) | false) = (W(t2, il, iv), false) ', alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resWrite, lsf(t2) = mkFLITPSCls(t2, il, iv), pcf(t2) = W4, ((persistDependentReads(il, h) | il) | t2) | false = [], p(il) ≠ [], t2 ≠ t0, ((h0 | il) | t2) | false ≠ [], ((h0 | il) | t2) | false ≠ (W(t2, il, iv), false) ', firstPersistW(p(il)) < # p(il), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(il := v), p(il := p(il) -p firstPersistW(p(il))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, il, iv), W4), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resWrite), abs(h0 + (W(t0, il, v), false) ' + h, writers0, p), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)) ⊦ |
⊦ y ≠ [] → (a ' = x + y ↔ x = [] ∧ a ' = y)
Used simplifier rules: ⊦ ((h | l) | t) | false = [] → ((persistDependentReads(l, h) | l) | t) | false = []; (s) ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: (W(t2, il, iv), false), ((h0 | il) | t2) | false, ((h | il) | t2) | false
| ⊦ y ≠ [] → (a ' = x + y ↔ x = [] ∧ a ' = y) |
| # h0 = firstVolWrite(il, h0 + (W(t0, il, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resWrite, lsf(t2) = mkFLITPSCls(t2, il, iv), pcf(t2) = W4, (t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false = [], p(il) ≠ [], ((persistDependentReads(il, h) | il) | t2) | false ≠ [], firstPersistW(p(il)) < # p(il), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(il := v), p(il := p(il) -p firstPersistW(p(il))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, il, iv), W4), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resWrite), abs(h0 + (W(t0, il, v), false) ' + h, writers0, p), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), (((h0 | il) | t2) | false) + ((t2 = t0 ⊃ (W(t0, il, v), false) ';[]) | false) + (((h | il) | t2) | false) = (W(t2, il, iv), false) ' ∨ ((h0 | il) | t2) | false = [] ∧ (t2 = t0 ⊃ (W(t0, il, v), false) ';[]) | false = [] ∧ ((h | il) | t2) | false = [], ((h0 | il) | t2) | false ≠ [] ∨ (W(t2, il, iv), false) ' ≠ ((persistDependentReads(il, h) | il) | t2) | false ⊦ ((h0 | il) | t2) | false = [] ∧ ((persistDependentReads(il, h) | il) | t2) | false = [] |
# h0 = firstVolWrite(il, h0 + (W(t0, il, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resWrite, lsf(t2) = mkFLITPSCls(t2, il, iv), pcf(t2) = W4, (t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false = [], p(il) ≠ [], ((persistDependentReads(il, h) | il) | t2) | false ≠ [], firstPersistW(p(il)) < # p(il), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(il := v), p(il := p(il) -p firstPersistW(p(il))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, il, iv), W4), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resWrite), abs(h0 + (W(t0, il, v), false) ' + h, writers0, p), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ((h0 | il) | t2) | false ≠ [] ∨ (W(t2, il, iv), false) ' ≠ ((persistDependentReads(il, h) | il) | t2) | false, (((h0 | il) | t2) | false) + ((t2 = t0 ⊃ (W(t0, il, v), false) ';[]) | false) + (((h | il) | t2) | false) = (W(t2, il, iv), false) ' ∨ ((h0 | il) | t2) | false = [] ∧ (t2 = t0 ⊃ (W(t0, il, v), false) ';[]) | false = [] ∧ ((h | il) | t2) | false = [] ⊦
| # h0 = firstVolWrite(il, h0 + (W(t0, il, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resWrite, lsf(t2) = mkFLITPSCls(t2, il, iv), pcf(t2) = W4, (t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false = [], p(il) ≠ [], ((persistDependentReads(il, h) | il) | t2) | false ≠ [], firstPersistW(p(il)) < # p(il), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(il := v), p(il := p(il) -p firstPersistW(p(il))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, il, iv), W4), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resWrite), abs(h0 + (W(t0, il, v), false) ' + h, writers0, p), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ((h0 | il) | t2) | false ≠ [] ∨ (W(t2, il, iv), false) ' ≠ ((persistDependentReads(il, h) | il) | t2) | false, (((h0 | il) | t2) | false) + ((t2 = t0 ⊃ (W(t0, il, v), false) ';[]) | false) + (((h | il) | t2) | false) = (W(t2, il, iv), false) ' ∨ ((h0 | il) | t2) | false = [] ∧ (t2 = t0 ⊃ (W(t0, il, v), false) ';[]) | false = [] ∧ ((h | il) | t2) | false = [] ⊦ |
# h0 = firstVolWrite(il, h0 + (W(t0, il, v), false) ' + h), (((h0 | il) | t2) | false) + ((t2 = t0 ⊃ (W(t0, il, v), false) ';[]) | false) + (((h | il) | t2) | false) = (W(t2, il, iv), false) ', alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resWrite, lsf(t2) = mkFLITPSCls(t2, il, iv), pcf(t2) = W4, (t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false = [], p(il) ≠ [], ((persistDependentReads(il, h) | il) | t2) | false ≠ [], firstPersistW(p(il)) < # p(il), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(il := v), p(il := p(il) -p firstPersistW(p(il))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, il, iv), W4), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resWrite), abs(h0 + (W(t0, il, v), false) ' + h, writers0, p), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ((h0 | il) | t2) | false ≠ [] ∨ (W(t2, il, iv), false) ' ≠ ((persistDependentReads(il, h) | il) | t2) | false ⊦
Used simplifier rules: ⊦ ((h | l) | t) | false = [] → ((persistDependentReads(l, h) | l) | t) | false = []; (s)
| # h0 = firstVolWrite(il, h0 + (W(t0, il, v), false) ' + h), (((h0 | il) | t2) | false) + ((t2 = t0 ⊃ (W(t0, il, v), false) ';[]) | false) + (((h | il) | t2) | false) = (W(t2, il, iv), false) ', alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resWrite, lsf(t2) = mkFLITPSCls(t2, il, iv), pcf(t2) = W4, (t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false = [], p(il) ≠ [], ((persistDependentReads(il, h) | il) | t2) | false ≠ [], firstPersistW(p(il)) < # p(il), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(il := v), p(il := p(il) -p firstPersistW(p(il))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, il, iv), W4), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resWrite), abs(h0 + (W(t0, il, v), false) ' + h, writers0, p), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ((h0 | il) | t2) | false ≠ [] ∨ (W(t2, il, iv), false) ' ≠ ((persistDependentReads(il, h) | il) | t2) | false ⊦ |
# h0 = firstVolWrite(il, h0 + (W(t0, il, v), false) ' + h), (((h0 | il) | t2) | false) + ([] | false) + (((h | il) | t2) | false) = (W(t2, il, iv), false) ', alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resWrite, lsf(t2) = mkFLITPSCls(t2, il, iv), pcf(t2) = W4, (t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false = [], p(il) ≠ [], t2 ≠ t0, ((persistDependentReads(il, h) | il) | t2) | false ≠ [], firstPersistW(p(il)) < # p(il), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(il := v), p(il := p(il) -p firstPersistW(p(il))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, il, iv), W4), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resWrite), abs(h0 + (W(t0, il, v), false) ' + h, writers0, p), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ((h0 | il) | t2) | false ≠ [] ∨ (W(t2, il, iv), false) ' ≠ ((persistDependentReads(il, h) | il) | t2) | false ⊦
Used simplifier rules: ⊦ (e, b) ' | b0 = (b ↔ b0 ⊃ (e, b) ';[]); (s) ⊦ x + a ' + y = a0 ' ↔ x = [] ∧ a = a0 ∧ y = []; (ws) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ W(t, l, v) = W(t0, l0, v0) ↔ t = t0 ∧ l = l0 ∧ v = v0; (ws) ⊦ ((h | l) | t) | false = [] → ((persistDependentReads(l, h) | l) | t) | false = []; (s)
| # h0 = firstVolWrite(il, h0 + (W(t0, il, v), false) ' + h), (((h0 | il) | t2) | false) + ([] | false) + (((h | il) | t2) | false) = (W(t2, il, iv), false) ', alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resWrite, lsf(t2) = mkFLITPSCls(t2, il, iv), pcf(t2) = W4, (t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false = [], p(il) ≠ [], t2 ≠ t0, ((persistDependentReads(il, h) | il) | t2) | false ≠ [], firstPersistW(p(il)) < # p(il), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(il := v), p(il := p(il) -p firstPersistW(p(il))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, il, iv), W4), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resWrite), abs(h0 + (W(t0, il, v), false) ' + h, writers0, p), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ((h0 | il) | t2) | false ≠ [] ∨ (W(t2, il, iv), false) ' ≠ ((persistDependentReads(il, h) | il) | t2) | false ⊦ |
# h0 = firstVolWrite(il, h0 + (W(t0, il, v), false) ' + h), (((h0 | il) | t2) | false) + (((h | il) | t2) | false) = (W(t2, il, iv), false) ', alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resWrite, lsf(t2) = mkFLITPSCls(t2, il, iv), pcf(t2) = W4, p(il) ≠ [], t2 ≠ t0, ((persistDependentReads(il, h) | il) | t2) | false ≠ [], firstPersistW(p(il)) < # p(il), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(il := v), p(il := p(il) -p firstPersistW(p(il))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, il, iv), W4), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resWrite), abs(h0 + (W(t0, il, v), false) ' + h, writers0, p), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ((h0 | il) | t2) | false ≠ [] ∨ (W(t2, il, iv), false) ' ≠ ((persistDependentReads(il, h) | il) | t2) | false ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s) ⊦ [] | b = []; (s)
| # h0 = firstVolWrite(il, h0 + (W(t0, il, v), false) ' + h), (((h0 | il) | t2) | false) + (((h | il) | t2) | false) = (W(t2, il, iv), false) ', alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resWrite, lsf(t2) = mkFLITPSCls(t2, il, iv), pcf(t2) = W4, p(il) ≠ [], t2 ≠ t0, ((persistDependentReads(il, h) | il) | t2) | false ≠ [], firstPersistW(p(il)) < # p(il), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(il := v), p(il := p(il) -p firstPersistW(p(il))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, il, iv), W4), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resWrite), abs(h0 + (W(t0, il, v), false) ' + h, writers0, p), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ((h0 | il) | t2) | false ≠ [] ∨ (W(t2, il, iv), false) ' ≠ ((persistDependentReads(il, h) | il) | t2) | false ⊦ |
⊦ y ≠ [] → (a ' = x + y ↔ x = [] ∧ a ' = y)
Used simplifier rules: ⊦ a ' ≠ []; (s) ⊦ ((h | l) | t) | false = (W(t0, l0, v0), b) ' → ((persistDependentReads(l, h) | l) | t) | false = (W(t0, l0, v0), b) '; (s) ⊦ a ' = a0 ' ↔ a = a0; (s) ⊦ ((h | l) | t) | false = [] → ((persistDependentReads(l, h) | l) | t) | false = []; (s) Used terms: (W(t2, il, iv), false), ((h0 | il) | t2) | false, ((h | il) | t2) | false
| ⊦ y ≠ [] → (a ' = x + y ↔ x = [] ∧ a ' = y) |
| # h0 = firstVolWrite(il, h0 + (W(t0, il, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resWrite, lsf(t2) = mkFLITPSCls(t2, il, iv), pcf(t2) = W4, (((h0 | il) | t2) | false) + ((t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false) + (((persistDependentReads(il, h) | il) | t2) | false) ≠ (W(t2, il, iv), false) ', p(il) ≠ [], (t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false ≠ [], firstPersistW(p(il)) < # p(il), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(il := v), p(il := p(il) -p firstPersistW(p(il))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, il, iv), W4), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resWrite), abs(h0 + (W(t0, il, v), false) ' + h, writers0, p), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), (((h0 | il) | t2) | false) + ((t2 = t0 ⊃ (W(t0, il, v), false) ';[]) | false) + (((h | il) | t2) | false) = (W(t2, il, iv), false) ' ∨ ((h0 | il) | t2) | false = [] ∧ (t2 = t0 ⊃ (W(t0, il, v), false) ';[]) | false = [] ∧ ((h | il) | t2) | false = [] ⊦ ((h0 | il) | t2) | false = [] ∧ (t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false = [] ∧ ((persistDependentReads(il, h) | il) | t2) | false = [] |
# h0 = firstVolWrite(il, h0 + (W(t0, il, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resWrite, lsf(t2) = mkFLITPSCls(t2, il, iv), pcf(t2) = W4, (((h0 | il) | t2) | false) + ((t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false) + (((persistDependentReads(il, h) | il) | t2) | false) ≠ (W(t2, il, iv), false) ', p(il) ≠ [], (t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false ≠ [], firstPersistW(p(il)) < # p(il), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(il := v), p(il := p(il) -p firstPersistW(p(il))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, il, iv), W4), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resWrite), abs(h0 + (W(t0, il, v), false) ' + h, writers0, p), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), (((h0 | il) | t2) | false) + ((t2 = t0 ⊃ (W(t0, il, v), false) ';[]) | false) + (((h | il) | t2) | false) = (W(t2, il, iv), false) ' ∨ ((h0 | il) | t2) | false = [] ∧ (t2 = t0 ⊃ (W(t0, il, v), false) ';[]) | false = [] ∧ ((h | il) | t2) | false = [] ⊦
| # h0 = firstVolWrite(il, h0 + (W(t0, il, v), false) ' + h), alsf(t2) = mkPLIBls(t2, il, iv, ov), apcf(t2) = resWrite, lsf(t2) = mkFLITPSCls(t2, il, iv), pcf(t2) = W4, (((h0 | il) | t2) | false) + ((t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false) + (((persistDependentReads(il, h) | il) | t2) | false) ≠ (W(t2, il, iv), false) ', p(il) ≠ [], (t2 = t0 ⊃ (W(t0, il, v), true) ';[]) | false ≠ [], firstPersistW(p(il)) < # p(il), FLITPSCGInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0)), FLITPSCInv(mkFLITPSCgs(mem0(il := v), p(il := p(il) -p firstPersistW(p(il))), ctr, writers, writers0), lsf, pcf), FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), mkFLITPSCls(t2, il, iv), W4), PLIBGInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h)), PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), mkPLIBls(t2, il, iv, ov), resWrite), abs(h0 + (W(t0, il, v), false) ' + h, writers0, p), ∀ t. lsf(t).t = t ∧ FLITPSCLInv(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t)), ∀ t. alsf(t).t = t ∧ PLIBLInv(mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), ∀ t. labs(mkFLITPSCgs(mem0, p, ctr, writers, writers0), lsf(t), pcf(t), mkPLIBgs(mem0 ⊕ p, mem0, h0 + (W(t0, il, v), false) ' + h), alsf(t), apcf(t)), (((h0 | il) | t2) | false) + ((t2 = t0 ⊃ (W(t0, il, v), false) ';[]) | false) + (((h | il) | t2) | false) = (W(t2, il, iv), false) ' ∨ ((h0 | il) | t2) | false = [] ∧ (t2 = t0 ⊃ (W(t0, il, v), false) ';[]) | false = [] ∧ ((h | il) | t2) | false = [] ⊦ |
Used simplifier rules: ⊦ [] + x = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] | b = []; (s) ⊦ (e, b) ' | b0 = (b ↔ b0 ⊃ (e, b) ';[]); (s)
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.