| ¬ oneMember(tid, als.l, gs.fwriters), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), flitStep(mkstate(gs, lsf, pcf), propFO(tid, l), mkstate(gs0, lsf0, pcf0)), abs(mkstate(gs, lsf, pcf), mkstate(ags, alsf, apcf)) ⊦ abs(mkstate(gs0, lsf0, pcf0), mkstate(ags, alsf, apcf)) |
FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), abs(mkstate(gs, lsf, pcf), mkstate(ags, alsf, apcf)), flitStep(mkstate(gs, lsf, pcf), propFO(tid, l), mkstate(gs0, lsf0, pcf0)), ¬ abs(mkstate(gs0, lsf0, pcf0), mkstate(ags, alsf, apcf)), ¬ oneMember(tid, als.l, gs.fwriters) ⊦
| FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), abs(mkstate(gs, lsf, pcf), mkstate(ags, alsf, apcf)), flitStep(mkstate(gs, lsf, pcf), propFO(tid, l), mkstate(gs0, lsf0, pcf0)), ¬ abs(mkstate(gs0, lsf0, pcf0), mkstate(ags, alsf, apcf)), ¬ oneMember(tid, als.l, gs.fwriters) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), flitStep(mkstate(gs, lsf, pcf), propFO(tid, l), mkstate(gs0, lsf0, pcf0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ gs.pmem = gs0.pmem ∧ gs.fctr = gs0.fctr ∧ reorder(ags.p, gs0.pq, gs0.rfo) ∧ gs.fwriters = gs0.fwriters ∧ labs(gs0, lsf0(t), pcf0(t), ags, 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.mem = gs.pmem ∧ ags.ctr = gs.fctr ∧ reorder(ags.p, gs.pq, gs.rfo) ∧ ags.writers = gs.fwriters;
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), flitStep(mkstate(gs, lsf, pcf), propFO(tid, l), mkstate(gs0, lsf0, pcf0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ gs.pmem = gs0.pmem ∧ gs.fctr = gs0.fctr ∧ reorder(ags.p, gs0.pq, gs0.rfo) ∧ gs.fwriters = gs0.fwriters ∧ labs(gs0, lsf0(t), pcf0(t), ags, alsf(t), apcf(t)) |
⊦ flitStep(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)) ∨ (∃ tid. a = doWrite(tid, gs.bq(tid).head.l, gs.bq(tid).head.v) ∧ (gs.bq(tid) ≠ [] ∧ gs.bq(tid).head.W?) ∧ gs0 = (gs.pq:= gs.pq(gs.bq(tid).head.l := gs.pq(gs.bq(tid).head.l) + W(gs.bq(tid).head.v, tid))).bq:= gs.bq(tid := gs.bq(tid).tail) ∧ lsf0 = lsf ∧ pcf0 = pcf) ∨ (∃ tid, l. a = (oneMember(tid, l, gs.fwriters) ⊃ doWriteFO(tid, l);propFO(tid, l)) ∧ (∃ n. n < # gs.bq(tid) ∧ isPropFO(n, l, gs.bq(tid))) ∧ ⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(tid, l, fwriters; pq, bq, rfo); gs := ((gs.pq:= pq).bq:= bq).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf)) ∨ (∃ tid. a = propSF(tid) ∧ (gs.bq(tid) ≠ [] ∧ gs.bq(tid).head = SF ∧ (∀ l. ¬ FO(tid) ∈ gs.pq(l))) ∧ gs0 = gs.bq:= gs.bq(tid := gs.bq(tid).tail) ∧ lsf0 = lsf ∧ pcf0 = pcf) ∨ (∃ loc. a = globalPERSIST_W(loc) ∧ (gs.pq(loc) ≠ [] ∧ gs.pq(loc).head.W?) ∧ gs0 = (gs.pmem:= gs.pmem(loc := gs.pq(loc).head.val)).pq:= gs.pq(loc := gs.pq(loc).tail) ∧ lsf0 = lsf ∧ pcf0 = pcf) ∨ (∃ loc. a = globalPERSIST_FO(loc) ∧ (gs.pq(loc) ≠ [] ∧ gs.pq(loc).head.FO?) ∧ gs0 = gs.pq:= gs.pq(loc := gs.pq(loc).tail) ∧ lsf0 = lsf ∧ pcf0 = pcf) ∨ a = globalCRASH ∧ ⟨pq := gs.pq, fctr := gs.fctr, bq := gs.bq, fwriters := gs.fwriters, freaders := gs.freaders, rfo := gs.rfo; CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf); gs := (((((gs.pq:= pq).fctr:= fctr).bq:= bq).fwriters:= fwriters).freaders:= freaders).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf)
(∃ t, ls, pc. lstep(gs, lsf(t), pcf(t), propFO(tid, l), gs0, ls, pc) ∧ lsf0 = lsf(t := ls) ∧ pcf0 = pcf(t := pc)) ∨ (∃ tid0. propFO(tid, l) = doWrite(tid0, gs.bq(tid0).head.l, gs.bq(tid0).head.v) ∧ (gs.bq(tid0) ≠ [] ∧ gs.bq(tid0).head.W?) ∧ gs0 = (gs.pq:= gs.pq(gs.bq(tid0).head.l := gs.pq(gs.bq(tid0).head.l) + W(gs.bq(tid0).head.v, tid0))).bq:= gs.bq(tid0 := gs.bq(tid0).tail) ∧ lsf0 = lsf ∧ pcf0 = pcf) ∨ (∃ tid0, l0. propFO(tid, l) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)) ∧ (∃ n. n < # gs.bq(tid0) ∧ isPropFO(n, l0, gs.bq(tid0))) ∧ ⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(tid0, l0, fwriters; pq, bq, rfo); gs := ((gs.pq:= pq).bq:= bq).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf)) ∨ (∃ tid0. propFO(tid, l) = propSF(tid0) ∧ (gs.bq(tid0) ≠ [] ∧ gs.bq(tid0).head = SF ∧ (∀ l. ¬ FO(tid0) ∈ gs.pq(l))) ∧ gs0 = gs.bq:= gs.bq(tid0 := gs.bq(tid0).tail) ∧ lsf0 = lsf ∧ pcf0 = pcf) ∨ (∃ loc. propFO(tid, l) = globalPERSIST_W(loc) ∧ (gs.pq(loc) ≠ [] ∧ gs.pq(loc).head.W?) ∧ gs0 = (gs.pmem:= gs.pmem(loc := gs.pq(loc).head.val)).pq:= gs.pq(loc := gs.pq(loc).tail) ∧ lsf0 = lsf ∧ pcf0 = pcf) ∨ (∃ loc. propFO(tid, l) = globalPERSIST_FO(loc) ∧ (gs.pq(loc) ≠ [] ∧ gs.pq(loc).head.FO?) ∧ gs0 = gs.pq:= gs.pq(loc := gs.pq(loc).tail) ∧ lsf0 = lsf ∧ pcf0 = pcf) ∨ propFO(tid, l) = globalCRASH ∧ ⟨pq := gs.pq, fctr := gs.fctr, bq := gs.bq, fwriters := gs.fwriters, freaders := gs.freaders, rfo := gs.rfo; CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf); gs := (((((gs.pq:= pq).fctr:= fctr).bq:= bq).fwriters:= fwriters).freaders:= freaders).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ gs.pmem = gs0.pmem ∧ gs.fctr = gs0.fctr ∧ reorder(ags.p, gs0.pq, gs0.rfo) ∧ gs.fwriters = gs0.fwriters ∧ labs(gs0, lsf0(t), pcf0(t), ags, alsf(t), apcf(t))
Used terms: pcf0, propFO(tid, l), lsf, gs0, pcf, lsf0, gs
| ⊦ flitStep(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)) ∨ (∃ tid. a = doWrite(tid, gs.bq(tid).head.l, gs.bq(tid).head.v) ∧ (gs.bq(tid) ≠ [] ∧ gs.bq(tid).head.W?) ∧ gs0 = (gs.pq:= gs.pq(gs.bq(tid).head.l := gs.pq(gs.bq(tid).head.l) + W(gs.bq(tid).head.v, tid))).bq:= gs.bq(tid := gs.bq(tid).tail) ∧ lsf0 = lsf ∧ pcf0 = pcf) ∨ (∃ tid, l. a = (oneMember(tid, l, gs.fwriters) ⊃ doWriteFO(tid, l);propFO(tid, l)) ∧ (∃ n. n < # gs.bq(tid) ∧ isPropFO(n, l, gs.bq(tid))) ∧ ⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(tid, l, fwriters; pq, bq, rfo); gs := ((gs.pq:= pq).bq:= bq).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf)) ∨ (∃ tid. a = propSF(tid) ∧ (gs.bq(tid) ≠ [] ∧ gs.bq(tid).head = SF ∧ (∀ l. ¬ FO(tid) ∈ gs.pq(l))) ∧ gs0 = gs.bq:= gs.bq(tid := gs.bq(tid).tail) ∧ lsf0 = lsf ∧ pcf0 = pcf) ∨ (∃ loc. a = globalPERSIST_W(loc) ∧ (gs.pq(loc) ≠ [] ∧ gs.pq(loc).head.W?) ∧ gs0 = (gs.pmem:= gs.pmem(loc := gs.pq(loc).head.val)).pq:= gs.pq(loc := gs.pq(loc).tail) ∧ lsf0 = lsf ∧ pcf0 = pcf) ∨ (∃ loc. a = globalPERSIST_FO(loc) ∧ (gs.pq(loc) ≠ [] ∧ gs.pq(loc).head.FO?) ∧ gs0 = gs.pq:= gs.pq(loc := gs.pq(loc).tail) ∧ lsf0 = lsf ∧ pcf0 = pcf) ∨ a = globalCRASH ∧ ⟨pq := gs.pq, fctr := gs.fctr, bq := gs.bq, fwriters := gs.fwriters, freaders := gs.freaders, rfo := gs.rfo; CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf); gs := (((((gs.pq:= pq).fctr:= fctr).bq:= bq).fwriters:= fwriters).freaders:= freaders).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf) |
| (∃ t, ls, pc. lstep(gs, lsf(t), pcf(t), propFO(tid, l), gs0, ls, pc) ∧ lsf0 = lsf(t := ls) ∧ pcf0 = pcf(t := pc)) ∨ (∃ tid0. propFO(tid, l) = doWrite(tid0, gs.bq(tid0).head.l, gs.bq(tid0).head.v) ∧ (gs.bq(tid0) ≠ [] ∧ gs.bq(tid0).head.W?) ∧ gs0 = (gs.pq:= gs.pq(gs.bq(tid0).head.l := gs.pq(gs.bq(tid0).head.l) + W(gs.bq(tid0).head.v, tid0))).bq:= gs.bq(tid0 := gs.bq(tid0).tail) ∧ lsf0 = lsf ∧ pcf0 = pcf) ∨ (∃ tid0, l0. propFO(tid, l) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)) ∧ (∃ n. n < # gs.bq(tid0) ∧ isPropFO(n, l0, gs.bq(tid0))) ∧ ⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(tid0, l0, fwriters; pq, bq, rfo); gs := ((gs.pq:= pq).bq:= bq).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf)) ∨ (∃ tid0. propFO(tid, l) = propSF(tid0) ∧ (gs.bq(tid0) ≠ [] ∧ gs.bq(tid0).head = SF ∧ (∀ l. ¬ FO(tid0) ∈ gs.pq(l))) ∧ gs0 = gs.bq:= gs.bq(tid0 := gs.bq(tid0).tail) ∧ lsf0 = lsf ∧ pcf0 = pcf) ∨ (∃ loc. propFO(tid, l) = globalPERSIST_W(loc) ∧ (gs.pq(loc) ≠ [] ∧ gs.pq(loc).head.W?) ∧ gs0 = (gs.pmem:= gs.pmem(loc := gs.pq(loc).head.val)).pq:= gs.pq(loc := gs.pq(loc).tail) ∧ lsf0 = lsf ∧ pcf0 = pcf) ∨ (∃ loc. propFO(tid, l) = globalPERSIST_FO(loc) ∧ (gs.pq(loc) ≠ [] ∧ gs.pq(loc).head.FO?) ∧ gs0 = gs.pq:= gs.pq(loc := gs.pq(loc).tail) ∧ lsf0 = lsf ∧ pcf0 = pcf) ∨ propFO(tid, l) = globalCRASH ∧ ⟨pq := gs.pq, fctr := gs.fctr, bq := gs.bq, fwriters := gs.fwriters, freaders := gs.freaders, rfo := gs.rfo; CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf); gs := (((((gs.pq:= pq).fctr:= fctr).bq:= bq).fwriters:= fwriters).freaders:= freaders).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ gs.pmem = gs0.pmem ∧ gs.fctr = gs0.fctr ∧ reorder(ags.p, gs0.pq, gs0.rfo) ∧ gs.fwriters = gs0.fwriters ∧ labs(gs0, lsf0(t), pcf0(t), ags, alsf(t), apcf(t)) |
pre(gs, lsf(t0), pcf(t0), propFO(tid, l)) ∧ ls = lstepf(gs, lsf(t0), pcf(t0), propFO(tid, l)) ∧ gs0 = gstepf(gs, lsf(t0), pcf(t0), propFO(tid, l)) ∧ pc = pcstepf(gs, lsf(t0), pcf(t0), propFO(tid, l)) ∧ lsf0 = lsf(t0 := lstepf(gs, lsf(t0), pcf(t0), propFO(tid, l))) ∧ pcf0 = pcf(t0 := pcstepf(gs, lsf(t0), pcf(t0), propFO(tid, l))) ∨ propFO(tid, l) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)) ∧ n < # gs.bq(tid0) ∧ isPropFO(n, l0, gs.bq(tid0)) ∧ ⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(tid0, l0, fwriters; pq, bq, rfo); gs := ((gs.pq:= pq).bq:= bq).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ gs.pmem = gs0.pmem ∧ gs.fctr = gs0.fctr ∧ reorder(ags.p, gs0.pq, gs0.rfo) ∧ gs.fwriters = gs0.fwriters ∧ labs(gs0, lsf0(t), pcf0(t), ags, alsf(t), apcf(t))
Used simplifier rules: ⊦ globalCRASH ≠ propFO(t, loc); (s) ⊦ globalPERSIST_FO(loc) ≠ propFO(t, loc0); (s) ⊦ globalPERSIST_W(loc) ≠ propFO(t, loc0); (s) ⊦ propFO(t, loc) ≠ propSF(t0); (s) ⊦ doWrite(t, loc, v) ≠ propFO(t0, loc0); (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)
| pre(gs, lsf(t0), pcf(t0), propFO(tid, l)) ∧ ls = lstepf(gs, lsf(t0), pcf(t0), propFO(tid, l)) ∧ gs0 = gstepf(gs, lsf(t0), pcf(t0), propFO(tid, l)) ∧ pc = pcstepf(gs, lsf(t0), pcf(t0), propFO(tid, l)) ∧ lsf0 = lsf(t0 := lstepf(gs, lsf(t0), pcf(t0), propFO(tid, l))) ∧ pcf0 = pcf(t0 := pcstepf(gs, lsf(t0), pcf(t0), propFO(tid, l))) ∨ propFO(tid, l) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)) ∧ n < # gs.bq(tid0) ∧ isPropFO(n, l0, gs.bq(tid0)) ∧ ⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(tid0, l0, fwriters; pq, bq, rfo); gs := ((gs.pq:= pq).bq:= bq).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ gs.pmem = gs0.pmem ∧ gs.fctr = gs0.fctr ∧ reorder(ags.p, gs0.pq, gs0.rfo) ∧ gs.fwriters = gs0.fwriters ∧ labs(gs0, lsf0(t), pcf0(t), ags, alsf(t), apcf(t)) |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, gs0 = gstepf(gs, lsf(t0), pcf(t0), propFO(tid, l)), ls = lstepf(gs, lsf(t0), pcf(t0), propFO(tid, l)), lsf0 = lsf(t0 := lstepf(gs, lsf(t0), pcf(t0), propFO(tid, l))), pc = pcstepf(gs, lsf(t0), pcf(t0), propFO(tid, l)), pcf0 = pcf(t0 := pcstepf(gs, lsf(t0), pcf(t0), propFO(tid, l))), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), pre(gs, lsf(t0), pcf(t0), propFO(tid, l)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ gs.pmem = gs0.pmem ∧ gs.fctr = gs0.fctr ∧ reorder(ags.p, gs0.pq, gs0.rfo) ∧ gs.fwriters = gs0.fwriters ∧ labs(gs0, lsf0(t), pcf0(t), ags, alsf(t), apcf(t))
⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(tid0, l0, fwriters; pq, bq, rfo); gs := ((gs.pq:= pq).bq:= bq).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, propFO(tid, l) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), n < # gs.bq(tid0), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ gs.pmem = gs0.pmem ∧ gs.fctr = gs0.fctr ∧ reorder(ags.p, gs0.pq, gs0.rfo) ∧ gs.fwriters = gs0.fwriters ∧ labs(gs0, lsf0(t), pcf0(t), ags, alsf(t), apcf(t))
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, gs0 = gstepf(gs, lsf(t0), pcf(t0), propFO(tid, l)), ls = lstepf(gs, lsf(t0), pcf(t0), propFO(tid, l)), lsf0 = lsf(t0 := lstepf(gs, lsf(t0), pcf(t0), propFO(tid, l))), pc = pcstepf(gs, lsf(t0), pcf(t0), propFO(tid, l)), pcf0 = pcf(t0 := pcstepf(gs, lsf(t0), pcf(t0), propFO(tid, l))), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), pre(gs, lsf(t0), pcf(t0), propFO(tid, l)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ gs.pmem = gs0.pmem ∧ gs.fctr = gs0.fctr ∧ reorder(ags.p, gs0.pq, gs0.rfo) ∧ gs.fwriters = gs0.fwriters ∧ labs(gs0, lsf0(t), pcf0(t), ags, alsf(t), apcf(t)) |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, FLITInv(gs, lsf, pcf), FLITInv (gstepf(gs, lsf(t0), pcf(t0), propFO(tid, l)), lsf(t0 := lstepf(gs, lsf(t0), pcf(t0), propFO(tid, l))), pcf(t0 := pcstepf(gs, lsf(t0), pcf(t0), propFO(tid, l)))), FLITPSCInv(ags, alsf, apcf), pre(gs, lsf(t0), pcf(t0), propFO(tid, l)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ gs.pmem = gstepf(gs, lsf(t0), pcf(t0), propFO(tid, l)).pmem ∧ gs.fctr = gstepf(gs, lsf(t0), pcf(t0), propFO(tid, l)).fctr ∧ reorder(ags.p, gstepf(gs, lsf(t0), pcf(t0), propFO(tid, l)).pq, gstepf(gs, lsf(t0), pcf(t0), propFO(tid, l)).rfo) ∧ gs.fwriters = gstepf(gs, lsf(t0), pcf(t0), propFO(tid, l)).fwriters ∧ labs (gstepf(gs, lsf(t0), pcf(t0), propFO(tid, l)), (t0 = t ⊃ lstepf(gs, lsf(t), pcf(t), propFO(tid, l));lsf(t)), (t0 = t ⊃ pcstepf(gs, lsf(t), pcf(t), propFO(tid, l));pcf(t)), ags, alsf(t), apcf(t))
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, FLITInv(gs, lsf, pcf), FLITInv (gstepf(gs, lsf(t0), pcf(t0), propFO(tid, l)), lsf(t0 := lstepf(gs, lsf(t0), pcf(t0), propFO(tid, l))), pcf(t0 := pcstepf(gs, lsf(t0), pcf(t0), propFO(tid, l)))), FLITPSCInv(ags, alsf, apcf), pre(gs, lsf(t0), pcf(t0), propFO(tid, l)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ gs.pmem = gstepf(gs, lsf(t0), pcf(t0), propFO(tid, l)).pmem ∧ gs.fctr = gstepf(gs, lsf(t0), pcf(t0), propFO(tid, l)).fctr ∧ reorder(ags.p, gstepf(gs, lsf(t0), pcf(t0), propFO(tid, l)).pq, gstepf(gs, lsf(t0), pcf(t0), propFO(tid, l)).rfo) ∧ gs.fwriters = gstepf(gs, lsf(t0), pcf(t0), propFO(tid, l)).fwriters ∧ labs (gstepf(gs, lsf(t0), pcf(t0), propFO(tid, l)), (t0 = t ⊃ lstepf(gs, lsf(t), pcf(t), propFO(tid, l));lsf(t)), (t0 = t ⊃ pcstepf(gs, lsf(t), pcf(t), propFO(tid, l));pcf(t)), ags, alsf(t), apcf(t)) |
Used simplifier rules: FLITPC freely generated by R1, R2, R3, R4, W1, W2, W3, W4, W5, W6, W7, crashed, idle, ready ;; ⊦ gstepf(gs, ls, ready, a) = gs; (s) ⊦ pre(gs, ls, ready, a) ↔ (∃ loc0, val0. a = invFLITWRITE(ls.t, loc0, val0)) ∨ (∃ loc0. a = invFLITREAD(ls.t, loc0)) ∨ a = callFLITCOMPLETE(ls.t) ∧ gs.bq(ls.t) = [] ∧ (∀ l. ¬ FO(ls.t) ∈ gs.pq(l)); (s) ⊦ invFLITWRITE(t, loc, v) ≠ propFO(t0, loc0); (s) ⊦ invFLITREAD(t, loc) ≠ propFO(t0, loc0); (s) ⊦ callFLITCOMPLETE(t) ≠ propFO(t0, loc); (s) ⊦ pre(gs, ls, idle, a) ↔ a = callRUN(ls.t); (s) ⊦ callRUN(t) ≠ propFO(t0, loc); (s) ⊦ pre(gs, ls, crashed, a) ↔ false; (s) ⊦ pcstepf(gs, ls, W7, a) = ready; (s) ⊦ pre(gs, ls, W7, a) ↔ a = retFLITWRITE(ls.t); (s) ⊦ propFO(t, loc) ≠ retFLITWRITE(t0); (s) ⊦ gstepf(gs, ls, W6, a) = (gs.fctr:= gs.fctr(ls.loc := gs.fctr(ls.loc) - 1)) .fwriters:= gs.fwriters(ls.loc := gs.fwriters(ls.loc) -- ls.t); (s) ⊦ lstepf(gs, ls, W6, a) = ls; (s) ⊦ pcstepf(gs, ls, W6, a) = W7; (s) ⊦ pre(gs, ls, W6, a) ↔ (gs.bq(ls.t) = [] ∧ (∀ l. ¬ FO(ls.t) ∈ gs.pq(l))) ∧ a = ctrDec(ls.t, ls.loc); (s) ⊦ ctrDec(t, loc) ≠ propFO(t0, loc0); (s) ⊦ pcstepf(gs, ls, W5, a) = W6; (s) ⊦ pre(gs, ls, W5, a) ↔ a = τ; (s) ⊦ propFO(t, loc) ≠ τ; (s) ⊦ pcstepf(gs, ls, W4, a) = W5; (s) ⊦ pre(gs, ls, W4, a) ↔ a = τ; (s) ⊦ pcstepf(gs, ls, W3, a) = W4; (s) ⊦ pre(gs, ls, W3, a) ↔ a = τ; (s) ⊦ gstepf(gs, ls, W2, a) = (gs.fctr:= gs.fctr(ls.loc := gs.fctr(ls.loc) + 1)) .fwriters:= gs.fwriters(ls.loc := gs.fwriters(ls.loc) ++ ls.t); (s) ⊦ lstepf(gs, ls, W2, a) = ls; (s) ⊦ pcstepf(gs, ls, W2, a) = W3; (s) ⊦ pre(gs, ls, W2, a) ↔ (gs.bq(ls.t) = [] ∧ (∀ l. ¬ FO(ls.t) ∈ gs.pq(l))) ∧ a = ctrInc(ls.t, ls.loc); (s) ⊦ ctrInc(t, loc) ≠ propFO(t0, loc0); (s) ⊦ gstepf(gs, ls, W1, a) = gs.bq:= gs.bq(ls.t := gs.bq(ls.t) + SF); (s) ⊦ x + a = x + a '; (s) ⊦ lstepf(gs, ls, W1, a) = ls; (s) ⊦ pcstepf(gs, ls, W1, a) = W2; (s) ⊦ pre(gs, ls, W1, a) ↔ a = sfence(ls.t); (s) ⊦ propFO(t, loc) ≠ sfence(t0); (s) ⊦ pcstepf(gs, ls, R4, a) = ready; (s) ⊦ pre(gs, ls, R4, a) ↔ a = retFLITREAD(ls.t, ls.val); (s) ⊦ propFO(t, loc) ≠ retFLITREAD(t0, v); (s) ⊦ gstepf(gs, ls, R3, a) = ( (gs.bq:= gs.bq(ls.t := gs.bq(ls.t) + FO(ls.loc))) .rfo:= gs.rfo(ls.t := gs.rfo(ls.t) + FO(ls.loc))) .freaders:= gs.freaders(ls.loc := gs.freaders(ls.loc) -- ls.t); (s) ⊦ lstepf(gs, ls, R3, a) = ls; (s) ⊦ pcstepf(gs, ls, R3, a) = R4; (s) ⊦ pre(gs, ls, R3, a) ↔ a = pwb(ls.t, ls.loc); (s) ⊦ propFO(t, loc) ≠ pwb(t0, loc0); (s) ⊦ gstepf(gs, ls, R2, a) = (gs.fctr(ls.loc) ≠ 0 ⊃ gs ;gs.freaders:= gs.freaders(ls.loc := gs.freaders(ls.loc) -- ls.t) ); (s) ⊦ lstepf(gs, ls, R2, a) = ls; (s) ⊦ pcstepf(gs, ls, R2, a) = (gs.fctr(ls.loc) ≠ 0 ⊃ R3;R4); (s) ⊦ pre(gs, ls, R2, a) ↔ a = ctrRead(ls.t, ls.loc, gs.fctr(ls.loc)); (s) ⊦ ctrRead(t, loc, n) ≠ propFO(t0, loc0); (s) ⊦ gstepf(gs, ls, R1, a) = gs.freaders:= gs.freaders(ls.loc := gs.freaders(ls.loc) ++ ls.t); (s) ⊦ lstepf(gs, ls, R1, a) = ls.val:= (((gs.pmem ⊕ gs.pq) ⊕ gs.bq(ls.t)))(ls.loc); (s) ⊦ pcstepf(gs, ls, R1, a) = R2; (s) ⊦ pre(gs, ls, R1, a) ↔ a = doRead(ls.t, ls.loc, ((gs.pmem ⊕ gs.pq))(ls.loc)); (s) ⊦ ((mem ⊕ p))(l) = mem(l) ⊕ p(l); (s) ⊦ reorder(p, pq, rfo) → v ⊕ pq(l) = v ⊕ p(l); (s) ⊦ doRead(t, loc, v) ≠ propFO(t0, loc0); (s)
| ⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(tid0, l0, fwriters; pq, bq, rfo); gs := ((gs.pq:= pq).bq:= bq).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, propFO(tid, l) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), n < # gs.bq(tid0), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ gs.pmem = gs0.pmem ∧ gs.fctr = gs0.fctr ∧ reorder(ags.p, gs0.pq, gs0.rfo) ∧ gs.fwriters = gs0.fwriters ∧ labs(gs0, lsf0(t), pcf0(t), ags, alsf(t), apcf(t)) |
⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(tid0, l0, fwriters; pq, bq, rfo); gs := ((gs.pq:= pq).bq:= bq).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, propFO(tid, l) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), gs.bq(tid0) ≠ [], n < # gs.bq(tid0), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ gs.pmem = gs0.pmem ∧ gs.fctr = gs0.fctr ∧ reorder(ags.p, gs0.pq, gs0.rfo) ∧ gs.fwriters = gs0.fwriters ∧ labs(gs0, lsf0(t), pcf0(t), ags, alsf(t), apcf(t))
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| ⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(tid0, l0, fwriters; pq, bq, rfo); gs := ((gs.pq:= pq).bq:= bq).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, propFO(tid, l) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), gs.bq(tid0) ≠ [], n < # gs.bq(tid0), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ gs.pmem = gs0.pmem ∧ gs.fctr = gs0.fctr ∧ reorder(ags.p, gs0.pq, gs0.rfo) ∧ gs.fwriters = gs0.fwriters ∧ labs(gs0, lsf0(t), pcf0(t), ags, alsf(t), apcf(t)) |
⟨PROP_FO(tid0, l0, fwriters; pq, bq, rfo); gs := ((gs.pq:= pq).bq:= bq).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fwriters = gs.fwriters, pq = gs.pq, propFO(tid, l) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), rfo = gs.rfo, gs.bq(tid0) ≠ [], n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ gs.pmem = gs0.pmem ∧ gs.fctr = gs0.fctr ∧ reorder(ags.p, gs0.pq, gs0.rfo) ∧ gs.fwriters = gs0.fwriters ∧ labs(gs0, lsf0(t), pcf0(t), ags, alsf(t), apcf(t))
| ⟨PROP_FO(tid0, l0, fwriters; pq, bq, rfo); gs := ((gs.pq:= pq).bq:= bq).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fwriters = gs.fwriters, pq = gs.pq, propFO(tid, l) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), rfo = gs.rfo, gs.bq(tid0) ≠ [], n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ gs.pmem = gs0.pmem ∧ gs.fctr = gs0.fctr ∧ reorder(ags.p, gs0.pq, gs0.rfo) ∧ gs.fwriters = gs0.fwriters ∧ labs(gs0, lsf0(t), pcf0(t), ags, alsf(t), apcf(t)) |
⟨gs := ((gs.pq:= pq0).bq:= bq0).rfo:= rfo0⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf), ⟨PROP_FO(tid0, l0, fwriters; pq, bq, rfo)⟩ (pq = pq0 ∧ bq = bq0 ∧ rfo = rfo0), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fwriters = gs.fwriters, pq = gs.pq, propFO(tid, l) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), rfo = gs.rfo, gs.bq(tid0) ≠ [], n < # gs.bq(tid0), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ gs.pmem = gs0.pmem ∧ gs.fctr = gs0.fctr ∧ reorder(ags.p, gs0.pq, gs0.rfo) ∧ gs.fwriters = gs0.fwriters ∧ labs(gs0, lsf0(t), pcf0(t), ags, alsf(t), apcf(t))
| ⟨gs := ((gs.pq:= pq0).bq:= bq0).rfo:= rfo0⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf), ⟨PROP_FO(tid0, l0, fwriters; pq, bq, rfo)⟩ (pq = pq0 ∧ bq = bq0 ∧ rfo = rfo0), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fwriters = gs.fwriters, pq = gs.pq, propFO(tid, l) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), rfo = gs.rfo, gs.bq(tid0) ≠ [], n < # gs.bq(tid0), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ gs.pmem = gs0.pmem ∧ gs.fctr = gs0.fctr ∧ reorder(ags.p, gs0.pq, gs0.rfo) ∧ gs.fwriters = gs0.fwriters ∧ labs(gs0, lsf0(t), pcf0(t), ags, alsf(t), apcf(t)) |
⟨PROP_FO(tid0, l0, fwriters; pq, bq, rfo)⟩ (pq = pq0 ∧ bq = bq0 ∧ rfo = rfo0), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fwriters = gs.fwriters, gs0 = ((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf0 = lsf, pcf0 = pcf, pq = gs.pq, propFO(tid, l) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), rfo = gs.rfo, gs.bq(tid0) ≠ [], n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ gs.pmem = gs0.pmem ∧ gs.fctr = gs0.fctr ∧ reorder(ags.p, gs0.pq, gs0.rfo) ∧ gs.fwriters = gs0.fwriters ∧ labs(gs0, lsf0(t), pcf0(t), ags, alsf(t), apcf(t))
| ⟨PROP_FO(tid0, l0, fwriters; pq, bq, rfo)⟩ (pq = pq0 ∧ bq = bq0 ∧ rfo = rfo0), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fwriters = gs.fwriters, gs0 = ((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf0 = lsf, pcf0 = pcf, pq = gs.pq, propFO(tid, l) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), rfo = gs.rfo, gs.bq(tid0) ≠ [], n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ gs.pmem = gs0.pmem ∧ gs.fctr = gs0.fctr ∧ reorder(ags.p, gs0.pq, gs0.rfo) ∧ gs.fwriters = gs0.fwriters ∧ labs(gs0, lsf0(t), pcf0(t), ags, alsf(t), apcf(t)) |
⟨PROP_FO(tid0, l0, gs.fwriters; pq, bq, rfo)⟩ (pq = pq0 ∧ bq = bq0 ∧ rfo = rfo0), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, pq = gs.pq, propFO(tid, l) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), rfo = gs.rfo, gs.bq(tid0) ≠ [], n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ reorder(ags.p, pq0, rfo0) ∧ labs(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf(t), pcf(t), ags, alsf(t), apcf(t))
Used simplifier rules: ⊦ (gs.pq:= pq).fwriters = gs.fwriters; (s) ⊦ (gs.bq:= bq).fwriters = gs.fwriters; (s) ⊦ (gs.rfo:= bq0).fwriters = gs.fwriters; (s) ⊦ (gs.rfo:= bq0).rfo = bq0; (s) ⊦ (gs.pq:= pq).pq = pq; (s) ⊦ (gs.bq:= bq).pq = gs.pq; (s) ⊦ (gs.rfo:= bq0).pq = gs.pq; (s) ⊦ (gs.pq:= pq).fctr = gs.fctr; (s) ⊦ (gs.bq:= bq).fctr = gs.fctr; (s) ⊦ (gs.rfo:= bq0).fctr = gs.fctr; (s) ⊦ (gs.pq:= pq).pmem = gs.pmem; (s) ⊦ (gs.bq:= bq).pmem = gs.pmem; (s) ⊦ (gs.rfo:= bq0).pmem = gs.pmem; (s)
| ⟨PROP_FO(tid0, l0, gs.fwriters; pq, bq, rfo)⟩ (pq = pq0 ∧ bq = bq0 ∧ rfo = rfo0), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, pq = gs.pq, propFO(tid, l) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), rfo = gs.rfo, gs.bq(tid0) ≠ [], n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ reorder(ags.p, pq0, rfo0) ∧ labs(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf(t), pcf(t), ags, alsf(t), apcf(t)) |
⟨choose n with n < # bq(tid) ∧ isPropFO(n, l, bq(tid)) in pq(l) := pq(l) + FO(tid), bq(tid) := bq(tid) -p n, rfo(tid) := (tid ∈ fwriters(l) ⊃ rfo(tid);rfo(tid) -p n) ifnone skip⟩ (pq = pq0 ∧ bq = bq0 ∧ rfo = rfo0), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fwriters = gs.fwriters, l = l0, pq = gs.pq, propFO(tid1, l1) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), rfo = gs.rfo, tid = tid0, gs.bq(tid0) ≠ [], n < # gs.bq(tid0), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ reorder(ags.p, pq0, rfo0) ∧ labs(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf(t), pcf(t), ags, alsf(t), apcf(t))
Used simplifier rules: decl: PROP_FO(tid, l, fwriters; pq, bq, rfo) {choose n with n < # bq(tid) ∧ isPropFO(n, l, bq(tid)) in pq(l) := pq(l) + FO(tid), bq(tid) := bq(tid) -p n, rfo(tid) := (tid ∈ fwriters(l) ⊃ rfo(tid);rfo(tid) -p n) ifnone skip };
| ⟨choose n with n < # bq(tid) ∧ isPropFO(n, l, bq(tid)) in pq(l) := pq(l) + FO(tid), bq(tid) := bq(tid) -p n, rfo(tid) := (tid ∈ fwriters(l) ⊃ rfo(tid);rfo(tid) -p n) ifnone skip⟩ (pq = pq0 ∧ bq = bq0 ∧ rfo = rfo0), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fwriters = gs.fwriters, l = l0, pq = gs.pq, propFO(tid1, l1) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), rfo = gs.rfo, tid = tid0, gs.bq(tid0) ≠ [], n < # gs.bq(tid0), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ reorder(ags.p, pq0, rfo0) ∧ labs(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf(t), pcf(t), ags, alsf(t), apcf(t)) |
⟨pq(l) := pq(l) + FO(tid), bq(tid) := bq(tid) -p n, rfo(tid) := (tid ∈ fwriters(l) ⊃ rfo(tid);rfo(tid) -p n)⟩ (pq = pq0 ∧ bq = bq0 ∧ rfo = rfo0), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fwriters = gs.fwriters, l = l0, pq = gs.pq, propFO(tid1, l1) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), rfo = gs.rfo, tid = tid0, gs.bq(tid0) ≠ [], n0 < # gs.bq(tid0), n < # bq(tid), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l, bq(tid)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ reorder(ags.p, pq0, rfo0) ∧ labs(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf(t), pcf(t), ags, alsf(t), apcf(t))
⟨skip⟩ (pq = pq0 ∧ bq = bq0 ∧ rfo = rfo0), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fwriters = gs.fwriters, l = l0, pq = gs.pq, propFO(tid1, l1) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), rfo = gs.rfo, tid = tid0, gs.bq(tid0) ≠ [], n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ n. ¬(n < # bq(tid) ∧ isPropFO(n, l, bq(tid))) ⊦ reorder(ags.p, pq0, rfo0) ∧ labs(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf(t), pcf(t), ags, alsf(t), apcf(t))
| ⟨pq(l) := pq(l) + FO(tid), bq(tid) := bq(tid) -p n, rfo(tid) := (tid ∈ fwriters(l) ⊃ rfo(tid);rfo(tid) -p n)⟩ (pq = pq0 ∧ bq = bq0 ∧ rfo = rfo0), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fwriters = gs.fwriters, l = l0, pq = gs.pq, propFO(tid1, l1) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), rfo = gs.rfo, tid = tid0, gs.bq(tid0) ≠ [], n0 < # gs.bq(tid0), n < # bq(tid), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l, bq(tid)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ reorder(ags.p, pq0, rfo0) ∧ labs(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf(t), pcf(t), ags, alsf(t), apcf(t)) |
pq(l := pq(l) + FO(tid)) = pq0, bq(tid := bq(tid) -p n) = bq0, rfo(tid := (tid ∈ fwriters(l) ⊃ rfo(tid);rfo(tid) -p n)) = rfo0, ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fwriters = gs.fwriters, l = l0, pq = gs.pq, propFO(tid1, l1) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), rfo = gs.rfo, tid = tid0, gs.bq(tid0) ≠ [], n < # bq(tid), n0 < # gs.bq(tid0), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, bq(tid)), isPropFO(n0, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ reorder(ags.p, pq0, rfo0) ∧ labs(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf(t), pcf(t), ags, alsf(t), apcf(t))
| pq(l := pq(l) + FO(tid)) = pq0, bq(tid := bq(tid) -p n) = bq0, rfo(tid := (tid ∈ fwriters(l) ⊃ rfo(tid);rfo(tid) -p n)) = rfo0, ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fwriters = gs.fwriters, l = l0, pq = gs.pq, propFO(tid1, l1) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), rfo = gs.rfo, tid = tid0, gs.bq(tid0) ≠ [], n < # bq(tid), n0 < # gs.bq(tid0), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, bq(tid)), isPropFO(n0, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ reorder(ags.p, pq0, rfo0) ∧ labs(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf(t), pcf(t), ags, alsf(t), apcf(t)) |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, propFO(tid1, l1) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), gs.bq(tid0) ≠ [], n0 < # gs.bq(tid0), n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)) .rfo:= gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l0) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l0) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n))) ∧ labs ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)) .rfo:= gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l0) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n)), lsf(t), pcf(t), ags, alsf(t), apcf(t))
Used simplifier rules: ⊦ x + a = x + a '; (s)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, propFO(tid1, l1) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), gs.bq(tid0) ≠ [], n0 < # gs.bq(tid0), n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)) .rfo:= gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l0) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l0) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n))) ∧ labs ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)) .rfo:= gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l0) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n)), lsf(t), pcf(t), ags, alsf(t), apcf(t)) |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, propFO(tid1, l1) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), gs.bq(tid0) ≠ [], n < # gs.bq(tid0), n0 < # gs.bq(tid0), FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)) .rfo:= gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l0) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l0) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n))), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, propFO(tid1, l1) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), gs.bq(tid0) ≠ [], n < # gs.bq(tid0), n0 < # gs.bq(tid0), FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)) .rfo:= gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l0) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ labs ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)) .rfo:= gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l0) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n)), lsf(t), pcf(t), ags, alsf(t), apcf(t)), ¬ oneMember(tid1, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, propFO(tid1, l1) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), gs.bq(tid0) ≠ [], n < # gs.bq(tid0), n0 < # gs.bq(tid0), FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)) .rfo:= gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l0) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l0) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n))), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, propFO(tid1, l1) = propFO(tid0, l0), gs.bq(tid0) ≠ [], n0 < # gs.bq(tid0), n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)) .rfo:= gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l0) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid1, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l0) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n))), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: ⊦ doWriteFO(t, loc) ≠ propFO(t0, loc0); (s)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, propFO(tid1, l1) = propFO(tid0, l0), gs.bq(tid0) ≠ [], n0 < # gs.bq(tid0), n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)) .rfo:= gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l0) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid1, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l0) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n))), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], n0 < # gs.bq(tid0), n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)) .rfo:= gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l0) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l0) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n))), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: ⊦ propFO(t, loc) = propFO(t0, loc0) ↔ t = t0 ∧ loc = loc0; (ws)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], n0 < # gs.bq(tid0), n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)) .rfo:= gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l0) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l0) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n))), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], n < # gs.bq(tid0), n0 < # gs.bq(tid0), FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)) .rfo:= gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l0) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), tid0 ∈ gs.fwriters(l0), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0))), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], n < # gs.bq(tid0), n0 < # gs.bq(tid0), FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)) .rfo:= gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l0) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0) -p n)), ¬ tid0 ∈ gs.fwriters(l0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], n < # gs.bq(tid0), n0 < # gs.bq(tid0), FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)) .rfo:= gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l0) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), tid0 ∈ gs.fwriters(l0), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0))), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, # gs.fwriters(l0) ≠ 0, gs.bq(tid0) ≠ [], gs.fwriters(l0) ≠ ∅, n < # gs.bq(tid0), n0 < # gs.bq(tid0), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), tid0 ∈ gs.fwriters(l0), ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0))), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, # gs.fwriters(l0) ≠ 0, gs.bq(tid0) ≠ [], gs.fwriters(l0) ≠ ∅, n < # gs.bq(tid0), n0 < # gs.bq(tid0), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), tid0 ∈ gs.fwriters(l0), ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0))), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⊦ oneMember(t, l, tsf) ↔ (∀ l0. t ∈ tsf(l0) ↔ l0 = l)
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, # gs.fwriters(l0) ≠ 0, gs.bq(tid0) ≠ [], gs.fwriters(l0) ≠ ∅, n0 < # gs.bq(tid0), n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), tid0 ∈ gs.fwriters(l0), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0))), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∃ l1. ¬(tid0 ∈ gs.fwriters(l1) ↔ l1 = l0) ⊦
Used terms: tid0, l0, gs.fwriters
| ⊦ oneMember(t, l, tsf) ↔ (∀ l0. t ∈ tsf(l0) ↔ l0 = l) |
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, # gs.fwriters(l0) ≠ 0, gs.bq(tid0) ≠ [], gs.fwriters(l0) ≠ ∅, n0 < # gs.bq(tid0), n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), tid0 ∈ gs.fwriters(l0), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0))), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∃ l1. ¬(tid0 ∈ gs.fwriters(l1) ↔ l1 = l0) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, # gs.fwriters(l0) ≠ 0, # gs.fwriters(l1) ≠ 0, gs.bq(tid0) ≠ [], gs.fwriters(l1) ≠ ∅, gs.fwriters(l0) ≠ ∅, l1 ≠ l0, n0 < # gs.bq(tid0), n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), tid0 ∈ gs.fwriters(l1), tid0 ∈ gs.fwriters(l0), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0))), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, # gs.fwriters(l0) ≠ 0, # gs.fwriters(l1) ≠ 0, gs.bq(tid0) ≠ [], gs.fwriters(l1) ≠ ∅, gs.fwriters(l0) ≠ ∅, l1 ≠ l0, n0 < # gs.bq(tid0), n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), tid0 ∈ gs.fwriters(l1), tid0 ∈ gs.fwriters(l0), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0))), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⊦ FLITInv(gs, lsf, pcf) ↔ FLITGInv(gs) ∧ (∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)))
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, # gs.fwriters(l0) ≠ 0, # gs.fwriters(l1) ≠ 0, gs.bq(tid0) ≠ [], gs.fwriters(l1) ≠ ∅, gs.fwriters(l0) ≠ ∅, l1 ≠ l0, n < # gs.bq(tid0), n0 < # gs.bq(tid0), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), tid0 ∈ gs.fwriters(l0), tid0 ∈ gs.fwriters(l1), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0))), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦
Used terms: gs, lsf, pcf
| ⊦ FLITInv(gs, lsf, pcf) ↔ FLITGInv(gs) ∧ (∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t))) |
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, # gs.fwriters(l0) ≠ 0, # gs.fwriters(l1) ≠ 0, gs.bq(tid0) ≠ [], gs.fwriters(l1) ≠ ∅, gs.fwriters(l0) ≠ ∅, l1 ≠ l0, n < # gs.bq(tid0), n0 < # gs.bq(tid0), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), tid0 ∈ gs.fwriters(l0), tid0 ∈ gs.fwriters(l1), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0))), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ |
⊦ FLITGInv(gs) ↔ ctrok(gs.fctr, gs.fwriters) ∧ writersOk(gs.bq, gs.pq, gs.fwriters) ∧ pendingOk(gs.bq, gs.pq) ∧ SFTrailing(gs.bq) ∧ readFOsOk(gs.rfo, gs.fwriters)
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, # gs.fwriters(l0) ≠ 0, # gs.fwriters(l1) ≠ 0, gs.bq(tid0) ≠ [], gs.fwriters(l1) ≠ ∅, gs.fwriters(l0) ≠ ∅, l1 ≠ l0, n0 < # gs.bq(tid0), n < # gs.bq(tid0), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), tid0 ∈ gs.fwriters(l1), tid0 ∈ gs.fwriters(l0), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0))), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used terms: gs
| ⊦ FLITGInv(gs) ↔ ctrok(gs.fctr, gs.fwriters) ∧ writersOk(gs.bq, gs.pq, gs.fwriters) ∧ pendingOk(gs.bq, gs.pq) ∧ SFTrailing(gs.bq) ∧ readFOsOk(gs.rfo, gs.fwriters) |
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, # gs.fwriters(l0) ≠ 0, # gs.fwriters(l1) ≠ 0, gs.bq(tid0) ≠ [], gs.fwriters(l1) ≠ ∅, gs.fwriters(l0) ≠ ∅, l1 ≠ l0, n0 < # gs.bq(tid0), n < # gs.bq(tid0), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), tid0 ∈ gs.fwriters(l1), tid0 ∈ gs.fwriters(l0), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0))), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], gs.fctr(l1) ≠ 0, gs.fctr(l0) ≠ 0, gs.fwriters(l0) ≠ ∅, gs.fwriters(l1) ≠ ∅, l1 ≠ l0, n0 < # gs.bq(tid0), n < # gs.bq(tid0), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), tid0 ∈ gs.fwriters(l1), tid0 ∈ gs.fwriters(l0), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: readFOsOk-empty-rfo-while-writing: ⊦ readFOsOk(rfo, writers) ∧ t ∈ writers(l) → rfo(t) = []; (forward) from specification FLIT-preds ⊦ ctrok(ctr, writers) → # writers(l) = ctr(l); (s)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], gs.fctr(l1) ≠ 0, gs.fctr(l0) ≠ 0, gs.fwriters(l0) ≠ ∅, gs.fwriters(l1) ≠ ∅, l1 ≠ l0, n0 < # gs.bq(tid0), n < # gs.bq(tid0), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), tid0 ∈ gs.fwriters(l1), tid0 ∈ gs.fwriters(l0), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⊦ writersOk(bq, p, writers) ↔ (∀ l, t. (t ∈ writers(l) → (∀ l0. l0 ≠ l → ¬ t ∈ writers(l0))) ∧ (¬ t ∈ writers(l) → p(l) |W | t = [] ∧ bq(t) |WL l = []))
ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], gs.fctr(l1) ≠ 0, gs.fctr(l0) ≠ 0, gs.fwriters(l0) ≠ ∅, gs.fwriters(l1) ≠ ∅, l1 ≠ l0, n < # gs.bq(tid0), n0 < # gs.bq(tid0), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), tid0 ∈ gs.fwriters(l0), tid0 ∈ gs.fwriters(l1), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ l, t. (t ∈ gs.fwriters(l) → (∀ l0. l0 ≠ l → ¬ t ∈ gs.fwriters(l0))) ∧ (¬ t ∈ gs.fwriters(l) → gs.pq(l) |W | t = [] ∧ gs.bq(t) |WL l = []) ⊦
Used terms: gs.bq, gs.pq, gs.fwriters
| ⊦ writersOk(bq, p, writers) ↔ (∀ l, t. (t ∈ writers(l) → (∀ l0. l0 ≠ l → ¬ t ∈ writers(l0))) ∧ (¬ t ∈ writers(l) → p(l) |W | t = [] ∧ bq(t) |WL l = [])) |
| ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], gs.fctr(l1) ≠ 0, gs.fctr(l0) ≠ 0, gs.fwriters(l0) ≠ ∅, gs.fwriters(l1) ≠ ∅, l1 ≠ l0, n < # gs.bq(tid0), n0 < # gs.bq(tid0), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), tid0 ∈ gs.fwriters(l0), tid0 ∈ gs.fwriters(l1), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ l, t. (t ∈ gs.fwriters(l) → (∀ l0. l0 ≠ l → ¬ t ∈ gs.fwriters(l0))) ∧ (¬ t ∈ gs.fwriters(l) → gs.pq(l) |W | t = [] ∧ gs.bq(t) |WL l = []) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], gs.fctr(l1) ≠ 0, gs.fctr(l0) ≠ 0, gs.fwriters(l0) ≠ ∅, gs.fwriters(l1) ≠ ∅, l1 ≠ l0, n0 < # gs.bq(tid0), n < # gs.bq(tid0), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), tid0 ∈ gs.fwriters(l1), tid0 ∈ gs.fwriters(l0), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), tid0 ∈ gs.fwriters(l0) → (∀ l1. l1 ≠ l0 → ¬ tid0 ∈ gs.fwriters(l1)), ¬ tid0 ∈ gs.fwriters(l0) → gs.pq(l0) |W | tid0 = [] ∧ gs.bq(tid0) |WL l0 = [], ∀ l, t. (t ∈ gs.fwriters(l) → (∀ l0. l0 ≠ l → ¬ t ∈ gs.fwriters(l0))) ∧ (¬ t ∈ gs.fwriters(l) → gs.pq(l) |W | t = [] ∧ gs.bq(t) |WL l = []), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used terms: l0, tid0
| ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], gs.fctr(l1) ≠ 0, gs.fctr(l0) ≠ 0, gs.fwriters(l0) ≠ ∅, gs.fwriters(l1) ≠ ∅, l1 ≠ l0, n0 < # gs.bq(tid0), n < # gs.bq(tid0), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), tid0 ∈ gs.fwriters(l1), tid0 ∈ gs.fwriters(l0), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), tid0 ∈ gs.fwriters(l0) → (∀ l1. l1 ≠ l0 → ¬ tid0 ∈ gs.fwriters(l1)), ¬ tid0 ∈ gs.fwriters(l0) → gs.pq(l0) |W | tid0 = [] ∧ gs.bq(tid0) |WL l0 = [], ∀ l, t. (t ∈ gs.fwriters(l) → (∀ l0. l0 ≠ l → ¬ t ∈ gs.fwriters(l0))) ∧ (¬ t ∈ gs.fwriters(l) → gs.pq(l) |W | t = [] ∧ gs.bq(t) |WL l = []), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], gs.fctr(l1) ≠ 0, gs.fctr(l0) ≠ 0, gs.fwriters(l0) ≠ ∅, gs.fwriters(l1) ≠ ∅, l1 ≠ l0, n < # gs.bq(tid0), n0 < # gs.bq(tid0), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), tid0 ∈ gs.fwriters(l0), tid0 ∈ gs.fwriters(l1), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ l, t. (t ∈ gs.fwriters(l) → (∀ l0. l0 ≠ l → ¬ t ∈ gs.fwriters(l0))) ∧ (¬ t ∈ gs.fwriters(l) → gs.pq(l) |W | t = [] ∧ gs.bq(t) |WL l = []), ∀ l1. l1 ≠ l0 → ¬ tid0 ∈ gs.fwriters(l1) ⊦
| ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], gs.fctr(l1) ≠ 0, gs.fctr(l0) ≠ 0, gs.fwriters(l0) ≠ ∅, gs.fwriters(l1) ≠ ∅, l1 ≠ l0, n < # gs.bq(tid0), n0 < # gs.bq(tid0), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), tid0 ∈ gs.fwriters(l0), tid0 ∈ gs.fwriters(l1), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ l, t. (t ∈ gs.fwriters(l) → (∀ l0. l0 ≠ l → ¬ t ∈ gs.fwriters(l0))) ∧ (¬ t ∈ gs.fwriters(l) → gs.pq(l) |W | t = [] ∧ gs.bq(t) |WL l = []), ∀ l1. l1 ≠ l0 → ¬ tid0 ∈ gs.fwriters(l1) ⊦ |
Used terms: l1
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], n < # gs.bq(tid0), n0 < # gs.bq(tid0), FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)) .rfo:= gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l0) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0) -p n)), ¬ tid0 ∈ gs.fwriters(l0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], n0 < # gs.bq(tid0), n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0) -p n), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0) -p n)), ¬ tid0 ∈ gs.fwriters(l0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], n0 < # gs.bq(tid0), n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0) -p n), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0) -p n)), ¬ tid0 ∈ gs.fwriters(l0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⊦ reorder(p, pq, rfo) ∧ isPropFO(n, l, rfo(t)) → reorder(p, pq(l := pq(l) + FO(t) '), rfo(t := rfo(t) -p n))
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], n < # gs.bq(tid0), n0 < # gs.bq(tid0), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0) -p n), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0) -p n)), ¬ tid0 ∈ gs.fwriters(l0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ reorder(ags.p, gs.pq, gs.rfo) ∧ isPropFO(n, l0, gs.rfo(tid0))
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: l0, gs.rfo, tid0, gs.pq, n, ags.p
| ⊦ reorder(p, pq, rfo) ∧ isPropFO(n, l, rfo(t)) → reorder(p, pq(l := pq(l) + FO(t) '), rfo(t := rfo(t) -p n)) |
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], n < # gs.bq(tid0), n0 < # gs.bq(tid0), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0) -p n), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0) -p n)), ¬ tid0 ∈ gs.fwriters(l0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ reorder(ags.p, gs.pq, gs.rfo) ∧ isPropFO(n, l0, gs.rfo(tid0)) |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], n0 < # gs.bq(tid0), n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0) -p n), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ isPropFO(n, l0, gs.rfo(tid0)), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0) -p n)), ¬ tid0 ∈ gs.fwriters(l0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], n0 < # gs.bq(tid0), n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0) -p n), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ isPropFO(n, l0, gs.rfo(tid0)), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0) -p n)), ¬ tid0 ∈ gs.fwriters(l0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⊦ FLITInv(gs, lsf, pcf) ↔ FLITGInv(gs) ∧ (∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)))
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], n < # gs.bq(tid0), n0 < # gs.bq(tid0), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0) -p n), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ isPropFO(n, l0, gs.rfo(tid0)), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0) -p n)), ¬ tid0 ∈ gs.fwriters(l0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦
Used terms: gs, lsf, pcf
| ⊦ FLITInv(gs, lsf, pcf) ↔ FLITGInv(gs) ∧ (∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t))) |
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], n < # gs.bq(tid0), n0 < # gs.bq(tid0), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0) -p n), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ isPropFO(n, l0, gs.rfo(tid0)), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0) -p n)), ¬ tid0 ∈ gs.fwriters(l0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(tid0).t = tid0, ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], n0 < # gs.bq(tid0), n < # gs.bq(tid0), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0) -p n), lsf, pcf), FLITLInv(gs, lsf(tid0), pcf(tid0)), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ isPropFO(n, l0, gs.rfo(tid0)), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0) -p n)), ¬ tid0 ∈ gs.fwriters(l0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used terms: tid0
| ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(tid0).t = tid0, ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], n0 < # gs.bq(tid0), n < # gs.bq(tid0), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0) -p n), lsf, pcf), FLITLInv(gs, lsf(tid0), pcf(tid0)), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ isPropFO(n, l0, gs.rfo(tid0)), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0) -p n)), ¬ tid0 ∈ gs.fwriters(l0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⊦ FLITLInv(gs, ls, pc) ↔ (pc = W1 ∨ pc = W2 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → notMember(ls.t, gs.freaders)) ∧ (pc = W1 ∨ pc = W2 ∨ pc = W7 → notMember(ls.t, gs.fwriters)) ∧ (pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 → oneMember(ls.t, ls.loc, gs.fwriters)) ∧ (pc = W1 ∨ pc = W2 → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = W3 ∨ pc = W7 → noPending(ls.t, gs.bq, gs.pq)) ∧ (pc = W5 ∨ pc = W6 → FOFollowsW(ls.t, gs.bq(ls.t), gs.pq(ls.loc), ls.loc)) ∧ (pc = W1 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W7 → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → gs.rfo(ls.t) = []) ∧ (pc = W3 → gs.bq(ls.t) = []) ∧ (pc = W4 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ') ∧ (pc = W5 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = FO(ls.loc) ' ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' + FO(ls.loc) ') ∧ (pc = W6 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = SF ' ∨ gs.bq(ls.t) = FO(ls.loc) ' + SF ' ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' + FO(ls.loc) ' + SF ') ∧ (pc = W4 ∨ pc = W5 ∨ pc = W6 → gs.bq(ls.t) ≠ [] ∧ gs.bq(ls.t).head.W? → gs.bq(ls.t).head = W(ls.loc, ls.val)) ∧ (pc = W1 ∨ pc = W7 → gs.rfo(ls.t) = gs.bq(ls.t)) ∧ (pc = W2 → gs.rfo(ls.t) = gs.bq(ls.t) ∨ gs.rfo(ls.t) + SF ' = gs.bq(ls.t)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → notMember(ls.t, gs.fwriters)) ∧ (pc = R1 ∨ pc = R4 → notMember(ls.t, gs.freaders)) ∧ (pc = R2 ∨ pc = R3 → oneMember(ls.t, ls.loc, gs.freaders)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → gs.rfo(ls.t) = gs.bq(ls.t)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → notMember(ls.t, gs.fwriters)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → notMember(ls.t, gs.freaders)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = idle ∨ pc = crashed → noPending(ls.t, gs.bq, gs.pq)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → gs.rfo(ls.t) = gs.bq(ls.t))
ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(tid0).t = tid0, ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], n < # gs.bq(tid0), n0 < # gs.bq(tid0), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0) -p n), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ isPropFO(n, l0, gs.rfo(tid0)), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0) -p n)), ¬ tid0 ∈ gs.fwriters(l0), pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W3 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → notMember(lsf(tid0).t, gs.freaders), pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W7 → notMember(lsf(tid0).t, gs.fwriters), pcf(tid0) = W3 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → oneMember(lsf(tid0).t, lsf(tid0).loc, gs.fwriters), pcf(tid0) = W1 ∨ pcf(tid0) = W2 → noPendingW(lsf(tid0).t, gs.bq, gs.pq), pcf(tid0) = W3 ∨ pcf(tid0) = W7 → noPending(lsf(tid0).t, gs.bq, gs.pq), pcf(tid0) = W5 ∨ pcf(tid0) = W6 → FOFollowsW(lsf(tid0).t, gs.bq(lsf(tid0).t), gs.pq(lsf(tid0).loc), lsf(tid0).loc), pcf(tid0) = W1 ∨ pcf(tid0) = W3 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W7 → ¬ SF ∈ gs.bq(lsf(tid0).t), pcf(tid0) = W3 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → gs.rfo(lsf(tid0).t) = [], pcf(tid0) = W3 → gs.bq(lsf(tid0).t) = [], pcf(tid0) = W4 → gs.bq(lsf(tid0).t) = [] ∨ gs.bq(lsf(tid0).t) = W(lsf(tid0).loc, lsf(tid0).val) ', pcf(tid0) = W5 → gs.bq(lsf(tid0).t) = [] ∨ gs.bq(lsf(tid0).t) = FO(lsf(tid0).loc) ' ∨ gs.bq(lsf(tid0).t) = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ', pcf(tid0) = W6 → gs.bq(lsf(tid0).t) = [] ∨ gs.bq(lsf(tid0).t) = SF ' ∨ gs.bq(lsf(tid0).t) = FO(lsf(tid0).loc) ' + SF ' ∨ gs.bq(lsf(tid0).t) = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ', pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → gs.bq(lsf(tid0).t) ≠ [] ∧ gs.bq(lsf(tid0).t).head.W? → gs.bq(lsf(tid0).t).head = W(lsf(tid0).loc, lsf(tid0).val), pcf(tid0) = W1 ∨ pcf(tid0) = W7 → gs.rfo(lsf(tid0).t) = gs.bq(lsf(tid0).t), pcf(tid0) = W2 → gs.rfo(lsf(tid0).t) = gs.bq(lsf(tid0).t) ∨ gs.rfo(lsf(tid0).t) + SF ' = gs.bq(lsf(tid0).t), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → noPendingW(lsf(tid0).t, gs.bq, gs.pq), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → notMember(lsf(tid0).t, gs.fwriters), pcf(tid0) = R1 ∨ pcf(tid0) = R4 → notMember(lsf(tid0).t, gs.freaders), pcf(tid0) = R2 ∨ pcf(tid0) = R3 → oneMember(lsf(tid0).t, lsf(tid0).loc, gs.freaders), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → ¬ SF ∈ gs.bq(lsf(tid0).t), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → gs.rfo(lsf(tid0).t) = gs.bq(lsf(tid0).t), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → notMember(lsf(tid0).t, gs.fwriters), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → notMember(lsf(tid0).t, gs.freaders), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → noPendingW(lsf(tid0).t, gs.bq, gs.pq), pcf(tid0) = idle ∨ pcf(tid0) = crashed → noPending(lsf(tid0).t, gs.bq, gs.pq), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → ¬ SF ∈ gs.bq(lsf(tid0).t), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → gs.rfo(lsf(tid0).t) = gs.bq(lsf(tid0).t), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used terms: gs, lsf(tid0), pcf(tid0)
| ⊦ FLITLInv(gs, ls, pc) ↔ (pc = W1 ∨ pc = W2 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → notMember(ls.t, gs.freaders)) ∧ (pc = W1 ∨ pc = W2 ∨ pc = W7 → notMember(ls.t, gs.fwriters)) ∧ (pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 → oneMember(ls.t, ls.loc, gs.fwriters)) ∧ (pc = W1 ∨ pc = W2 → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = W3 ∨ pc = W7 → noPending(ls.t, gs.bq, gs.pq)) ∧ (pc = W5 ∨ pc = W6 → FOFollowsW(ls.t, gs.bq(ls.t), gs.pq(ls.loc), ls.loc)) ∧ (pc = W1 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W7 → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → gs.rfo(ls.t) = []) ∧ (pc = W3 → gs.bq(ls.t) = []) ∧ (pc = W4 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ') ∧ (pc = W5 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = FO(ls.loc) ' ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' + FO(ls.loc) ') ∧ (pc = W6 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = SF ' ∨ gs.bq(ls.t) = FO(ls.loc) ' + SF ' ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' + FO(ls.loc) ' + SF ') ∧ (pc = W4 ∨ pc = W5 ∨ pc = W6 → gs.bq(ls.t) ≠ [] ∧ gs.bq(ls.t).head.W? → gs.bq(ls.t).head = W(ls.loc, ls.val)) ∧ (pc = W1 ∨ pc = W7 → gs.rfo(ls.t) = gs.bq(ls.t)) ∧ (pc = W2 → gs.rfo(ls.t) = gs.bq(ls.t) ∨ gs.rfo(ls.t) + SF ' = gs.bq(ls.t)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → notMember(ls.t, gs.fwriters)) ∧ (pc = R1 ∨ pc = R4 → notMember(ls.t, gs.freaders)) ∧ (pc = R2 ∨ pc = R3 → oneMember(ls.t, ls.loc, gs.freaders)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → gs.rfo(ls.t) = gs.bq(ls.t)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → notMember(ls.t, gs.fwriters)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → notMember(ls.t, gs.freaders)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = idle ∨ pc = crashed → noPending(ls.t, gs.bq, gs.pq)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → gs.rfo(ls.t) = gs.bq(ls.t)) |
| ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(tid0).t = tid0, ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], n < # gs.bq(tid0), n0 < # gs.bq(tid0), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0) -p n), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ isPropFO(n, l0, gs.rfo(tid0)), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0) -p n)), ¬ tid0 ∈ gs.fwriters(l0), pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W3 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → notMember(lsf(tid0).t, gs.freaders), pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W7 → notMember(lsf(tid0).t, gs.fwriters), pcf(tid0) = W3 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → oneMember(lsf(tid0).t, lsf(tid0).loc, gs.fwriters), pcf(tid0) = W1 ∨ pcf(tid0) = W2 → noPendingW(lsf(tid0).t, gs.bq, gs.pq), pcf(tid0) = W3 ∨ pcf(tid0) = W7 → noPending(lsf(tid0).t, gs.bq, gs.pq), pcf(tid0) = W5 ∨ pcf(tid0) = W6 → FOFollowsW(lsf(tid0).t, gs.bq(lsf(tid0).t), gs.pq(lsf(tid0).loc), lsf(tid0).loc), pcf(tid0) = W1 ∨ pcf(tid0) = W3 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W7 → ¬ SF ∈ gs.bq(lsf(tid0).t), pcf(tid0) = W3 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → gs.rfo(lsf(tid0).t) = [], pcf(tid0) = W3 → gs.bq(lsf(tid0).t) = [], pcf(tid0) = W4 → gs.bq(lsf(tid0).t) = [] ∨ gs.bq(lsf(tid0).t) = W(lsf(tid0).loc, lsf(tid0).val) ', pcf(tid0) = W5 → gs.bq(lsf(tid0).t) = [] ∨ gs.bq(lsf(tid0).t) = FO(lsf(tid0).loc) ' ∨ gs.bq(lsf(tid0).t) = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ', pcf(tid0) = W6 → gs.bq(lsf(tid0).t) = [] ∨ gs.bq(lsf(tid0).t) = SF ' ∨ gs.bq(lsf(tid0).t) = FO(lsf(tid0).loc) ' + SF ' ∨ gs.bq(lsf(tid0).t) = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ', pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → gs.bq(lsf(tid0).t) ≠ [] ∧ gs.bq(lsf(tid0).t).head.W? → gs.bq(lsf(tid0).t).head = W(lsf(tid0).loc, lsf(tid0).val), pcf(tid0) = W1 ∨ pcf(tid0) = W7 → gs.rfo(lsf(tid0).t) = gs.bq(lsf(tid0).t), pcf(tid0) = W2 → gs.rfo(lsf(tid0).t) = gs.bq(lsf(tid0).t) ∨ gs.rfo(lsf(tid0).t) + SF ' = gs.bq(lsf(tid0).t), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → noPendingW(lsf(tid0).t, gs.bq, gs.pq), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → notMember(lsf(tid0).t, gs.fwriters), pcf(tid0) = R1 ∨ pcf(tid0) = R4 → notMember(lsf(tid0).t, gs.freaders), pcf(tid0) = R2 ∨ pcf(tid0) = R3 → oneMember(lsf(tid0).t, lsf(tid0).loc, gs.freaders), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → ¬ SF ∈ gs.bq(lsf(tid0).t), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → gs.rfo(lsf(tid0).t) = gs.bq(lsf(tid0).t), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → notMember(lsf(tid0).t, gs.fwriters), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → notMember(lsf(tid0).t, gs.freaders), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → noPendingW(lsf(tid0).t, gs.bq, gs.pq), pcf(tid0) = idle ∨ pcf(tid0) = crashed → noPending(lsf(tid0).t, gs.bq, gs.pq), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → ¬ SF ∈ gs.bq(lsf(tid0).t), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → gs.rfo(lsf(tid0).t) = gs.bq(lsf(tid0).t), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(tid0).t = tid0, ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], pcf(tid0) ≠ W3, n < # gs.bq(tid0), n0 < # gs.bq(tid0), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0) -p n), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ isPropFO(n, l0, gs.rfo(tid0)), ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0) -p n)), ¬ tid0 ∈ gs.fwriters(l0), pcf(tid0) = W1 ∨ pcf(tid0) = W7 → gs.rfo(tid0) = gs.bq(tid0), pcf(tid0) = W2 → gs.rfo(tid0) = gs.bq(tid0) ∨ gs.rfo(tid0) + SF ' = gs.bq(tid0), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → notMember(tid0, gs.fwriters), pcf(tid0) = R1 ∨ pcf(tid0) = R4 → notMember(tid0, gs.freaders), pcf(tid0) = R2 ∨ pcf(tid0) = R3 → oneMember(tid0, lsf(tid0).loc, gs.freaders), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → ¬ SF ∈ gs.bq(tid0), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → gs.rfo(tid0) = gs.bq(tid0), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → notMember(tid0, gs.fwriters), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → notMember(tid0, gs.freaders), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = idle ∨ pcf(tid0) = crashed → noPending(tid0, gs.bq, gs.pq), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → ¬ SF ∈ gs.bq(tid0), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → gs.rfo(tid0) = gs.bq(tid0), pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W7 → notMember(tid0, gs.fwriters), pcf(tid0) = W1 ∨ pcf(tid0) = W2 → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = W5 ∨ pcf(tid0) = W6 → FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), pcf(tid0) = W4 → gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ', pcf(tid0) = W5 → gs.bq(tid0) = FO(lsf(tid0).loc) ' ∨ gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ', pcf(tid0) = W6 → gs.bq(tid0) = SF ' ∨ gs.bq(tid0) = FO(lsf(tid0).loc) ' + SF ' ∨ gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ', pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → gs.bq(tid0).head.W? → gs.bq(tid0).head = W(lsf(tid0).loc, lsf(tid0).val), pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → notMember(tid0, gs.freaders), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → oneMember(tid0, lsf(tid0).loc, gs.fwriters), pcf(tid0) = W7 → noPending(tid0, gs.bq, gs.pq), pcf(tid0) = W1 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W7 → ¬ SF ∈ gs.bq(tid0), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → gs.rfo(tid0) = [], ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(tid0).t = tid0, ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], pcf(tid0) ≠ W3, n < # gs.bq(tid0), n0 < # gs.bq(tid0), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0) -p n), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ isPropFO(n, l0, gs.rfo(tid0)), ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0) -p n)), ¬ tid0 ∈ gs.fwriters(l0), pcf(tid0) = W1 ∨ pcf(tid0) = W7 → gs.rfo(tid0) = gs.bq(tid0), pcf(tid0) = W2 → gs.rfo(tid0) = gs.bq(tid0) ∨ gs.rfo(tid0) + SF ' = gs.bq(tid0), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → notMember(tid0, gs.fwriters), pcf(tid0) = R1 ∨ pcf(tid0) = R4 → notMember(tid0, gs.freaders), pcf(tid0) = R2 ∨ pcf(tid0) = R3 → oneMember(tid0, lsf(tid0).loc, gs.freaders), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → ¬ SF ∈ gs.bq(tid0), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → gs.rfo(tid0) = gs.bq(tid0), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → notMember(tid0, gs.fwriters), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → notMember(tid0, gs.freaders), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = idle ∨ pcf(tid0) = crashed → noPending(tid0, gs.bq, gs.pq), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → ¬ SF ∈ gs.bq(tid0), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → gs.rfo(tid0) = gs.bq(tid0), pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W7 → notMember(tid0, gs.fwriters), pcf(tid0) = W1 ∨ pcf(tid0) = W2 → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = W5 ∨ pcf(tid0) = W6 → FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), pcf(tid0) = W4 → gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ', pcf(tid0) = W5 → gs.bq(tid0) = FO(lsf(tid0).loc) ' ∨ gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ', pcf(tid0) = W6 → gs.bq(tid0) = SF ' ∨ gs.bq(tid0) = FO(lsf(tid0).loc) ' + SF ' ∨ gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ', pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → gs.bq(tid0).head.W? → gs.bq(tid0).head = W(lsf(tid0).loc, lsf(tid0).val), pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → notMember(tid0, gs.freaders), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → oneMember(tid0, lsf(tid0).loc, gs.fwriters), pcf(tid0) = W7 → noPending(tid0, gs.bq, gs.pq), pcf(tid0) = W1 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W7 → ¬ SF ∈ gs.bq(tid0), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → gs.rfo(tid0) = [], ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
gs.bq(tid0) = head + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(tid0).t = tid0, ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], pcf(tid0) ≠ W3, n0 < # gs.bq(tid0), n < # gs.bq(tid0), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0) -p n), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ isPropFO(n, l0, gs.rfo(tid0)), ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0) -p n)), ¬ tid0 ∈ gs.fwriters(l0), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → gs.rfo(tid0) = [], pcf(tid0) = W1 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W7 → ¬ SF ∈ gs.bq(tid0), pcf(tid0) = W7 → noPending(tid0, gs.bq, gs.pq), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → oneMember(tid0, lsf(tid0).loc, gs.fwriters), pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → notMember(tid0, gs.freaders), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → head.W? → head = W(lsf(tid0).loc, lsf(tid0).val), pcf(tid0) = W6 → gs.bq(tid0) = SF ' ∨ gs.bq(tid0) = FO(lsf(tid0).loc) ' + SF ' ∨ gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ', pcf(tid0) = W5 → gs.bq(tid0) = FO(lsf(tid0).loc) ' ∨ gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ', pcf(tid0) = W4 → gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ', pcf(tid0) = W5 ∨ pcf(tid0) = W6 → FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), pcf(tid0) = W1 ∨ pcf(tid0) = W2 → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W7 → notMember(tid0, gs.fwriters), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → gs.rfo(tid0) = gs.bq(tid0), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → ¬ SF ∈ gs.bq(tid0), pcf(tid0) = idle ∨ pcf(tid0) = crashed → noPending(tid0, gs.bq, gs.pq), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → notMember(tid0, gs.freaders), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → notMember(tid0, gs.fwriters), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → gs.rfo(tid0) = gs.bq(tid0), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → ¬ SF ∈ gs.bq(tid0), pcf(tid0) = R2 ∨ pcf(tid0) = R3 → oneMember(tid0, lsf(tid0).loc, gs.freaders), pcf(tid0) = R1 ∨ pcf(tid0) = R4 → notMember(tid0, gs.freaders), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → notMember(tid0, gs.fwriters), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = W2 → gs.rfo(tid0) = gs.bq(tid0) ∨ gs.rfo(tid0) + SF ' = gs.bq(tid0), pcf(tid0) = W1 ∨ pcf(tid0) = W7 → gs.rfo(tid0) = gs.bq(tid0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: ⊦ x ≠ [] → (head = x.head ∧ tail = x.tail ↔ x = head + tail); (elim) Used terms: gs.bq(tid0), head, bel
| gs.bq(tid0) = head + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(tid0).t = tid0, ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], pcf(tid0) ≠ W3, n0 < # gs.bq(tid0), n < # gs.bq(tid0), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0) -p n), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ isPropFO(n, l0, gs.rfo(tid0)), ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0) -p n)), ¬ tid0 ∈ gs.fwriters(l0), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → gs.rfo(tid0) = [], pcf(tid0) = W1 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W7 → ¬ SF ∈ gs.bq(tid0), pcf(tid0) = W7 → noPending(tid0, gs.bq, gs.pq), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → oneMember(tid0, lsf(tid0).loc, gs.fwriters), pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → notMember(tid0, gs.freaders), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → head.W? → head = W(lsf(tid0).loc, lsf(tid0).val), pcf(tid0) = W6 → gs.bq(tid0) = SF ' ∨ gs.bq(tid0) = FO(lsf(tid0).loc) ' + SF ' ∨ gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ', pcf(tid0) = W5 → gs.bq(tid0) = FO(lsf(tid0).loc) ' ∨ gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ', pcf(tid0) = W4 → gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ', pcf(tid0) = W5 ∨ pcf(tid0) = W6 → FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), pcf(tid0) = W1 ∨ pcf(tid0) = W2 → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W7 → notMember(tid0, gs.fwriters), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → gs.rfo(tid0) = gs.bq(tid0), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → ¬ SF ∈ gs.bq(tid0), pcf(tid0) = idle ∨ pcf(tid0) = crashed → noPending(tid0, gs.bq, gs.pq), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → notMember(tid0, gs.freaders), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → notMember(tid0, gs.fwriters), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → gs.rfo(tid0) = gs.bq(tid0), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → ¬ SF ∈ gs.bq(tid0), pcf(tid0) = R2 ∨ pcf(tid0) = R3 → oneMember(tid0, lsf(tid0).loc, gs.freaders), pcf(tid0) = R1 ∨ pcf(tid0) = R4 → notMember(tid0, gs.freaders), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → notMember(tid0, gs.fwriters), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = W2 → gs.rfo(tid0) = gs.bq(tid0) ∨ gs.rfo(tid0) + SF ' = gs.bq(tid0), pcf(tid0) = W1 ∨ pcf(tid0) = W7 → gs.rfo(tid0) = gs.bq(tid0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
gs.bq(tid0) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) ≠ W3, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (head ' + bel) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0) -p n), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, head ' + bel), isPropFO(n0, l0, head ' + bel), reorder(ags.p, gs.pq, gs.rfo), n ≤ # bel, n0 ≤ # bel, ¬ isPropFO(n, l0, gs.rfo(tid0)), ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0) -p n)), ¬ tid0 ∈ gs.fwriters(l0), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → SF ≠ head ∧ ¬ SF ∈ bel, pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → SF ≠ head ∧ ¬ SF ∈ bel, pcf(tid0) = W1 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W7 → SF ≠ head ∧ ¬ SF ∈ bel, pcf(tid0) = W1 ∨ pcf(tid0) = W7 → gs.rfo(tid0) = head ' + bel, pcf(tid0) = W2 → gs.rfo(tid0) = head ' + bel ∨ gs.rfo(tid0) + SF ' = head ' + bel, pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → notMember(tid0, gs.fwriters), pcf(tid0) = R1 ∨ pcf(tid0) = R4 → notMember(tid0, gs.freaders), pcf(tid0) = R2 ∨ pcf(tid0) = R3 → oneMember(tid0, lsf(tid0).loc, gs.freaders), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → gs.rfo(tid0) = head ' + bel, pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → notMember(tid0, gs.fwriters), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → notMember(tid0, gs.freaders), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = idle ∨ pcf(tid0) = crashed → noPending(tid0, gs.bq, gs.pq), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → gs.rfo(tid0) = head ' + bel, pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W7 → notMember(tid0, gs.fwriters), pcf(tid0) = W1 ∨ pcf(tid0) = W2 → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = W5 ∨ pcf(tid0) = W6 → FOFollowsW(tid0, head ' + bel, gs.pq(lsf(tid0).loc), lsf(tid0).loc), pcf(tid0) = W4 → head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ', pcf(tid0) = W5 → head ' + bel = FO(lsf(tid0).loc) ' ∨ head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ', pcf(tid0) = W6 → head ' + bel = SF ' ∨ head ' + bel = FO(lsf(tid0).loc) ' + SF ' ∨ head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ', pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → head.W? → head = W(lsf(tid0).loc, lsf(tid0).val), pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → notMember(tid0, gs.freaders), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → oneMember(tid0, lsf(tid0).loc, gs.fwriters), pcf(tid0) = W7 → noPending(tid0, gs.bq, gs.pq), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → gs.rfo(tid0) = [], ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a ∈ a0 ' + x ↔ a = a0 ∨ a ∈ x; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ m +1 = m + 1; (s) ⊦ #(a ' + x) = (# x)+1; (s) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ m + 1 ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ a + x = a ' + x; (s)
| gs.bq(tid0) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) ≠ W3, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (head ' + bel) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0) -p n), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, head ' + bel), isPropFO(n0, l0, head ' + bel), reorder(ags.p, gs.pq, gs.rfo), n ≤ # bel, n0 ≤ # bel, ¬ isPropFO(n, l0, gs.rfo(tid0)), ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0) -p n)), ¬ tid0 ∈ gs.fwriters(l0), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → SF ≠ head ∧ ¬ SF ∈ bel, pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → SF ≠ head ∧ ¬ SF ∈ bel, pcf(tid0) = W1 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W7 → SF ≠ head ∧ ¬ SF ∈ bel, pcf(tid0) = W1 ∨ pcf(tid0) = W7 → gs.rfo(tid0) = head ' + bel, pcf(tid0) = W2 → gs.rfo(tid0) = head ' + bel ∨ gs.rfo(tid0) + SF ' = head ' + bel, pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → notMember(tid0, gs.fwriters), pcf(tid0) = R1 ∨ pcf(tid0) = R4 → notMember(tid0, gs.freaders), pcf(tid0) = R2 ∨ pcf(tid0) = R3 → oneMember(tid0, lsf(tid0).loc, gs.freaders), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → gs.rfo(tid0) = head ' + bel, pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → notMember(tid0, gs.fwriters), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → notMember(tid0, gs.freaders), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = idle ∨ pcf(tid0) = crashed → noPending(tid0, gs.bq, gs.pq), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → gs.rfo(tid0) = head ' + bel, pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W7 → notMember(tid0, gs.fwriters), pcf(tid0) = W1 ∨ pcf(tid0) = W2 → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = W5 ∨ pcf(tid0) = W6 → FOFollowsW(tid0, head ' + bel, gs.pq(lsf(tid0).loc), lsf(tid0).loc), pcf(tid0) = W4 → head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ', pcf(tid0) = W5 → head ' + bel = FO(lsf(tid0).loc) ' ∨ head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ', pcf(tid0) = W6 → head ' + bel = SF ' ∨ head ' + bel = FO(lsf(tid0).loc) ' + SF ' ∨ head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ', pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → head.W? → head = W(lsf(tid0).loc, lsf(tid0).val), pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → notMember(tid0, gs.freaders), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → oneMember(tid0, lsf(tid0).loc, gs.fwriters), pcf(tid0) = W7 → noPending(tid0, gs.bq, gs.pq), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → gs.rfo(tid0) = [], ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
gs.bq(tid0) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W2, pcf(tid0) ≠ W3, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (head ' + bel) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0) -p n), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, head ' + bel), isPropFO(n, l0, head ' + bel), reorder(ags.p, gs.pq, gs.rfo), n0 ≤ # bel, n ≤ # bel, ¬ isPropFO(n, l0, gs.rfo(tid0)), ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0) -p n)), ¬ tid0 ∈ gs.fwriters(l0), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → gs.rfo(tid0) = [], pcf(tid0) = W7 → noPending(tid0, gs.bq, gs.pq), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → oneMember(tid0, lsf(tid0).loc, gs.fwriters), pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → notMember(tid0, gs.freaders), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → head.W? → head = W(lsf(tid0).loc, lsf(tid0).val), pcf(tid0) = W6 → head ' + bel = SF ' ∨ head ' + bel = FO(lsf(tid0).loc) ' + SF ' ∨ head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ', pcf(tid0) = W5 → head ' + bel = FO(lsf(tid0).loc) ' ∨ head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ', pcf(tid0) = W4 → head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ', pcf(tid0) = W5 ∨ pcf(tid0) = W6 → FOFollowsW(tid0, head ' + bel, gs.pq(lsf(tid0).loc), lsf(tid0).loc), pcf(tid0) = W1 ∨ pcf(tid0) = W2 → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W7 → notMember(tid0, gs.fwriters), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → gs.rfo(tid0) = head ' + bel, pcf(tid0) = idle ∨ pcf(tid0) = crashed → noPending(tid0, gs.bq, gs.pq), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → notMember(tid0, gs.freaders), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → notMember(tid0, gs.fwriters), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → gs.rfo(tid0) = head ' + bel, pcf(tid0) = R2 ∨ pcf(tid0) = R3 → oneMember(tid0, lsf(tid0).loc, gs.freaders), pcf(tid0) = R1 ∨ pcf(tid0) = R4 → notMember(tid0, gs.freaders), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → notMember(tid0, gs.fwriters), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = W2 → gs.rfo(tid0) = head ' + bel ∨ gs.rfo(tid0) + SF ' = head ' + bel, pcf(tid0) = W1 ∨ pcf(tid0) = W7 → gs.rfo(tid0) = head ' + bel, pcf(tid0) = W1 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W7 → SF ≠ head ∧ ¬ SF ∈ bel, pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → SF ≠ head ∧ ¬ SF ∈ bel, pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → SF ≠ head ∧ ¬ SF ∈ bel, ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
gs.bq(tid0) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W4, pcf(tid0) ≠ W3, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (head ' + bel) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0) -p n), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, head ' + bel), isPropFO(n, l0, head ' + bel), reorder(ags.p, gs.pq, gs.rfo), n0 ≤ # bel, n ≤ # bel, ¬ isPropFO(n, l0, gs.rfo(tid0)), ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0) -p n)), ¬ tid0 ∈ gs.fwriters(l0), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → gs.rfo(tid0) = [], pcf(tid0) = W7 → noPending(tid0, gs.bq, gs.pq), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → oneMember(tid0, lsf(tid0).loc, gs.fwriters), pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → notMember(tid0, gs.freaders), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → head.W? → head = W(lsf(tid0).loc, lsf(tid0).val), pcf(tid0) = W6 → head ' + bel = SF ' ∨ head ' + bel = FO(lsf(tid0).loc) ' + SF ' ∨ head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ', pcf(tid0) = W5 → head ' + bel = FO(lsf(tid0).loc) ' ∨ head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ', pcf(tid0) = W4 → head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ', pcf(tid0) = W5 ∨ pcf(tid0) = W6 → FOFollowsW(tid0, head ' + bel, gs.pq(lsf(tid0).loc), lsf(tid0).loc), pcf(tid0) = W1 ∨ pcf(tid0) = W2 → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W7 → notMember(tid0, gs.fwriters), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → gs.rfo(tid0) = head ' + bel, pcf(tid0) = idle ∨ pcf(tid0) = crashed → noPending(tid0, gs.bq, gs.pq), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → notMember(tid0, gs.freaders), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → notMember(tid0, gs.fwriters), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → gs.rfo(tid0) = head ' + bel, pcf(tid0) = R2 ∨ pcf(tid0) = R3 → oneMember(tid0, lsf(tid0).loc, gs.freaders), pcf(tid0) = R1 ∨ pcf(tid0) = R4 → notMember(tid0, gs.freaders), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → notMember(tid0, gs.fwriters), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = W2 → gs.rfo(tid0) = head ' + bel ∨ gs.rfo(tid0) + SF ' = head ' + bel, pcf(tid0) = W1 ∨ pcf(tid0) = W7 → gs.rfo(tid0) = head ' + bel, pcf(tid0) = W1 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W7 → SF ≠ head ∧ ¬ SF ∈ bel, pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → SF ≠ head ∧ ¬ SF ∈ bel, pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → SF ≠ head ∧ ¬ SF ∈ bel, ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
gs.bq(tid0) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W5, pcf(tid0) ≠ W3, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (head ' + bel) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0) -p n), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, head ' + bel), isPropFO(n, l0, head ' + bel), reorder(ags.p, gs.pq, gs.rfo), n0 ≤ # bel, n ≤ # bel, ¬ isPropFO(n, l0, gs.rfo(tid0)), ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0) -p n)), ¬ tid0 ∈ gs.fwriters(l0), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → gs.rfo(tid0) = [], pcf(tid0) = W7 → noPending(tid0, gs.bq, gs.pq), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → oneMember(tid0, lsf(tid0).loc, gs.fwriters), pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → notMember(tid0, gs.freaders), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → head.W? → head = W(lsf(tid0).loc, lsf(tid0).val), pcf(tid0) = W6 → head ' + bel = SF ' ∨ head ' + bel = FO(lsf(tid0).loc) ' + SF ' ∨ head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ', pcf(tid0) = W5 → head ' + bel = FO(lsf(tid0).loc) ' ∨ head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ', pcf(tid0) = W4 → head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ', pcf(tid0) = W5 ∨ pcf(tid0) = W6 → FOFollowsW(tid0, head ' + bel, gs.pq(lsf(tid0).loc), lsf(tid0).loc), pcf(tid0) = W1 ∨ pcf(tid0) = W2 → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W7 → notMember(tid0, gs.fwriters), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → gs.rfo(tid0) = head ' + bel, pcf(tid0) = idle ∨ pcf(tid0) = crashed → noPending(tid0, gs.bq, gs.pq), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → notMember(tid0, gs.freaders), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → notMember(tid0, gs.fwriters), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → gs.rfo(tid0) = head ' + bel, pcf(tid0) = R2 ∨ pcf(tid0) = R3 → oneMember(tid0, lsf(tid0).loc, gs.freaders), pcf(tid0) = R1 ∨ pcf(tid0) = R4 → notMember(tid0, gs.freaders), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → notMember(tid0, gs.fwriters), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = W2 → gs.rfo(tid0) = head ' + bel ∨ gs.rfo(tid0) + SF ' = head ' + bel, pcf(tid0) = W1 ∨ pcf(tid0) = W7 → gs.rfo(tid0) = head ' + bel, pcf(tid0) = W1 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W7 → SF ≠ head ∧ ¬ SF ∈ bel, pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → SF ≠ head ∧ ¬ SF ∈ bel, pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → SF ≠ head ∧ ¬ SF ∈ bel, ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
gs.bq(tid0) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, pcf(tid0) ≠ W3, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (head ' + bel) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0) -p n), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, head ' + bel), isPropFO(n, l0, head ' + bel), reorder(ags.p, gs.pq, gs.rfo), n0 ≤ # bel, n ≤ # bel, ¬ isPropFO(n, l0, gs.rfo(tid0)), ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0) -p n)), ¬ tid0 ∈ gs.fwriters(l0), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → gs.rfo(tid0) = [], pcf(tid0) = W7 → noPending(tid0, gs.bq, gs.pq), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → oneMember(tid0, lsf(tid0).loc, gs.fwriters), pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → notMember(tid0, gs.freaders), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → head.W? → head = W(lsf(tid0).loc, lsf(tid0).val), pcf(tid0) = W6 → head ' + bel = SF ' ∨ head ' + bel = FO(lsf(tid0).loc) ' + SF ' ∨ head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ', pcf(tid0) = W5 → head ' + bel = FO(lsf(tid0).loc) ' ∨ head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ', pcf(tid0) = W4 → head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ', pcf(tid0) = W5 ∨ pcf(tid0) = W6 → FOFollowsW(tid0, head ' + bel, gs.pq(lsf(tid0).loc), lsf(tid0).loc), pcf(tid0) = W1 ∨ pcf(tid0) = W2 → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W7 → notMember(tid0, gs.fwriters), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → gs.rfo(tid0) = head ' + bel, pcf(tid0) = idle ∨ pcf(tid0) = crashed → noPending(tid0, gs.bq, gs.pq), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → notMember(tid0, gs.freaders), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → notMember(tid0, gs.fwriters), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → gs.rfo(tid0) = head ' + bel, pcf(tid0) = R2 ∨ pcf(tid0) = R3 → oneMember(tid0, lsf(tid0).loc, gs.freaders), pcf(tid0) = R1 ∨ pcf(tid0) = R4 → notMember(tid0, gs.freaders), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → notMember(tid0, gs.fwriters), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = W2 → gs.rfo(tid0) = head ' + bel ∨ gs.rfo(tid0) + SF ' = head ' + bel, pcf(tid0) = W1 ∨ pcf(tid0) = W7 → gs.rfo(tid0) = head ' + bel, pcf(tid0) = W1 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W7 → SF ≠ head ∧ ¬ SF ∈ bel, pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → SF ≠ head ∧ ¬ SF ∈ bel, pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → SF ≠ head ∧ ¬ SF ∈ bel, ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: FLITPC freely generated by R1, R2, R3, R4, W1, W2, W3, W4, W5, W6, W7, crashed, idle, ready ;; ⊦ notMember(t, tsf) → ¬ oneMember(t, l, tsf); (as) in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ oneMember(t, l, tsf) → ¬ notMember(t, tsf); (as)
| gs.bq(tid0) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W2, pcf(tid0) ≠ W3, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (head ' + bel) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0) -p n), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, head ' + bel), isPropFO(n, l0, head ' + bel), reorder(ags.p, gs.pq, gs.rfo), n0 ≤ # bel, n ≤ # bel, ¬ isPropFO(n, l0, gs.rfo(tid0)), ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0) -p n)), ¬ tid0 ∈ gs.fwriters(l0), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → gs.rfo(tid0) = [], pcf(tid0) = W7 → noPending(tid0, gs.bq, gs.pq), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → oneMember(tid0, lsf(tid0).loc, gs.fwriters), pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → notMember(tid0, gs.freaders), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → head.W? → head = W(lsf(tid0).loc, lsf(tid0).val), pcf(tid0) = W6 → head ' + bel = SF ' ∨ head ' + bel = FO(lsf(tid0).loc) ' + SF ' ∨ head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ', pcf(tid0) = W5 → head ' + bel = FO(lsf(tid0).loc) ' ∨ head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ', pcf(tid0) = W4 → head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ', pcf(tid0) = W5 ∨ pcf(tid0) = W6 → FOFollowsW(tid0, head ' + bel, gs.pq(lsf(tid0).loc), lsf(tid0).loc), pcf(tid0) = W1 ∨ pcf(tid0) = W2 → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W7 → notMember(tid0, gs.fwriters), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → gs.rfo(tid0) = head ' + bel, pcf(tid0) = idle ∨ pcf(tid0) = crashed → noPending(tid0, gs.bq, gs.pq), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → notMember(tid0, gs.freaders), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → notMember(tid0, gs.fwriters), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → gs.rfo(tid0) = head ' + bel, pcf(tid0) = R2 ∨ pcf(tid0) = R3 → oneMember(tid0, lsf(tid0).loc, gs.freaders), pcf(tid0) = R1 ∨ pcf(tid0) = R4 → notMember(tid0, gs.freaders), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → notMember(tid0, gs.fwriters), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = W2 → gs.rfo(tid0) = head ' + bel ∨ gs.rfo(tid0) + SF ' = head ' + bel, pcf(tid0) = W1 ∨ pcf(tid0) = W7 → gs.rfo(tid0) = head ' + bel, pcf(tid0) = W1 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W7 → SF ≠ head ∧ ¬ SF ∈ bel, pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → SF ≠ head ∧ ¬ SF ∈ bel, pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → SF ≠ head ∧ ¬ SF ∈ bel, ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
gs.bq(tid0) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W2, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (head ' + bel) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0) -p n), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, head ' + bel), isPropFO(n, l0, head ' + bel), noPendingW(tid0, gs.bq, gs.pq), notMember(tid0, gs.freaders), notMember(tid0, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n0 ≤ # bel, n ≤ # bel, ¬ isPropFO(n, l0, gs.rfo(tid0)), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0) -p n)), ¬ tid0 ∈ gs.fwriters(l0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), gs.rfo(tid0) = head ' + bel ∨ gs.rfo(tid0) + SF ' = head ' + bel ⊦
Used simplifier rules: ⊦ W2 ≠ crashed; (s) ⊦ W2 ≠ idle; (s) ⊦ W2 ≠ ready; (s) ⊦ W2 ≠ W7; (s) ⊦ W1 ≠ W2; (s) ⊦ R4 ≠ W2; (s) ⊦ R1 ≠ W2; (s) ⊦ W2 ≠ W3; (s) ⊦ W2 ≠ W4; (s) ⊦ W2 ≠ W5; (s) ⊦ W2 ≠ W6; (s) ⊦ R2 ≠ W2; (s) ⊦ R3 ≠ W2; (s) ⊦ notMember(t, tsf) → ¬ oneMember(t, l, tsf); (as)
| gs.bq(tid0) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W2, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (head ' + bel) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0) -p n), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, head ' + bel), isPropFO(n, l0, head ' + bel), noPendingW(tid0, gs.bq, gs.pq), notMember(tid0, gs.freaders), notMember(tid0, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n0 ≤ # bel, n ≤ # bel, ¬ isPropFO(n, l0, gs.rfo(tid0)), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0) -p n)), ¬ tid0 ∈ gs.fwriters(l0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), gs.rfo(tid0) = head ' + bel ∨ gs.rfo(tid0) + SF ' = head ' + bel ⊦ |
gs.rfo(tid0) + SF ' = head ' + bel, gs.bq(tid0) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W2, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (head ' + bel) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0) -p n), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, head ' + bel), isPropFO(n0, l0, head ' + bel), noPendingW(tid0, gs.bq, gs.pq), notMember(tid0, gs.fwriters), notMember(tid0, gs.freaders), reorder(ags.p, gs.pq, gs.rfo), n ≤ # bel, n0 ≤ # bel, ¬ isPropFO(n, l0, gs.rfo(tid0)), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0) -p n)), ¬ tid0 ∈ gs.fwriters(l0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list a: ⊦ (x + y) + z = x + y + z; from specification list
| gs.rfo(tid0) + SF ' = head ' + bel, gs.bq(tid0) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W2, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (head ' + bel) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0) -p n), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, head ' + bel), isPropFO(n0, l0, head ' + bel), noPendingW(tid0, gs.bq, gs.pq), notMember(tid0, gs.fwriters), notMember(tid0, gs.freaders), reorder(ags.p, gs.pq, gs.rfo), n ≤ # bel, n0 ≤ # bel, ¬ isPropFO(n, l0, gs.rfo(tid0)), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0) -p n)), ¬ tid0 ∈ gs.fwriters(l0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
gs.rfo(tid0) + SF ' = head ' + bel, gs.bq(tid0) = head ' + bel, ags.ctr = gs.fctr, bel.last = SF, ags.mem = gs.pmem, lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W2, SF ≠ head, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (head ' + bel) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0) -p n), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, head ' + bel), isPropFO(n0, l0, head ' + bel), noPendingW(tid0, gs.bq, gs.pq), notMember(tid0, gs.fwriters), notMember(tid0, gs.freaders), reorder(ags.p, gs.pq, gs.rfo), SF ∈ bel, head ∈ gs.rfo(tid0), n ≤ # bel, n0 ≤ # bel, ¬ isPropFO(n, l0, gs.rfo(tid0)), ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0) -p n)), ¬ tid0 ∈ gs.fwriters(l0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list lapp-04: ⊦ a ' + x = y + b ' ∧ a ≠ b → x.last = b; (forward) from specification list-last inapp-10: ⊦ a ' + x = y + a0 ' ∧ a ≠ a0 → a ∈ y ∧ a0 ∈ x; (forward) from specification list ⊦ a ∈ a0 ' ↔ a = a0; (s) ⊦ a ∈ x + y ↔ a ∈ x ∨ a ∈ y; (s) ⊦ ¬ isPropFO(n, l, SF ' + bel); (s) ⊦ a ∈ a0 ' + x ↔ a = a0 ∨ a ∈ x; (s) in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list in-15: ⊦ x + a ' = y → a ∈ y; (forward) from specification list
| gs.rfo(tid0) + SF ' = head ' + bel, gs.bq(tid0) = head ' + bel, ags.ctr = gs.fctr, bel.last = SF, ags.mem = gs.pmem, lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W2, SF ≠ head, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (head ' + bel) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0) -p n), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, head ' + bel), isPropFO(n0, l0, head ' + bel), noPendingW(tid0, gs.bq, gs.pq), notMember(tid0, gs.fwriters), notMember(tid0, gs.freaders), reorder(ags.p, gs.pq, gs.rfo), SF ∈ bel, head ∈ gs.rfo(tid0), n ≤ # bel, n0 ≤ # bel, ¬ isPropFO(n, l0, gs.rfo(tid0)), ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0) -p n)), ¬ tid0 ∈ gs.fwriters(l0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
gs.rfo(tid0) + SF ' = head ' + bel, gs.bq(tid0) = gs.rfo(tid0) + SF ', ags.ctr = gs.fctr, bel.last = SF, ags.mem = gs.pmem, lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W2, SF ≠ head, FLITGInv(gs), FLITInv (((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (gs.rfo(tid0) + SF ') -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0) -p n), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, gs.rfo(tid0) + SF '), isPropFO(n, l0, gs.rfo(tid0) + SF '), noPendingW(tid0, gs.bq, gs.pq), notMember(tid0, gs.freaders), notMember(tid0, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), head ∈ gs.rfo(tid0), SF ∈ bel, n0 ≤ # bel, n ≤ # bel, ¬ isPropFO(n, l0, gs.rfo(tid0)), ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0) -p n)), ¬ tid0 ∈ gs.fwriters(l0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| gs.rfo(tid0) + SF ' = head ' + bel, gs.bq(tid0) = gs.rfo(tid0) + SF ', ags.ctr = gs.fctr, bel.last = SF, ags.mem = gs.pmem, lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W2, SF ≠ head, FLITGInv(gs), FLITInv (((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (gs.rfo(tid0) + SF ') -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0) -p n), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, gs.rfo(tid0) + SF '), isPropFO(n, l0, gs.rfo(tid0) + SF '), noPendingW(tid0, gs.bq, gs.pq), notMember(tid0, gs.freaders), notMember(tid0, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), head ∈ gs.rfo(tid0), SF ∈ bel, n0 ≤ # bel, n ≤ # bel, ¬ isPropFO(n, l0, gs.rfo(tid0)), ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0) -p n)), ¬ tid0 ∈ gs.fwriters(l0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⊦ isPropFO(n, l, bel + SF ') → isPropFO(n, l, bel)
Used terms: n, l0, gs.rfo(tid0)
| ⊦ isPropFO(n, l, bel + SF ') → isPropFO(n, l, bel) |
| gs.bq(tid0) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W4, pcf(tid0) ≠ W3, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (head ' + bel) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0) -p n), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, head ' + bel), isPropFO(n, l0, head ' + bel), reorder(ags.p, gs.pq, gs.rfo), n0 ≤ # bel, n ≤ # bel, ¬ isPropFO(n, l0, gs.rfo(tid0)), ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0) -p n)), ¬ tid0 ∈ gs.fwriters(l0), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → gs.rfo(tid0) = [], pcf(tid0) = W7 → noPending(tid0, gs.bq, gs.pq), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → oneMember(tid0, lsf(tid0).loc, gs.fwriters), pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → notMember(tid0, gs.freaders), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → head.W? → head = W(lsf(tid0).loc, lsf(tid0).val), pcf(tid0) = W6 → head ' + bel = SF ' ∨ head ' + bel = FO(lsf(tid0).loc) ' + SF ' ∨ head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ', pcf(tid0) = W5 → head ' + bel = FO(lsf(tid0).loc) ' ∨ head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ', pcf(tid0) = W4 → head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ', pcf(tid0) = W5 ∨ pcf(tid0) = W6 → FOFollowsW(tid0, head ' + bel, gs.pq(lsf(tid0).loc), lsf(tid0).loc), pcf(tid0) = W1 ∨ pcf(tid0) = W2 → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W7 → notMember(tid0, gs.fwriters), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → gs.rfo(tid0) = head ' + bel, pcf(tid0) = idle ∨ pcf(tid0) = crashed → noPending(tid0, gs.bq, gs.pq), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → notMember(tid0, gs.freaders), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → notMember(tid0, gs.fwriters), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → gs.rfo(tid0) = head ' + bel, pcf(tid0) = R2 ∨ pcf(tid0) = R3 → oneMember(tid0, lsf(tid0).loc, gs.freaders), pcf(tid0) = R1 ∨ pcf(tid0) = R4 → notMember(tid0, gs.freaders), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → notMember(tid0, gs.fwriters), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = W2 → gs.rfo(tid0) = head ' + bel ∨ gs.rfo(tid0) + SF ' = head ' + bel, pcf(tid0) = W1 ∨ pcf(tid0) = W7 → gs.rfo(tid0) = head ' + bel, pcf(tid0) = W1 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W7 → SF ≠ head ∧ ¬ SF ∈ bel, pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → SF ≠ head ∧ ¬ SF ∈ bel, pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → SF ≠ head ∧ ¬ SF ∈ bel, ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ', ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W4, lsf(tid0).loc ≠ l0, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p 0)).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(0, l0, gs.bq(tid0)), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: ⊦ W4 ≠ W6; (s) ⊦ W4 ≠ W5; (s) ⊦ ¬ a ∈ []; (s) ⊦ ¬ isPropFO(n, l, []); (s) ⊦ [] -p n = []; (s) ⊦ m ≤ 0 ↔ m = 0; (s) ⊦ # [] = 0; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x + [] = x; (s) ⊦ W3 ≠ W4; (s) ⊦ W(l, v) ≠ SF; (s) ⊦ R1 ≠ W4; (s) ⊦ R2 ≠ W4; (s) ⊦ R3 ≠ W4; (s) ⊦ R4 ≠ W4; (s) ⊦ W4 ≠ idle; (s) ⊦ W4 ≠ ready; (s) ⊦ W4 ≠ crashed; (s) ⊦ W1 ≠ W4; (s) ⊦ W2 ≠ W4; (s) ⊦ W4 ≠ W7; (s) ⊦ oneMember(t, l, tsf) → ¬ notMember(t, tsf); (as) ⊦ oneMember(t, l, tsf) → (t ∈ tsf(l0) ↔ l = l0); (s) ⊦ a ' = a0 ' + x ↔ a = a0 ∧ x = []; (ws)
| gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ', ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W4, lsf(tid0).loc ≠ l0, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p 0)).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(0, l0, gs.bq(tid0)), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ', ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W4, lsf(tid0).loc ≠ l0, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := W(lsf(tid0).loc, lsf(tid0).val) ' -p 0)).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(0, l0, W(lsf(tid0).loc, lsf(tid0).val) '), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ', ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W4, lsf(tid0).loc ≠ l0, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := W(lsf(tid0).loc, lsf(tid0).val) ' -p 0)).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(0, l0, W(lsf(tid0).loc, lsf(tid0).val) '), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⊦ isPropFO(n, l, bel) ↔ n < # bel ∧ bel[n] = FO(l) ∧ (∀ m. m < n → bel[m] ≠ SF ∧ (bel[m].W? ∨ bel[m].FO? → bel[m].l ≠ l))
Used simplifier rules: ⊦ a '[0] = a; (s) ⊦ W(l, v) ≠ FO(l0); (s) Used terms: 0, l0, W(lsf(tid0).loc, lsf(tid0).val) '
| ⊦ isPropFO(n, l, bel) ↔ n < # bel ∧ bel[n] = FO(l) ∧ (∀ m. m < n → bel[m] ≠ SF ∧ (bel[m].W? ∨ bel[m].FO? → bel[m].l ≠ l)) |
| gs.bq(tid0) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W5, pcf(tid0) ≠ W3, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (head ' + bel) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0) -p n), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, head ' + bel), isPropFO(n, l0, head ' + bel), reorder(ags.p, gs.pq, gs.rfo), n0 ≤ # bel, n ≤ # bel, ¬ isPropFO(n, l0, gs.rfo(tid0)), ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0) -p n)), ¬ tid0 ∈ gs.fwriters(l0), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → gs.rfo(tid0) = [], pcf(tid0) = W7 → noPending(tid0, gs.bq, gs.pq), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → oneMember(tid0, lsf(tid0).loc, gs.fwriters), pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → notMember(tid0, gs.freaders), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → head.W? → head = W(lsf(tid0).loc, lsf(tid0).val), pcf(tid0) = W6 → head ' + bel = SF ' ∨ head ' + bel = FO(lsf(tid0).loc) ' + SF ' ∨ head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ', pcf(tid0) = W5 → head ' + bel = FO(lsf(tid0).loc) ' ∨ head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ', pcf(tid0) = W4 → head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ', pcf(tid0) = W5 ∨ pcf(tid0) = W6 → FOFollowsW(tid0, head ' + bel, gs.pq(lsf(tid0).loc), lsf(tid0).loc), pcf(tid0) = W1 ∨ pcf(tid0) = W2 → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W7 → notMember(tid0, gs.fwriters), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → gs.rfo(tid0) = head ' + bel, pcf(tid0) = idle ∨ pcf(tid0) = crashed → noPending(tid0, gs.bq, gs.pq), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → notMember(tid0, gs.freaders), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → notMember(tid0, gs.fwriters), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → gs.rfo(tid0) = head ' + bel, pcf(tid0) = R2 ∨ pcf(tid0) = R3 → oneMember(tid0, lsf(tid0).loc, gs.freaders), pcf(tid0) = R1 ∨ pcf(tid0) = R4 → notMember(tid0, gs.freaders), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → notMember(tid0, gs.fwriters), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = W2 → gs.rfo(tid0) = head ' + bel ∨ gs.rfo(tid0) + SF ' = head ' + bel, pcf(tid0) = W1 ∨ pcf(tid0) = W7 → gs.rfo(tid0) = head ' + bel, pcf(tid0) = W1 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W7 → SF ≠ head ∧ ¬ SF ∈ bel, pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → SF ≠ head ∧ ¬ SF ∈ bel, pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → SF ≠ head ∧ ¬ SF ∈ bel, ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
gs.bq(tid0) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W5, lsf(tid0).loc ≠ l0, SF ≠ head, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (head ' + bel) -p n)).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, head ' + bel, gs.pq(lsf(tid0).loc), lsf(tid0).loc), isPropFO(n0, l0, head ' + bel), isPropFO(n, l0, head ' + bel), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n0 ≤ # bel, n ≤ # bel, ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ¬ SF ∈ bel, head.W? → head = W(lsf(tid0).loc, lsf(tid0).val), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), head ' + bel = FO(lsf(tid0).loc) ' ∨ head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' ⊦
Used simplifier rules: ⊦ W4 ≠ W5; (s) ⊦ W5 ≠ W6; (s) ⊦ ¬ isPropFO(n, l, []); (s) ⊦ [] -p n = []; (s) ⊦ W3 ≠ W5; (s) ⊦ R1 ≠ W5; (s) ⊦ R2 ≠ W5; (s) ⊦ R3 ≠ W5; (s) ⊦ R4 ≠ W5; (s) ⊦ W5 ≠ idle; (s) ⊦ W5 ≠ ready; (s) ⊦ W5 ≠ crashed; (s) ⊦ W1 ≠ W5; (s) ⊦ W2 ≠ W5; (s) ⊦ W5 ≠ W7; (s) ⊦ oneMember(t, l, tsf) → ¬ notMember(t, tsf); (as) ⊦ oneMember(t, l, tsf) → (t ∈ tsf(l0) ↔ l = l0); (s)
| gs.bq(tid0) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W5, lsf(tid0).loc ≠ l0, SF ≠ head, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (head ' + bel) -p n)).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, head ' + bel, gs.pq(lsf(tid0).loc), lsf(tid0).loc), isPropFO(n0, l0, head ' + bel), isPropFO(n, l0, head ' + bel), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n0 ≤ # bel, n ≤ # bel, ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ¬ SF ∈ bel, head.W? → head = W(lsf(tid0).loc, lsf(tid0).val), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), head ' + bel = FO(lsf(tid0).loc) ' ∨ head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' ⊦ |
gs.bq(tid0) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, n = 0, pcf(tid0) = W5, lsf(tid0).loc ≠ l0, SF ≠ head, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (head ' + bel) -p n)).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, head ' + bel, gs.pq(lsf(tid0).loc), lsf(tid0).loc), isPropFO(n, l0, head ' + bel), isPropFO(n0, l0, head ' + bel), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n ≤ # bel, n0 ≤ # bel, ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ¬ SF ∈ bel, head.W? → head = W(lsf(tid0).loc, lsf(tid0).val), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), head ' + bel = FO(lsf(tid0).loc) ' ∨ head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' ⊦
gs.bq(tid0) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, n = n1 +1, pcf(tid0) = W5, lsf(tid0).loc ≠ l0, SF ≠ head, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (head ' + bel) -p n)).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, head ' + bel, gs.pq(lsf(tid0).loc), lsf(tid0).loc), isPropFO(n, l0, head ' + bel), isPropFO(n0, l0, head ' + bel), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n ≤ # bel, n0 ≤ # bel, ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ¬ SF ∈ bel, head.W? → head = W(lsf(tid0).loc, lsf(tid0).val), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), head ' + bel = FO(lsf(tid0).loc) ' ∨ head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' ⊦
Used simplifier rules: Nat freely generated by 0, +1;;
| gs.bq(tid0) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, n = 0, pcf(tid0) = W5, lsf(tid0).loc ≠ l0, SF ≠ head, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (head ' + bel) -p n)).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, head ' + bel, gs.pq(lsf(tid0).loc), lsf(tid0).loc), isPropFO(n, l0, head ' + bel), isPropFO(n0, l0, head ' + bel), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n ≤ # bel, n0 ≤ # bel, ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ¬ SF ∈ bel, head.W? → head = W(lsf(tid0).loc, lsf(tid0).val), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), head ' + bel = FO(lsf(tid0).loc) ' ∨ head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' ⊦ |
gs.bq(tid0) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W5, lsf(tid0).loc ≠ l0, SF ≠ head, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := bel)).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, head ' + bel, gs.pq(lsf(tid0).loc), lsf(tid0).loc), isPropFO(n0, l0, head ' + bel), isPropFO(0, l0, head ' + bel), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n0 ≤ # bel, ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ¬ SF ∈ bel, head.W? → head = W(lsf(tid0).loc, lsf(tid0).val), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), head ' + bel = FO(lsf(tid0).loc) ' ∨ head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (a ' + x) -p 0 = x; (s) ⊦ 0 ≤ m; (s)
| gs.bq(tid0) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W5, lsf(tid0).loc ≠ l0, SF ≠ head, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := bel)).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, head ' + bel, gs.pq(lsf(tid0).loc), lsf(tid0).loc), isPropFO(n0, l0, head ' + bel), isPropFO(0, l0, head ' + bel), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n0 ≤ # bel, ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ¬ SF ∈ bel, head.W? → head = W(lsf(tid0).loc, lsf(tid0).val), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), head ' + bel = FO(lsf(tid0).loc) ' ∨ head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' ⊦ |
⊦ isPropFO(n, l, bel) ↔ n < # bel ∧ bel[n] = FO(l) ∧ (∀ m. m < n → bel[m] ≠ SF ∧ (bel[m].W? ∨ bel[m].FO? → bel[m].l ≠ l))
Used simplifier rules: ⊦ (a ' + x)[0] = a; (s) ⊦ #(a ' + x) = (# x)+1; (s) ⊦ m +1 = m + 1; (s) ⊦ 0 < m ↔ m ≠ 0; (s) ⊦ m + 1 ≠ 0; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ ¬ n < 0; (s) ⊦ FO(l) ≠ SF; (s) ⊦ ¬ FO(l).W?; (s) ⊦ a ' = a0 ' + x ↔ a = a0 ∧ x = []; (ws) ⊦ FO(l) = FO(l0) ↔ l = l0; (s) ⊦ a ' + x = a0 ' + y ↔ a = a0 ∧ x = y; (ws) ⊦ W(l, v) ≠ FO(l0); (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: 0, l0, head ' + bel
| ⊦ isPropFO(n, l, bel) ↔ n < # bel ∧ bel[n] = FO(l) ∧ (∀ m. m < n → bel[m] ≠ SF ∧ (bel[m].W? ∨ bel[m].FO? → bel[m].l ≠ l)) |
| gs.bq(tid0) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, n = n1 +1, pcf(tid0) = W5, lsf(tid0).loc ≠ l0, SF ≠ head, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (head ' + bel) -p n)).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, head ' + bel, gs.pq(lsf(tid0).loc), lsf(tid0).loc), isPropFO(n, l0, head ' + bel), isPropFO(n0, l0, head ' + bel), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n ≤ # bel, n0 ≤ # bel, ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ¬ SF ∈ bel, head.W? → head = W(lsf(tid0).loc, lsf(tid0).val), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), head ' + bel = FO(lsf(tid0).loc) ' ∨ head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' ⊦ |
gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ', ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W5, lsf(tid0).loc ≠ l0, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := W(lsf(tid0).loc, lsf(tid0).val) ')).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(1, l0, gs.bq(tid0)), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(tid0), FO(lsf(tid0).loc) ∈ gs.bq(tid0), n0 ≤ 1, ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x + [] = x; (s) ⊦ a ' -p 0 = []; (s) in-15: ⊦ x + a ' = y → a ∈ y; (forward) from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ FO(l) ≠ SF; (s) ⊦ a ∈ a0 ' ↔ a = a0; (s) ⊦ m < 1 ↔ m = 0; (s) ⊦ # a ' = 0 +1; (s) ⊦ W(l, v) ≠ SF; (s) ⊦ a ' ≠ []; (s) ⊦ a ' + x = a0 ' + y ↔ a = a0 ∧ x = y; (ws) ⊦ y ≠ [] → (a ' = x + y ↔ x = [] ∧ a ' = y); (s) ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ a + x = a ' + x; (s) ⊦ (a ' + x) -p (n + 1) = a + (x -p n); (s) ⊦ m +1 = m + 1; (s) ⊦ m + 1 ≤ n ↔ m < n; (s)
| gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ', ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W5, lsf(tid0).loc ≠ l0, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := W(lsf(tid0).loc, lsf(tid0).val) ')).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(1, l0, gs.bq(tid0)), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(tid0), FO(lsf(tid0).loc) ∈ gs.bq(tid0), n0 ≤ 1, ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W5, lsf(tid0).loc ≠ l0, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := W(lsf(tid0).loc, lsf(tid0).val) ')).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ', gs.pq(lsf(tid0).loc), lsf(tid0).loc), isPropFO(1, l0, W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) '), isPropFO(n0, l0, W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) '), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), FO(lsf(tid0).loc) ∈ W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ', W(lsf(tid0).loc, lsf(tid0).val) ∈ W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ', n0 ≤ 1, ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W5, lsf(tid0).loc ≠ l0, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := W(lsf(tid0).loc, lsf(tid0).val) ')).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ', gs.pq(lsf(tid0).loc), lsf(tid0).loc), isPropFO(1, l0, W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) '), isPropFO(n0, l0, W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) '), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), FO(lsf(tid0).loc) ∈ W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ', W(lsf(tid0).loc, lsf(tid0).val) ∈ W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ', n0 ≤ 1, ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W5, lsf(tid0).loc ≠ l0, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := W(lsf(tid0).loc, lsf(tid0).val) ')).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ', gs.pq(lsf(tid0).loc), lsf(tid0).loc), isPropFO(n0, l0, W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) '), isPropFO(1, l0, W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) '), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n0 ≤ 1, ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a ∈ a0 ' ↔ a = a0; (s) ⊦ W(l, v) ≠ FO(l0); (s) ⊦ a ∈ a0 ' + x ↔ a = a0 ∨ a ∈ x; (s)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W5, lsf(tid0).loc ≠ l0, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := W(lsf(tid0).loc, lsf(tid0).val) ')).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ', gs.pq(lsf(tid0).loc), lsf(tid0).loc), isPropFO(n0, l0, W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) '), isPropFO(1, l0, W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) '), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n0 ≤ 1, ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⊦ isPropFO(n, l, bel) ↔ n < # bel ∧ bel[n] = FO(l) ∧ (∀ m. m < n → bel[m] ≠ SF ∧ (bel[m].W? ∨ bel[m].FO? → bel[m].l ≠ l))
Used simplifier rules: n ≠ 0 ⊦ (a ' + x)[(* n)] = x[n -1]; (s) ⊦ a '[0] = a; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ FO(l) = FO(l0) ↔ l = l0; (s) Used terms: 1, l0, W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) '
| ⊦ isPropFO(n, l, bel) ↔ n < # bel ∧ bel[n] = FO(l) ∧ (∀ m. m < n → bel[m] ≠ SF ∧ (bel[m].W? ∨ bel[m].FO? → bel[m].l ≠ l)) |
| gs.bq(tid0) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, pcf(tid0) ≠ W3, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (head ' + bel) -p n)).rfo:= gs.rfo(tid0 := gs.rfo(tid0) -p n), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, head ' + bel), isPropFO(n, l0, head ' + bel), reorder(ags.p, gs.pq, gs.rfo), n0 ≤ # bel, n ≤ # bel, ¬ isPropFO(n, l0, gs.rfo(tid0)), ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := gs.rfo(tid0) -p n)), ¬ tid0 ∈ gs.fwriters(l0), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → gs.rfo(tid0) = [], pcf(tid0) = W7 → noPending(tid0, gs.bq, gs.pq), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → oneMember(tid0, lsf(tid0).loc, gs.fwriters), pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → notMember(tid0, gs.freaders), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → head.W? → head = W(lsf(tid0).loc, lsf(tid0).val), pcf(tid0) = W6 → head ' + bel = SF ' ∨ head ' + bel = FO(lsf(tid0).loc) ' + SF ' ∨ head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ', pcf(tid0) = W5 → head ' + bel = FO(lsf(tid0).loc) ' ∨ head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ', pcf(tid0) = W4 → head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ', pcf(tid0) = W5 ∨ pcf(tid0) = W6 → FOFollowsW(tid0, head ' + bel, gs.pq(lsf(tid0).loc), lsf(tid0).loc), pcf(tid0) = W1 ∨ pcf(tid0) = W2 → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W7 → notMember(tid0, gs.fwriters), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → gs.rfo(tid0) = head ' + bel, pcf(tid0) = idle ∨ pcf(tid0) = crashed → noPending(tid0, gs.bq, gs.pq), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → notMember(tid0, gs.freaders), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → notMember(tid0, gs.fwriters), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → gs.rfo(tid0) = head ' + bel, pcf(tid0) = R2 ∨ pcf(tid0) = R3 → oneMember(tid0, lsf(tid0).loc, gs.freaders), pcf(tid0) = R1 ∨ pcf(tid0) = R4 → notMember(tid0, gs.freaders), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → notMember(tid0, gs.fwriters), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → noPendingW(tid0, gs.bq, gs.pq), pcf(tid0) = W2 → gs.rfo(tid0) = head ' + bel ∨ gs.rfo(tid0) + SF ' = head ' + bel, pcf(tid0) = W1 ∨ pcf(tid0) = W7 → gs.rfo(tid0) = head ' + bel, pcf(tid0) = W1 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W7 → SF ≠ head ∧ ¬ SF ∈ bel, pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → SF ≠ head ∧ ¬ SF ∈ bel, pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → SF ≠ head ∧ ¬ SF ∈ bel, ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
gs.bq(tid0) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, lsf(tid0).loc ≠ l0, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (head ' + bel) -p n)).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, head ' + bel, gs.pq(lsf(tid0).loc), lsf(tid0).loc), isPropFO(n0, l0, head ' + bel), isPropFO(n, l0, head ' + bel), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n0 ≤ # bel, n ≤ # bel, ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), head.W? → head = W(lsf(tid0).loc, lsf(tid0).val), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), head ' + bel = SF ' ∨ head ' + bel = FO(lsf(tid0).loc) ' + SF ' ∨ head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ' ⊦
Used simplifier rules: ⊦ W4 ≠ W6; (s) ⊦ W5 ≠ W6; (s) ⊦ ¬ isPropFO(n, l, []); (s) ⊦ [] -p n = []; (s) ⊦ W3 ≠ W6; (s) ⊦ R1 ≠ W6; (s) ⊦ R2 ≠ W6; (s) ⊦ R3 ≠ W6; (s) ⊦ R4 ≠ W6; (s) ⊦ W6 ≠ idle; (s) ⊦ W6 ≠ ready; (s) ⊦ W6 ≠ crashed; (s) ⊦ W1 ≠ W6; (s) ⊦ W2 ≠ W6; (s) ⊦ W6 ≠ W7; (s) ⊦ oneMember(t, l, tsf) → ¬ notMember(t, tsf); (as) ⊦ oneMember(t, l, tsf) → (t ∈ tsf(l0) ↔ l = l0); (s)
| gs.bq(tid0) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, lsf(tid0).loc ≠ l0, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (head ' + bel) -p n)).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, head ' + bel, gs.pq(lsf(tid0).loc), lsf(tid0).loc), isPropFO(n0, l0, head ' + bel), isPropFO(n, l0, head ' + bel), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n0 ≤ # bel, n ≤ # bel, ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), head.W? → head = W(lsf(tid0).loc, lsf(tid0).val), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), head ' + bel = SF ' ∨ head ' + bel = FO(lsf(tid0).loc) ' + SF ' ∨ head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ' ⊦ |
head ' + bel = SF ', gs.bq(tid0) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, lsf(tid0).loc ≠ l0, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (head ' + bel) -p n)).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, head ' + bel, gs.pq(lsf(tid0).loc), lsf(tid0).loc), isPropFO(n, l0, head ' + bel), isPropFO(n0, l0, head ' + bel), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n ≤ # bel, n0 ≤ # bel, ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), head.W? → head = W(lsf(tid0).loc, lsf(tid0).val), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
head ' + bel = FO(lsf(tid0).loc) ' + SF ', gs.bq(tid0) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, lsf(tid0).loc ≠ l0, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (head ' + bel) -p n)).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, head ' + bel, gs.pq(lsf(tid0).loc), lsf(tid0).loc), isPropFO(n, l0, head ' + bel), isPropFO(n0, l0, head ' + bel), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n ≤ # bel, n0 ≤ # bel, ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), head.W? → head = W(lsf(tid0).loc, lsf(tid0).val), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ', gs.bq(tid0) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, lsf(tid0).loc ≠ l0, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (head ' + bel) -p n)).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, head ' + bel, gs.pq(lsf(tid0).loc), lsf(tid0).loc), isPropFO(n, l0, head ' + bel), isPropFO(n0, l0, head ' + bel), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n ≤ # bel, n0 ≤ # bel, ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), head.W? → head = W(lsf(tid0).loc, lsf(tid0).val), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| head ' + bel = SF ', gs.bq(tid0) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, lsf(tid0).loc ≠ l0, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (head ' + bel) -p n)).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, head ' + bel, gs.pq(lsf(tid0).loc), lsf(tid0).loc), isPropFO(n, l0, head ' + bel), isPropFO(n0, l0, head ' + bel), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n ≤ # bel, n0 ≤ # bel, ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), head.W? → head = W(lsf(tid0).loc, lsf(tid0).val), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
gs.bq(tid0) = SF ', ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, lsf(tid0).loc ≠ l0, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := [])).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, SF ', gs.pq(lsf(tid0).loc), lsf(tid0).loc), isPropFO(0, l0, SF '), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: ⊦ a ' -p 0 = []; (s) ⊦ ¬ SF.W?; (s) ⊦ m ≤ 0 ↔ m = 0; (s) ⊦ # [] = 0; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x + [] = x; (s) ⊦ a ' = a0 ' + x ↔ a = a0 ∧ x = []; (ws)
| gs.bq(tid0) = SF ', ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, lsf(tid0).loc ≠ l0, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := [])).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, SF ', gs.pq(lsf(tid0).loc), lsf(tid0).loc), isPropFO(0, l0, SF '), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, lsf(tid0).loc ≠ l0, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := [])).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, SF ', gs.pq(lsf(tid0).loc), lsf(tid0).loc), isPropFO(0, l0, SF '), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, lsf(tid0).loc ≠ l0, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := [])).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, SF ', gs.pq(lsf(tid0).loc), lsf(tid0).loc), isPropFO(0, l0, SF '), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⊦ isPropFO(n, l, bel) ↔ n < # bel ∧ bel[n] = FO(l) ∧ (∀ m. m < n → bel[m] ≠ SF ∧ (bel[m].W? ∨ bel[m].FO? → bel[m].l ≠ l))
Used simplifier rules: ⊦ a '[0] = a; (s) ⊦ FO(l) ≠ SF; (s) Used terms: 0, l0, SF '
| ⊦ isPropFO(n, l, bel) ↔ n < # bel ∧ bel[n] = FO(l) ∧ (∀ m. m < n → bel[m] ≠ SF ∧ (bel[m].W? ∨ bel[m].FO? → bel[m].l ≠ l)) |
| head ' + bel = FO(lsf(tid0).loc) ' + SF ', gs.bq(tid0) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, lsf(tid0).loc ≠ l0, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (head ' + bel) -p n)).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, head ' + bel, gs.pq(lsf(tid0).loc), lsf(tid0).loc), isPropFO(n, l0, head ' + bel), isPropFO(n0, l0, head ' + bel), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n ≤ # bel, n0 ≤ # bel, ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), head.W? → head = W(lsf(tid0).loc, lsf(tid0).val), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
gs.bq(tid0) = FO(lsf(tid0).loc) ' + SF ', ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, lsf(tid0).loc ≠ l0, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (FO(lsf(tid0).loc) ' -p n) + SF ')).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), SF ∈ gs.bq(tid0), FO(lsf(tid0).loc) ∈ gs.bq(tid0), n ≤ 1, n0 ≤ 1, ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list in-15: ⊦ x + a ' = y → a ∈ y; (forward) from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ ¬ FO(l).W?; (s) ⊦ # a ' = 0 +1; (s) ⊦ isPropFO(n, l, bel + SF ') → (bel + SF ') -p n = (bel -p n) + SF '; (s) ⊦ a ' + x = a0 ' + y ↔ a = a0 ∧ x = y; (ws)
| gs.bq(tid0) = FO(lsf(tid0).loc) ' + SF ', ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, lsf(tid0).loc ≠ l0, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (FO(lsf(tid0).loc) ' -p n) + SF ')).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), SF ∈ gs.bq(tid0), FO(lsf(tid0).loc) ∈ gs.bq(tid0), n ≤ 1, n0 ≤ 1, ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⊦ FLITGInv(gs) ↔ ctrok(gs.fctr, gs.fwriters) ∧ writersOk(gs.bq, gs.pq, gs.fwriters) ∧ pendingOk(gs.bq, gs.pq) ∧ SFTrailing(gs.bq) ∧ readFOsOk(gs.rfo, gs.fwriters)
gs.bq(tid0) = FO(lsf(tid0).loc) ' + SF ', ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, lsf(tid0).loc ≠ l0, FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (FO(lsf(tid0).loc) ' -p n) + SF ')).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), FO(lsf(tid0).loc) ∈ gs.bq(tid0), SF ∈ gs.bq(tid0), n0 ≤ 1, n ≤ 1, ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used terms: gs
| ⊦ FLITGInv(gs) ↔ ctrok(gs.fctr, gs.fwriters) ∧ writersOk(gs.bq, gs.pq, gs.fwriters) ∧ pendingOk(gs.bq, gs.pq) ∧ SFTrailing(gs.bq) ∧ readFOsOk(gs.rfo, gs.fwriters) |
| gs.bq(tid0) = FO(lsf(tid0).loc) ' + SF ', ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, lsf(tid0).loc ≠ l0, FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (FO(lsf(tid0).loc) ' -p n) + SF ')).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), FO(lsf(tid0).loc) ∈ gs.bq(tid0), SF ∈ gs.bq(tid0), n0 ≤ 1, n ≤ 1, ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⊦ writersOk(bq, p, writers) ↔ (∀ l, t. (t ∈ writers(l) → (∀ l0. l0 ≠ l → ¬ t ∈ writers(l0))) ∧ (¬ t ∈ writers(l) → p(l) |W | t = [] ∧ bq(t) |WL l = []))
gs.bq(tid0) = FO(lsf(tid0).loc) ' + SF ', ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, lsf(tid0).loc ≠ l0, FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (FO(lsf(tid0).loc) ' -p n) + SF ')).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), SF ∈ gs.bq(tid0), FO(lsf(tid0).loc) ∈ gs.bq(tid0), n ≤ 1, n0 ≤ 1, ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ l, t. (t ∈ gs.fwriters(l) → (∀ l0. l0 ≠ l → ¬ t ∈ gs.fwriters(l0))) ∧ (¬ t ∈ gs.fwriters(l) → gs.pq(l) |W | t = [] ∧ gs.bq(t) |WL l = []) ⊦
Used terms: gs.bq, gs.pq, gs.fwriters
| ⊦ writersOk(bq, p, writers) ↔ (∀ l, t. (t ∈ writers(l) → (∀ l0. l0 ≠ l → ¬ t ∈ writers(l0))) ∧ (¬ t ∈ writers(l) → p(l) |W | t = [] ∧ bq(t) |WL l = [])) |
| gs.bq(tid0) = FO(lsf(tid0).loc) ' + SF ', ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, lsf(tid0).loc ≠ l0, FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (FO(lsf(tid0).loc) ' -p n) + SF ')).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), SF ∈ gs.bq(tid0), FO(lsf(tid0).loc) ∈ gs.bq(tid0), n ≤ 1, n0 ≤ 1, ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ l, t. (t ∈ gs.fwriters(l) → (∀ l0. l0 ≠ l → ¬ t ∈ gs.fwriters(l0))) ∧ (¬ t ∈ gs.fwriters(l) → gs.pq(l) |W | t = [] ∧ gs.bq(t) |WL l = []) ⊦ |
gs.bq(tid0) = FO(lsf(tid0).loc) ' + SF ', ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, lsf(tid0).loc ≠ l0, FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (FO(lsf(tid0).loc) ' -p n) + SF ')).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), FO(lsf(tid0).loc) ∈ gs.bq(tid0), SF ∈ gs.bq(tid0), n0 ≤ 1, n ≤ 1, ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), tid0 ∈ gs.fwriters(l0) → (∀ l1. l1 ≠ l0 → ¬ tid0 ∈ gs.fwriters(l1)), ¬ tid0 ∈ gs.fwriters(l0) → gs.pq(l0) |W | tid0 = [] ∧ gs.bq(tid0) |WL l0 = [], ∀ l, t. (t ∈ gs.fwriters(l) → (∀ l0. l0 ≠ l → ¬ t ∈ gs.fwriters(l0))) ∧ (¬ t ∈ gs.fwriters(l) → gs.pq(l) |W | t = [] ∧ gs.bq(t) |WL l = []), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used terms: l0, tid0
| gs.bq(tid0) = FO(lsf(tid0).loc) ' + SF ', ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, lsf(tid0).loc ≠ l0, FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (FO(lsf(tid0).loc) ' -p n) + SF ')).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), FO(lsf(tid0).loc) ∈ gs.bq(tid0), SF ∈ gs.bq(tid0), n0 ≤ 1, n ≤ 1, ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), tid0 ∈ gs.fwriters(l0) → (∀ l1. l1 ≠ l0 → ¬ tid0 ∈ gs.fwriters(l1)), ¬ tid0 ∈ gs.fwriters(l0) → gs.pq(l0) |W | tid0 = [] ∧ gs.bq(tid0) |WL l0 = [], ∀ l, t. (t ∈ gs.fwriters(l) → (∀ l0. l0 ≠ l → ¬ t ∈ gs.fwriters(l0))) ∧ (¬ t ∈ gs.fwriters(l) → gs.pq(l) |W | t = [] ∧ gs.bq(t) |WL l = []), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
gs.bq(tid0) = FO(lsf(tid0).loc) ' + SF ', ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, gs.pq(l0) |W | tid0 = [], gs.bq(tid0) |WL l0 = [], lsf(tid0).loc ≠ l0, FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (FO(lsf(tid0).loc) ' -p n) + SF ')).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), SF ∈ gs.bq(tid0), FO(lsf(tid0).loc) ∈ gs.bq(tid0), n ≤ 1, n0 ≤ 1, ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ l, t. (t ∈ gs.fwriters(l) → (∀ l0. l0 ≠ l → ¬ t ∈ gs.fwriters(l0))) ∧ (¬ t ∈ gs.fwriters(l) → gs.pq(l) |W | t = [] ∧ gs.bq(t) |WL l = []) ⊦
Used simplifier rules: ⊦ oneMember(t, l, tsf) → (t ∈ tsf(l0) ↔ l = l0); (s)
| gs.bq(tid0) = FO(lsf(tid0).loc) ' + SF ', ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, gs.pq(l0) |W | tid0 = [], gs.bq(tid0) |WL l0 = [], lsf(tid0).loc ≠ l0, FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (FO(lsf(tid0).loc) ' -p n) + SF ')).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), SF ∈ gs.bq(tid0), FO(lsf(tid0).loc) ∈ gs.bq(tid0), n ≤ 1, n0 ≤ 1, ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ l, t. (t ∈ gs.fwriters(l) → (∀ l0. l0 ≠ l → ¬ t ∈ gs.fwriters(l0))) ∧ (¬ t ∈ gs.fwriters(l) → gs.pq(l) |W | t = [] ∧ gs.bq(t) |WL l = []) ⊦ |
⊦ x = [] ↔ ¬(∃ a. a ∈ x)
gs.bq(tid0) = FO(lsf(tid0).loc) ' + SF ', ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, gs.pq(l0) |W | tid0 = [], lsf(tid0).loc ≠ l0, FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (FO(lsf(tid0).loc) ' -p n) + SF ')).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), FO(lsf(tid0).loc) ∈ gs.bq(tid0), SF ∈ gs.bq(tid0), n0 ≤ 1, n ≤ 1, ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ l, t. (t ∈ gs.fwriters(l) → (∀ l0. l0 ≠ l → ¬ t ∈ gs.fwriters(l0))) ∧ (¬ t ∈ gs.fwriters(l) → gs.pq(l) |W | t = [] ∧ gs.bq(t) |WL l = []), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ _a. ¬ _a ∈ gs.bq(tid0) |WL l0 ⊦
Used terms: gs.bq(tid0) |WL l0
| ⊦ x = [] ↔ ¬(∃ a. a ∈ x) |
| gs.bq(tid0) = FO(lsf(tid0).loc) ' + SF ', ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, gs.pq(l0) |W | tid0 = [], lsf(tid0).loc ≠ l0, FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (FO(lsf(tid0).loc) ' -p n) + SF ')).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), FO(lsf(tid0).loc) ∈ gs.bq(tid0), SF ∈ gs.bq(tid0), n0 ≤ 1, n ≤ 1, ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ l, t. (t ∈ gs.fwriters(l) → (∀ l0. l0 ≠ l → ¬ t ∈ gs.fwriters(l0))) ∧ (¬ t ∈ gs.fwriters(l) → gs.pq(l) |W | t = [] ∧ gs.bq(t) |WL l = []), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ _a. ¬ _a ∈ gs.bq(tid0) |WL l0 ⊦ |
gs.bq(tid0) = FO(lsf(tid0).loc) ' + SF ', ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, gs.pq(l0) |W | tid0 = [], lsf(tid0).loc ≠ l0, FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (FO(lsf(tid0).loc) ' -p n) + SF ')).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), SF ∈ gs.bq(tid0), FO(lsf(tid0).loc) ∈ gs.bq(tid0), n ≤ 1, n0 ≤ 1, ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ¬ FO(l0) ∈ gs.bq(tid0) |WL l0, ∀ _a. ¬ _a ∈ gs.bq(tid0) |WL l0, ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ l, t. (t ∈ gs.fwriters(l) → (∀ l0. l0 ≠ l → ¬ t ∈ gs.fwriters(l0))) ∧ (¬ t ∈ gs.fwriters(l) → gs.pq(l) |W | t = [] ∧ gs.bq(t) |WL l = []) ⊦
Used terms: FO(l0)
| gs.bq(tid0) = FO(lsf(tid0).loc) ' + SF ', ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, gs.pq(l0) |W | tid0 = [], lsf(tid0).loc ≠ l0, FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (FO(lsf(tid0).loc) ' -p n) + SF ')).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), SF ∈ gs.bq(tid0), FO(lsf(tid0).loc) ∈ gs.bq(tid0), n ≤ 1, n0 ≤ 1, ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ¬ FO(l0) ∈ gs.bq(tid0) |WL l0, ∀ _a. ¬ _a ∈ gs.bq(tid0) |WL l0, ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ l, t. (t ∈ gs.fwriters(l) → (∀ l0. l0 ≠ l → ¬ t ∈ gs.fwriters(l0))) ∧ (¬ t ∈ gs.fwriters(l) → gs.pq(l) |W | t = [] ∧ gs.bq(t) |WL l = []) ⊦ |
⊦ isPropFO(n, l, bel) → FO(l) ∈ bel
Used simplifier rules: ⊦ a ∈ a0 ' + x ↔ a = a0 ∨ a ∈ x; (s) ⊦ FO(l) = FO(l0) ↔ l = l0; (s) ⊦ a ∈ a0 ' ↔ a = a0; (s) ⊦ FO(l) ≠ SF; (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: n0, l0, FO(lsf(tid0).loc) ' + SF '
| ⊦ isPropFO(n, l, bel) → FO(l) ∈ bel |
| head ' + bel = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ', gs.bq(tid0) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, lsf(tid0).loc ≠ l0, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := (head ' + bel) -p n)).rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, head ' + bel, gs.pq(lsf(tid0).loc), lsf(tid0).loc), isPropFO(n, l0, head ' + bel), isPropFO(n0, l0, head ' + bel), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n ≤ # bel, n0 ≤ # bel, ¬ oneMember(tid0, als.l, gs.fwriters), ¬ oneMember(tid0, l0, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), head.W? → head = W(lsf(tid0).loc, lsf(tid0).val), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ', ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, lsf(tid0).loc ≠ l0, FLITGInv(gs), FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := ((W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ') -p n) + SF ')) .rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), SF ∈ gs.bq(tid0), W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(tid0), n ≤ 2, n0 ≤ 2, ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list in-15: ⊦ x + a ' = y → a ∈ y; (forward) from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ # a ' = 0 +1; (s) ⊦ #(a ' + x) = (# x)+1; (s) ⊦ isPropFO(n, l, bel + SF ') → (bel + SF ') -p n = (bel -p n) + SF '; (s) ⊦ a ∈ a0 ' ↔ a = a0; (s) ⊦ FO(l) ≠ SF; (s) ⊦ a ∈ a0 ' + x ↔ a = a0 ∨ a ∈ x; (s) ⊦ a ' + x = a0 ' + y ↔ a = a0 ∧ x = y; (ws)
| gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ', ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, lsf(tid0).loc ≠ l0, FLITGInv(gs), FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := ((W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ') -p n) + SF ')) .rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), SF ∈ gs.bq(tid0), W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(tid0), n ≤ 2, n0 ≤ 2, ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⊦ FLITGInv(gs) ↔ ctrok(gs.fctr, gs.fwriters) ∧ writersOk(gs.bq, gs.pq, gs.fwriters) ∧ pendingOk(gs.bq, gs.pq) ∧ SFTrailing(gs.bq) ∧ readFOsOk(gs.rfo, gs.fwriters)
gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ', ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, lsf(tid0).loc ≠ l0, FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := ((W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ') -p n) + SF ')) .rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(tid0), SF ∈ gs.bq(tid0), n0 ≤ 2, n ≤ 2, ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used terms: gs
| ⊦ FLITGInv(gs) ↔ ctrok(gs.fctr, gs.fwriters) ∧ writersOk(gs.bq, gs.pq, gs.fwriters) ∧ pendingOk(gs.bq, gs.pq) ∧ SFTrailing(gs.bq) ∧ readFOsOk(gs.rfo, gs.fwriters) |
| gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ', ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, lsf(tid0).loc ≠ l0, FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := ((W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ') -p n) + SF ')) .rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(tid0), SF ∈ gs.bq(tid0), n0 ≤ 2, n ≤ 2, ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⊦ writersOk(bq, p, writers) ↔ (∀ l, t. (t ∈ writers(l) → (∀ l0. l0 ≠ l → ¬ t ∈ writers(l0))) ∧ (¬ t ∈ writers(l) → p(l) |W | t = [] ∧ bq(t) |WL l = []))
gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ', ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, lsf(tid0).loc ≠ l0, FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := ((W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ') -p n) + SF ')) .rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), SF ∈ gs.bq(tid0), W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(tid0), n ≤ 2, n0 ≤ 2, ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ l, t. (t ∈ gs.fwriters(l) → (∀ l0. l0 ≠ l → ¬ t ∈ gs.fwriters(l0))) ∧ (¬ t ∈ gs.fwriters(l) → gs.pq(l) |W | t = [] ∧ gs.bq(t) |WL l = []) ⊦
Used terms: gs.bq, gs.pq, gs.fwriters
| ⊦ writersOk(bq, p, writers) ↔ (∀ l, t. (t ∈ writers(l) → (∀ l0. l0 ≠ l → ¬ t ∈ writers(l0))) ∧ (¬ t ∈ writers(l) → p(l) |W | t = [] ∧ bq(t) |WL l = [])) |
| gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ', ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, lsf(tid0).loc ≠ l0, FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := ((W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ') -p n) + SF ')) .rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), SF ∈ gs.bq(tid0), W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(tid0), n ≤ 2, n0 ≤ 2, ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ l, t. (t ∈ gs.fwriters(l) → (∀ l0. l0 ≠ l → ¬ t ∈ gs.fwriters(l0))) ∧ (¬ t ∈ gs.fwriters(l) → gs.pq(l) |W | t = [] ∧ gs.bq(t) |WL l = []) ⊦ |
gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ', ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, lsf(tid0).loc ≠ l0, FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := ((W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ') -p n) + SF ')) .rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(tid0), SF ∈ gs.bq(tid0), n0 ≤ 2, n ≤ 2, ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), tid0 ∈ gs.fwriters(l0) → (∀ l1. l1 ≠ l0 → ¬ tid0 ∈ gs.fwriters(l1)), ¬ tid0 ∈ gs.fwriters(l0) → gs.pq(l0) |W | tid0 = [] ∧ gs.bq(tid0) |WL l0 = [], ∀ l, t. (t ∈ gs.fwriters(l) → (∀ l0. l0 ≠ l → ¬ t ∈ gs.fwriters(l0))) ∧ (¬ t ∈ gs.fwriters(l) → gs.pq(l) |W | t = [] ∧ gs.bq(t) |WL l = []), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used terms: l0, tid0
| gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ', ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, lsf(tid0).loc ≠ l0, FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := ((W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ') -p n) + SF ')) .rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(tid0), SF ∈ gs.bq(tid0), n0 ≤ 2, n ≤ 2, ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), tid0 ∈ gs.fwriters(l0) → (∀ l1. l1 ≠ l0 → ¬ tid0 ∈ gs.fwriters(l1)), ¬ tid0 ∈ gs.fwriters(l0) → gs.pq(l0) |W | tid0 = [] ∧ gs.bq(tid0) |WL l0 = [], ∀ l, t. (t ∈ gs.fwriters(l) → (∀ l0. l0 ≠ l → ¬ t ∈ gs.fwriters(l0))) ∧ (¬ t ∈ gs.fwriters(l) → gs.pq(l) |W | t = [] ∧ gs.bq(t) |WL l = []), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ', ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, gs.pq(l0) |W | tid0 = [], gs.bq(tid0) |WL l0 = [], lsf(tid0).loc ≠ l0, FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := ((W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ') -p n) + SF ')) .rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), SF ∈ gs.bq(tid0), W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(tid0), n ≤ 2, n0 ≤ 2, ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ l, t. (t ∈ gs.fwriters(l) → (∀ l0. l0 ≠ l → ¬ t ∈ gs.fwriters(l0))) ∧ (¬ t ∈ gs.fwriters(l) → gs.pq(l) |W | t = [] ∧ gs.bq(t) |WL l = []) ⊦
Used simplifier rules: ⊦ oneMember(t, l, tsf) → (t ∈ tsf(l0) ↔ l = l0); (s)
| gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ', ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, gs.pq(l0) |W | tid0 = [], gs.bq(tid0) |WL l0 = [], lsf(tid0).loc ≠ l0, FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := ((W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ') -p n) + SF ')) .rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), SF ∈ gs.bq(tid0), W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(tid0), n ≤ 2, n0 ≤ 2, ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ l, t. (t ∈ gs.fwriters(l) → (∀ l0. l0 ≠ l → ¬ t ∈ gs.fwriters(l0))) ∧ (¬ t ∈ gs.fwriters(l) → gs.pq(l) |W | t = [] ∧ gs.bq(t) |WL l = []) ⊦ |
⊦ x = [] ↔ ¬(∃ a. a ∈ x)
gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ', ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, gs.pq(l0) |W | tid0 = [], lsf(tid0).loc ≠ l0, FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := ((W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ') -p n) + SF ')) .rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(tid0), SF ∈ gs.bq(tid0), n0 ≤ 2, n ≤ 2, ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ l, t. (t ∈ gs.fwriters(l) → (∀ l0. l0 ≠ l → ¬ t ∈ gs.fwriters(l0))) ∧ (¬ t ∈ gs.fwriters(l) → gs.pq(l) |W | t = [] ∧ gs.bq(t) |WL l = []), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ _a. ¬ _a ∈ gs.bq(tid0) |WL l0 ⊦
Used terms: gs.bq(tid0) |WL l0
| ⊦ x = [] ↔ ¬(∃ a. a ∈ x) |
| gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ', ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, gs.pq(l0) |W | tid0 = [], lsf(tid0).loc ≠ l0, FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := ((W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ') -p n) + SF ')) .rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(tid0), SF ∈ gs.bq(tid0), n0 ≤ 2, n ≤ 2, ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ∀ l, t. (t ∈ gs.fwriters(l) → (∀ l0. l0 ≠ l → ¬ t ∈ gs.fwriters(l0))) ∧ (¬ t ∈ gs.fwriters(l) → gs.pq(l) |W | t = [] ∧ gs.bq(t) |WL l = []), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ _a. ¬ _a ∈ gs.bq(tid0) |WL l0 ⊦ |
gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ', ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, gs.pq(l0) |W | tid0 = [], lsf(tid0).loc ≠ l0, FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := ((W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ') -p n) + SF ')) .rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), SF ∈ gs.bq(tid0), W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(tid0), n ≤ 2, n0 ≤ 2, ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ¬ FO(l0) ∈ gs.bq(tid0) |WL l0, ∀ _a. ¬ _a ∈ gs.bq(tid0) |WL l0, ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ l, t. (t ∈ gs.fwriters(l) → (∀ l0. l0 ≠ l → ¬ t ∈ gs.fwriters(l0))) ∧ (¬ t ∈ gs.fwriters(l) → gs.pq(l) |W | t = [] ∧ gs.bq(t) |WL l = []) ⊦
Used terms: FO(l0)
| gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ', ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.rfo(tid0) = [], lsf(tid0).t = tid0, ags.writers = gs.fwriters, pcf(tid0) = W6, gs.pq(l0) |W | tid0 = [], lsf(tid0).loc ≠ l0, FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := ((W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ') -p n) + SF ')) .rfo:= gs.rfo(tid0 := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), notMember(tid0, gs.freaders), oneMember(tid0, lsf(tid0).loc, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), SF ∈ gs.bq(tid0), W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(tid0), n ≤ 2, n0 ≤ 2, ¬ oneMember(tid0, l0, gs.fwriters), ¬ oneMember(tid0, als.l, gs.fwriters), ¬ reorder(ags.p, gs.pq(l0 := gs.pq(l0) + FO(tid0) '), gs.rfo(tid0 := [])), ¬ FO(l0) ∈ gs.bq(tid0) |WL l0, ∀ _a. ¬ _a ∈ gs.bq(tid0) |WL l0, ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ l, t. (t ∈ gs.fwriters(l) → (∀ l0. l0 ≠ l → ¬ t ∈ gs.fwriters(l0))) ∧ (¬ t ∈ gs.fwriters(l) → gs.pq(l) |W | t = [] ∧ gs.bq(t) |WL l = []) ⊦ |
⊦ isPropFO(n, l, bel) → FO(l) ∈ bel
Used simplifier rules: ⊦ W(l, v) ≠ FO(l0); (s) ⊦ a ∈ a0 ' + x ↔ a = a0 ∨ a ∈ x; (s) ⊦ FO(l) = FO(l0) ↔ l = l0; (s) ⊦ a ∈ a0 ' ↔ a = a0; (s) ⊦ FO(l) ≠ SF; (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: n0, l0, W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF '
| ⊦ isPropFO(n, l, bel) → FO(l) ∈ bel |
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, propFO(tid1, l1) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), gs.bq(tid0) ≠ [], n < # gs.bq(tid0), n0 < # gs.bq(tid0), FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)) .rfo:= gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l0) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ labs ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)) .rfo:= gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l0) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n)), lsf(t), pcf(t), ags, alsf(t), apcf(t)), ¬ oneMember(tid1, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, propFO(tid1, l1) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), gs.bq(tid0) ≠ [], n0 < # gs.bq(tid0), n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)) .rfo:= gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l0) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), ∀ 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) = R1) ∧ (pcf(t) = R2 → apcf(t) = R2) ∧ (pcf(t) = R3 → apcf(t) = R3) ∧ (pcf(t) = R4 → apcf(t) = R4) ∧ (pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v) ∧ (pcf(t) = W1 → apcf(t) = W1) ∧ (pcf(t) = W2 → apcf(t) = (SF ∈ (tid0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W1;W2)) ∧ (pcf(t) = W3 → apcf(t) = W3) ∧ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W3;W4)) ∧ ( pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W4;W5) )) ∧ ( pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W4 ;(SF ∈ (tid0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W5;W6) ) )) ∧ (pcf(t) = W7 → apcf(t) = W7) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v)
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 = R1) ∧ (pc = R2 → apc = R2) ∧ (pc = R3 → apc = R3) ∧ (pc = R4 → apc = R4) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → ls.loc = als.l) ∧ (pc = R2 ∨ pc = R3 ∨ pc = R4 → ls.val = als.v) ∧ (pc = W1 → apc = W1) ∧ (pc = W2 → apc = (SF ∈ gs.bq(ls.t) ⊃ W1;W2)) ∧ (pc = W3 → apc = W3) ∧ (pc = W4 → apc = (W(ls.loc, ls.val) ∈ gs.bq(ls.t) ⊃ W3;W4)) ∧ ( pc = W5 → apc = (W(ls.loc, ls.val) ∈ gs.bq(ls.t) ⊃ W3;(FO(ls.loc) ∈ gs.bq(ls.t) ⊃ W4;W5))) ∧ ( pc = W6 → apc = (W(ls.loc, ls.val) ∈ gs.bq(ls.t) ⊃ W3 ;(FO(ls.loc) ∈ gs.bq(ls.t) ⊃ W4;(SF ∈ gs.bq(ls.t) ⊃ W5;W6)) )) ∧ (pc = W7 → apc = W7) ∧ ( pc = W1 ∨ pc = W2 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → ls.loc = als.l) ∧ ( pc = W1 ∨ pc = W2 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → ls.val = als.v); ⊦ (gs.bq:= bq).bq = bq; (s) ⊦ (gs.rfo:= bq0).bq = gs.bq; (s)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, propFO(tid1, l1) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), gs.bq(tid0) ≠ [], n0 < # gs.bq(tid0), n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)) .rfo:= gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l0) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), ∀ 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) = R1) ∧ (pcf(t) = R2 → apcf(t) = R2) ∧ (pcf(t) = R3 → apcf(t) = R3) ∧ (pcf(t) = R4 → apcf(t) = R4) ∧ (pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v) ∧ (pcf(t) = W1 → apcf(t) = W1) ∧ (pcf(t) = W2 → apcf(t) = (SF ∈ (tid0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W1;W2)) ∧ (pcf(t) = W3 → apcf(t) = W3) ∧ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W3;W4)) ∧ ( pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W4;W5) )) ∧ ( pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W4 ;(SF ∈ (tid0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W5;W6) ) )) ∧ (pcf(t) = W7 → apcf(t) = W7) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v) |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, propFO(tid1, l1) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), gs.bq(tid0) ≠ [], n < # gs.bq(tid0), n0 < # gs.bq(tid0), FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)) .rfo:= gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l0) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), ∀ 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) = R1) ∧ (pcf(t) = R2 → apcf(t) = R2) ∧ (pcf(t) = R3 → apcf(t) = R3) ∧ (pcf(t) = R4 → apcf(t) = R4) ∧ (pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v) ∧ (pcf(t) = W1 → apcf(t) = W1) ∧ (pcf(t) = W2 → apcf(t) = (SF ∈ (tid0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W1;W2)) ∧ (pcf(t) = W3 → apcf(t) = W3) ∧ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W3;W4)) ∧ ( pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W4;W5) )) ∧ ( pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W4 ;(SF ∈ (tid0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W5;W6) ) )) ∧ (pcf(t) = W7 → apcf(t) = W7) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v)
Used terms: t
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, propFO(tid1, l1) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), gs.bq(tid0) ≠ [], n < # gs.bq(tid0), n0 < # gs.bq(tid0), FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)) .rfo:= gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l0) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), ∀ 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) = R1) ∧ (pcf(t) = R2 → apcf(t) = R2) ∧ (pcf(t) = R3 → apcf(t) = R3) ∧ (pcf(t) = R4 → apcf(t) = R4) ∧ (pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v) ∧ (pcf(t) = W1 → apcf(t) = W1) ∧ (pcf(t) = W2 → apcf(t) = (SF ∈ (tid0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W1;W2)) ∧ (pcf(t) = W3 → apcf(t) = W3) ∧ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W3;W4)) ∧ ( pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W4;W5) )) ∧ ( pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W4 ;(SF ∈ (tid0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W5;W6) ) )) ∧ (pcf(t) = W7 → apcf(t) = W7) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v) |
ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(t).t = alsf(t).t, ags.writers = gs.fwriters, propFO(tid1, l1) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), gs.bq(tid0) ≠ [], n0 < # gs.bq(tid0), n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)) .rfo:= gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l0) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), pcf(t) = idle → apcf(t) = idle, pcf(t) = ready → apcf(t) = ready, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = R1 → apcf(t) = R1, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = W1 → apcf(t) = W1, pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(alsf(t).t) ⊃ W1;W2), pcf(t) = W3 → apcf(t) = W3, pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;W4), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) ⊃ W4;W5)), pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) ⊃ W4;(SF ∈ gs.bq(alsf(t).t) ⊃ W5;W6))), pcf(t) = W7 → apcf(t) = W7, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ (pcf(t) = W2 → apcf(t) = (SF ∈ (tid0 = alsf(t).t ⊃ gs.bq(alsf(t).t) -p n;gs.bq(alsf(t).t)) ⊃ W1;W2)) ∧ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid0 = alsf(t).t ⊃ gs.bq(alsf(t).t) -p n;gs.bq(alsf(t).t)) ⊃ W3;W4)) ∧ ( pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid0 = alsf(t).t ⊃ gs.bq(alsf(t).t) -p n;gs.bq(alsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid0 = alsf(t).t ⊃ gs.bq(alsf(t).t) -p n;gs.bq(alsf(t).t)) ⊃ W4;W5) )) ∧ ( pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid0 = alsf(t).t ⊃ gs.bq(alsf(t).t) -p n;gs.bq(alsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid0 = alsf(t).t ⊃ gs.bq(alsf(t).t) -p n;gs.bq(alsf(t).t)) ⊃ W4 ;(SF ∈ (tid0 = alsf(t).t ⊃ gs.bq(alsf(t).t) -p n;gs.bq(alsf(t).t)) ⊃ W5;W6) ) ))
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 = R1) ∧ (pc = R2 → apc = R2) ∧ (pc = R3 → apc = R3) ∧ (pc = R4 → apc = R4) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → ls.loc = als.l) ∧ (pc = R2 ∨ pc = R3 ∨ pc = R4 → ls.val = als.v) ∧ (pc = W1 → apc = W1) ∧ (pc = W2 → apc = (SF ∈ gs.bq(ls.t) ⊃ W1;W2)) ∧ (pc = W3 → apc = W3) ∧ (pc = W4 → apc = (W(ls.loc, ls.val) ∈ gs.bq(ls.t) ⊃ W3;W4)) ∧ ( pc = W5 → apc = (W(ls.loc, ls.val) ∈ gs.bq(ls.t) ⊃ W3;(FO(ls.loc) ∈ gs.bq(ls.t) ⊃ W4;W5))) ∧ ( pc = W6 → apc = (W(ls.loc, ls.val) ∈ gs.bq(ls.t) ⊃ W3 ;(FO(ls.loc) ∈ gs.bq(ls.t) ⊃ W4;(SF ∈ gs.bq(ls.t) ⊃ W5;W6)) )) ∧ (pc = W7 → apc = W7) ∧ ( pc = W1 ∨ pc = W2 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → ls.loc = als.l) ∧ ( pc = W1 ∨ pc = W2 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → ls.val = als.v);
| ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(t).t = alsf(t).t, ags.writers = gs.fwriters, propFO(tid1, l1) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), gs.bq(tid0) ≠ [], n0 < # gs.bq(tid0), n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)) .rfo:= gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l0) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, gs.bq(tid0)), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), pcf(t) = idle → apcf(t) = idle, pcf(t) = ready → apcf(t) = ready, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = R1 → apcf(t) = R1, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = W1 → apcf(t) = W1, pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(alsf(t).t) ⊃ W1;W2), pcf(t) = W3 → apcf(t) = W3, pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;W4), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) ⊃ W4;W5)), pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) ⊃ W4;(SF ∈ gs.bq(alsf(t).t) ⊃ W5;W6))), pcf(t) = W7 → apcf(t) = W7, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ (pcf(t) = W2 → apcf(t) = (SF ∈ (tid0 = alsf(t).t ⊃ gs.bq(alsf(t).t) -p n;gs.bq(alsf(t).t)) ⊃ W1;W2)) ∧ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid0 = alsf(t).t ⊃ gs.bq(alsf(t).t) -p n;gs.bq(alsf(t).t)) ⊃ W3;W4)) ∧ ( pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid0 = alsf(t).t ⊃ gs.bq(alsf(t).t) -p n;gs.bq(alsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid0 = alsf(t).t ⊃ gs.bq(alsf(t).t) -p n;gs.bq(alsf(t).t)) ⊃ W4;W5) )) ∧ ( pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid0 = alsf(t).t ⊃ gs.bq(alsf(t).t) -p n;gs.bq(alsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid0 = alsf(t).t ⊃ gs.bq(alsf(t).t) -p n;gs.bq(alsf(t).t)) ⊃ W4 ;(SF ∈ (tid0 = alsf(t).t ⊃ gs.bq(alsf(t).t) -p n;gs.bq(alsf(t).t)) ⊃ W5;W6) ) )) |
ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(t).t = alsf(t).t, ags.writers = gs.fwriters, propFO(tid1, l1) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), tid0 = alsf(t).t, gs.bq(tid0) ≠ [], n < # gs.bq(tid0), n0 < # gs.bq(tid0), FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)) .rfo:= gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l0) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W7 → apcf(t) = W7, pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) ⊃ W4;(SF ∈ gs.bq(alsf(t).t) ⊃ W5;W6))), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) ⊃ W4;W5)), pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;W4), pcf(t) = W3 → apcf(t) = W3, pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(alsf(t).t) ⊃ W1;W2), pcf(t) = W1 → apcf(t) = W1, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R1 → apcf(t) = R1, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = ready → apcf(t) = ready, pcf(t) = idle → apcf(t) = idle, ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ (pcf(t) = W2 → apcf(t) = (SF ∈ (tid0 = alsf(t).t ⊃ gs.bq(alsf(t).t) -p n;gs.bq(alsf(t).t)) ⊃ W1;W2)) ∧ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid0 = alsf(t).t ⊃ gs.bq(alsf(t).t) -p n;gs.bq(alsf(t).t)) ⊃ W3;W4)) ∧ ( pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid0 = alsf(t).t ⊃ gs.bq(alsf(t).t) -p n;gs.bq(alsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid0 = alsf(t).t ⊃ gs.bq(alsf(t).t) -p n;gs.bq(alsf(t).t)) ⊃ W4;W5) )) ∧ ( pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid0 = alsf(t).t ⊃ gs.bq(alsf(t).t) -p n;gs.bq(alsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid0 = alsf(t).t ⊃ gs.bq(alsf(t).t) -p n;gs.bq(alsf(t).t)) ⊃ W4 ;(SF ∈ (tid0 = alsf(t).t ⊃ gs.bq(alsf(t).t) -p n;gs.bq(alsf(t).t)) ⊃ W5;W6) ) ))
Used formulas: tid0 = alsf(t).t
| ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(t).t = alsf(t).t, ags.writers = gs.fwriters, propFO(tid1, l1) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), tid0 = alsf(t).t, gs.bq(tid0) ≠ [], n < # gs.bq(tid0), n0 < # gs.bq(tid0), FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)) .rfo:= gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l0) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), isPropFO(n0, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W7 → apcf(t) = W7, pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) ⊃ W4;(SF ∈ gs.bq(alsf(t).t) ⊃ W5;W6))), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) ⊃ W4;W5)), pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;W4), pcf(t) = W3 → apcf(t) = W3, pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(alsf(t).t) ⊃ W1;W2), pcf(t) = W1 → apcf(t) = W1, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R1 → apcf(t) = R1, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = ready → apcf(t) = ready, pcf(t) = idle → apcf(t) = idle, ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ (pcf(t) = W2 → apcf(t) = (SF ∈ (tid0 = alsf(t).t ⊃ gs.bq(alsf(t).t) -p n;gs.bq(alsf(t).t)) ⊃ W1;W2)) ∧ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid0 = alsf(t).t ⊃ gs.bq(alsf(t).t) -p n;gs.bq(alsf(t).t)) ⊃ W3;W4)) ∧ ( pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid0 = alsf(t).t ⊃ gs.bq(alsf(t).t) -p n;gs.bq(alsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid0 = alsf(t).t ⊃ gs.bq(alsf(t).t) -p n;gs.bq(alsf(t).t)) ⊃ W4;W5) )) ∧ ( pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid0 = alsf(t).t ⊃ gs.bq(alsf(t).t) -p n;gs.bq(alsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid0 = alsf(t).t ⊃ gs.bq(alsf(t).t) -p n;gs.bq(alsf(t).t)) ⊃ W4 ;(SF ∈ (tid0 = alsf(t).t ⊃ gs.bq(alsf(t).t) -p n;gs.bq(alsf(t).t)) ⊃ W5;W6) ) )) |
ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(t).t = alsf(t).t, ags.writers = gs.fwriters, propFO(tid1, l1) = (oneMember(alsf(t).t, l0, gs.fwriters) ⊃ doWriteFO(alsf(t).t, l0);propFO(alsf(t).t, l0)), gs.bq(alsf(t).t) ≠ [], n < # gs.bq(alsf(t).t), n0 < # gs.bq(alsf(t).t), FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(alsf(t).t) ')).bq:= gs.bq(alsf(t).t := gs.bq(alsf(t).t) -p n)) .rfo:= gs.rfo(alsf(t).t := (alsf(t).t ∈ gs.fwriters(l0) ⊃ gs.rfo(alsf(t).t);gs.rfo(alsf(t).t) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(alsf(t).t)), isPropFO(n0, l0, gs.bq(alsf(t).t)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W7 → apcf(t) = W7, pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) ⊃ W4;(SF ∈ gs.bq(alsf(t).t) ⊃ W5;W6))), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) ⊃ W4;W5)), pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;W4), pcf(t) = W3 → apcf(t) = W3, pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(alsf(t).t) ⊃ W1;W2), pcf(t) = W1 → apcf(t) = W1, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R1 → apcf(t) = R1, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = ready → apcf(t) = ready, pcf(t) = idle → apcf(t) = idle, ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) -p n ⊃ W3;W4)) ∧ (pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) -p n ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) -p n ⊃ W4;W5))) ∧ ( pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) -p n ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) -p n ⊃ W4;(SF ∈ gs.bq(alsf(t).t) ⊃ W5;W6))))
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ isPropFO(n, l, bel) → (SF ∈ bel -p n ↔ SF ∈ bel); (s)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(t).t = alsf(t).t, ags.writers = gs.fwriters, propFO(tid1, l1) = (oneMember(alsf(t).t, l0, gs.fwriters) ⊃ doWriteFO(alsf(t).t, l0);propFO(alsf(t).t, l0)), gs.bq(alsf(t).t) ≠ [], n < # gs.bq(alsf(t).t), n0 < # gs.bq(alsf(t).t), FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(alsf(t).t) ')).bq:= gs.bq(alsf(t).t := gs.bq(alsf(t).t) -p n)) .rfo:= gs.rfo(alsf(t).t := (alsf(t).t ∈ gs.fwriters(l0) ⊃ gs.rfo(alsf(t).t);gs.rfo(alsf(t).t) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(alsf(t).t)), isPropFO(n0, l0, gs.bq(alsf(t).t)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W7 → apcf(t) = W7, pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) ⊃ W4;(SF ∈ gs.bq(alsf(t).t) ⊃ W5;W6))), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) ⊃ W4;W5)), pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;W4), pcf(t) = W3 → apcf(t) = W3, pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(alsf(t).t) ⊃ W1;W2), pcf(t) = W1 → apcf(t) = W1, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R1 → apcf(t) = R1, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = ready → apcf(t) = ready, pcf(t) = idle → apcf(t) = idle, ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) -p n ⊃ W3;W4)) ∧ (pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) -p n ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) -p n ⊃ W4;W5))) ∧ ( pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) -p n ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) -p n ⊃ W4;(SF ∈ gs.bq(alsf(t).t) ⊃ W5;W6)))) |
⊦ FLITInv(gs, lsf, pcf) ↔ FLITGInv(gs) ∧ (∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)))
ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(t).t = alsf(t).t, ags.writers = gs.fwriters, propFO(tid1, l1) = (oneMember(alsf(t).t, l0, gs.fwriters) ⊃ doWriteFO(alsf(t).t, l0);propFO(alsf(t).t, l0)), gs.bq(alsf(t).t) ≠ [], n0 < # gs.bq(alsf(t).t), n < # gs.bq(alsf(t).t), FLITGInv(gs), FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(alsf(t).t) ')).bq:= gs.bq(alsf(t).t := gs.bq(alsf(t).t) -p n)) .rfo:= gs.rfo(alsf(t).t := (alsf(t).t ∈ gs.fwriters(l0) ⊃ gs.rfo(alsf(t).t);gs.rfo(alsf(t).t) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, gs.bq(alsf(t).t)), isPropFO(n, l0, gs.bq(alsf(t).t)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), pcf(t) = idle → apcf(t) = idle, pcf(t) = ready → apcf(t) = ready, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = R1 → apcf(t) = R1, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = W1 → apcf(t) = W1, pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(alsf(t).t) ⊃ W1;W2), pcf(t) = W3 → apcf(t) = W3, pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;W4), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) ⊃ W4;W5)), pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) ⊃ W4;(SF ∈ gs.bq(alsf(t).t) ⊃ W5;W6))), pcf(t) = W7 → apcf(t) = W7, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) -p n ⊃ W3;W4)) ∧ (pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) -p n ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) -p n ⊃ W4;W5))) ∧ ( pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) -p n ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) -p n ⊃ W4;(SF ∈ gs.bq(alsf(t).t) ⊃ W5;W6))))
Used terms: gs, lsf, pcf
| ⊦ FLITInv(gs, lsf, pcf) ↔ FLITGInv(gs) ∧ (∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t))) |
| ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(t).t = alsf(t).t, ags.writers = gs.fwriters, propFO(tid1, l1) = (oneMember(alsf(t).t, l0, gs.fwriters) ⊃ doWriteFO(alsf(t).t, l0);propFO(alsf(t).t, l0)), gs.bq(alsf(t).t) ≠ [], n0 < # gs.bq(alsf(t).t), n < # gs.bq(alsf(t).t), FLITGInv(gs), FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(alsf(t).t) ')).bq:= gs.bq(alsf(t).t := gs.bq(alsf(t).t) -p n)) .rfo:= gs.rfo(alsf(t).t := (alsf(t).t ∈ gs.fwriters(l0) ⊃ gs.rfo(alsf(t).t);gs.rfo(alsf(t).t) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, gs.bq(alsf(t).t)), isPropFO(n, l0, gs.bq(alsf(t).t)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), pcf(t) = idle → apcf(t) = idle, pcf(t) = ready → apcf(t) = ready, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = R1 → apcf(t) = R1, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = W1 → apcf(t) = W1, pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(alsf(t).t) ⊃ W1;W2), pcf(t) = W3 → apcf(t) = W3, pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;W4), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) ⊃ W4;W5)), pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) ⊃ W4;(SF ∈ gs.bq(alsf(t).t) ⊃ W5;W6))), pcf(t) = W7 → apcf(t) = W7, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) -p n ⊃ W3;W4)) ∧ (pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) -p n ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) -p n ⊃ W4;W5))) ∧ ( pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) -p n ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) -p n ⊃ W4;(SF ∈ gs.bq(alsf(t).t) ⊃ W5;W6)))) |
ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(t).t = alsf(t).t, lsf(t).t = t, ags.writers = gs.fwriters, propFO(tid1, l1) = (oneMember(alsf(t).t, l0, gs.fwriters) ⊃ doWriteFO(alsf(t).t, l0);propFO(alsf(t).t, l0)), gs.bq(alsf(t).t) ≠ [], n < # gs.bq(alsf(t).t), n0 < # gs.bq(alsf(t).t), FLITGInv(gs), FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(alsf(t).t) ')).bq:= gs.bq(alsf(t).t := gs.bq(alsf(t).t) -p n)) .rfo:= gs.rfo(alsf(t).t := (alsf(t).t ∈ gs.fwriters(l0) ⊃ gs.rfo(alsf(t).t);gs.rfo(alsf(t).t) -p n)), lsf, pcf), FLITLInv(gs, lsf(t), pcf(t)), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(alsf(t).t)), isPropFO(n0, l0, gs.bq(alsf(t).t)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W7 → apcf(t) = W7, pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) ⊃ W4;(SF ∈ gs.bq(alsf(t).t) ⊃ W5;W6))), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) ⊃ W4;W5)), pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;W4), pcf(t) = W3 → apcf(t) = W3, pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(alsf(t).t) ⊃ W1;W2), pcf(t) = W1 → apcf(t) = W1, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R1 → apcf(t) = R1, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = ready → apcf(t) = ready, pcf(t) = idle → apcf(t) = idle, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) -p n ⊃ W3;W4)) ∧ (pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) -p n ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) -p n ⊃ W4;W5))) ∧ ( pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) -p n ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) -p n ⊃ W4;(SF ∈ gs.bq(alsf(t).t) ⊃ W5;W6))))
Used terms: t
| ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(t).t = alsf(t).t, lsf(t).t = t, ags.writers = gs.fwriters, propFO(tid1, l1) = (oneMember(alsf(t).t, l0, gs.fwriters) ⊃ doWriteFO(alsf(t).t, l0);propFO(alsf(t).t, l0)), gs.bq(alsf(t).t) ≠ [], n < # gs.bq(alsf(t).t), n0 < # gs.bq(alsf(t).t), FLITGInv(gs), FLITInv ( ((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(alsf(t).t) ')).bq:= gs.bq(alsf(t).t := gs.bq(alsf(t).t) -p n)) .rfo:= gs.rfo(alsf(t).t := (alsf(t).t ∈ gs.fwriters(l0) ⊃ gs.rfo(alsf(t).t);gs.rfo(alsf(t).t) -p n)), lsf, pcf), FLITLInv(gs, lsf(t), pcf(t)), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(alsf(t).t)), isPropFO(n0, l0, gs.bq(alsf(t).t)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W7 → apcf(t) = W7, pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) ⊃ W4;(SF ∈ gs.bq(alsf(t).t) ⊃ W5;W6))), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) ⊃ W4;W5)), pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;W4), pcf(t) = W3 → apcf(t) = W3, pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(alsf(t).t) ⊃ W1;W2), pcf(t) = W1 → apcf(t) = W1, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R1 → apcf(t) = R1, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = ready → apcf(t) = ready, pcf(t) = idle → apcf(t) = idle, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) -p n ⊃ W3;W4)) ∧ (pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) -p n ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) -p n ⊃ W4;W5))) ∧ ( pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) -p n ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) -p n ⊃ W4;(SF ∈ gs.bq(alsf(t).t) ⊃ W5;W6)))) |
ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(t).t = t, alsf(t).t = t, ags.writers = gs.fwriters, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), gs.bq(t) ≠ [], n < # gs.bq(t), n0 < # gs.bq(t), FLITGInv(gs), FLITInv (((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := gs.bq(t) -p n)).rfo:= gs.rfo(t := (t ∈ gs.fwriters(l0) ⊃ gs.rfo(t);gs.rfo(t) -p n)), lsf, pcf), FLITLInv(gs, lsf(t), pcf(t)), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(t)), isPropFO(n0, l0, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W7 → apcf(t) = W7, pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;(SF ∈ gs.bq(t) ⊃ W5;W6))), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;W5)), pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;W4), pcf(t) = W3 → apcf(t) = W3, pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(t) ⊃ W1;W2), pcf(t) = W1 → apcf(t) = W1, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R1 → apcf(t) = R1, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = ready → apcf(t) = ready, pcf(t) = idle → apcf(t) = idle, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) -p n ⊃ W3;W4)) ∧ (pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) -p n ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) -p n ⊃ W4;W5))) ∧ (pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) -p n ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) -p n ⊃ W4;(SF ∈ gs.bq(t) ⊃ W5;W6))))
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(t).t = t, alsf(t).t = t, ags.writers = gs.fwriters, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), gs.bq(t) ≠ [], n < # gs.bq(t), n0 < # gs.bq(t), FLITGInv(gs), FLITInv (((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := gs.bq(t) -p n)).rfo:= gs.rfo(t := (t ∈ gs.fwriters(l0) ⊃ gs.rfo(t);gs.rfo(t) -p n)), lsf, pcf), FLITLInv(gs, lsf(t), pcf(t)), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(t)), isPropFO(n0, l0, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W7 → apcf(t) = W7, pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;(SF ∈ gs.bq(t) ⊃ W5;W6))), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;W5)), pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;W4), pcf(t) = W3 → apcf(t) = W3, pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(t) ⊃ W1;W2), pcf(t) = W1 → apcf(t) = W1, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R1 → apcf(t) = R1, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = ready → apcf(t) = ready, pcf(t) = idle → apcf(t) = idle, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) -p n ⊃ W3;W4)) ∧ (pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) -p n ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) -p n ⊃ W4;W5))) ∧ (pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) -p n ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) -p n ⊃ W4;(SF ∈ gs.bq(t) ⊃ W5;W6)))) |
⊦ FLITLInv(gs, ls, pc) ↔ (pc = W1 ∨ pc = W2 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → notMember(ls.t, gs.freaders)) ∧ (pc = W1 ∨ pc = W2 ∨ pc = W7 → notMember(ls.t, gs.fwriters)) ∧ (pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 → oneMember(ls.t, ls.loc, gs.fwriters)) ∧ (pc = W1 ∨ pc = W2 → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = W3 ∨ pc = W7 → noPending(ls.t, gs.bq, gs.pq)) ∧ (pc = W5 ∨ pc = W6 → FOFollowsW(ls.t, gs.bq(ls.t), gs.pq(ls.loc), ls.loc)) ∧ (pc = W1 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W7 → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → gs.rfo(ls.t) = []) ∧ (pc = W3 → gs.bq(ls.t) = []) ∧ (pc = W4 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ') ∧ (pc = W5 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = FO(ls.loc) ' ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' + FO(ls.loc) ') ∧ (pc = W6 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = SF ' ∨ gs.bq(ls.t) = FO(ls.loc) ' + SF ' ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' + FO(ls.loc) ' + SF ') ∧ (pc = W4 ∨ pc = W5 ∨ pc = W6 → gs.bq(ls.t) ≠ [] ∧ gs.bq(ls.t).head.W? → gs.bq(ls.t).head = W(ls.loc, ls.val)) ∧ (pc = W1 ∨ pc = W7 → gs.rfo(ls.t) = gs.bq(ls.t)) ∧ (pc = W2 → gs.rfo(ls.t) = gs.bq(ls.t) ∨ gs.rfo(ls.t) + SF ' = gs.bq(ls.t)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → notMember(ls.t, gs.fwriters)) ∧ (pc = R1 ∨ pc = R4 → notMember(ls.t, gs.freaders)) ∧ (pc = R2 ∨ pc = R3 → oneMember(ls.t, ls.loc, gs.freaders)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → gs.rfo(ls.t) = gs.bq(ls.t)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → notMember(ls.t, gs.fwriters)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → notMember(ls.t, gs.freaders)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = idle ∨ pc = crashed → noPending(ls.t, gs.bq, gs.pq)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → gs.rfo(ls.t) = gs.bq(ls.t))
ags.ctr = gs.fctr, ags.mem = gs.pmem, alsf(t).t = t, lsf(t).t = t, ags.writers = gs.fwriters, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), gs.bq(t) ≠ [], n0 < # gs.bq(t), n < # gs.bq(t), FLITGInv(gs), FLITInv (((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := gs.bq(t) -p n)).rfo:= gs.rfo(t := (t ∈ gs.fwriters(l0) ⊃ gs.rfo(t);gs.rfo(t) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, gs.bq(t)), isPropFO(n, l0, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), pcf(t) = idle → apcf(t) = idle, pcf(t) = ready → apcf(t) = ready, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = R1 → apcf(t) = R1, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = W1 → apcf(t) = W1, pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(t) ⊃ W1;W2), pcf(t) = W3 → apcf(t) = W3, pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;W4), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;W5)), pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;(SF ∈ gs.bq(t) ⊃ W5;W6))), pcf(t) = W7 → apcf(t) = W7, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → notMember(lsf(t).t, gs.freaders), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W7 → notMember(lsf(t).t, gs.fwriters), pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → oneMember(lsf(t).t, lsf(t).loc, gs.fwriters), pcf(t) = W1 ∨ pcf(t) = W2 → noPendingW(lsf(t).t, gs.bq, gs.pq), pcf(t) = W3 ∨ pcf(t) = W7 → noPending(lsf(t).t, gs.bq, gs.pq), pcf(t) = W5 ∨ pcf(t) = W6 → FOFollowsW(lsf(t).t, gs.bq(lsf(t).t), gs.pq(lsf(t).loc), lsf(t).loc), pcf(t) = W1 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W7 → ¬ SF ∈ gs.bq(lsf(t).t), pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → gs.rfo(lsf(t).t) = [], pcf(t) = W3 → gs.bq(lsf(t).t) = [], pcf(t) = W4 → gs.bq(lsf(t).t) = [] ∨ gs.bq(lsf(t).t) = W(lsf(t).loc, lsf(t).val) ', pcf(t) = W5 → gs.bq(lsf(t).t) = [] ∨ gs.bq(lsf(t).t) = FO(lsf(t).loc) ' ∨ gs.bq(lsf(t).t) = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ', pcf(t) = W6 → gs.bq(lsf(t).t) = [] ∨ gs.bq(lsf(t).t) = SF ' ∨ gs.bq(lsf(t).t) = FO(lsf(t).loc) ' + SF ' ∨ gs.bq(lsf(t).t) = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ' + SF ', pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → gs.bq(lsf(t).t) ≠ [] ∧ gs.bq(lsf(t).t).head.W? → gs.bq(lsf(t).t).head = W(lsf(t).loc, lsf(t).val), pcf(t) = W1 ∨ pcf(t) = W7 → gs.rfo(lsf(t).t) = gs.bq(lsf(t).t), pcf(t) = W2 → gs.rfo(lsf(t).t) = gs.bq(lsf(t).t) ∨ gs.rfo(lsf(t).t) + SF ' = gs.bq(lsf(t).t), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → noPendingW(lsf(t).t, gs.bq, gs.pq), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → notMember(lsf(t).t, gs.fwriters), pcf(t) = R1 ∨ pcf(t) = R4 → notMember(lsf(t).t, gs.freaders), pcf(t) = R2 ∨ pcf(t) = R3 → oneMember(lsf(t).t, lsf(t).loc, gs.freaders), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → ¬ SF ∈ gs.bq(lsf(t).t), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → gs.rfo(lsf(t).t) = gs.bq(lsf(t).t), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → notMember(lsf(t).t, gs.fwriters), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → notMember(lsf(t).t, gs.freaders), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → noPendingW(lsf(t).t, gs.bq, gs.pq), pcf(t) = idle ∨ pcf(t) = crashed → noPending(lsf(t).t, gs.bq, gs.pq), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → ¬ SF ∈ gs.bq(lsf(t).t), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → gs.rfo(lsf(t).t) = gs.bq(lsf(t).t), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) -p n ⊃ W3;W4)) ∧ (pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) -p n ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) -p n ⊃ W4;W5))) ∧ (pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) -p n ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) -p n ⊃ W4;(SF ∈ gs.bq(t) ⊃ W5;W6))))
Used terms: gs, lsf(t), pcf(t)
| ⊦ FLITLInv(gs, ls, pc) ↔ (pc = W1 ∨ pc = W2 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → notMember(ls.t, gs.freaders)) ∧ (pc = W1 ∨ pc = W2 ∨ pc = W7 → notMember(ls.t, gs.fwriters)) ∧ (pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 → oneMember(ls.t, ls.loc, gs.fwriters)) ∧ (pc = W1 ∨ pc = W2 → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = W3 ∨ pc = W7 → noPending(ls.t, gs.bq, gs.pq)) ∧ (pc = W5 ∨ pc = W6 → FOFollowsW(ls.t, gs.bq(ls.t), gs.pq(ls.loc), ls.loc)) ∧ (pc = W1 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W7 → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → gs.rfo(ls.t) = []) ∧ (pc = W3 → gs.bq(ls.t) = []) ∧ (pc = W4 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ') ∧ (pc = W5 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = FO(ls.loc) ' ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' + FO(ls.loc) ') ∧ (pc = W6 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = SF ' ∨ gs.bq(ls.t) = FO(ls.loc) ' + SF ' ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' + FO(ls.loc) ' + SF ') ∧ (pc = W4 ∨ pc = W5 ∨ pc = W6 → gs.bq(ls.t) ≠ [] ∧ gs.bq(ls.t).head.W? → gs.bq(ls.t).head = W(ls.loc, ls.val)) ∧ (pc = W1 ∨ pc = W7 → gs.rfo(ls.t) = gs.bq(ls.t)) ∧ (pc = W2 → gs.rfo(ls.t) = gs.bq(ls.t) ∨ gs.rfo(ls.t) + SF ' = gs.bq(ls.t)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → notMember(ls.t, gs.fwriters)) ∧ (pc = R1 ∨ pc = R4 → notMember(ls.t, gs.freaders)) ∧ (pc = R2 ∨ pc = R3 → oneMember(ls.t, ls.loc, gs.freaders)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → gs.rfo(ls.t) = gs.bq(ls.t)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → notMember(ls.t, gs.fwriters)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → notMember(ls.t, gs.freaders)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = idle ∨ pc = crashed → noPending(ls.t, gs.bq, gs.pq)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → gs.rfo(ls.t) = gs.bq(ls.t)) |
| ags.ctr = gs.fctr, ags.mem = gs.pmem, alsf(t).t = t, lsf(t).t = t, ags.writers = gs.fwriters, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), gs.bq(t) ≠ [], n0 < # gs.bq(t), n < # gs.bq(t), FLITGInv(gs), FLITInv (((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := gs.bq(t) -p n)).rfo:= gs.rfo(t := (t ∈ gs.fwriters(l0) ⊃ gs.rfo(t);gs.rfo(t) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, gs.bq(t)), isPropFO(n, l0, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), pcf(t) = idle → apcf(t) = idle, pcf(t) = ready → apcf(t) = ready, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = R1 → apcf(t) = R1, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = W1 → apcf(t) = W1, pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(t) ⊃ W1;W2), pcf(t) = W3 → apcf(t) = W3, pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;W4), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;W5)), pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;(SF ∈ gs.bq(t) ⊃ W5;W6))), pcf(t) = W7 → apcf(t) = W7, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → notMember(lsf(t).t, gs.freaders), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W7 → notMember(lsf(t).t, gs.fwriters), pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → oneMember(lsf(t).t, lsf(t).loc, gs.fwriters), pcf(t) = W1 ∨ pcf(t) = W2 → noPendingW(lsf(t).t, gs.bq, gs.pq), pcf(t) = W3 ∨ pcf(t) = W7 → noPending(lsf(t).t, gs.bq, gs.pq), pcf(t) = W5 ∨ pcf(t) = W6 → FOFollowsW(lsf(t).t, gs.bq(lsf(t).t), gs.pq(lsf(t).loc), lsf(t).loc), pcf(t) = W1 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W7 → ¬ SF ∈ gs.bq(lsf(t).t), pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → gs.rfo(lsf(t).t) = [], pcf(t) = W3 → gs.bq(lsf(t).t) = [], pcf(t) = W4 → gs.bq(lsf(t).t) = [] ∨ gs.bq(lsf(t).t) = W(lsf(t).loc, lsf(t).val) ', pcf(t) = W5 → gs.bq(lsf(t).t) = [] ∨ gs.bq(lsf(t).t) = FO(lsf(t).loc) ' ∨ gs.bq(lsf(t).t) = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ', pcf(t) = W6 → gs.bq(lsf(t).t) = [] ∨ gs.bq(lsf(t).t) = SF ' ∨ gs.bq(lsf(t).t) = FO(lsf(t).loc) ' + SF ' ∨ gs.bq(lsf(t).t) = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ' + SF ', pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → gs.bq(lsf(t).t) ≠ [] ∧ gs.bq(lsf(t).t).head.W? → gs.bq(lsf(t).t).head = W(lsf(t).loc, lsf(t).val), pcf(t) = W1 ∨ pcf(t) = W7 → gs.rfo(lsf(t).t) = gs.bq(lsf(t).t), pcf(t) = W2 → gs.rfo(lsf(t).t) = gs.bq(lsf(t).t) ∨ gs.rfo(lsf(t).t) + SF ' = gs.bq(lsf(t).t), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → noPendingW(lsf(t).t, gs.bq, gs.pq), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → notMember(lsf(t).t, gs.fwriters), pcf(t) = R1 ∨ pcf(t) = R4 → notMember(lsf(t).t, gs.freaders), pcf(t) = R2 ∨ pcf(t) = R3 → oneMember(lsf(t).t, lsf(t).loc, gs.freaders), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → ¬ SF ∈ gs.bq(lsf(t).t), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → gs.rfo(lsf(t).t) = gs.bq(lsf(t).t), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → notMember(lsf(t).t, gs.fwriters), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → notMember(lsf(t).t, gs.freaders), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → noPendingW(lsf(t).t, gs.bq, gs.pq), pcf(t) = idle ∨ pcf(t) = crashed → noPending(lsf(t).t, gs.bq, gs.pq), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → ¬ SF ∈ gs.bq(lsf(t).t), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → gs.rfo(lsf(t).t) = gs.bq(lsf(t).t), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) -p n ⊃ W3;W4)) ∧ (pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) -p n ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) -p n ⊃ W4;W5))) ∧ (pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) -p n ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) -p n ⊃ W4;(SF ∈ gs.bq(t) ⊃ W5;W6)))) |
ags.ctr = gs.fctr, ags.mem = gs.pmem, alsf(t).t = t, lsf(t).t = t, ags.writers = gs.fwriters, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), gs.bq(t) ≠ [], pcf(t) ≠ W3, n0 < # gs.bq(t), n < # gs.bq(t), FLITGInv(gs), FLITInv (((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := gs.bq(t) -p n)).rfo:= gs.rfo(t := (t ∈ gs.fwriters(l0) ⊃ gs.rfo(t);gs.rfo(t) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, gs.bq(t)), isPropFO(n, l0, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), pcf(t) = W1 ∨ pcf(t) = W7 → gs.rfo(t) = gs.bq(t), pcf(t) = W2 → gs.rfo(t) = gs.bq(t) ∨ gs.rfo(t) + SF ' = gs.bq(t), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → noPendingW(t, gs.bq, gs.pq), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → notMember(t, gs.fwriters), pcf(t) = R1 ∨ pcf(t) = R4 → notMember(t, gs.freaders), pcf(t) = R2 ∨ pcf(t) = R3 → oneMember(t, lsf(t).loc, gs.freaders), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → ¬ SF ∈ gs.bq(t), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → gs.rfo(t) = gs.bq(t), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → notMember(t, gs.fwriters), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → notMember(t, gs.freaders), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → noPendingW(t, gs.bq, gs.pq), pcf(t) = idle ∨ pcf(t) = crashed → noPending(t, gs.bq, gs.pq), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → ¬ SF ∈ gs.bq(t), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → gs.rfo(t) = gs.bq(t), pcf(t) = idle → apcf(t) = idle, pcf(t) = ready → apcf(t) = ready, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = R1 → apcf(t) = R1, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = W1 → apcf(t) = W1, pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(t) ⊃ W1;W2), pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;W4), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;W5)), pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;(SF ∈ gs.bq(t) ⊃ W5;W6))), pcf(t) = W7 → apcf(t) = W7, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W7 → notMember(t, gs.fwriters), pcf(t) = W1 ∨ pcf(t) = W2 → noPendingW(t, gs.bq, gs.pq), pcf(t) = W5 ∨ pcf(t) = W6 → FOFollowsW(t, gs.bq(t), gs.pq(lsf(t).loc), lsf(t).loc), pcf(t) = W4 → gs.bq(t) = W(lsf(t).loc, lsf(t).val) ', pcf(t) = W5 → gs.bq(t) = FO(lsf(t).loc) ' ∨ gs.bq(t) = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ', pcf(t) = W6 → gs.bq(t) = SF ' ∨ gs.bq(t) = FO(lsf(t).loc) ' + SF ' ∨ gs.bq(t) = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ' + SF ', pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → gs.bq(t).head.W? → gs.bq(t).head = W(lsf(t).loc, lsf(t).val), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → notMember(t, gs.freaders), pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → oneMember(t, lsf(t).loc, gs.fwriters), pcf(t) = W7 → noPending(t, gs.bq, gs.pq), pcf(t) = W1 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W7 → ¬ SF ∈ gs.bq(t), pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → gs.rfo(t) = [], ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) -p n ⊃ W3;W4)) ∧ (pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) -p n ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) -p n ⊃ W4;W5))) ∧ (pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) -p n ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) -p n ⊃ W4;(SF ∈ gs.bq(t) ⊃ W5;W6))))
| ags.ctr = gs.fctr, ags.mem = gs.pmem, alsf(t).t = t, lsf(t).t = t, ags.writers = gs.fwriters, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), gs.bq(t) ≠ [], pcf(t) ≠ W3, n0 < # gs.bq(t), n < # gs.bq(t), FLITGInv(gs), FLITInv (((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := gs.bq(t) -p n)).rfo:= gs.rfo(t := (t ∈ gs.fwriters(l0) ⊃ gs.rfo(t);gs.rfo(t) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, gs.bq(t)), isPropFO(n, l0, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), pcf(t) = W1 ∨ pcf(t) = W7 → gs.rfo(t) = gs.bq(t), pcf(t) = W2 → gs.rfo(t) = gs.bq(t) ∨ gs.rfo(t) + SF ' = gs.bq(t), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → noPendingW(t, gs.bq, gs.pq), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → notMember(t, gs.fwriters), pcf(t) = R1 ∨ pcf(t) = R4 → notMember(t, gs.freaders), pcf(t) = R2 ∨ pcf(t) = R3 → oneMember(t, lsf(t).loc, gs.freaders), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → ¬ SF ∈ gs.bq(t), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → gs.rfo(t) = gs.bq(t), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → notMember(t, gs.fwriters), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → notMember(t, gs.freaders), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → noPendingW(t, gs.bq, gs.pq), pcf(t) = idle ∨ pcf(t) = crashed → noPending(t, gs.bq, gs.pq), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → ¬ SF ∈ gs.bq(t), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → gs.rfo(t) = gs.bq(t), pcf(t) = idle → apcf(t) = idle, pcf(t) = ready → apcf(t) = ready, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = R1 → apcf(t) = R1, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = W1 → apcf(t) = W1, pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(t) ⊃ W1;W2), pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;W4), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;W5)), pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;(SF ∈ gs.bq(t) ⊃ W5;W6))), pcf(t) = W7 → apcf(t) = W7, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W7 → notMember(t, gs.fwriters), pcf(t) = W1 ∨ pcf(t) = W2 → noPendingW(t, gs.bq, gs.pq), pcf(t) = W5 ∨ pcf(t) = W6 → FOFollowsW(t, gs.bq(t), gs.pq(lsf(t).loc), lsf(t).loc), pcf(t) = W4 → gs.bq(t) = W(lsf(t).loc, lsf(t).val) ', pcf(t) = W5 → gs.bq(t) = FO(lsf(t).loc) ' ∨ gs.bq(t) = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ', pcf(t) = W6 → gs.bq(t) = SF ' ∨ gs.bq(t) = FO(lsf(t).loc) ' + SF ' ∨ gs.bq(t) = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ' + SF ', pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → gs.bq(t).head.W? → gs.bq(t).head = W(lsf(t).loc, lsf(t).val), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → notMember(t, gs.freaders), pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → oneMember(t, lsf(t).loc, gs.fwriters), pcf(t) = W7 → noPending(t, gs.bq, gs.pq), pcf(t) = W1 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W7 → ¬ SF ∈ gs.bq(t), pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → gs.rfo(t) = [], ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) -p n ⊃ W3;W4)) ∧ (pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) -p n ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) -p n ⊃ W4;W5))) ∧ (pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) -p n ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) -p n ⊃ W4;(SF ∈ gs.bq(t) ⊃ W5;W6)))) |
gs.bq(t) = head + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(t).t = t, alsf(t).t = t, ags.writers = gs.fwriters, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), gs.bq(t) ≠ [], pcf(t) ≠ W3, n < # gs.bq(t), n0 < # gs.bq(t), FLITGInv(gs), FLITInv (((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := gs.bq(t) -p n)).rfo:= gs.rfo(t := (t ∈ gs.fwriters(l0) ⊃ gs.rfo(t);gs.rfo(t) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(t)), isPropFO(n0, l0, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → gs.rfo(t) = [], pcf(t) = W1 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W7 → ¬ SF ∈ gs.bq(t), pcf(t) = W7 → noPending(t, gs.bq, gs.pq), pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → oneMember(t, lsf(t).loc, gs.fwriters), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → notMember(t, gs.freaders), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → head.W? → head = W(lsf(t).loc, lsf(t).val), pcf(t) = W6 → gs.bq(t) = SF ' ∨ gs.bq(t) = FO(lsf(t).loc) ' + SF ' ∨ gs.bq(t) = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ' + SF ', pcf(t) = W5 → gs.bq(t) = FO(lsf(t).loc) ' ∨ gs.bq(t) = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ', pcf(t) = W4 → gs.bq(t) = W(lsf(t).loc, lsf(t).val) ', pcf(t) = W5 ∨ pcf(t) = W6 → FOFollowsW(t, gs.bq(t), gs.pq(lsf(t).loc), lsf(t).loc), pcf(t) = W1 ∨ pcf(t) = W2 → noPendingW(t, gs.bq, gs.pq), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W7 → notMember(t, gs.fwriters), pcf(t) = W7 → apcf(t) = W7, pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;(SF ∈ gs.bq(t) ⊃ W5;W6))), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;W5)), pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;W4), pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(t) ⊃ W1;W2), pcf(t) = W1 → apcf(t) = W1, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R1 → apcf(t) = R1, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = ready → apcf(t) = ready, pcf(t) = idle → apcf(t) = idle, pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → gs.rfo(t) = gs.bq(t), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → ¬ SF ∈ gs.bq(t), pcf(t) = idle ∨ pcf(t) = crashed → noPending(t, gs.bq, gs.pq), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → noPendingW(t, gs.bq, gs.pq), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → notMember(t, gs.freaders), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → notMember(t, gs.fwriters), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → gs.rfo(t) = gs.bq(t), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → ¬ SF ∈ gs.bq(t), pcf(t) = R2 ∨ pcf(t) = R3 → oneMember(t, lsf(t).loc, gs.freaders), pcf(t) = R1 ∨ pcf(t) = R4 → notMember(t, gs.freaders), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → notMember(t, gs.fwriters), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → noPendingW(t, gs.bq, gs.pq), pcf(t) = W2 → gs.rfo(t) = gs.bq(t) ∨ gs.rfo(t) + SF ' = gs.bq(t), pcf(t) = W1 ∨ pcf(t) = W7 → gs.rfo(t) = gs.bq(t), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) -p n ⊃ W3;W4)) ∧ (pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) -p n ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) -p n ⊃ W4;W5))) ∧ (pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) -p n ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) -p n ⊃ W4;(SF ∈ gs.bq(t) ⊃ W5;W6))))
Used simplifier rules: ⊦ x ≠ [] → (head = x.head ∧ tail = x.tail ↔ x = head + tail); (elim) Used terms: gs.bq(t), head, bel
| gs.bq(t) = head + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(t).t = t, alsf(t).t = t, ags.writers = gs.fwriters, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), gs.bq(t) ≠ [], pcf(t) ≠ W3, n < # gs.bq(t), n0 < # gs.bq(t), FLITGInv(gs), FLITInv (((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := gs.bq(t) -p n)).rfo:= gs.rfo(t := (t ∈ gs.fwriters(l0) ⊃ gs.rfo(t);gs.rfo(t) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(t)), isPropFO(n0, l0, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → gs.rfo(t) = [], pcf(t) = W1 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W7 → ¬ SF ∈ gs.bq(t), pcf(t) = W7 → noPending(t, gs.bq, gs.pq), pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → oneMember(t, lsf(t).loc, gs.fwriters), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → notMember(t, gs.freaders), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → head.W? → head = W(lsf(t).loc, lsf(t).val), pcf(t) = W6 → gs.bq(t) = SF ' ∨ gs.bq(t) = FO(lsf(t).loc) ' + SF ' ∨ gs.bq(t) = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ' + SF ', pcf(t) = W5 → gs.bq(t) = FO(lsf(t).loc) ' ∨ gs.bq(t) = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ', pcf(t) = W4 → gs.bq(t) = W(lsf(t).loc, lsf(t).val) ', pcf(t) = W5 ∨ pcf(t) = W6 → FOFollowsW(t, gs.bq(t), gs.pq(lsf(t).loc), lsf(t).loc), pcf(t) = W1 ∨ pcf(t) = W2 → noPendingW(t, gs.bq, gs.pq), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W7 → notMember(t, gs.fwriters), pcf(t) = W7 → apcf(t) = W7, pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;(SF ∈ gs.bq(t) ⊃ W5;W6))), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;W5)), pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;W4), pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(t) ⊃ W1;W2), pcf(t) = W1 → apcf(t) = W1, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R1 → apcf(t) = R1, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = ready → apcf(t) = ready, pcf(t) = idle → apcf(t) = idle, pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → gs.rfo(t) = gs.bq(t), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → ¬ SF ∈ gs.bq(t), pcf(t) = idle ∨ pcf(t) = crashed → noPending(t, gs.bq, gs.pq), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → noPendingW(t, gs.bq, gs.pq), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → notMember(t, gs.freaders), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → notMember(t, gs.fwriters), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → gs.rfo(t) = gs.bq(t), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → ¬ SF ∈ gs.bq(t), pcf(t) = R2 ∨ pcf(t) = R3 → oneMember(t, lsf(t).loc, gs.freaders), pcf(t) = R1 ∨ pcf(t) = R4 → notMember(t, gs.freaders), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → notMember(t, gs.fwriters), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → noPendingW(t, gs.bq, gs.pq), pcf(t) = W2 → gs.rfo(t) = gs.bq(t) ∨ gs.rfo(t) + SF ' = gs.bq(t), pcf(t) = W1 ∨ pcf(t) = W7 → gs.rfo(t) = gs.bq(t), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) -p n ⊃ W3;W4)) ∧ (pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) -p n ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) -p n ⊃ W4;W5))) ∧ (pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) -p n ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) -p n ⊃ W4;(SF ∈ gs.bq(t) ⊃ W5;W6)))) |
gs.bq(t) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, alsf(t).t = t, lsf(t).t = t, ags.writers = gs.fwriters, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), pcf(t) ≠ W3, FLITGInv(gs), FLITInv (((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := (head ' + bel) -p n)).rfo:= gs.rfo(t := (t ∈ gs.fwriters(l0) ⊃ gs.rfo(t);gs.rfo(t) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, head ' + bel), isPropFO(n, l0, head ' + bel), reorder(ags.p, gs.pq, gs.rfo), n0 ≤ # bel, n ≤ # bel, ¬ oneMember(tid1, als.l, gs.fwriters), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → SF ≠ head ∧ ¬ SF ∈ bel, pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → SF ≠ head ∧ ¬ SF ∈ bel, pcf(t) = W2 → apcf(t) = (SF = head ∨ SF ∈ bel ⊃ W1;W2), pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = head ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;W4), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = head ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) = head ∨ FO(lsf(t).loc) ∈ bel ⊃ W4;W5)), pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = head ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3 ;(FO(lsf(t).loc) = head ∨ FO(lsf(t).loc) ∈ bel ⊃ W4;(SF = head ∨ SF ∈ bel ⊃ W5;W6)) ), pcf(t) = W1 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W7 → SF ≠ head ∧ ¬ SF ∈ bel, pcf(t) = W1 ∨ pcf(t) = W7 → gs.rfo(t) = head ' + bel, pcf(t) = W2 → gs.rfo(t) = head ' + bel ∨ gs.rfo(t) + SF ' = head ' + bel, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → noPendingW(t, gs.bq, gs.pq), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → notMember(t, gs.fwriters), pcf(t) = R1 ∨ pcf(t) = R4 → notMember(t, gs.freaders), pcf(t) = R2 ∨ pcf(t) = R3 → oneMember(t, lsf(t).loc, gs.freaders), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → gs.rfo(t) = head ' + bel, pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → notMember(t, gs.fwriters), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → notMember(t, gs.freaders), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → noPendingW(t, gs.bq, gs.pq), pcf(t) = idle ∨ pcf(t) = crashed → noPending(t, gs.bq, gs.pq), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → gs.rfo(t) = head ' + bel, pcf(t) = idle → apcf(t) = idle, pcf(t) = ready → apcf(t) = ready, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = R1 → apcf(t) = R1, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = W1 → apcf(t) = W1, pcf(t) = W7 → apcf(t) = W7, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W7 → notMember(t, gs.fwriters), pcf(t) = W1 ∨ pcf(t) = W2 → noPendingW(t, gs.bq, gs.pq), pcf(t) = W5 ∨ pcf(t) = W6 → FOFollowsW(t, head ' + bel, gs.pq(lsf(t).loc), lsf(t).loc), pcf(t) = W4 → head ' + bel = W(lsf(t).loc, lsf(t).val) ', pcf(t) = W5 → head ' + bel = FO(lsf(t).loc) ' ∨ head ' + bel = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ', pcf(t) = W6 → head ' + bel = SF ' ∨ head ' + bel = FO(lsf(t).loc) ' + SF ' ∨ head ' + bel = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ' + SF ', pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → head.W? → head = W(lsf(t).loc, lsf(t).val), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → notMember(t, gs.freaders), pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → oneMember(t, lsf(t).loc, gs.fwriters), pcf(t) = W7 → noPending(t, gs.bq, gs.pq), pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → gs.rfo(t) = [], ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (head ' + bel) -p n ⊃ W3;W4)) ∧ (pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (head ' + bel) -p n ⊃ W3;(FO(lsf(t).loc) ∈ (head ' + bel) -p n ⊃ W4;W5))) ∧ ( pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (head ' + bel) -p n ⊃ W3;(FO(lsf(t).loc) ∈ (head ' + bel) -p n ⊃ W4;(SF = head ∨ SF ∈ bel ⊃ W5;W6))))
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a ∈ a0 ' + x ↔ a = a0 ∨ a ∈ x; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ m +1 = m + 1; (s) ⊦ #(a ' + x) = (# x)+1; (s) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ m + 1 ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ a + x = a ' + x; (s)
| gs.bq(t) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, alsf(t).t = t, lsf(t).t = t, ags.writers = gs.fwriters, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), pcf(t) ≠ W3, FLITGInv(gs), FLITInv (((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := (head ' + bel) -p n)).rfo:= gs.rfo(t := (t ∈ gs.fwriters(l0) ⊃ gs.rfo(t);gs.rfo(t) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, head ' + bel), isPropFO(n, l0, head ' + bel), reorder(ags.p, gs.pq, gs.rfo), n0 ≤ # bel, n ≤ # bel, ¬ oneMember(tid1, als.l, gs.fwriters), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → SF ≠ head ∧ ¬ SF ∈ bel, pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → SF ≠ head ∧ ¬ SF ∈ bel, pcf(t) = W2 → apcf(t) = (SF = head ∨ SF ∈ bel ⊃ W1;W2), pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = head ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;W4), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = head ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) = head ∨ FO(lsf(t).loc) ∈ bel ⊃ W4;W5)), pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = head ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3 ;(FO(lsf(t).loc) = head ∨ FO(lsf(t).loc) ∈ bel ⊃ W4;(SF = head ∨ SF ∈ bel ⊃ W5;W6)) ), pcf(t) = W1 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W7 → SF ≠ head ∧ ¬ SF ∈ bel, pcf(t) = W1 ∨ pcf(t) = W7 → gs.rfo(t) = head ' + bel, pcf(t) = W2 → gs.rfo(t) = head ' + bel ∨ gs.rfo(t) + SF ' = head ' + bel, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → noPendingW(t, gs.bq, gs.pq), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → notMember(t, gs.fwriters), pcf(t) = R1 ∨ pcf(t) = R4 → notMember(t, gs.freaders), pcf(t) = R2 ∨ pcf(t) = R3 → oneMember(t, lsf(t).loc, gs.freaders), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → gs.rfo(t) = head ' + bel, pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → notMember(t, gs.fwriters), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → notMember(t, gs.freaders), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → noPendingW(t, gs.bq, gs.pq), pcf(t) = idle ∨ pcf(t) = crashed → noPending(t, gs.bq, gs.pq), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → gs.rfo(t) = head ' + bel, pcf(t) = idle → apcf(t) = idle, pcf(t) = ready → apcf(t) = ready, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = R1 → apcf(t) = R1, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = W1 → apcf(t) = W1, pcf(t) = W7 → apcf(t) = W7, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W7 → notMember(t, gs.fwriters), pcf(t) = W1 ∨ pcf(t) = W2 → noPendingW(t, gs.bq, gs.pq), pcf(t) = W5 ∨ pcf(t) = W6 → FOFollowsW(t, head ' + bel, gs.pq(lsf(t).loc), lsf(t).loc), pcf(t) = W4 → head ' + bel = W(lsf(t).loc, lsf(t).val) ', pcf(t) = W5 → head ' + bel = FO(lsf(t).loc) ' ∨ head ' + bel = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ', pcf(t) = W6 → head ' + bel = SF ' ∨ head ' + bel = FO(lsf(t).loc) ' + SF ' ∨ head ' + bel = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ' + SF ', pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → head.W? → head = W(lsf(t).loc, lsf(t).val), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → notMember(t, gs.freaders), pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → oneMember(t, lsf(t).loc, gs.fwriters), pcf(t) = W7 → noPending(t, gs.bq, gs.pq), pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → gs.rfo(t) = [], ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (head ' + bel) -p n ⊃ W3;W4)) ∧ (pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (head ' + bel) -p n ⊃ W3;(FO(lsf(t).loc) ∈ (head ' + bel) -p n ⊃ W4;W5))) ∧ ( pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (head ' + bel) -p n ⊃ W3;(FO(lsf(t).loc) ∈ (head ' + bel) -p n ⊃ W4;(SF = head ∨ SF ∈ bel ⊃ W5;W6)))) |
gs.bq(t) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(t).t = t, alsf(t).t = t, ags.writers = gs.fwriters, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), SF ≠ head, pcf(t) ≠ W3, FLITGInv(gs), FLITInv (((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := (head ' + bel) -p n)).rfo:= gs.rfo(t := (t ∈ gs.fwriters(l0) ⊃ gs.rfo(t);gs.rfo(t) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, head ' + bel), isPropFO(n0, l0, head ' + bel), reorder(ags.p, gs.pq, gs.rfo), n ≤ # bel, n0 ≤ # bel, ¬ oneMember(tid1, als.l, gs.fwriters), pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → gs.rfo(t) = [], pcf(t) = W7 → noPending(t, gs.bq, gs.pq), pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → oneMember(t, lsf(t).loc, gs.fwriters), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → notMember(t, gs.freaders), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → head.W? → head = W(lsf(t).loc, lsf(t).val), pcf(t) = W6 → head ' + bel = SF ' ∨ head ' + bel = FO(lsf(t).loc) ' + SF ' ∨ head ' + bel = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ' + SF ', pcf(t) = W5 → head ' + bel = FO(lsf(t).loc) ' ∨ head ' + bel = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ', pcf(t) = W4 → head ' + bel = W(lsf(t).loc, lsf(t).val) ', pcf(t) = W5 ∨ pcf(t) = W6 → FOFollowsW(t, head ' + bel, gs.pq(lsf(t).loc), lsf(t).loc), pcf(t) = W1 ∨ pcf(t) = W2 → noPendingW(t, gs.bq, gs.pq), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W7 → notMember(t, gs.fwriters), pcf(t) = W7 → apcf(t) = W7, pcf(t) = W1 → apcf(t) = W1, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R1 → apcf(t) = R1, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = ready → apcf(t) = ready, pcf(t) = idle → apcf(t) = idle, pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → gs.rfo(t) = head ' + bel, pcf(t) = idle ∨ pcf(t) = crashed → noPending(t, gs.bq, gs.pq), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → noPendingW(t, gs.bq, gs.pq), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → notMember(t, gs.freaders), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → notMember(t, gs.fwriters), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → gs.rfo(t) = head ' + bel, pcf(t) = R2 ∨ pcf(t) = R3 → oneMember(t, lsf(t).loc, gs.freaders), pcf(t) = R1 ∨ pcf(t) = R4 → notMember(t, gs.freaders), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → notMember(t, gs.fwriters), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → noPendingW(t, gs.bq, gs.pq), pcf(t) = W2 → gs.rfo(t) = head ' + bel ∨ gs.rfo(t) + SF ' = head ' + bel, pcf(t) = W1 ∨ pcf(t) = W7 → gs.rfo(t) = head ' + bel, pcf(t) = W1 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W7 → SF ≠ head ∧ ¬ SF ∈ bel, pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = head ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3 ;(FO(lsf(t).loc) = head ∨ FO(lsf(t).loc) ∈ bel ⊃ W4;(SF = head ∨ SF ∈ bel ⊃ W5;W6)) ), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = head ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) = head ∨ FO(lsf(t).loc) ∈ bel ⊃ W4;W5)), pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = head ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;W4), pcf(t) = W2 → apcf(t) = (SF = head ∨ SF ∈ bel ⊃ W1;W2), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → SF ≠ head ∧ ¬ SF ∈ bel, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → SF ≠ head ∧ ¬ SF ∈ bel, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (head ' + bel) -p n ⊃ W3;W4)) ∧ (pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (head ' + bel) -p n ⊃ W3;(FO(lsf(t).loc) ∈ (head ' + bel) -p n ⊃ W4;W5))) ∧ ( pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (head ' + bel) -p n ⊃ W3;(FO(lsf(t).loc) ∈ (head ' + bel) -p n ⊃ W4;(SF = head ∨ SF ∈ bel ⊃ W5;W6))))
Used simplifier rules: ⊦ ¬ isPropFO(n, l, SF ' + bel); (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used formulas: SF = head
| gs.bq(t) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(t).t = t, alsf(t).t = t, ags.writers = gs.fwriters, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), SF ≠ head, pcf(t) ≠ W3, FLITGInv(gs), FLITInv (((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := (head ' + bel) -p n)).rfo:= gs.rfo(t := (t ∈ gs.fwriters(l0) ⊃ gs.rfo(t);gs.rfo(t) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, head ' + bel), isPropFO(n0, l0, head ' + bel), reorder(ags.p, gs.pq, gs.rfo), n ≤ # bel, n0 ≤ # bel, ¬ oneMember(tid1, als.l, gs.fwriters), pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → gs.rfo(t) = [], pcf(t) = W7 → noPending(t, gs.bq, gs.pq), pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → oneMember(t, lsf(t).loc, gs.fwriters), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → notMember(t, gs.freaders), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → head.W? → head = W(lsf(t).loc, lsf(t).val), pcf(t) = W6 → head ' + bel = SF ' ∨ head ' + bel = FO(lsf(t).loc) ' + SF ' ∨ head ' + bel = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ' + SF ', pcf(t) = W5 → head ' + bel = FO(lsf(t).loc) ' ∨ head ' + bel = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ', pcf(t) = W4 → head ' + bel = W(lsf(t).loc, lsf(t).val) ', pcf(t) = W5 ∨ pcf(t) = W6 → FOFollowsW(t, head ' + bel, gs.pq(lsf(t).loc), lsf(t).loc), pcf(t) = W1 ∨ pcf(t) = W2 → noPendingW(t, gs.bq, gs.pq), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W7 → notMember(t, gs.fwriters), pcf(t) = W7 → apcf(t) = W7, pcf(t) = W1 → apcf(t) = W1, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R1 → apcf(t) = R1, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = ready → apcf(t) = ready, pcf(t) = idle → apcf(t) = idle, pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → gs.rfo(t) = head ' + bel, pcf(t) = idle ∨ pcf(t) = crashed → noPending(t, gs.bq, gs.pq), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → noPendingW(t, gs.bq, gs.pq), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → notMember(t, gs.freaders), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → notMember(t, gs.fwriters), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → gs.rfo(t) = head ' + bel, pcf(t) = R2 ∨ pcf(t) = R3 → oneMember(t, lsf(t).loc, gs.freaders), pcf(t) = R1 ∨ pcf(t) = R4 → notMember(t, gs.freaders), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → notMember(t, gs.fwriters), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → noPendingW(t, gs.bq, gs.pq), pcf(t) = W2 → gs.rfo(t) = head ' + bel ∨ gs.rfo(t) + SF ' = head ' + bel, pcf(t) = W1 ∨ pcf(t) = W7 → gs.rfo(t) = head ' + bel, pcf(t) = W1 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W7 → SF ≠ head ∧ ¬ SF ∈ bel, pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = head ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3 ;(FO(lsf(t).loc) = head ∨ FO(lsf(t).loc) ∈ bel ⊃ W4;(SF = head ∨ SF ∈ bel ⊃ W5;W6)) ), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = head ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) = head ∨ FO(lsf(t).loc) ∈ bel ⊃ W4;W5)), pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = head ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;W4), pcf(t) = W2 → apcf(t) = (SF = head ∨ SF ∈ bel ⊃ W1;W2), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → SF ≠ head ∧ ¬ SF ∈ bel, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → SF ≠ head ∧ ¬ SF ∈ bel, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (head ' + bel) -p n ⊃ W3;W4)) ∧ (pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (head ' + bel) -p n ⊃ W3;(FO(lsf(t).loc) ∈ (head ' + bel) -p n ⊃ W4;W5))) ∧ ( pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (head ' + bel) -p n ⊃ W3;(FO(lsf(t).loc) ∈ (head ' + bel) -p n ⊃ W4;(SF = head ∨ SF ∈ bel ⊃ W5;W6)))) |
gs.bq(t) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, alsf(t).t = t, lsf(t).t = t, ags.writers = gs.fwriters, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), SF ≠ head, pcf(t) ≠ W3, FLITGInv(gs), FLITInv (((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := (head ' + bel) -p n)).rfo:= gs.rfo(t := (t ∈ gs.fwriters(l0) ⊃ gs.rfo(t);gs.rfo(t) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, head ' + bel), isPropFO(n, l0, head ' + bel), reorder(ags.p, gs.pq, gs.rfo), n0 ≤ # bel, n ≤ # bel, ¬ oneMember(tid1, als.l, gs.fwriters), pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = head ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;W4), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = head ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) = head ∨ FO(lsf(t).loc) ∈ bel ⊃ W4;W5)), pcf(t) = W1 ∨ pcf(t) = W7 → gs.rfo(t) = head ' + bel, pcf(t) = W2 → gs.rfo(t) = head ' + bel ∨ gs.rfo(t) + SF ' = head ' + bel, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → noPendingW(t, gs.bq, gs.pq), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → notMember(t, gs.fwriters), pcf(t) = R1 ∨ pcf(t) = R4 → notMember(t, gs.freaders), pcf(t) = R2 ∨ pcf(t) = R3 → oneMember(t, lsf(t).loc, gs.freaders), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → gs.rfo(t) = head ' + bel, pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → notMember(t, gs.fwriters), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → notMember(t, gs.freaders), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → noPendingW(t, gs.bq, gs.pq), pcf(t) = idle ∨ pcf(t) = crashed → noPending(t, gs.bq, gs.pq), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → gs.rfo(t) = head ' + bel, pcf(t) = idle → apcf(t) = idle, pcf(t) = ready → apcf(t) = ready, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = R1 → apcf(t) = R1, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = W1 → apcf(t) = W1, pcf(t) = W7 → apcf(t) = W7, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W7 → notMember(t, gs.fwriters), pcf(t) = W1 ∨ pcf(t) = W2 → noPendingW(t, gs.bq, gs.pq), pcf(t) = W5 ∨ pcf(t) = W6 → FOFollowsW(t, head ' + bel, gs.pq(lsf(t).loc), lsf(t).loc), pcf(t) = W4 → head ' + bel = W(lsf(t).loc, lsf(t).val) ', pcf(t) = W5 → head ' + bel = FO(lsf(t).loc) ' ∨ head ' + bel = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ', pcf(t) = W6 → head ' + bel = SF ' ∨ head ' + bel = FO(lsf(t).loc) ' + SF ' ∨ head ' + bel = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ' + SF ', pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → head.W? → head = W(lsf(t).loc, lsf(t).val), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → notMember(t, gs.freaders), pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → oneMember(t, lsf(t).loc, gs.fwriters), pcf(t) = W7 → noPending(t, gs.bq, gs.pq), pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → gs.rfo(t) = [], pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → ¬ SF ∈ bel, pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → ¬ SF ∈ bel, pcf(t) = W2 → apcf(t) = (SF ∈ bel ⊃ W1;W2), pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = head ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) = head ∨ FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6))), pcf(t) = W1 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W7 → ¬ SF ∈ bel, ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (head ' + bel) -p n ⊃ W3;W4)) ∧ (pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (head ' + bel) -p n ⊃ W3;(FO(lsf(t).loc) ∈ (head ' + bel) -p n ⊃ W4;W5))) ∧ (pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (head ' + bel) -p n ⊃ W3;(FO(lsf(t).loc) ∈ (head ' + bel) -p n ⊃ W4;(SF ∈ bel ⊃ W5;W6))))
| gs.bq(t) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, alsf(t).t = t, lsf(t).t = t, ags.writers = gs.fwriters, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), SF ≠ head, pcf(t) ≠ W3, FLITGInv(gs), FLITInv (((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := (head ' + bel) -p n)).rfo:= gs.rfo(t := (t ∈ gs.fwriters(l0) ⊃ gs.rfo(t);gs.rfo(t) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, head ' + bel), isPropFO(n, l0, head ' + bel), reorder(ags.p, gs.pq, gs.rfo), n0 ≤ # bel, n ≤ # bel, ¬ oneMember(tid1, als.l, gs.fwriters), pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = head ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;W4), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = head ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) = head ∨ FO(lsf(t).loc) ∈ bel ⊃ W4;W5)), pcf(t) = W1 ∨ pcf(t) = W7 → gs.rfo(t) = head ' + bel, pcf(t) = W2 → gs.rfo(t) = head ' + bel ∨ gs.rfo(t) + SF ' = head ' + bel, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → noPendingW(t, gs.bq, gs.pq), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → notMember(t, gs.fwriters), pcf(t) = R1 ∨ pcf(t) = R4 → notMember(t, gs.freaders), pcf(t) = R2 ∨ pcf(t) = R3 → oneMember(t, lsf(t).loc, gs.freaders), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → gs.rfo(t) = head ' + bel, pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → notMember(t, gs.fwriters), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → notMember(t, gs.freaders), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → noPendingW(t, gs.bq, gs.pq), pcf(t) = idle ∨ pcf(t) = crashed → noPending(t, gs.bq, gs.pq), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → gs.rfo(t) = head ' + bel, pcf(t) = idle → apcf(t) = idle, pcf(t) = ready → apcf(t) = ready, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = R1 → apcf(t) = R1, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = W1 → apcf(t) = W1, pcf(t) = W7 → apcf(t) = W7, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W7 → notMember(t, gs.fwriters), pcf(t) = W1 ∨ pcf(t) = W2 → noPendingW(t, gs.bq, gs.pq), pcf(t) = W5 ∨ pcf(t) = W6 → FOFollowsW(t, head ' + bel, gs.pq(lsf(t).loc), lsf(t).loc), pcf(t) = W4 → head ' + bel = W(lsf(t).loc, lsf(t).val) ', pcf(t) = W5 → head ' + bel = FO(lsf(t).loc) ' ∨ head ' + bel = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ', pcf(t) = W6 → head ' + bel = SF ' ∨ head ' + bel = FO(lsf(t).loc) ' + SF ' ∨ head ' + bel = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ' + SF ', pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → head.W? → head = W(lsf(t).loc, lsf(t).val), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → notMember(t, gs.freaders), pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → oneMember(t, lsf(t).loc, gs.fwriters), pcf(t) = W7 → noPending(t, gs.bq, gs.pq), pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → gs.rfo(t) = [], pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → ¬ SF ∈ bel, pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → ¬ SF ∈ bel, pcf(t) = W2 → apcf(t) = (SF ∈ bel ⊃ W1;W2), pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = head ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) = head ∨ FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6))), pcf(t) = W1 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W7 → ¬ SF ∈ bel, ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (head ' + bel) -p n ⊃ W3;W4)) ∧ (pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (head ' + bel) -p n ⊃ W3;(FO(lsf(t).loc) ∈ (head ' + bel) -p n ⊃ W4;W5))) ∧ (pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (head ' + bel) -p n ⊃ W3;(FO(lsf(t).loc) ∈ (head ' + bel) -p n ⊃ W4;(SF ∈ bel ⊃ W5;W6)))) |
gs.bq(t) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(t).t = t, alsf(t).t = t, ags.writers = gs.fwriters, pcf(t) = W4, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), SF ≠ head, apcf(t) ≠ (W(lsf(t).loc, lsf(t).val) ∈ (head ' + bel) -p n ⊃ W3;W4), pcf(t) ≠ W3, FLITGInv(gs), FLITInv (((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := (head ' + bel) -p n)).rfo:= gs.rfo(t := (t ∈ gs.fwriters(l0) ⊃ gs.rfo(t);gs.rfo(t) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, head ' + bel), isPropFO(n0, l0, head ' + bel), reorder(ags.p, gs.pq, gs.rfo), n ≤ # bel, n0 ≤ # bel, ¬ oneMember(tid1, als.l, gs.fwriters), pcf(t) = W1 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W7 → ¬ SF ∈ bel, pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = head ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) = head ∨ FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6))), pcf(t) = W2 → apcf(t) = (SF ∈ bel ⊃ W1;W2), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → ¬ SF ∈ bel, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → ¬ SF ∈ bel, pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → gs.rfo(t) = [], pcf(t) = W7 → noPending(t, gs.bq, gs.pq), pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → oneMember(t, lsf(t).loc, gs.fwriters), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → notMember(t, gs.freaders), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → head.W? → head = W(lsf(t).loc, lsf(t).val), pcf(t) = W6 → head ' + bel = SF ' ∨ head ' + bel = FO(lsf(t).loc) ' + SF ' ∨ head ' + bel = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ' + SF ', pcf(t) = W5 → head ' + bel = FO(lsf(t).loc) ' ∨ head ' + bel = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ', pcf(t) = W4 → head ' + bel = W(lsf(t).loc, lsf(t).val) ', pcf(t) = W5 ∨ pcf(t) = W6 → FOFollowsW(t, head ' + bel, gs.pq(lsf(t).loc), lsf(t).loc), pcf(t) = W1 ∨ pcf(t) = W2 → noPendingW(t, gs.bq, gs.pq), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W7 → notMember(t, gs.fwriters), pcf(t) = W7 → apcf(t) = W7, pcf(t) = W1 → apcf(t) = W1, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R1 → apcf(t) = R1, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = ready → apcf(t) = ready, pcf(t) = idle → apcf(t) = idle, pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → gs.rfo(t) = head ' + bel, pcf(t) = idle ∨ pcf(t) = crashed → noPending(t, gs.bq, gs.pq), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → noPendingW(t, gs.bq, gs.pq), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → notMember(t, gs.freaders), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → notMember(t, gs.fwriters), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → gs.rfo(t) = head ' + bel, pcf(t) = R2 ∨ pcf(t) = R3 → oneMember(t, lsf(t).loc, gs.freaders), pcf(t) = R1 ∨ pcf(t) = R4 → notMember(t, gs.freaders), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → notMember(t, gs.fwriters), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → noPendingW(t, gs.bq, gs.pq), pcf(t) = W2 → gs.rfo(t) = head ' + bel ∨ gs.rfo(t) + SF ' = head ' + bel, pcf(t) = W1 ∨ pcf(t) = W7 → gs.rfo(t) = head ' + bel, pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = head ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) = head ∨ FO(lsf(t).loc) ∈ bel ⊃ W4;W5)), pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = head ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;W4), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
gs.bq(t) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(t).t = t, alsf(t).t = t, ags.writers = gs.fwriters, pcf(t) = W5, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), SF ≠ head, apcf(t) ≠ (W(lsf(t).loc, lsf(t).val) ∈ (head ' + bel) -p n ⊃ W3;(FO(lsf(t).loc) ∈ (head ' + bel) -p n ⊃ W4;W5)), pcf(t) ≠ W3, FLITGInv(gs), FLITInv (((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := (head ' + bel) -p n)).rfo:= gs.rfo(t := (t ∈ gs.fwriters(l0) ⊃ gs.rfo(t);gs.rfo(t) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, head ' + bel), isPropFO(n0, l0, head ' + bel), reorder(ags.p, gs.pq, gs.rfo), n ≤ # bel, n0 ≤ # bel, ¬ oneMember(tid1, als.l, gs.fwriters), pcf(t) = W1 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W7 → ¬ SF ∈ bel, pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = head ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) = head ∨ FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6))), pcf(t) = W2 → apcf(t) = (SF ∈ bel ⊃ W1;W2), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → ¬ SF ∈ bel, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → ¬ SF ∈ bel, pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → gs.rfo(t) = [], pcf(t) = W7 → noPending(t, gs.bq, gs.pq), pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → oneMember(t, lsf(t).loc, gs.fwriters), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → notMember(t, gs.freaders), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → head.W? → head = W(lsf(t).loc, lsf(t).val), pcf(t) = W6 → head ' + bel = SF ' ∨ head ' + bel = FO(lsf(t).loc) ' + SF ' ∨ head ' + bel = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ' + SF ', pcf(t) = W5 → head ' + bel = FO(lsf(t).loc) ' ∨ head ' + bel = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ', pcf(t) = W4 → head ' + bel = W(lsf(t).loc, lsf(t).val) ', pcf(t) = W5 ∨ pcf(t) = W6 → FOFollowsW(t, head ' + bel, gs.pq(lsf(t).loc), lsf(t).loc), pcf(t) = W1 ∨ pcf(t) = W2 → noPendingW(t, gs.bq, gs.pq), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W7 → notMember(t, gs.fwriters), pcf(t) = W7 → apcf(t) = W7, pcf(t) = W1 → apcf(t) = W1, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R1 → apcf(t) = R1, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = ready → apcf(t) = ready, pcf(t) = idle → apcf(t) = idle, pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → gs.rfo(t) = head ' + bel, pcf(t) = idle ∨ pcf(t) = crashed → noPending(t, gs.bq, gs.pq), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → noPendingW(t, gs.bq, gs.pq), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → notMember(t, gs.freaders), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → notMember(t, gs.fwriters), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → gs.rfo(t) = head ' + bel, pcf(t) = R2 ∨ pcf(t) = R3 → oneMember(t, lsf(t).loc, gs.freaders), pcf(t) = R1 ∨ pcf(t) = R4 → notMember(t, gs.freaders), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → notMember(t, gs.fwriters), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → noPendingW(t, gs.bq, gs.pq), pcf(t) = W2 → gs.rfo(t) = head ' + bel ∨ gs.rfo(t) + SF ' = head ' + bel, pcf(t) = W1 ∨ pcf(t) = W7 → gs.rfo(t) = head ' + bel, pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = head ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) = head ∨ FO(lsf(t).loc) ∈ bel ⊃ W4;W5)), pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = head ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;W4), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
gs.bq(t) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(t).t = t, alsf(t).t = t, ags.writers = gs.fwriters, pcf(t) = W6, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), SF ≠ head, apcf(t) ≠ (W(lsf(t).loc, lsf(t).val) ∈ (head ' + bel) -p n ⊃ W3;(FO(lsf(t).loc) ∈ (head ' + bel) -p n ⊃ W4;(SF ∈ bel ⊃ W5;W6))), pcf(t) ≠ W3, FLITGInv(gs), FLITInv (((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := (head ' + bel) -p n)).rfo:= gs.rfo(t := (t ∈ gs.fwriters(l0) ⊃ gs.rfo(t);gs.rfo(t) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, head ' + bel), isPropFO(n0, l0, head ' + bel), reorder(ags.p, gs.pq, gs.rfo), n ≤ # bel, n0 ≤ # bel, ¬ oneMember(tid1, als.l, gs.fwriters), pcf(t) = W1 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W7 → ¬ SF ∈ bel, pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = head ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) = head ∨ FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6))), pcf(t) = W2 → apcf(t) = (SF ∈ bel ⊃ W1;W2), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → ¬ SF ∈ bel, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → ¬ SF ∈ bel, pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → gs.rfo(t) = [], pcf(t) = W7 → noPending(t, gs.bq, gs.pq), pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → oneMember(t, lsf(t).loc, gs.fwriters), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → notMember(t, gs.freaders), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → head.W? → head = W(lsf(t).loc, lsf(t).val), pcf(t) = W6 → head ' + bel = SF ' ∨ head ' + bel = FO(lsf(t).loc) ' + SF ' ∨ head ' + bel = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ' + SF ', pcf(t) = W5 → head ' + bel = FO(lsf(t).loc) ' ∨ head ' + bel = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ', pcf(t) = W4 → head ' + bel = W(lsf(t).loc, lsf(t).val) ', pcf(t) = W5 ∨ pcf(t) = W6 → FOFollowsW(t, head ' + bel, gs.pq(lsf(t).loc), lsf(t).loc), pcf(t) = W1 ∨ pcf(t) = W2 → noPendingW(t, gs.bq, gs.pq), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W7 → notMember(t, gs.fwriters), pcf(t) = W7 → apcf(t) = W7, pcf(t) = W1 → apcf(t) = W1, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R1 → apcf(t) = R1, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = ready → apcf(t) = ready, pcf(t) = idle → apcf(t) = idle, pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → gs.rfo(t) = head ' + bel, pcf(t) = idle ∨ pcf(t) = crashed → noPending(t, gs.bq, gs.pq), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → noPendingW(t, gs.bq, gs.pq), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → notMember(t, gs.freaders), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → notMember(t, gs.fwriters), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → gs.rfo(t) = head ' + bel, pcf(t) = R2 ∨ pcf(t) = R3 → oneMember(t, lsf(t).loc, gs.freaders), pcf(t) = R1 ∨ pcf(t) = R4 → notMember(t, gs.freaders), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → notMember(t, gs.fwriters), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → noPendingW(t, gs.bq, gs.pq), pcf(t) = W2 → gs.rfo(t) = head ' + bel ∨ gs.rfo(t) + SF ' = head ' + bel, pcf(t) = W1 ∨ pcf(t) = W7 → gs.rfo(t) = head ' + bel, pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = head ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) = head ∨ FO(lsf(t).loc) ∈ bel ⊃ W4;W5)), pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = head ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;W4), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| gs.bq(t) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(t).t = t, alsf(t).t = t, ags.writers = gs.fwriters, pcf(t) = W4, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), SF ≠ head, apcf(t) ≠ (W(lsf(t).loc, lsf(t).val) ∈ (head ' + bel) -p n ⊃ W3;W4), pcf(t) ≠ W3, FLITGInv(gs), FLITInv (((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := (head ' + bel) -p n)).rfo:= gs.rfo(t := (t ∈ gs.fwriters(l0) ⊃ gs.rfo(t);gs.rfo(t) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, head ' + bel), isPropFO(n0, l0, head ' + bel), reorder(ags.p, gs.pq, gs.rfo), n ≤ # bel, n0 ≤ # bel, ¬ oneMember(tid1, als.l, gs.fwriters), pcf(t) = W1 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W7 → ¬ SF ∈ bel, pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = head ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) = head ∨ FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6))), pcf(t) = W2 → apcf(t) = (SF ∈ bel ⊃ W1;W2), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → ¬ SF ∈ bel, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → ¬ SF ∈ bel, pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → gs.rfo(t) = [], pcf(t) = W7 → noPending(t, gs.bq, gs.pq), pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → oneMember(t, lsf(t).loc, gs.fwriters), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → notMember(t, gs.freaders), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → head.W? → head = W(lsf(t).loc, lsf(t).val), pcf(t) = W6 → head ' + bel = SF ' ∨ head ' + bel = FO(lsf(t).loc) ' + SF ' ∨ head ' + bel = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ' + SF ', pcf(t) = W5 → head ' + bel = FO(lsf(t).loc) ' ∨ head ' + bel = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ', pcf(t) = W4 → head ' + bel = W(lsf(t).loc, lsf(t).val) ', pcf(t) = W5 ∨ pcf(t) = W6 → FOFollowsW(t, head ' + bel, gs.pq(lsf(t).loc), lsf(t).loc), pcf(t) = W1 ∨ pcf(t) = W2 → noPendingW(t, gs.bq, gs.pq), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W7 → notMember(t, gs.fwriters), pcf(t) = W7 → apcf(t) = W7, pcf(t) = W1 → apcf(t) = W1, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R1 → apcf(t) = R1, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = ready → apcf(t) = ready, pcf(t) = idle → apcf(t) = idle, pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → gs.rfo(t) = head ' + bel, pcf(t) = idle ∨ pcf(t) = crashed → noPending(t, gs.bq, gs.pq), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → noPendingW(t, gs.bq, gs.pq), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → notMember(t, gs.freaders), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → notMember(t, gs.fwriters), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → gs.rfo(t) = head ' + bel, pcf(t) = R2 ∨ pcf(t) = R3 → oneMember(t, lsf(t).loc, gs.freaders), pcf(t) = R1 ∨ pcf(t) = R4 → notMember(t, gs.freaders), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → notMember(t, gs.fwriters), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → noPendingW(t, gs.bq, gs.pq), pcf(t) = W2 → gs.rfo(t) = head ' + bel ∨ gs.rfo(t) + SF ' = head ' + bel, pcf(t) = W1 ∨ pcf(t) = W7 → gs.rfo(t) = head ' + bel, pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = head ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) = head ∨ FO(lsf(t).loc) ∈ bel ⊃ W4;W5)), pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = head ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;W4), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
gs.bq(t) = W(alsf(t).l, alsf(t).v) ', ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], alsf(t).t = t, lsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, pcf(t) = W4, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := gs.bq(t) -p 0)).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(0, l0, gs.bq(t)), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), ¬ W(alsf(t).l, alsf(t).v) ∈ gs.bq(t) -p 0, ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦
Used simplifier rules: ⊦ W4 ≠ W6; (s) ⊦ W4 ≠ W5; (s) ⊦ ¬ a ∈ []; (s) ⊦ m ≤ 0 ↔ m = 0; (s) ⊦ # [] = 0; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x + [] = x; (s) ⊦ [] -p n = []; (s) ⊦ W(l, v) ≠ SF; (s) ⊦ W3 ≠ W4; (s) ⊦ W3 ≠ W4; (s) ⊦ R1 ≠ W4; (s) ⊦ R2 ≠ W4; (s) ⊦ R3 ≠ W4; (s) ⊦ R4 ≠ W4; (s) ⊦ W4 ≠ idle; (s) ⊦ W4 ≠ ready; (s) ⊦ W4 ≠ crashed; (s) ⊦ W1 ≠ W4; (s) ⊦ W2 ≠ W4; (s) ⊦ W4 ≠ W7; (s) ⊦ oneMember(t, l, tsf) → ¬ notMember(t, tsf); (as) ⊦ oneMember(t, l, tsf) → (t ∈ tsf(l0) ↔ l = l0); (s) ⊦ a ' = a0 ' + x ↔ a = a0 ∧ x = []; (ws)
| gs.bq(t) = W(alsf(t).l, alsf(t).v) ', ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], alsf(t).t = t, lsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, pcf(t) = W4, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := gs.bq(t) -p 0)).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(0, l0, gs.bq(t)), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), ¬ W(alsf(t).l, alsf(t).v) ∈ gs.bq(t) -p 0, ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ |
gs.bq(t) = W(alsf(t).l, alsf(t).v) ', ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], lsf(t).t = t, alsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, pcf(t) = W4, propFO(tid1, l1) = propFO(t, l0), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := gs.bq(t) -p 0)).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(0, l0, gs.bq(t)), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(t, l0, gs.fwriters), ¬ oneMember(tid1, als.l, gs.fwriters), ¬ W(alsf(t).l, alsf(t).v) ∈ gs.bq(t) -p 0, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: ⊦ doWriteFO(t, loc) ≠ propFO(t0, loc0); (s)
| gs.bq(t) = W(alsf(t).l, alsf(t).v) ', ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], lsf(t).t = t, alsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, pcf(t) = W4, propFO(tid1, l1) = propFO(t, l0), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := gs.bq(t) -p 0)).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(0, l0, gs.bq(t)), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(t, l0, gs.fwriters), ¬ oneMember(tid1, als.l, gs.fwriters), ¬ W(alsf(t).l, alsf(t).v) ∈ gs.bq(t) -p 0, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
gs.bq(t) = W(alsf(t).l, alsf(t).v) ', ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], lsf(t).t = t, alsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, pcf(t) = W4, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := gs.bq(t) -p 0)).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(0, l0, gs.bq(t)), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(t, als.l, gs.fwriters), ¬ oneMember(t, l0, gs.fwriters), ¬ W(alsf(t).l, alsf(t).v) ∈ gs.bq(t) -p 0, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: ⊦ propFO(t, loc) = propFO(t0, loc0) ↔ t = t0 ∧ loc = loc0; (ws)
| gs.bq(t) = W(alsf(t).l, alsf(t).v) ', ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], lsf(t).t = t, alsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, pcf(t) = W4, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := gs.bq(t) -p 0)).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(0, l0, gs.bq(t)), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(t, als.l, gs.fwriters), ¬ oneMember(t, l0, gs.fwriters), ¬ W(alsf(t).l, alsf(t).v) ∈ gs.bq(t) -p 0, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
gs.bq(t) = W(alsf(t).l, alsf(t).v) ', ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], alsf(t).t = t, lsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, pcf(t) = W4, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := W(alsf(t).l, alsf(t).v) ' -p 0)).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(0, l0, W(alsf(t).l, alsf(t).v) '), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(t, als.l, gs.fwriters), ¬ oneMember(t, l0, gs.fwriters), ¬ W(alsf(t).l, alsf(t).v) ∈ W(alsf(t).l, alsf(t).v) ' -p 0, ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦
| gs.bq(t) = W(alsf(t).l, alsf(t).v) ', ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], alsf(t).t = t, lsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, pcf(t) = W4, FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := W(alsf(t).l, alsf(t).v) ' -p 0)).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(0, l0, W(alsf(t).l, alsf(t).v) '), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(t, als.l, gs.fwriters), ¬ oneMember(t, l0, gs.fwriters), ¬ W(alsf(t).l, alsf(t).v) ∈ W(alsf(t).l, alsf(t).v) ' -p 0, ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ |
⊦ isPropFO(n, l, bel) ↔ n < # bel ∧ bel[n] = FO(l) ∧ (∀ m. m < n → bel[m] ≠ SF ∧ (bel[m].W? ∨ bel[m].FO? → bel[m].l ≠ l))
Used simplifier rules: ⊦ a '[0] = a; (s) ⊦ W(l, v) ≠ FO(l0); (s) Used terms: 0, l0, W(alsf(t).l, alsf(t).v) '
| ⊦ isPropFO(n, l, bel) ↔ n < # bel ∧ bel[n] = FO(l) ∧ (∀ m. m < n → bel[m] ≠ SF ∧ (bel[m].W? ∨ bel[m].FO? → bel[m].l ≠ l)) |
| gs.bq(t) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(t).t = t, alsf(t).t = t, ags.writers = gs.fwriters, pcf(t) = W5, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), SF ≠ head, apcf(t) ≠ (W(lsf(t).loc, lsf(t).val) ∈ (head ' + bel) -p n ⊃ W3;(FO(lsf(t).loc) ∈ (head ' + bel) -p n ⊃ W4;W5)), pcf(t) ≠ W3, FLITGInv(gs), FLITInv (((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := (head ' + bel) -p n)).rfo:= gs.rfo(t := (t ∈ gs.fwriters(l0) ⊃ gs.rfo(t);gs.rfo(t) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, head ' + bel), isPropFO(n0, l0, head ' + bel), reorder(ags.p, gs.pq, gs.rfo), n ≤ # bel, n0 ≤ # bel, ¬ oneMember(tid1, als.l, gs.fwriters), pcf(t) = W1 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W7 → ¬ SF ∈ bel, pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = head ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) = head ∨ FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6))), pcf(t) = W2 → apcf(t) = (SF ∈ bel ⊃ W1;W2), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → ¬ SF ∈ bel, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → ¬ SF ∈ bel, pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → gs.rfo(t) = [], pcf(t) = W7 → noPending(t, gs.bq, gs.pq), pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → oneMember(t, lsf(t).loc, gs.fwriters), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → notMember(t, gs.freaders), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → head.W? → head = W(lsf(t).loc, lsf(t).val), pcf(t) = W6 → head ' + bel = SF ' ∨ head ' + bel = FO(lsf(t).loc) ' + SF ' ∨ head ' + bel = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ' + SF ', pcf(t) = W5 → head ' + bel = FO(lsf(t).loc) ' ∨ head ' + bel = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ', pcf(t) = W4 → head ' + bel = W(lsf(t).loc, lsf(t).val) ', pcf(t) = W5 ∨ pcf(t) = W6 → FOFollowsW(t, head ' + bel, gs.pq(lsf(t).loc), lsf(t).loc), pcf(t) = W1 ∨ pcf(t) = W2 → noPendingW(t, gs.bq, gs.pq), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W7 → notMember(t, gs.fwriters), pcf(t) = W7 → apcf(t) = W7, pcf(t) = W1 → apcf(t) = W1, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R1 → apcf(t) = R1, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = ready → apcf(t) = ready, pcf(t) = idle → apcf(t) = idle, pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → gs.rfo(t) = head ' + bel, pcf(t) = idle ∨ pcf(t) = crashed → noPending(t, gs.bq, gs.pq), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → noPendingW(t, gs.bq, gs.pq), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → notMember(t, gs.freaders), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → notMember(t, gs.fwriters), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → gs.rfo(t) = head ' + bel, pcf(t) = R2 ∨ pcf(t) = R3 → oneMember(t, lsf(t).loc, gs.freaders), pcf(t) = R1 ∨ pcf(t) = R4 → notMember(t, gs.freaders), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → notMember(t, gs.fwriters), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → noPendingW(t, gs.bq, gs.pq), pcf(t) = W2 → gs.rfo(t) = head ' + bel ∨ gs.rfo(t) + SF ' = head ' + bel, pcf(t) = W1 ∨ pcf(t) = W7 → gs.rfo(t) = head ' + bel, pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = head ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) = head ∨ FO(lsf(t).loc) ∈ bel ⊃ W4;W5)), pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = head ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;W4), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
gs.bq(t) = head ' + bel, ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], lsf(t).t = t, alsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = (W(alsf(t).l, alsf(t).v) = head ∨ W(alsf(t).l, alsf(t).v) ∈ bel ⊃ W3;(FO(alsf(t).l) = head ∨ FO(alsf(t).l) ∈ bel ⊃ W4;W5)), pcf(t) = W5, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), SF ≠ head, apcf(t) ≠ (W(alsf(t).l, alsf(t).v) ∈ (head ' + bel) -p n ⊃ W3;(FO(alsf(t).l) ∈ (head ' + bel) -p n ⊃ W4;W5)), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := (head ' + bel) -p n)).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, head ' + bel, gs.pq(alsf(t).l), alsf(t).l), isPropFO(n, l0, head ' + bel), isPropFO(n0, l0, head ' + bel), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n ≤ # bel, n0 ≤ # bel, ¬ oneMember(tid1, als.l, gs.fwriters), ¬ SF ∈ bel, head.W? → head = W(alsf(t).l, alsf(t).v), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), head ' + bel = FO(alsf(t).l) ' ∨ head ' + bel = W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' ⊦
Used simplifier rules: ⊦ W4 ≠ W5; (s) ⊦ W5 ≠ W6; (s) ⊦ [] -p n = []; (s) ⊦ W3 ≠ W5; (s) ⊦ R1 ≠ W5; (s) ⊦ R2 ≠ W5; (s) ⊦ R3 ≠ W5; (s) ⊦ R4 ≠ W5; (s) ⊦ W5 ≠ idle; (s) ⊦ W5 ≠ ready; (s) ⊦ W5 ≠ crashed; (s) ⊦ W1 ≠ W5; (s) ⊦ W2 ≠ W5; (s) ⊦ W5 ≠ W7; (s) ⊦ oneMember(t, l, tsf) → ¬ notMember(t, tsf); (as) ⊦ oneMember(t, l, tsf) → (t ∈ tsf(l0) ↔ l = l0); (s)
| gs.bq(t) = head ' + bel, ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], lsf(t).t = t, alsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = (W(alsf(t).l, alsf(t).v) = head ∨ W(alsf(t).l, alsf(t).v) ∈ bel ⊃ W3;(FO(alsf(t).l) = head ∨ FO(alsf(t).l) ∈ bel ⊃ W4;W5)), pcf(t) = W5, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), SF ≠ head, apcf(t) ≠ (W(alsf(t).l, alsf(t).v) ∈ (head ' + bel) -p n ⊃ W3;(FO(alsf(t).l) ∈ (head ' + bel) -p n ⊃ W4;W5)), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := (head ' + bel) -p n)).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, head ' + bel, gs.pq(alsf(t).l), alsf(t).l), isPropFO(n, l0, head ' + bel), isPropFO(n0, l0, head ' + bel), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n ≤ # bel, n0 ≤ # bel, ¬ oneMember(tid1, als.l, gs.fwriters), ¬ SF ∈ bel, head.W? → head = W(alsf(t).l, alsf(t).v), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), head ' + bel = FO(alsf(t).l) ' ∨ head ' + bel = W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' ⊦ |
gs.bq(t) = head ' + bel, ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], alsf(t).t = t, lsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = (W(alsf(t).l, alsf(t).v) = head ∨ W(alsf(t).l, alsf(t).v) ∈ bel ⊃ W3;(FO(alsf(t).l) = head ∨ FO(alsf(t).l) ∈ bel ⊃ W4;W5)), n = 0, pcf(t) = W5, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), SF ≠ head, apcf(t) ≠ (W(alsf(t).l, alsf(t).v) ∈ (head ' + bel) -p n ⊃ W3;(FO(alsf(t).l) ∈ (head ' + bel) -p n ⊃ W4;W5)), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := (head ' + bel) -p n)).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, head ' + bel, gs.pq(alsf(t).l), alsf(t).l), isPropFO(n0, l0, head ' + bel), isPropFO(n, l0, head ' + bel), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n0 ≤ # bel, n ≤ # bel, ¬ oneMember(tid1, als.l, gs.fwriters), ¬ SF ∈ bel, head.W? → head = W(alsf(t).l, alsf(t).v), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), head ' + bel = FO(alsf(t).l) ' ∨ head ' + bel = W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' ⊦
Used simplifier rules: Nat freely generated by 0, +1;; ⊦ a ∈ a0 ' + x ↔ a = a0 ∨ a ∈ x; (s) ⊦ m + 1 ≤ n ↔ m < n; (s) ⊦ m +1 = m + 1; (s) ⊦ (a ' + x) -p (n + 1) = a + (x -p n); (s) ⊦ a + x = a ' + x; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ # x = 0 ↔ x = []; (s) ⊦ W(l, v) ≠ SF; (s) ⊦ y ≠ [] → (a ' = x + y ↔ x = [] ∧ a ' = y); (s) ⊦ a ' ≠ []; (s) ⊦ propFO(t, loc) = propFO(t0, loc0) ↔ t = t0 ∧ loc = loc0; (ws) ⊦ a ' + x = a0 ' + y ↔ a = a0 ∧ x = y; (ws) a: ⊦ (x + y) + z = x + y + z; from specification list
| gs.bq(t) = head ' + bel, ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], alsf(t).t = t, lsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = (W(alsf(t).l, alsf(t).v) = head ∨ W(alsf(t).l, alsf(t).v) ∈ bel ⊃ W3;(FO(alsf(t).l) = head ∨ FO(alsf(t).l) ∈ bel ⊃ W4;W5)), n = 0, pcf(t) = W5, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), SF ≠ head, apcf(t) ≠ (W(alsf(t).l, alsf(t).v) ∈ (head ' + bel) -p n ⊃ W3;(FO(alsf(t).l) ∈ (head ' + bel) -p n ⊃ W4;W5)), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := (head ' + bel) -p n)).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, head ' + bel, gs.pq(alsf(t).l), alsf(t).l), isPropFO(n0, l0, head ' + bel), isPropFO(n, l0, head ' + bel), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n0 ≤ # bel, n ≤ # bel, ¬ oneMember(tid1, als.l, gs.fwriters), ¬ SF ∈ bel, head.W? → head = W(alsf(t).l, alsf(t).v), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), head ' + bel = FO(alsf(t).l) ' ∨ head ' + bel = W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' ⊦ |
gs.bq(t) = head ' + bel, ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], lsf(t).t = t, alsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = (W(alsf(t).l, alsf(t).v) = head ∨ W(alsf(t).l, alsf(t).v) ∈ bel ⊃ W3;(FO(alsf(t).l) = head ∨ FO(alsf(t).l) ∈ bel ⊃ W4;W5)), pcf(t) = W5, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), SF ≠ head, apcf(t) ≠ (W(alsf(t).l, alsf(t).v) ∈ bel ⊃ W3;(FO(alsf(t).l) ∈ bel ⊃ W4;W5)), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := bel)).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, head ' + bel, gs.pq(alsf(t).l), alsf(t).l), isPropFO(0, l0, head ' + bel), isPropFO(n0, l0, head ' + bel), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n0 ≤ # bel, ¬ oneMember(tid1, als.l, gs.fwriters), ¬ SF ∈ bel, head.W? → head = W(alsf(t).l, alsf(t).v), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), head ' + bel = FO(alsf(t).l) ' ∨ head ' + bel = W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (a ' + x) -p 0 = x; (s) ⊦ 0 ≤ m; (s)
| gs.bq(t) = head ' + bel, ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], lsf(t).t = t, alsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = (W(alsf(t).l, alsf(t).v) = head ∨ W(alsf(t).l, alsf(t).v) ∈ bel ⊃ W3;(FO(alsf(t).l) = head ∨ FO(alsf(t).l) ∈ bel ⊃ W4;W5)), pcf(t) = W5, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), SF ≠ head, apcf(t) ≠ (W(alsf(t).l, alsf(t).v) ∈ bel ⊃ W3;(FO(alsf(t).l) ∈ bel ⊃ W4;W5)), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := bel)).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, head ' + bel, gs.pq(alsf(t).l), alsf(t).l), isPropFO(0, l0, head ' + bel), isPropFO(n0, l0, head ' + bel), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n0 ≤ # bel, ¬ oneMember(tid1, als.l, gs.fwriters), ¬ SF ∈ bel, head.W? → head = W(alsf(t).l, alsf(t).v), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), head ' + bel = FO(alsf(t).l) ' ∨ head ' + bel = W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' ⊦ |
⊦ isPropFO(n, l, bel) ↔ n < # bel ∧ bel[n] = FO(l) ∧ (∀ m. m < n → bel[m] ≠ SF ∧ (bel[m].W? ∨ bel[m].FO? → bel[m].l ≠ l))
Used simplifier rules: ⊦ (a ' + x)[0] = a; (s) ⊦ #(a ' + x) = (# x)+1; (s) ⊦ m +1 = m + 1; (s) ⊦ 0 < m ↔ m ≠ 0; (s) ⊦ m + 1 ≠ 0; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ ¬ n < 0; (s) ⊦ FO(l) ≠ SF; (s) ⊦ ¬ FO(l).W?; (s) ⊦ a ' + x = a0 ' + y ↔ a = a0 ∧ x = y; (ws) ⊦ W(l, v) ≠ FO(l0); (s) ⊦ a ' = a0 ' + x ↔ a = a0 ∧ x = []; (ws) ⊦ FO(l) = FO(l0) ↔ l = l0; (s) in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ ¬ a ∈ []; (s) ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ doWriteFO(t, loc) ≠ propFO(t0, loc0); (s) Used terms: 0, l0, head ' + bel
| ⊦ isPropFO(n, l, bel) ↔ n < # bel ∧ bel[n] = FO(l) ∧ (∀ m. m < n → bel[m] ≠ SF ∧ (bel[m].W? ∨ bel[m].FO? → bel[m].l ≠ l)) |
| gs.bq(t) = head ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(t).t = t, alsf(t).t = t, ags.writers = gs.fwriters, pcf(t) = W6, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), SF ≠ head, apcf(t) ≠ (W(lsf(t).loc, lsf(t).val) ∈ (head ' + bel) -p n ⊃ W3;(FO(lsf(t).loc) ∈ (head ' + bel) -p n ⊃ W4;(SF ∈ bel ⊃ W5;W6))), pcf(t) ≠ W3, FLITGInv(gs), FLITInv (((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := (head ' + bel) -p n)).rfo:= gs.rfo(t := (t ∈ gs.fwriters(l0) ⊃ gs.rfo(t);gs.rfo(t) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, head ' + bel), isPropFO(n0, l0, head ' + bel), reorder(ags.p, gs.pq, gs.rfo), n ≤ # bel, n0 ≤ # bel, ¬ oneMember(tid1, als.l, gs.fwriters), pcf(t) = W1 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W7 → ¬ SF ∈ bel, pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = head ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) = head ∨ FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6))), pcf(t) = W2 → apcf(t) = (SF ∈ bel ⊃ W1;W2), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → ¬ SF ∈ bel, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → ¬ SF ∈ bel, pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → gs.rfo(t) = [], pcf(t) = W7 → noPending(t, gs.bq, gs.pq), pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → oneMember(t, lsf(t).loc, gs.fwriters), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → notMember(t, gs.freaders), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → head.W? → head = W(lsf(t).loc, lsf(t).val), pcf(t) = W6 → head ' + bel = SF ' ∨ head ' + bel = FO(lsf(t).loc) ' + SF ' ∨ head ' + bel = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ' + SF ', pcf(t) = W5 → head ' + bel = FO(lsf(t).loc) ' ∨ head ' + bel = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ', pcf(t) = W4 → head ' + bel = W(lsf(t).loc, lsf(t).val) ', pcf(t) = W5 ∨ pcf(t) = W6 → FOFollowsW(t, head ' + bel, gs.pq(lsf(t).loc), lsf(t).loc), pcf(t) = W1 ∨ pcf(t) = W2 → noPendingW(t, gs.bq, gs.pq), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W7 → notMember(t, gs.fwriters), pcf(t) = W7 → apcf(t) = W7, pcf(t) = W1 → apcf(t) = W1, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R1 → apcf(t) = R1, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = ready → apcf(t) = ready, pcf(t) = idle → apcf(t) = idle, pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → gs.rfo(t) = head ' + bel, pcf(t) = idle ∨ pcf(t) = crashed → noPending(t, gs.bq, gs.pq), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → noPendingW(t, gs.bq, gs.pq), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → notMember(t, gs.freaders), pcf(t) = idle ∨ pcf(t) = ready ∨ pcf(t) = crashed → notMember(t, gs.fwriters), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → gs.rfo(t) = head ' + bel, pcf(t) = R2 ∨ pcf(t) = R3 → oneMember(t, lsf(t).loc, gs.freaders), pcf(t) = R1 ∨ pcf(t) = R4 → notMember(t, gs.freaders), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → notMember(t, gs.fwriters), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → noPendingW(t, gs.bq, gs.pq), pcf(t) = W2 → gs.rfo(t) = head ' + bel ∨ gs.rfo(t) + SF ' = head ' + bel, pcf(t) = W1 ∨ pcf(t) = W7 → gs.rfo(t) = head ' + bel, pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = head ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) = head ∨ FO(lsf(t).loc) ∈ bel ⊃ W4;W5)), pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = head ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;W4), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
gs.bq(t) = head ' + bel, ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], lsf(t).t = t, alsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = (W(alsf(t).l, alsf(t).v) = head ∨ W(alsf(t).l, alsf(t).v) ∈ bel ⊃ W3;(FO(alsf(t).l) = head ∨ FO(alsf(t).l) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6))), pcf(t) = W6, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), head ' + bel ≠ SF ', SF ≠ head, apcf(t) ≠ (W(alsf(t).l, alsf(t).v) ∈ (head ' + bel) -p n ⊃ W3;(FO(alsf(t).l) ∈ (head ' + bel) -p n ⊃ W4;(SF ∈ bel ⊃ W5;W6))), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := (head ' + bel) -p n)).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, head ' + bel, gs.pq(alsf(t).l), alsf(t).l), isPropFO(n, l0, head ' + bel), isPropFO(n0, l0, head ' + bel), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n ≤ # bel, n0 ≤ # bel, ¬ oneMember(tid1, als.l, gs.fwriters), head.W? → head = W(alsf(t).l, alsf(t).v), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), head ' + bel = W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ' ∨ head ' + bel = FO(alsf(t).l) ' + SF ' ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a ' = a0 ' + x ↔ a = a0 ∧ x = []; (ws) ⊦ W4 ≠ W6; (s) ⊦ W5 ≠ W6; (s) ⊦ [] -p n = []; (s) ⊦ W3 ≠ W6; (s) ⊦ R1 ≠ W6; (s) ⊦ R2 ≠ W6; (s) ⊦ R3 ≠ W6; (s) ⊦ R4 ≠ W6; (s) ⊦ W6 ≠ idle; (s) ⊦ W6 ≠ ready; (s) ⊦ W6 ≠ crashed; (s) ⊦ W1 ≠ W6; (s) ⊦ W2 ≠ W6; (s) ⊦ W6 ≠ W7; (s) ⊦ oneMember(t, l, tsf) → ¬ notMember(t, tsf); (as) ⊦ oneMember(t, l, tsf) → (t ∈ tsf(l0) ↔ l = l0); (s)
| gs.bq(t) = head ' + bel, ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], lsf(t).t = t, alsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = (W(alsf(t).l, alsf(t).v) = head ∨ W(alsf(t).l, alsf(t).v) ∈ bel ⊃ W3;(FO(alsf(t).l) = head ∨ FO(alsf(t).l) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6))), pcf(t) = W6, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), head ' + bel ≠ SF ', SF ≠ head, apcf(t) ≠ (W(alsf(t).l, alsf(t).v) ∈ (head ' + bel) -p n ⊃ W3;(FO(alsf(t).l) ∈ (head ' + bel) -p n ⊃ W4;(SF ∈ bel ⊃ W5;W6))), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := (head ' + bel) -p n)).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, head ' + bel, gs.pq(alsf(t).l), alsf(t).l), isPropFO(n, l0, head ' + bel), isPropFO(n0, l0, head ' + bel), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n ≤ # bel, n0 ≤ # bel, ¬ oneMember(tid1, als.l, gs.fwriters), head.W? → head = W(alsf(t).l, alsf(t).v), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), head ' + bel = W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ' ∨ head ' + bel = FO(alsf(t).l) ' + SF ' ⊦ |
head ' + bel = W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ', gs.bq(t) = head ' + bel, ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], alsf(t).t = t, lsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = (W(alsf(t).l, alsf(t).v) = head ∨ W(alsf(t).l, alsf(t).v) ∈ bel ⊃ W3;(FO(alsf(t).l) = head ∨ FO(alsf(t).l) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6))), pcf(t) = W6, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), head ' + bel ≠ SF ', SF ≠ head, apcf(t) ≠ (W(alsf(t).l, alsf(t).v) ∈ (head ' + bel) -p n ⊃ W3;(FO(alsf(t).l) ∈ (head ' + bel) -p n ⊃ W4;(SF ∈ bel ⊃ W5;W6))), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := (head ' + bel) -p n)).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, head ' + bel, gs.pq(alsf(t).l), alsf(t).l), isPropFO(n0, l0, head ' + bel), isPropFO(n, l0, head ' + bel), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n0 ≤ # bel, n ≤ # bel, ¬ oneMember(tid1, als.l, gs.fwriters), head.W? → head = W(alsf(t).l, alsf(t).v), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦
head ' + bel = FO(alsf(t).l) ' + SF ', gs.bq(t) = head ' + bel, ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], alsf(t).t = t, lsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = (W(alsf(t).l, alsf(t).v) = head ∨ W(alsf(t).l, alsf(t).v) ∈ bel ⊃ W3;(FO(alsf(t).l) = head ∨ FO(alsf(t).l) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6))), pcf(t) = W6, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), head ' + bel ≠ SF ', SF ≠ head, apcf(t) ≠ (W(alsf(t).l, alsf(t).v) ∈ (head ' + bel) -p n ⊃ W3;(FO(alsf(t).l) ∈ (head ' + bel) -p n ⊃ W4;(SF ∈ bel ⊃ W5;W6))), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := (head ' + bel) -p n)).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, head ' + bel, gs.pq(alsf(t).l), alsf(t).l), isPropFO(n0, l0, head ' + bel), isPropFO(n, l0, head ' + bel), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n0 ≤ # bel, n ≤ # bel, ¬ oneMember(tid1, als.l, gs.fwriters), head.W? → head = W(alsf(t).l, alsf(t).v), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦
| head ' + bel = W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ', gs.bq(t) = head ' + bel, ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], alsf(t).t = t, lsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = (W(alsf(t).l, alsf(t).v) = head ∨ W(alsf(t).l, alsf(t).v) ∈ bel ⊃ W3;(FO(alsf(t).l) = head ∨ FO(alsf(t).l) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6))), pcf(t) = W6, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), head ' + bel ≠ SF ', SF ≠ head, apcf(t) ≠ (W(alsf(t).l, alsf(t).v) ∈ (head ' + bel) -p n ⊃ W3;(FO(alsf(t).l) ∈ (head ' + bel) -p n ⊃ W4;(SF ∈ bel ⊃ W5;W6))), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := (head ' + bel) -p n)).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, head ' + bel, gs.pq(alsf(t).l), alsf(t).l), isPropFO(n0, l0, head ' + bel), isPropFO(n, l0, head ' + bel), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n0 ≤ # bel, n ≤ # bel, ¬ oneMember(tid1, als.l, gs.fwriters), head.W? → head = W(alsf(t).l, alsf(t).v), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ |
gs.bq(t) = W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ', ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], alsf(t).t = t, lsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, pcf(t) = W6, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), FLITGInv(gs), FLITInv (((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := ((W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ') -p n) + SF ')).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, gs.bq(t), gs.pq(alsf(t).l), alsf(t).l), isPropFO(n0, l0, gs.bq(t)), isPropFO(n, l0, gs.bq(t)), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), SF ∈ gs.bq(t), W(alsf(t).l, alsf(t).v) ∈ gs.bq(t), n0 ≤ 2, n ≤ 2, ¬ oneMember(tid1, als.l, gs.fwriters), ¬ W(alsf(t).l, alsf(t).v) ∈ (W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ') -p n, ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list in-15: ⊦ x + a ' = y → a ∈ y; (forward) from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ # a ' = 0 +1; (s) ⊦ #(a ' + x) = (# x)+1; (s) ⊦ isPropFO(n, l, bel + SF ') → (bel + SF ') -p n = (bel -p n) + SF '; (s) ⊦ a ∈ a0 ' ↔ a = a0; (s) ⊦ FO(l) ≠ SF; (s) ⊦ a ∈ a0 ' + x ↔ a = a0 ∨ a ∈ x; (s) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ a ' = x + a0 ' ↔ a = a0 ∧ x = []; (ws) ⊦ W(l, v) ≠ SF; (s) ⊦ W3 ≠ W5; (s) ⊦ W3 ≠ W4; (s) ⊦ a ∈ x + y ↔ a ∈ x ∨ a ∈ y; (s) ⊦ a ' + x = a0 ' + y ↔ a = a0 ∧ x = y; (ws)
| gs.bq(t) = W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ', ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], alsf(t).t = t, lsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, pcf(t) = W6, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), FLITGInv(gs), FLITInv (((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := ((W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ') -p n) + SF ')).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, gs.bq(t), gs.pq(alsf(t).l), alsf(t).l), isPropFO(n0, l0, gs.bq(t)), isPropFO(n, l0, gs.bq(t)), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), SF ∈ gs.bq(t), W(alsf(t).l, alsf(t).v) ∈ gs.bq(t), n0 ≤ 2, n ≤ 2, ¬ oneMember(tid1, als.l, gs.fwriters), ¬ W(alsf(t).l, alsf(t).v) ∈ (W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ') -p n, ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ |
ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], lsf(t).t = t, alsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, pcf(t) = W6, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), FLITGInv(gs), FLITInv (((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := ((W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ') -p n) + SF ')).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ', gs.pq(alsf(t).l), alsf(t).l), isPropFO(n, l0, W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF '), isPropFO(n0, l0, W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF '), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), W(alsf(t).l, alsf(t).v) ∈ W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ', SF ∈ W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ', n ≤ 2, n0 ≤ 2, ¬ oneMember(tid1, als.l, gs.fwriters), ¬ W(alsf(t).l, alsf(t).v) ∈ (W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ') -p n, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], lsf(t).t = t, alsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, pcf(t) = W6, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), FLITGInv(gs), FLITInv (((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := ((W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ') -p n) + SF ')).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ', gs.pq(alsf(t).l), alsf(t).l), isPropFO(n, l0, W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF '), isPropFO(n0, l0, W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF '), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), W(alsf(t).l, alsf(t).v) ∈ W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ', SF ∈ W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ', n ≤ 2, n0 ≤ 2, ¬ oneMember(tid1, als.l, gs.fwriters), ¬ W(alsf(t).l, alsf(t).v) ∈ (W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ') -p n, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], alsf(t).t = t, lsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, pcf(t) = W6, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), FLITGInv(gs), FLITInv (((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := ((W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ') -p n) + SF ')).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ', gs.pq(alsf(t).l), alsf(t).l), isPropFO(n0, l0, W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF '), isPropFO(n, l0, W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF '), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n0 ≤ 2, n ≤ 2, ¬ oneMember(tid1, als.l, gs.fwriters), ¬ W(alsf(t).l, alsf(t).v) ∈ (W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ') -p n, ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a ∈ a0 ' + x ↔ a = a0 ∨ a ∈ x; (s) ⊦ a ∈ a0 ' ↔ a = a0; (s) ⊦ FO(l) ≠ SF; (s) ⊦ W(l, v) ≠ SF; (s)
| ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], alsf(t).t = t, lsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, pcf(t) = W6, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), FLITGInv(gs), FLITInv (((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := ((W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ') -p n) + SF ')).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ', gs.pq(alsf(t).l), alsf(t).l), isPropFO(n0, l0, W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF '), isPropFO(n, l0, W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF '), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n0 ≤ 2, n ≤ 2, ¬ oneMember(tid1, als.l, gs.fwriters), ¬ W(alsf(t).l, alsf(t).v) ∈ (W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ') -p n, ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ |
⊦ isPropFO(n, l, bel) ↔ n < # bel ∧ bel[n] = FO(l) ∧ (∀ m. m < n → bel[m] ≠ SF ∧ (bel[m].W? ∨ bel[m].FO? → bel[m].l ≠ l))
ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], lsf(t).t = t, alsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, (W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ')[n] = FO(l0), apcf(t) = W3, pcf(t) = W6, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), n < #(W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF '), FLITGInv(gs), FLITInv (((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := ((W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ') -p n) + SF ')).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ', gs.pq(alsf(t).l), alsf(t).l), isPropFO(n0, l0, W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF '), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n ≤ 2, n0 ≤ 2, ¬ oneMember(tid1, als.l, gs.fwriters), ¬ W(alsf(t).l, alsf(t).v) ∈ (W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ') -p n, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ m. m < n → (W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ')[m] ≠ SF ∧ ( (W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ')[m].W? ∨ (W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ')[m].FO? → (W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ')[m].l ≠ l0) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: n, l0, W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF '
| ⊦ isPropFO(n, l, bel) ↔ n < # bel ∧ bel[n] = FO(l) ∧ (∀ m. m < n → bel[m] ≠ SF ∧ (bel[m].W? ∨ bel[m].FO? → bel[m].l ≠ l)) |
| ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], lsf(t).t = t, alsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, (W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ')[n] = FO(l0), apcf(t) = W3, pcf(t) = W6, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), n < #(W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF '), FLITGInv(gs), FLITInv (((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := ((W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ') -p n) + SF ')).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ', gs.pq(alsf(t).l), alsf(t).l), isPropFO(n0, l0, W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF '), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n ≤ 2, n0 ≤ 2, ¬ oneMember(tid1, als.l, gs.fwriters), ¬ W(alsf(t).l, alsf(t).v) ∈ (W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ') -p n, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ m. m < n → (W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ')[m] ≠ SF ∧ ( (W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ')[m].W? ∨ (W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ')[m].FO? → (W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ')[m].l ≠ l0) ⊦ |
ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], alsf(t).t = t, lsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, (W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ')[n] = FO(l0), apcf(t) = W3, pcf(t) = W6, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), n < 3, FLITGInv(gs), FLITInv (((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := ((W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ') -p n) + SF ')).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ', gs.pq(alsf(t).l), alsf(t).l), isPropFO(n0, l0, W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF '), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n0 ≤ 2, n ≤ 2, ¬ oneMember(tid1, als.l, gs.fwriters), ¬ W(alsf(t).l, alsf(t).v) ∈ (W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ') -p n, ∀ m. m < n → (W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ')[m] ≠ SF ∧ ( (W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ')[m].W? ∨ (W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ')[m].FO? → (W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ')[m].l ≠ l0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦
Used simplifier rules: f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ # a ' = 0 +1; (s) ⊦ #(a ' + x) = (# x)+1; (s)
| ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], alsf(t).t = t, lsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, (W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ')[n] = FO(l0), apcf(t) = W3, pcf(t) = W6, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), n < 3, FLITGInv(gs), FLITInv (((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := ((W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ') -p n) + SF ')).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ', gs.pq(alsf(t).l), alsf(t).l), isPropFO(n0, l0, W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF '), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n0 ≤ 2, n ≤ 2, ¬ oneMember(tid1, als.l, gs.fwriters), ¬ W(alsf(t).l, alsf(t).v) ∈ (W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ') -p n, ∀ m. m < n → (W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ')[m] ≠ SF ∧ ( (W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ')[m].W? ∨ (W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ')[m].FO? → (W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ')[m].l ≠ l0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ |
Used simplifier rules: Nat freely generated by 0, +1;; ⊦ (a ' + x)[n + 1] = x[n]; (s) n < n0 ⊦ m + (* n) ≤ (* n0) ↔ m ≤ n0 - n; (s) n < n0 ⊦ m + (* n) < (* n0) ↔ m < n0 - n; (s) ⊦ m +1 = m + 1; (s) ⊦ (a ' + x) -p (n + 1) = a + (x -p n); (s) ⊦ a + x = a ' + x; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ a ∈ a0 ' + x ↔ ¬(a ≠ a0 ∧ ¬ a ∈ x); (ss) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (a ' + x)[0] = a; (s) ⊦ W(l, v) ≠ FO(l0); (s)
| head ' + bel = FO(alsf(t).l) ' + SF ', gs.bq(t) = head ' + bel, ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], alsf(t).t = t, lsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = (W(alsf(t).l, alsf(t).v) = head ∨ W(alsf(t).l, alsf(t).v) ∈ bel ⊃ W3;(FO(alsf(t).l) = head ∨ FO(alsf(t).l) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6))), pcf(t) = W6, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), head ' + bel ≠ SF ', SF ≠ head, apcf(t) ≠ (W(alsf(t).l, alsf(t).v) ∈ (head ' + bel) -p n ⊃ W3;(FO(alsf(t).l) ∈ (head ' + bel) -p n ⊃ W4;(SF ∈ bel ⊃ W5;W6))), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := (head ' + bel) -p n)).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, head ' + bel, gs.pq(alsf(t).l), alsf(t).l), isPropFO(n0, l0, head ' + bel), isPropFO(n, l0, head ' + bel), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n0 ≤ # bel, n ≤ # bel, ¬ oneMember(tid1, als.l, gs.fwriters), head.W? → head = W(alsf(t).l, alsf(t).v), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ |
gs.bq(t) = FO(alsf(t).l) ' + SF ', ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], lsf(t).t = t, alsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W4, pcf(t) = W6, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := (FO(alsf(t).l) ' -p n) + SF ')).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, gs.bq(t), gs.pq(alsf(t).l), alsf(t).l), isPropFO(n, l0, gs.bq(t)), isPropFO(n0, l0, gs.bq(t)), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), FO(alsf(t).l) ∈ gs.bq(t), SF ∈ gs.bq(t), n ≤ 1, n0 ≤ 1, ¬ oneMember(tid1, als.l, gs.fwriters), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ ¬ W(alsf(t).l, alsf(t).v) ∈ FO(alsf(t).l) ' -p n ∧ FO(alsf(t).l) ∈ FO(alsf(t).l) ' -p n
Used simplifier rules: ⊦ W4 ≠ W5; (s) ⊦ W3 ≠ W4; (s) a: ⊦ (x + y) + z = x + y + z; from specification list in-15: ⊦ x + a ' = y → a ∈ y; (forward) from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ ¬ FO(l).W?; (s) ⊦ # a ' = 0 +1; (s) ⊦ isPropFO(n, l, bel + SF ') → (bel + SF ') -p n = (bel -p n) + SF '; (s) ⊦ a ' ≠ []; (s) ⊦ a ' = x + a0 ' ↔ a = a0 ∧ x = []; (ws) ⊦ FO(l) ≠ SF; (s) ⊦ a ∈ a0 ' ↔ a = a0; (s) ⊦ a ∈ x + y ↔ a ∈ x ∨ a ∈ y; (s) ⊦ W(l, v) ≠ SF; (s) ⊦ W(l, v) ≠ FO(l0); (s) ⊦ a ' + x = a0 ' + y ↔ a = a0 ∧ x = y; (ws)
| gs.bq(t) = FO(alsf(t).l) ' + SF ', ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], lsf(t).t = t, alsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W4, pcf(t) = W6, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := (FO(alsf(t).l) ' -p n) + SF ')).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, gs.bq(t), gs.pq(alsf(t).l), alsf(t).l), isPropFO(n, l0, gs.bq(t)), isPropFO(n0, l0, gs.bq(t)), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), FO(alsf(t).l) ∈ gs.bq(t), SF ∈ gs.bq(t), n ≤ 1, n0 ≤ 1, ¬ oneMember(tid1, als.l, gs.fwriters), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ ¬ W(alsf(t).l, alsf(t).v) ∈ FO(alsf(t).l) ' -p n ∧ FO(alsf(t).l) ∈ FO(alsf(t).l) ' -p n |
gs.bq(t) = FO(alsf(t).l) ' + SF ', ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], alsf(t).t = t, lsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W4, n = 0, pcf(t) = W6, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := (FO(alsf(t).l) ' -p n) + SF ')).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, gs.bq(t), gs.pq(alsf(t).l), alsf(t).l), isPropFO(n0, l0, gs.bq(t)), isPropFO(n, l0, gs.bq(t)), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), SF ∈ gs.bq(t), FO(alsf(t).l) ∈ gs.bq(t), n0 ≤ 1, n ≤ 1, ¬ oneMember(tid1, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ ¬ W(alsf(t).l, alsf(t).v) ∈ FO(alsf(t).l) ' -p n ∧ FO(alsf(t).l) ∈ FO(alsf(t).l) ' -p n
gs.bq(t) = FO(alsf(t).l) ' + SF ', ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], alsf(t).t = t, lsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W4, n = n1 +1, pcf(t) = W6, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := (FO(alsf(t).l) ' -p n) + SF ')).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, gs.bq(t), gs.pq(alsf(t).l), alsf(t).l), isPropFO(n0, l0, gs.bq(t)), isPropFO(n, l0, gs.bq(t)), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), SF ∈ gs.bq(t), FO(alsf(t).l) ∈ gs.bq(t), n0 ≤ 1, n ≤ 1, ¬ oneMember(tid1, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ ¬ W(alsf(t).l, alsf(t).v) ∈ FO(alsf(t).l) ' -p n ∧ FO(alsf(t).l) ∈ FO(alsf(t).l) ' -p n
Used simplifier rules: Nat freely generated by 0, +1;;
| gs.bq(t) = FO(alsf(t).l) ' + SF ', ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], alsf(t).t = t, lsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W4, n = 0, pcf(t) = W6, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := (FO(alsf(t).l) ' -p n) + SF ')).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, gs.bq(t), gs.pq(alsf(t).l), alsf(t).l), isPropFO(n0, l0, gs.bq(t)), isPropFO(n, l0, gs.bq(t)), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), SF ∈ gs.bq(t), FO(alsf(t).l) ∈ gs.bq(t), n0 ≤ 1, n ≤ 1, ¬ oneMember(tid1, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ ¬ W(alsf(t).l, alsf(t).v) ∈ FO(alsf(t).l) ' -p n ∧ FO(alsf(t).l) ∈ FO(alsf(t).l) ' -p n |
gs.bq(t) = FO(alsf(t).l) ' + SF ', ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], lsf(t).t = t, alsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W4, pcf(t) = W6, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := SF ')).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, gs.bq(t), gs.pq(alsf(t).l), alsf(t).l), isPropFO(0, l0, gs.bq(t)), isPropFO(n0, l0, gs.bq(t)), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), FO(alsf(t).l) ∈ gs.bq(t), SF ∈ gs.bq(t), n0 ≤ 1, ¬ oneMember(tid1, als.l, gs.fwriters), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: ⊦ ¬ a ∈ []; (s) ⊦ a ' -p 0 = []; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s)
| gs.bq(t) = FO(alsf(t).l) ' + SF ', ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], lsf(t).t = t, alsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W4, pcf(t) = W6, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := SF ')).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, gs.bq(t), gs.pq(alsf(t).l), alsf(t).l), isPropFO(0, l0, gs.bq(t)), isPropFO(n0, l0, gs.bq(t)), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), FO(alsf(t).l) ∈ gs.bq(t), SF ∈ gs.bq(t), n0 ≤ 1, ¬ oneMember(tid1, als.l, gs.fwriters), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], alsf(t).t = t, lsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W4, pcf(t) = W6, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := SF ')).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, FO(alsf(t).l) ' + SF ', gs.pq(alsf(t).l), alsf(t).l), isPropFO(n0, l0, FO(alsf(t).l) ' + SF '), isPropFO(0, l0, FO(alsf(t).l) ' + SF '), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), SF ∈ FO(alsf(t).l) ' + SF ', FO(alsf(t).l) ∈ FO(alsf(t).l) ' + SF ', n0 ≤ 1, ¬ oneMember(tid1, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦
| ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], alsf(t).t = t, lsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W4, pcf(t) = W6, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := SF ')).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, FO(alsf(t).l) ' + SF ', gs.pq(alsf(t).l), alsf(t).l), isPropFO(n0, l0, FO(alsf(t).l) ' + SF '), isPropFO(0, l0, FO(alsf(t).l) ' + SF '), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), SF ∈ FO(alsf(t).l) ' + SF ', FO(alsf(t).l) ∈ FO(alsf(t).l) ' + SF ', n0 ≤ 1, ¬ oneMember(tid1, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ |
ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], lsf(t).t = t, alsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W4, pcf(t) = W6, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := SF ')).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, FO(alsf(t).l) ' + SF ', gs.pq(alsf(t).l), alsf(t).l), isPropFO(0, l0, FO(alsf(t).l) ' + SF '), isPropFO(n0, l0, FO(alsf(t).l) ' + SF '), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n0 ≤ 1, ¬ oneMember(tid1, als.l, gs.fwriters), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a ∈ a0 ' ↔ a = a0; (s) ⊦ FO(l) ≠ SF; (s) ⊦ a ∈ a0 ' + x ↔ a = a0 ∨ a ∈ x; (s)
| ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], lsf(t).t = t, alsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W4, pcf(t) = W6, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := SF ')).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, FO(alsf(t).l) ' + SF ', gs.pq(alsf(t).l), alsf(t).l), isPropFO(0, l0, FO(alsf(t).l) ' + SF '), isPropFO(n0, l0, FO(alsf(t).l) ' + SF '), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), n0 ≤ 1, ¬ oneMember(tid1, als.l, gs.fwriters), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⊦ isPropFO(n, l, bel) ↔ n < # bel ∧ bel[n] = FO(l) ∧ (∀ m. m < n → bel[m] ≠ SF ∧ (bel[m].W? ∨ bel[m].FO? → bel[m].l ≠ l))
Used simplifier rules: ⊦ (a ' + x)[0] = a; (s) ⊦ FO(l) = FO(l0) ↔ l = l0; (s) ⊦ #(a ' + x) = (# x)+1; (s) ⊦ # a ' = 0 +1; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ¬ n < 0; (s) ⊦ doWriteFO(t, loc) ≠ propFO(t0, loc0); (s) Used terms: 0, l0, FO(alsf(t).l) ' + SF '
| ⊦ isPropFO(n, l, bel) ↔ n < # bel ∧ bel[n] = FO(l) ∧ (∀ m. m < n → bel[m] ≠ SF ∧ (bel[m].W? ∨ bel[m].FO? → bel[m].l ≠ l)) |
| gs.bq(t) = FO(alsf(t).l) ' + SF ', ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], alsf(t).t = t, lsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W4, n = n1 +1, pcf(t) = W6, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := (FO(alsf(t).l) ' -p n) + SF ')).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, gs.bq(t), gs.pq(alsf(t).l), alsf(t).l), isPropFO(n0, l0, gs.bq(t)), isPropFO(n, l0, gs.bq(t)), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), SF ∈ gs.bq(t), FO(alsf(t).l) ∈ gs.bq(t), n0 ≤ 1, n ≤ 1, ¬ oneMember(tid1, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ ¬ W(alsf(t).l, alsf(t).v) ∈ FO(alsf(t).l) ' -p n ∧ FO(alsf(t).l) ∈ FO(alsf(t).l) ' -p n |
gs.bq(t) = FO(alsf(t).l) ' + SF ', ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], alsf(t).t = t, lsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W4, pcf(t) = W6, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := (FO(alsf(t).l) ' -p 1) + SF ')).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, gs.bq(t), gs.pq(alsf(t).l), alsf(t).l), isPropFO(n0, l0, gs.bq(t)), isPropFO(1, l0, gs.bq(t)), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), SF ∈ gs.bq(t), FO(alsf(t).l) ∈ gs.bq(t), n0 ≤ 1, ¬ oneMember(tid1, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ ¬ W(alsf(t).l, alsf(t).v) ∈ FO(alsf(t).l) ' -p 1 ∧ FO(alsf(t).l) ∈ FO(alsf(t).l) ' -p 1
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m +1 = m + 1; (s) ⊦ m ≠ 0 → (m + n ≤ 1 ↔ m = 1 ∧ n = 0); (ws)
| gs.bq(t) = FO(alsf(t).l) ' + SF ', ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], alsf(t).t = t, lsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W4, pcf(t) = W6, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := (FO(alsf(t).l) ' -p 1) + SF ')).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, gs.bq(t), gs.pq(alsf(t).l), alsf(t).l), isPropFO(n0, l0, gs.bq(t)), isPropFO(1, l0, gs.bq(t)), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), SF ∈ gs.bq(t), FO(alsf(t).l) ∈ gs.bq(t), n0 ≤ 1, ¬ oneMember(tid1, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ ¬ W(alsf(t).l, alsf(t).v) ∈ FO(alsf(t).l) ' -p 1 ∧ FO(alsf(t).l) ∈ FO(alsf(t).l) ' -p 1 |
gs.bq(t) = FO(alsf(t).l) ' + SF ', ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], lsf(t).t = t, alsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W4, pcf(t) = W6, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := (FO(alsf(t).l) ' -p 1) + SF ')).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, FO(alsf(t).l) ' + SF ', gs.pq(alsf(t).l), alsf(t).l), isPropFO(1, l0, FO(alsf(t).l) ' + SF '), isPropFO(n0, l0, FO(alsf(t).l) ' + SF '), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), FO(alsf(t).l) ∈ FO(alsf(t).l) ' + SF ', SF ∈ FO(alsf(t).l) ' + SF ', n0 ≤ 1, ¬ oneMember(tid1, als.l, gs.fwriters), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ ¬ W(alsf(t).l, alsf(t).v) ∈ FO(alsf(t).l) ' -p 1 ∧ FO(alsf(t).l) ∈ FO(alsf(t).l) ' -p 1
| gs.bq(t) = FO(alsf(t).l) ' + SF ', ags.ctr = gs.fctr, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], lsf(t).t = t, alsf(t).t = t, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W4, pcf(t) = W6, propFO(tid1, l1) = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), FLITGInv(gs), FLITInv(((gs.pq:= gs.pq(l0 := gs.pq(l0) + FO(t) ')).bq:= gs.bq(t := (FO(alsf(t).l) ' -p 1) + SF ')).rfo:= gs.rfo(t := []), lsf, pcf), FLITPSCInv(ags, alsf, apcf), FOFollowsW(t, FO(alsf(t).l) ' + SF ', gs.pq(alsf(t).l), alsf(t).l), isPropFO(1, l0, FO(alsf(t).l) ' + SF '), isPropFO(n0, l0, FO(alsf(t).l) ' + SF '), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), FO(alsf(t).l) ∈ FO(alsf(t).l) ' + SF ', SF ∈ FO(alsf(t).l) ' + SF ', n0 ≤ 1, ¬ oneMember(tid1, als.l, gs.fwriters), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ ¬ W(alsf(t).l, alsf(t).v) ∈ FO(alsf(t).l) ' -p 1 ∧ FO(alsf(t).l) ∈ FO(alsf(t).l) ' -p 1 |
⊦ isPropFO(n, l, bel) ↔ n < # bel ∧ bel[n] = FO(l) ∧ (∀ m. m < n → bel[m] ≠ SF ∧ (bel[m].W? ∨ bel[m].FO? → bel[m].l ≠ l))
Used simplifier rules: n ≠ 0 ⊦ (a ' + x)[(* n)] = x[n -1]; (s) ⊦ a '[0] = a; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ FO(l) ≠ SF; (s) Used terms: 1, l0, FO(alsf(t).l) ' + SF '
| ⊦ isPropFO(n, l, bel) ↔ n < # bel ∧ bel[n] = FO(l) ∧ (∀ m. m < n → bel[m] ≠ SF ∧ (bel[m].W? ∨ bel[m].FO? → bel[m].l ≠ l)) |
| ⟨skip⟩ (pq = pq0 ∧ bq = bq0 ∧ rfo = rfo0), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fwriters = gs.fwriters, l = l0, pq = gs.pq, propFO(tid1, l1) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), rfo = gs.rfo, tid = tid0, gs.bq(tid0) ≠ [], n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ n. ¬(n < # bq(tid) ∧ isPropFO(n, l, bq(tid))) ⊦ reorder(ags.p, pq0, rfo0) ∧ labs(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf(t), pcf(t), ags, alsf(t), apcf(t)) |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, bq = bq0, fwriters = gs.fwriters, l = l0, pq = gs.pq, pq = pq0, propFO(tid1, l1) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), rfo = gs.rfo, rfo = rfo0, tid = tid0, gs.bq(tid0) ≠ [], n < # gs.bq(tid0), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), ∀ n. ¬(n < # bq(tid) ∧ isPropFO(n, l, bq(tid))), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ reorder(ags.p, pq0, rfo0) ∧ labs(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf(t), pcf(t), ags, alsf(t), apcf(t))
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, bq = bq0, fwriters = gs.fwriters, l = l0, pq = gs.pq, pq = pq0, propFO(tid1, l1) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), rfo = gs.rfo, rfo = rfo0, tid = tid0, gs.bq(tid0) ≠ [], n < # gs.bq(tid0), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), ∀ n. ¬(n < # bq(tid) ∧ isPropFO(n, l, bq(tid))), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ reorder(ags.p, pq0, rfo0) ∧ labs(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf(t), pcf(t), ags, alsf(t), apcf(t)) |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, propFO(tid1, l1) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), gs.bq(tid0) ≠ [], n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= gs.pq).bq:= gs.bq).rfo:= gs.rfo, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ n0. ¬ n0 < # gs.bq(tid0) ∨ ¬ isPropFO(n0, l0, gs.bq(tid0)) ⊦ 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) = R1) ∧ (pcf(t) = R2 → apcf(t) = R2) ∧ (pcf(t) = R3 → apcf(t) = R3) ∧ (pcf(t) = R4 → apcf(t) = R4) ∧ (pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v) ∧ (pcf(t) = W1 → apcf(t) = W1) ∧ (pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(lsf(t).t) ⊃ W1;W2)) ∧ (pcf(t) = W3 → apcf(t) = W3) ∧ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(lsf(t).t) ⊃ W3;W4)) ∧ (pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(lsf(t).t) ⊃ W4;W5))) ∧ (pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(lsf(t).t) ⊃ W4;(SF ∈ gs.bq(lsf(t).t) ⊃ W5;W6)))) ∧ (pcf(t) = W7 → apcf(t) = W7) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v)
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 = R1) ∧ (pc = R2 → apc = R2) ∧ (pc = R3 → apc = R3) ∧ (pc = R4 → apc = R4) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → ls.loc = als.l) ∧ (pc = R2 ∨ pc = R3 ∨ pc = R4 → ls.val = als.v) ∧ (pc = W1 → apc = W1) ∧ (pc = W2 → apc = (SF ∈ gs.bq(ls.t) ⊃ W1;W2)) ∧ (pc = W3 → apc = W3) ∧ (pc = W4 → apc = (W(ls.loc, ls.val) ∈ gs.bq(ls.t) ⊃ W3;W4)) ∧ ( pc = W5 → apc = (W(ls.loc, ls.val) ∈ gs.bq(ls.t) ⊃ W3;(FO(ls.loc) ∈ gs.bq(ls.t) ⊃ W4;W5))) ∧ ( pc = W6 → apc = (W(ls.loc, ls.val) ∈ gs.bq(ls.t) ⊃ W3 ;(FO(ls.loc) ∈ gs.bq(ls.t) ⊃ W4;(SF ∈ gs.bq(ls.t) ⊃ W5;W6)) )) ∧ (pc = W7 → apc = W7) ∧ ( pc = W1 ∨ pc = W2 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → ls.loc = als.l) ∧ ( pc = W1 ∨ pc = W2 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → ls.val = als.v); ⊦ (gs.bq:= bq).bq = bq; (s) ⊦ (gs.rfo:= bq0).bq = gs.bq; (s)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, propFO(tid1, l1) = (oneMember(tid0, l0, gs.fwriters) ⊃ doWriteFO(tid0, l0);propFO(tid0, l0)), gs.bq(tid0) ≠ [], n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= gs.pq).bq:= gs.bq).rfo:= gs.rfo, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(tid0)), reorder(ags.p, gs.pq, gs.rfo), ¬ oneMember(tid1, als.l, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ n0. ¬ n0 < # gs.bq(tid0) ∨ ¬ isPropFO(n0, l0, gs.bq(tid0)) ⊦ 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) = R1) ∧ (pcf(t) = R2 → apcf(t) = R2) ∧ (pcf(t) = R3 → apcf(t) = R3) ∧ (pcf(t) = R4 → apcf(t) = R4) ∧ (pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v) ∧ (pcf(t) = W1 → apcf(t) = W1) ∧ (pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(lsf(t).t) ⊃ W1;W2)) ∧ (pcf(t) = W3 → apcf(t) = W3) ∧ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(lsf(t).t) ⊃ W3;W4)) ∧ (pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(lsf(t).t) ⊃ W4;W5))) ∧ (pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(lsf(t).t) ⊃ W4;(SF ∈ gs.bq(lsf(t).t) ⊃ W5;W6)))) ∧ (pcf(t) = W7 → apcf(t) = W7) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v) |
Used terms: n
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.