| FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), flitStep(mkstate(gs, lsf, pcf), globalCRASH, mkstate(gs0, lsf0, pcf0)), abs(mkstate(gs, lsf, pcf), mkstate(ags, alsf, apcf)) ⊦ ∃ ags0, alsf0, apcf0. flitpscStep(mkstate(ags, alsf, apcf), globalPSCCRASH, mkstate(ags0, alsf0, apcf0)) ∧ abs(mkstate(gs0, lsf0, pcf0), mkstate(ags0, alsf0, apcf0)) |
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), globalCRASH, mkstate(gs0, lsf0, pcf0)) ⊦ ∃ ags0, alsf0, apcf0. flitpscStep(mkstate(ags, alsf, apcf), globalPSCCRASH, mkstate(ags0, alsf0, apcf0)) ∧ abs(mkstate(gs0, lsf0, pcf0), mkstate(ags0, alsf0, apcf0))
| 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), globalCRASH, mkstate(gs0, lsf0, pcf0)) ⊦ ∃ ags0, alsf0, apcf0. flitpscStep(mkstate(ags, alsf, apcf), globalPSCCRASH, mkstate(ags0, alsf0, apcf0)) ∧ abs(mkstate(gs0, lsf0, pcf0), mkstate(ags0, alsf0, apcf0)) |
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), globalCRASH, mkstate(gs0, lsf0, pcf0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ gs.pmem = gs0.pmem ∧ 0 = gs0.fctr(l) ∧ reorder(λ l. [], gs0.pq, gs0.rfo) ∧ ∅ = gs0.fwriters(l0) ∧ labs(gs0, lsf0(t), pcf0(t), mkFLITPSCgs(gs.pmem, λ l. [], λ l. 0, λ l. ∅, λ l. ∅), alsf(t), (apcf(t) = idle ⊃ idle;crashed))
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; ⊦ mkFLITPSCgs(mem, p, ctr, writers, writers0).writers = writers; (s) ⊦ mkFLITPSCgs(mem, p, ctr, writers, writers0).p = p; (s) ⊦ mkFLITPSCgs(mem, p, ctr, writers, writers0).ctr = ctr; (s) ⊦ mkFLITPSCgs(mem, p, ctr, writers, writers0).mem = mem; (s) ⊦ globalPSCCRASH ≠ globalPSCPERSIST_FO(l); (s) ⊦ globalPSCCRASH ≠ globalPSCPERSIST_W(l); (s) ⊦ ¬ pre(gs, ls, pc, globalPSCCRASH); (s) ⊦ lstep(gs, ls, pc, a, gs0, ls0, pc0) ↔ pre(gs, ls, pc, a) ∧ ls0 = lstepf(gs, ls, pc, a) ∧ gs0 = gstepf(gs, ls, pc, a) ∧ pc0 = pcstepf(gs, ls, pc, a); (s) ⊦ flitpscStep(mkstate(gs, lsf, pcf), a, mkstate(gs0, lsf0, pcf0)) ↔ (∃ t, ls, pc. lstep(gs, lsf(t), pcf(t), a, gs0, ls, pc) ∧ lsf0 = lsf(t := ls) ∧ pcf0 = pcf(t := pc)) ∨ (∃ l. a = globalPSCPERSIST_W(l) ∧ firstPersistW(gs.p(l)) < # gs.p(l) ∧ gs0 = (gs.mem:= gs.mem(l := gs.p(l)[firstPersistW(gs.p(l))].val)) .p:= gs.p(l := gs.p(l) -p firstPersistW(gs.p(l))) ∧ lsf0 = lsf ∧ pcf0 = pcf) ∨ (∃ l. a = globalPSCPERSIST_FO(l) ∧ (∃ n. isPersistFO(n, gs.p(l)) ∧ gs0 = gs.p:= gs.p(l := gs.p(l) -p n)) ∧ lsf0 = lsf ∧ pcf0 = pcf) ∨ a = globalPSCCRASH ∧ gs0 = mkFLITPSCgs(gs.mem, λ l. [], λ l. 0, λ l. ∅, λ l. ∅) ∧ lsf0 = lsf ∧ pcf0 = (λ t. (pcf(t) = idle ⊃ idle;crashed)); (s)
| ags.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), globalCRASH, mkstate(gs0, lsf0, pcf0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ gs.pmem = gs0.pmem ∧ 0 = gs0.fctr(l) ∧ reorder(λ l. [], gs0.pq, gs0.rfo) ∧ ∅ = gs0.fwriters(l0) ∧ labs(gs0, lsf0(t), pcf0(t), mkFLITPSCgs(gs.pmem, λ l. [], λ l. 0, λ l. ∅, λ l. ∅), alsf(t), (apcf(t) = idle ⊃ idle;crashed)) |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, gs.pmem ≠ gs0.pmem, FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), flitStep(mkstate(gs, lsf, pcf), globalCRASH, mkstate(gs0, lsf0, pcf0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, 0 ≠ gs0.fctr(l), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), flitStep(mkstate(gs, lsf, pcf), globalCRASH, mkstate(gs0, lsf0, pcf0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), flitStep(mkstate(gs, lsf, pcf), globalCRASH, mkstate(gs0, lsf0, pcf0)), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], gs0.pq, gs0.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, ∅ ≠ gs0.fwriters(l0), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), flitStep(mkstate(gs, lsf, pcf), globalCRASH, mkstate(gs0, lsf0, pcf0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), flitStep(mkstate(gs, lsf, pcf), globalCRASH, mkstate(gs0, lsf0, pcf0)), reorder(ags.p, gs.pq, gs.rfo), ¬ labs(gs0, lsf0(t), pcf0(t), mkFLITPSCgs(gs.pmem, λ l. [], λ l. 0, λ l. ∅, λ l. ∅), alsf(t), (apcf(t) = idle ⊃ idle;crashed)), ∀ 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.pmem ≠ gs0.pmem, FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), flitStep(mkstate(gs, lsf, pcf), globalCRASH, mkstate(gs0, lsf0, pcf0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(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), globalCRASH, gs0, ls, pc) ∧ lsf0 = lsf(t := ls) ∧ pcf0 = pcf(t := pc)) ∨ (∃ tid. globalCRASH = 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. globalCRASH = (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. globalCRASH = 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. globalCRASH = 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. globalCRASH = 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) ∨ globalCRASH = 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, gs.pmem ≠ gs0.pmem, FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used terms: pcf0, globalCRASH, 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), globalCRASH, gs0, ls, pc) ∧ lsf0 = lsf(t := ls) ∧ pcf0 = pcf(t := pc)) ∨ (∃ tid. globalCRASH = 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. globalCRASH = (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. globalCRASH = 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. globalCRASH = 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. globalCRASH = 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) ∨ globalCRASH = 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, gs.pmem ≠ gs0.pmem, FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)) ∧ n < # gs.bq(t) ∧ isPropFO(n, l, gs.bq(t)) ∧ ⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(t, l, fwriters; pq, bq, rfo); gs := ((gs.pq:= pq).bq:= bq).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf) ∨ ⟨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, gs.pmem ≠ gs0.pmem, FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: ⊦ globalCRASH ≠ globalPERSIST_FO(loc); (s) ⊦ globalCRASH ≠ globalPERSIST_W(loc); (s) ⊦ globalCRASH ≠ propSF(t); (s) ⊦ doWrite(t, loc, v) ≠ globalCRASH; (s) ⊦ ¬ pre(gs, ls, pc, globalCRASH); (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)
| globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)) ∧ n < # gs.bq(t) ∧ isPropFO(n, l, gs.bq(t)) ∧ ⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(t, l, fwriters; pq, bq, rfo); gs := ((gs.pq:= pq).bq:= bq).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf) ∨ ⟨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, gs.pmem ≠ gs0.pmem, FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(t, l, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), gs.pmem ≠ gs0.pmem, n < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
⟨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, gs.pmem ≠ gs0.pmem, FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| ⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(t, l, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), gs.pmem ≠ gs0.pmem, n < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⟨PROP_FO(t, l, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), pq = gs.pq, rfo = gs.rfo, gs.pmem ≠ gs0.pmem, n < # gs.bq(t), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| ⟨PROP_FO(t, l, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), pq = gs.pq, rfo = gs.rfo, gs.pmem ≠ gs0.pmem, n < # gs.bq(t), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⟨gs := ((gs.pq:= pq0).bq:= bq0).rfo:= rfo0⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf), ⟨PROP_FO(t, l, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), pq = gs.pq, rfo = gs.rfo, gs.pmem ≠ gs0.pmem, n < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| ⟨gs := ((gs.pq:= pq0).bq:= bq0).rfo:= rfo0⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf), ⟨PROP_FO(t, l, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), pq = gs.pq, rfo = gs.rfo, gs.pmem ≠ gs0.pmem, n < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
Used simplifier rules: ⊦ (gs.rfo:= bq0).pmem = gs.pmem; (s) ⊦ (gs.bq:= bq).pmem = gs.pmem; (s) ⊦ (gs.pq:= pq).pmem = gs.pmem; (s)
| ⟨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, gs.pmem ≠ gs0.pmem, FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⟨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, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, gs.pmem ≠ gs0.pmem, FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| ⟨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, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, gs.pmem ≠ gs0.pmem, FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⟨gs := (((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf1), ⟨CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf)⟩ (pq = pq0 ∧ fctr = fctr0 ∧ bq = bq0 ∧ fwriters = fwriters0 ∧ freaders = freaders0 ∧ rfo = rfo0 ∧ pcf = pcf1), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, gs.pmem ≠ gs0.pmem, FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| ⟨gs := (((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf1), ⟨CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf)⟩ (pq = pq0 ∧ fctr = fctr0 ∧ bq = bq0 ∧ fwriters = fwriters0 ∧ freaders = freaders0 ∧ rfo = rfo0 ∧ pcf = pcf1), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, gs.pmem ≠ gs0.pmem, FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
Used simplifier rules: ⊦ (gs.rfo:= bq0).pmem = gs.pmem; (s) ⊦ (gs.freaders:= fwriters0).pmem = gs.pmem; (s) ⊦ (gs.fwriters:= fwriters).pmem = gs.pmem; (s) ⊦ (gs.bq:= bq).pmem = gs.pmem; (s) ⊦ (gs.fctr:= fctr).pmem = gs.pmem; (s) ⊦ (gs.pq:= pq).pmem = gs.pmem; (s)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, 0 ≠ gs0.fctr(l), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), flitStep(mkstate(gs, lsf, pcf), globalCRASH, mkstate(gs0, lsf0, pcf0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(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), globalCRASH, gs0, ls, pc) ∧ lsf0 = lsf(t := ls) ∧ pcf0 = pcf(t := pc)) ∨ (∃ tid. globalCRASH = 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. globalCRASH = (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. globalCRASH = 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. globalCRASH = 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. globalCRASH = 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) ∨ globalCRASH = 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, 0 ≠ gs0.fctr(l), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used terms: pcf0, globalCRASH, 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), globalCRASH, gs0, ls, pc) ∧ lsf0 = lsf(t := ls) ∧ pcf0 = pcf(t := pc)) ∨ (∃ tid. globalCRASH = 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. globalCRASH = (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. globalCRASH = 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. globalCRASH = 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. globalCRASH = 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) ∨ globalCRASH = 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, 0 ≠ gs0.fctr(l), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
globalCRASH = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)) ∧ n < # gs.bq(t) ∧ isPropFO(n, l0, gs.bq(t)) ∧ ⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(t, l0, fwriters; pq, bq, rfo); gs := ((gs.pq:= pq).bq:= bq).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf) ∨ ⟨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, 0 ≠ gs0.fctr(l), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: ⊦ globalCRASH ≠ globalPERSIST_FO(loc); (s) ⊦ globalCRASH ≠ globalPERSIST_W(loc); (s) ⊦ globalCRASH ≠ propSF(t); (s) ⊦ doWrite(t, loc, v) ≠ globalCRASH; (s) ⊦ ¬ pre(gs, ls, pc, globalCRASH); (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)
| globalCRASH = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)) ∧ n < # gs.bq(t) ∧ isPropFO(n, l0, gs.bq(t)) ∧ ⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(t, l0, fwriters; pq, bq, rfo); gs := ((gs.pq:= pq).bq:= bq).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf) ∨ ⟨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, 0 ≠ gs0.fctr(l), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(t, 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, globalCRASH = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), 0 ≠ gs0.fctr(l), n < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
⟨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, 0 ≠ gs0.fctr(l), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| ⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(t, 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, globalCRASH = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), 0 ≠ gs0.fctr(l), n < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⟨PROP_FO(t, 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, globalCRASH = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), pq = gs.pq, rfo = gs.rfo, 0 ≠ gs0.fctr(l), n < # gs.bq(t), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| ⟨PROP_FO(t, 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, globalCRASH = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), pq = gs.pq, rfo = gs.rfo, 0 ≠ gs0.fctr(l), n < # gs.bq(t), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⟨gs := ((gs.pq:= pq0).bq:= bq0).rfo:= rfo0⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf), ⟨PROP_FO(t, 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, globalCRASH = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), pq = gs.pq, rfo = gs.rfo, 0 ≠ gs0.fctr(l), n < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| ⟨gs := ((gs.pq:= pq0).bq:= bq0).rfo:= rfo0⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf), ⟨PROP_FO(t, 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, globalCRASH = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), pq = gs.pq, rfo = gs.rfo, 0 ≠ gs0.fctr(l), n < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⟨PROP_FO(t, 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, globalCRASH = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), gs0 = ((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf0 = lsf, pcf0 = pcf, pq = gs.pq, rfo = gs.rfo, 0 ≠ gs0.fctr(l), n < # gs.bq(t), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| ⟨PROP_FO(t, 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, globalCRASH = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), gs0 = ((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf0 = lsf, pcf0 = pcf, pq = gs.pq, rfo = gs.rfo, 0 ≠ gs0.fctr(l), n < # gs.bq(t), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⟨PROP_FO(t, 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, globalCRASH = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), pq = gs.pq, rfo = gs.rfo, gs.bq(t) ≠ [], 0 ≠ gs.fctr(l), n < # gs.bq(t), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ (gs.pq:= pq).fctr = gs.fctr; (s) ⊦ (gs.bq:= bq).fctr = gs.fctr; (s) ⊦ (gs.rfo:= bq0).fctr = gs.fctr; (s)
| ⟨PROP_FO(t, 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, globalCRASH = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), pq = gs.pq, rfo = gs.rfo, gs.bq(t) ≠ [], 0 ≠ gs.fctr(l), n < # gs.bq(t), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, 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, globalCRASH = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), l = l0, pq = gs.pq, rfo = gs.rfo, tid = t, gs.bq(t) ≠ [], 0 ≠ gs.fctr(l1), n < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, 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, globalCRASH = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), l = l0, pq = gs.pq, rfo = gs.rfo, tid = t, gs.bq(t) ≠ [], 0 ≠ gs.fctr(l1), n < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, 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, globalCRASH = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), l = l0, pq = gs.pq, rfo = gs.rfo, tid = t, gs.bq(t) ≠ [], 0 ≠ gs.fctr(l1), n0 < # gs.bq(t), n < # bq(tid), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, gs.bq(t)), isPropFO(n, l, bq(tid)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, 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, globalCRASH = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), l = l0, pq = gs.pq, rfo = gs.rfo, tid = t, gs.bq(t) ≠ [], 0 ≠ gs.fctr(l1), n < # gs.bq(t), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ n. ¬(n < # bq(tid) ∧ isPropFO(n, l, bq(tid))) ⊦
| ⟨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, globalCRASH = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), l = l0, pq = gs.pq, rfo = gs.rfo, tid = t, gs.bq(t) ≠ [], 0 ≠ gs.fctr(l1), n0 < # gs.bq(t), n < # bq(tid), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l0, gs.bq(t)), isPropFO(n, l, bq(tid)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, 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, globalCRASH = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), l = l0, pq = gs.pq, rfo = gs.rfo, tid = t, gs.bq(t) ≠ [], 0 ≠ gs.fctr(l1), n < # bq(tid), n0 < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, bq(tid)), isPropFO(n0, l0, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, 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, globalCRASH = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), l = l0, pq = gs.pq, rfo = gs.rfo, tid = t, gs.bq(t) ≠ [], 0 ≠ gs.fctr(l1), n < # bq(tid), n0 < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, bq(tid)), isPropFO(n0, l0, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), gs.bq(t) ≠ [], 0 ≠ gs.fctr(l1), n0 < # gs.bq(t), n < # gs.bq(t), FLITInv(gs, lsf, pcf), 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), ∀ t. labs(gs, 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, globalCRASH = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), gs.bq(t) ≠ [], 0 ≠ gs.fctr(l1), n0 < # gs.bq(t), n < # gs.bq(t), FLITInv(gs, lsf, pcf), 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), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
Used simplifier rules: ⊦ globalCRASH ≠ propFO(t, loc); (s) ⊦ doWriteFO(t, loc) ≠ globalCRASH; (s) Used formulas: oneMember(t, l0, gs.fwriters)
| ⟨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, globalCRASH = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), l = l0, pq = gs.pq, rfo = gs.rfo, tid = t, gs.bq(t) ≠ [], 0 ≠ gs.fctr(l1), n < # gs.bq(t), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ n. ¬(n < # bq(tid) ∧ isPropFO(n, l, bq(tid))) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, bq = bq0, fwriters = gs.fwriters, globalCRASH = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), l = l0, pq = gs.pq, pq = pq0, rfo = gs.rfo, rfo = rfo0, tid = t, gs.bq(t) ≠ [], 0 ≠ gs.fctr(l1), n < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ n. ¬(n < # bq(tid) ∧ isPropFO(n, l, bq(tid))), ∀ t. labs(gs, 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, globalCRASH = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), l = l0, pq = gs.pq, pq = pq0, rfo = gs.rfo, rfo = rfo0, tid = t, gs.bq(t) ≠ [], 0 ≠ gs.fctr(l1), n < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ n. ¬(n < # bq(tid) ∧ isPropFO(n, l, bq(tid))), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), gs.bq(t) ≠ [], 0 ≠ gs.fctr(l1), n < # gs.bq(t), FLITInv(((gs.pq:= gs.pq).bq:= gs.bq).rfo:= gs.rfo, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ n0. ¬ n0 < # gs.bq(t) ∨ ¬ isPropFO(n0, l0, gs.bq(t)) ⊦
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t, l0, gs.fwriters) ⊃ doWriteFO(t, l0);propFO(t, l0)), gs.bq(t) ≠ [], 0 ≠ gs.fctr(l1), n < # gs.bq(t), FLITInv(((gs.pq:= gs.pq).bq:= gs.bq).rfo:= gs.rfo, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l0, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ n0. ¬ n0 < # gs.bq(t) ∨ ¬ isPropFO(n0, l0, gs.bq(t)) ⊦ |
Used terms: n
| ⟨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, 0 ≠ gs0.fctr(l), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⟨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, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, 0 ≠ gs0.fctr(l), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| ⟨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, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, 0 ≠ gs0.fctr(l), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⟨gs := (((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf1), ⟨CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf)⟩ (pq = pq0 ∧ fctr = fctr0 ∧ bq = bq0 ∧ fwriters = fwriters0 ∧ freaders = freaders0 ∧ rfo = rfo0 ∧ pcf = pcf1), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, 0 ≠ gs0.fctr(l), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| ⟨gs := (((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf1), ⟨CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf)⟩ (pq = pq0 ∧ fctr = fctr0 ∧ bq = bq0 ∧ fwriters = fwriters0 ∧ freaders = freaders0 ∧ rfo = rfo0 ∧ pcf = pcf1), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, 0 ≠ gs0.fctr(l), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⟨CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf)⟩ (pq = pq0 ∧ fctr = fctr0 ∧ bq = bq0 ∧ fwriters = fwriters0 ∧ freaders = freaders0 ∧ rfo = rfo0 ∧ pcf = pcf1), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, gs0 = (((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0, lsf0 = lsf, pcf0 = pcf1, pq = gs.pq, rfo = gs.rfo, 0 ≠ gs0.fctr(l), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| ⟨CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf)⟩ (pq = pq0 ∧ fctr = fctr0 ∧ bq = bq0 ∧ fwriters = fwriters0 ∧ freaders = freaders0 ∧ rfo = rfo0 ∧ pcf = pcf1), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, gs0 = (((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0, lsf0 = lsf, pcf0 = pcf1, pq = gs.pq, rfo = gs.rfo, 0 ≠ gs0.fctr(l), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⟨CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf)⟩ (pq = pq0 ∧ fctr = fctr0 ∧ bq = bq0 ∧ fwriters = fwriters0 ∧ freaders = freaders0 ∧ rfo = rfo0 ∧ pcf = pcf1), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, 0 ≠ fctr0(l), FLITInv(gs, lsf, pcf), FLITInv((((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0, lsf, pcf1), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: ⊦ (gs.fctr:= fctr).fctr = fctr; (s) ⊦ (gs.bq:= bq).fctr = gs.fctr; (s) ⊦ (gs.fwriters:= fwriters).fctr = gs.fctr; (s) ⊦ (gs.freaders:= fwriters0).fctr = gs.fctr; (s) ⊦ (gs.rfo:= bq0).fctr = gs.fctr; (s)
| ⟨CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf)⟩ (pq = pq0 ∧ fctr = fctr0 ∧ bq = bq0 ∧ fwriters = fwriters0 ∧ freaders = freaders0 ∧ rfo = rfo0 ∧ pcf = pcf1), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, 0 ≠ fctr0(l), FLITInv(gs, lsf, pcf), FLITInv((((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0, lsf, pcf1), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⟨pcf := λ t. (pcf(t) = idle ⊃ idle;crashed), pq := λ l. [], fctr := λ l. 0, freaders := λ l. ∅, fwriters := λ l. ∅, bq := λ t. [], rfo := λ t. []⟩ (pq = pq0 ∧ fctr = fctr0 ∧ bq = bq0 ∧ fwriters = fwriters0 ∧ freaders = freaders0 ∧ rfo = rfo0 ∧ pcf = pcf1), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, 0 ≠ fctr0(l), FLITInv((((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0, lsf, pcf1), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: decl: CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf) {pcf := λ t. (pcf(t) = idle ⊃ idle;crashed), pq := λ l. [], fctr := λ l. 0, freaders := λ l. ∅, fwriters := λ l. ∅, bq := λ t. [], rfo := λ t. [] };
| ⟨pcf := λ t. (pcf(t) = idle ⊃ idle;crashed), pq := λ l. [], fctr := λ l. 0, freaders := λ l. ∅, fwriters := λ l. ∅, bq := λ t. [], rfo := λ t. []⟩ (pq = pq0 ∧ fctr = fctr0 ∧ bq = bq0 ∧ fwriters = fwriters0 ∧ freaders = freaders0 ∧ rfo = rfo0 ∧ pcf = pcf1), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, 0 ≠ fctr0(l), FLITInv((((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0, lsf, pcf1), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), flitStep(mkstate(gs, lsf, pcf), globalCRASH, mkstate(gs0, lsf0, pcf0)), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], gs0.pq, gs0.rfo), ∀ t. labs(gs, lsf(t), pcf(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), globalCRASH, gs0, ls, pc) ∧ lsf0 = lsf(t := ls) ∧ pcf0 = pcf(t := pc)) ∨ (∃ tid. globalCRASH = 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. globalCRASH = (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. globalCRASH = 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. globalCRASH = 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. globalCRASH = 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) ∨ globalCRASH = 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(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], gs0.pq, gs0.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used terms: pcf0, globalCRASH, 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), globalCRASH, gs0, ls, pc) ∧ lsf0 = lsf(t := ls) ∧ pcf0 = pcf(t := pc)) ∨ (∃ tid. globalCRASH = 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. globalCRASH = (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. globalCRASH = 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. globalCRASH = 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. globalCRASH = 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) ∨ globalCRASH = 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(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], gs0.pq, gs0.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)) ∧ n < # gs.bq(t) ∧ isPropFO(n, l, gs.bq(t)) ∧ ⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(t, l, fwriters; pq, bq, rfo); gs := ((gs.pq:= pq).bq:= bq).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf) ∨ ⟨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), ¬ reorder(λ l. [], gs0.pq, gs0.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: ⊦ globalCRASH ≠ globalPERSIST_FO(loc); (s) ⊦ globalCRASH ≠ globalPERSIST_W(loc); (s) ⊦ globalCRASH ≠ propSF(t); (s) ⊦ doWrite(t, loc, v) ≠ globalCRASH; (s) ⊦ ¬ pre(gs, ls, pc, globalCRASH); (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)
| globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)) ∧ n < # gs.bq(t) ∧ isPropFO(n, l, gs.bq(t)) ∧ ⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(t, l, fwriters; pq, bq, rfo); gs := ((gs.pq:= pq).bq:= bq).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf) ∨ ⟨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), ¬ reorder(λ l. [], gs0.pq, gs0.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(t, l, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), n < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], gs0.pq, gs0.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
⟨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(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], gs0.pq, gs0.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| ⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(t, l, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), n < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], gs0.pq, gs0.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⟨PROP_FO(t, l, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), pq = gs.pq, rfo = gs.rfo, n < # gs.bq(t), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], gs0.pq, gs0.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| ⟨PROP_FO(t, l, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), pq = gs.pq, rfo = gs.rfo, n < # gs.bq(t), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], gs0.pq, gs0.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⟨gs := ((gs.pq:= pq0).bq:= bq0).rfo:= rfo0⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf), ⟨PROP_FO(t, l, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), pq = gs.pq, rfo = gs.rfo, n < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], gs0.pq, gs0.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| ⟨gs := ((gs.pq:= pq0).bq:= bq0).rfo:= rfo0⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf), ⟨PROP_FO(t, l, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), pq = gs.pq, rfo = gs.rfo, n < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], gs0.pq, gs0.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⟨PROP_FO(t, l, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), gs0 = ((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf0 = lsf, pcf0 = pcf, pq = gs.pq, rfo = gs.rfo, n < # gs.bq(t), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], gs0.pq, gs0.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| ⟨PROP_FO(t, l, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), gs0 = ((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf0 = lsf, pcf0 = pcf, pq = gs.pq, rfo = gs.rfo, n < # gs.bq(t), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], gs0.pq, gs0.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⟨PROP_FO(t, l, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), pq = gs.pq, rfo = gs.rfo, gs.bq(t) ≠ [], n < # gs.bq(t), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], pq0, rfo0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ (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)
| ⟨PROP_FO(t, l, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), pq = gs.pq, rfo = gs.rfo, gs.bq(t) ≠ [], n < # gs.bq(t), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], pq0, rfo0), ∀ t. labs(gs, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), pq = gs.pq, rfo = gs.rfo, tid = t, gs.bq(t) ≠ [], n < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], pq0, rfo0), ∀ t. labs(gs, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), pq = gs.pq, rfo = gs.rfo, tid = t, gs.bq(t) ≠ [], n < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], pq0, rfo0), ∀ t. labs(gs, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), pq = gs.pq, rfo = gs.rfo, tid = t, gs.bq(t) ≠ [], n0 < # gs.bq(t), n < # bq(tid), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t)), isPropFO(n, l, bq(tid)), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], pq0, rfo0), ∀ t. labs(gs, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), pq = gs.pq, rfo = gs.rfo, tid = t, gs.bq(t) ≠ [], n < # gs.bq(t), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], pq0, rfo0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ n. ¬(n < # bq(tid) ∧ isPropFO(n, l, bq(tid))) ⊦
| ⟨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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), pq = gs.pq, rfo = gs.rfo, tid = t, gs.bq(t) ≠ [], n0 < # gs.bq(t), n < # bq(tid), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t)), isPropFO(n, l, bq(tid)), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], pq0, rfo0), ∀ t. labs(gs, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), pq = gs.pq, rfo = gs.rfo, tid = t, gs.bq(t) ≠ [], n < # bq(tid), n0 < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, bq(tid)), isPropFO(n0, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], pq0, rfo0), ∀ t. labs(gs, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), pq = gs.pq, rfo = gs.rfo, tid = t, gs.bq(t) ≠ [], n < # bq(tid), n0 < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, bq(tid)), isPropFO(n0, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], pq0, rfo0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), gs.bq(t) ≠ [], n0 < # gs.bq(t), n < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t) ')).bq:= gs.bq(t := gs.bq(t) -p n)).rfo:= gs.rfo(t := (t ∈ gs.fwriters(l) ⊃ gs.rfo(t);gs.rfo(t) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t)), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], gs.pq(l := gs.pq(l) + FO(t) '), gs.rfo(t := (t ∈ gs.fwriters(l) ⊃ gs.rfo(t);gs.rfo(t) -p n))), ∀ t. labs(gs, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), gs.bq(t) ≠ [], n0 < # gs.bq(t), n < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t) ')).bq:= gs.bq(t := gs.bq(t) -p n)).rfo:= gs.rfo(t := (t ∈ gs.fwriters(l) ⊃ gs.rfo(t);gs.rfo(t) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t)), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], gs.pq(l := gs.pq(l) + FO(t) '), gs.rfo(t := (t ∈ gs.fwriters(l) ⊃ gs.rfo(t);gs.rfo(t) -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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), gs.bq(t) ≠ [], n < # gs.bq(t), n0 < # gs.bq(t), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t) ')).bq:= gs.bq(t := gs.bq(t) -p n)).rfo:= gs.rfo(t := (t ∈ gs.fwriters(l) ⊃ gs.rfo(t);gs.rfo(t) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), isPropFO(n0, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), t ∈ gs.fwriters(l), ¬ reorder(λ l. [], gs.pq(l := gs.pq(l) + FO(t) '), gs.rfo(t := (t ∈ gs.fwriters(l) ⊃ gs.rfo(t);gs.rfo(t) -p n))), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: ⊦ oneMember(t, l, tsf) → (t ∈ tsf(l0) ↔ l = l0); (s) ⊦ globalCRASH ≠ propFO(t, loc); (s) Used formulas: t ∈ gs.fwriters(l)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), gs.bq(t) ≠ [], n < # gs.bq(t), n0 < # gs.bq(t), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t) ')).bq:= gs.bq(t := gs.bq(t) -p n)).rfo:= gs.rfo(t := (t ∈ gs.fwriters(l) ⊃ gs.rfo(t);gs.rfo(t) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), isPropFO(n0, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), t ∈ gs.fwriters(l), ¬ reorder(λ l. [], gs.pq(l := gs.pq(l) + FO(t) '), gs.rfo(t := (t ∈ gs.fwriters(l) ⊃ gs.rfo(t);gs.rfo(t) -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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), # gs.fwriters(l) ≠ 0, gs.bq(t) ≠ [], gs.fwriters(l) ≠ ∅, n < # gs.bq(t), n0 < # gs.bq(t), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t) ')).bq:= gs.bq(t := gs.bq(t) -p n)).rfo:= gs.rfo(t := gs.rfo(t)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), isPropFO(n0, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), t ∈ gs.fwriters(l), ¬ reorder(λ l. [], gs.pq(l := gs.pq(l) + FO(t) '), gs.rfo(t := gs.rfo(t))), ∀ 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), # gs.fwriters(l) ≠ 0, gs.bq(t) ≠ [], gs.fwriters(l) ≠ ∅, n < # gs.bq(t), n0 < # gs.bq(t), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t) ')).bq:= gs.bq(t := gs.bq(t) -p n)).rfo:= gs.rfo(t := gs.rfo(t)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), isPropFO(n0, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), t ∈ gs.fwriters(l), ¬ reorder(λ l. [], gs.pq(l := gs.pq(l) + FO(t) '), gs.rfo(t := gs.rfo(t))), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
Used simplifier rules: ⊦ globalCRASH ≠ propFO(t, loc); (s) ⊦ doWriteFO(t, loc) ≠ globalCRASH; (s) Used formulas: oneMember(t, l, gs.fwriters)
| ⟨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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), pq = gs.pq, rfo = gs.rfo, tid = t, gs.bq(t) ≠ [], n < # gs.bq(t), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], pq0, rfo0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ n. ¬(n < # bq(tid) ∧ isPropFO(n, l, bq(tid))) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, bq = bq0, fwriters = gs.fwriters, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), pq = gs.pq, pq = pq0, rfo = gs.rfo, rfo = rfo0, tid = t, gs.bq(t) ≠ [], n < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], pq0, rfo0), ∀ n. ¬(n < # bq(tid) ∧ isPropFO(n, l, bq(tid))), ∀ t. labs(gs, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), pq = gs.pq, pq = pq0, rfo = gs.rfo, rfo = rfo0, tid = t, gs.bq(t) ≠ [], n < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], pq0, rfo0), ∀ n. ¬(n < # bq(tid) ∧ isPropFO(n, l, bq(tid))), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), gs.bq(t) ≠ [], n < # gs.bq(t), FLITInv(((gs.pq:= gs.pq).bq:= gs.bq).rfo:= gs.rfo, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ n0. ¬ n0 < # gs.bq(t) ∨ ¬ isPropFO(n0, l, gs.bq(t)) ⊦
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), gs.bq(t) ≠ [], n < # gs.bq(t), FLITInv(((gs.pq:= gs.pq).bq:= gs.bq).rfo:= gs.rfo, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ n0. ¬ n0 < # gs.bq(t) ∨ ¬ isPropFO(n0, l, gs.bq(t)) ⊦ |
Used terms: n
| ⟨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(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], gs0.pq, gs0.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⟨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, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], gs0.pq, gs0.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| ⟨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, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], gs0.pq, gs0.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⟨gs := (((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf1), ⟨CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf)⟩ (pq = pq0 ∧ fctr = fctr0 ∧ bq = bq0 ∧ fwriters = fwriters0 ∧ freaders = freaders0 ∧ rfo = rfo0 ∧ pcf = pcf1), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], gs0.pq, gs0.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| ⟨gs := (((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf1), ⟨CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf)⟩ (pq = pq0 ∧ fctr = fctr0 ∧ bq = bq0 ∧ fwriters = fwriters0 ∧ freaders = freaders0 ∧ rfo = rfo0 ∧ pcf = pcf1), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], gs0.pq, gs0.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⟨CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf)⟩ (pq = pq0 ∧ fctr = fctr0 ∧ bq = bq0 ∧ fwriters = fwriters0 ∧ freaders = freaders0 ∧ rfo = rfo0 ∧ pcf = pcf1), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, gs0 = (((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0, lsf0 = lsf, pcf0 = pcf1, pq = gs.pq, rfo = gs.rfo, FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], gs0.pq, gs0.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| ⟨CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf)⟩ (pq = pq0 ∧ fctr = fctr0 ∧ bq = bq0 ∧ fwriters = fwriters0 ∧ freaders = freaders0 ∧ rfo = rfo0 ∧ pcf = pcf1), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, gs0 = (((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0, lsf0 = lsf, pcf0 = pcf1, pq = gs.pq, rfo = gs.rfo, FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], gs0.pq, gs0.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⟨CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf)⟩ (pq = pq0 ∧ fctr = fctr0 ∧ bq = bq0 ∧ fwriters = fwriters0 ∧ freaders = freaders0 ∧ rfo = rfo0 ∧ pcf = pcf1), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, FLITInv(gs, lsf, pcf), FLITInv((((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0, lsf, pcf1), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], pq0, rfo0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: ⊦ (gs.rfo:= bq0).rfo = bq0; (s) ⊦ (gs.pq:= pq).pq = pq; (s) ⊦ (gs.fctr:= fctr).pq = gs.pq; (s) ⊦ (gs.bq:= bq).pq = gs.pq; (s) ⊦ (gs.fwriters:= fwriters).pq = gs.pq; (s) ⊦ (gs.freaders:= fwriters0).pq = gs.pq; (s) ⊦ (gs.rfo:= bq0).pq = gs.pq; (s)
| ⟨CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf)⟩ (pq = pq0 ∧ fctr = fctr0 ∧ bq = bq0 ∧ fwriters = fwriters0 ∧ freaders = freaders0 ∧ rfo = rfo0 ∧ pcf = pcf1), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, FLITInv(gs, lsf, pcf), FLITInv((((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0, lsf, pcf1), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], pq0, rfo0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⟨pcf := λ t. (pcf(t) = idle ⊃ idle;crashed), pq := λ l. [], fctr := λ l. 0, freaders := λ l. ∅, fwriters := λ l. ∅, bq := λ t. [], rfo := λ t. []⟩ (pq = pq0 ∧ fctr = fctr0 ∧ bq = bq0 ∧ fwriters = fwriters0 ∧ freaders = freaders0 ∧ rfo = rfo0 ∧ pcf = pcf1), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, FLITInv((((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0, lsf, pcf1), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], pq0, rfo0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: decl: CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf) {pcf := λ t. (pcf(t) = idle ⊃ idle;crashed), pq := λ l. [], fctr := λ l. 0, freaders := λ l. ∅, fwriters := λ l. ∅, bq := λ t. [], rfo := λ t. [] };
| ⟨pcf := λ t. (pcf(t) = idle ⊃ idle;crashed), pq := λ l. [], fctr := λ l. 0, freaders := λ l. ∅, fwriters := λ l. ∅, bq := λ t. [], rfo := λ t. []⟩ (pq = pq0 ∧ fctr = fctr0 ∧ bq = bq0 ∧ fwriters = fwriters0 ∧ freaders = freaders0 ∧ rfo = rfo0 ∧ pcf = pcf1), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, FLITInv((((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0, lsf, pcf1), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], pq0, rfo0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, (λ l. []) = pq0, (λ l. 0) = fctr0, (λ t. []) = bq0, (λ l. ∅) = fwriters0, (λ l. ∅) = freaders0, (λ t. []) = rfo0, (λ t. (pcf(t) = idle ⊃ idle;crashed)) = pcf1, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, FLITInv(gs, lsf, pcf), FLITInv((((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0, lsf, pcf1), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], pq0, rfo0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, (λ l. []) = pq0, (λ l. 0) = fctr0, (λ t. []) = bq0, (λ l. ∅) = fwriters0, (λ l. ∅) = freaders0, (λ t. []) = rfo0, (λ t. (pcf(t) = idle ⊃ idle;crashed)) = pcf1, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, FLITInv(gs, lsf, pcf), FLITInv((((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0, lsf, pcf1), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], pq0, rfo0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, FLITInv ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. []), lsf, λ t. (pcf(t) = idle ⊃ idle;crashed)), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], λ l. [], λ t. []), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, FLITInv ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. []), lsf, λ t. (pcf(t) = idle ⊃ idle;crashed)), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ¬ reorder(λ l. [], λ l. [], λ t. []), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⊦ reorder(p, pq, rfo) ↔ (∀ l. reorder(l, p(l), pq(l), rfo))
Used simplifier rules: ⊦ reorder(l, [], fowl0, rfo) ↔ fowl0 = [] ∧ (∀ t. propFOs(t, l, rfo(t)) = []); (s) ⊦ propFOs(t, l, []) = []; (s) Used terms: λ l. [], λ l. [], λ t. []
| ⊦ reorder(p, pq, rfo) ↔ (∀ l. reorder(l, p(l), pq(l), rfo)) |
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, ∅ ≠ gs0.fwriters(l0), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), flitStep(mkstate(gs, lsf, pcf), globalCRASH, mkstate(gs0, lsf0, pcf0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, # gs0.fwriters(l0) ≠ 0, ∅ ≠ gs0.fwriters(l0), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), flitStep(mkstate(gs, lsf, pcf), globalCRASH, mkstate(gs0, lsf0, pcf0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: size-zero: ⊦ # s ≠ 0 → s ≠ ∅; (forward) from specification set-basic size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, # gs0.fwriters(l0) ≠ 0, ∅ ≠ gs0.fwriters(l0), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), flitStep(mkstate(gs, lsf, pcf), globalCRASH, mkstate(gs0, lsf0, pcf0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(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), globalCRASH, gs0, ls, pc) ∧ lsf0 = lsf(t := ls) ∧ pcf0 = pcf(t := pc)) ∨ (∃ tid. globalCRASH = 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. globalCRASH = (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. globalCRASH = 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. globalCRASH = 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. globalCRASH = 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) ∨ globalCRASH = 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, # gs0.fwriters(l0) ≠ 0, ∅ ≠ gs0.fwriters(l0), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used terms: pcf0, globalCRASH, 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), globalCRASH, gs0, ls, pc) ∧ lsf0 = lsf(t := ls) ∧ pcf0 = pcf(t := pc)) ∨ (∃ tid. globalCRASH = 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. globalCRASH = (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. globalCRASH = 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. globalCRASH = 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. globalCRASH = 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) ∨ globalCRASH = 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, # gs0.fwriters(l0) ≠ 0, ∅ ≠ gs0.fwriters(l0), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)) ∧ n < # gs.bq(t) ∧ isPropFO(n, l, gs.bq(t)) ∧ ⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(t, l, fwriters; pq, bq, rfo); gs := ((gs.pq:= pq).bq:= bq).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf) ∨ ⟨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, # gs0.fwriters(l0) ≠ 0, ∅ ≠ gs0.fwriters(l0), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: ⊦ globalCRASH ≠ globalPERSIST_FO(loc); (s) ⊦ globalCRASH ≠ globalPERSIST_W(loc); (s) ⊦ globalCRASH ≠ propSF(t); (s) ⊦ doWrite(t, loc, v) ≠ globalCRASH; (s) ⊦ ¬ pre(gs, ls, pc, globalCRASH); (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)
| globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)) ∧ n < # gs.bq(t) ∧ isPropFO(n, l, gs.bq(t)) ∧ ⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(t, l, fwriters; pq, bq, rfo); gs := ((gs.pq:= pq).bq:= bq).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf) ∨ ⟨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, # gs0.fwriters(l0) ≠ 0, ∅ ≠ gs0.fwriters(l0), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(t, l, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), # gs0.fwriters(l0) ≠ 0, ∅ ≠ gs0.fwriters(l0), n < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
⟨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, # gs0.fwriters(l0) ≠ 0, ∅ ≠ gs0.fwriters(l0), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| ⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(t, l, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), # gs0.fwriters(l0) ≠ 0, ∅ ≠ gs0.fwriters(l0), n < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⟨PROP_FO(t, l, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), pq = gs.pq, rfo = gs.rfo, # gs0.fwriters(l0) ≠ 0, ∅ ≠ gs0.fwriters(l0), n < # gs.bq(t), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| ⟨PROP_FO(t, l, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), pq = gs.pq, rfo = gs.rfo, # gs0.fwriters(l0) ≠ 0, ∅ ≠ gs0.fwriters(l0), n < # gs.bq(t), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⟨gs := ((gs.pq:= pq0).bq:= bq0).rfo:= rfo0⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf), ⟨PROP_FO(t, l, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), pq = gs.pq, rfo = gs.rfo, # gs0.fwriters(l0) ≠ 0, ∅ ≠ gs0.fwriters(l0), n < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| ⟨gs := ((gs.pq:= pq0).bq:= bq0).rfo:= rfo0⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf), ⟨PROP_FO(t, l, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), pq = gs.pq, rfo = gs.rfo, # gs0.fwriters(l0) ≠ 0, ∅ ≠ gs0.fwriters(l0), n < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⟨PROP_FO(t, l, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), gs0 = ((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf0 = lsf, pcf0 = pcf, pq = gs.pq, rfo = gs.rfo, # gs0.fwriters(l0) ≠ 0, ∅ ≠ gs0.fwriters(l0), n < # gs.bq(t), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| ⟨PROP_FO(t, l, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), gs0 = ((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf0 = lsf, pcf0 = pcf, pq = gs.pq, rfo = gs.rfo, # gs0.fwriters(l0) ≠ 0, ∅ ≠ gs0.fwriters(l0), n < # gs.bq(t), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⟨PROP_FO(t, l, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), pq = gs.pq, rfo = gs.rfo, # gs.fwriters(l0) ≠ 0, gs.bq(t) ≠ [], ∅ ≠ gs.fwriters(l0), n < # gs.bq(t), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) size-zero: ⊦ # s ≠ 0 → s ≠ ∅; (forward) from specification set-basic size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ (gs.pq:= pq).fwriters = gs.fwriters; (s) ⊦ (gs.bq:= bq).fwriters = gs.fwriters; (s) ⊦ (gs.rfo:= bq0).fwriters = gs.fwriters; (s)
| ⟨PROP_FO(t, l, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), pq = gs.pq, rfo = gs.rfo, # gs.fwriters(l0) ≠ 0, gs.bq(t) ≠ [], ∅ ≠ gs.fwriters(l0), n < # gs.bq(t), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), pq = gs.pq, rfo = gs.rfo, tid = t, # gs.fwriters(l0) ≠ 0, gs.bq(t) ≠ [], ∅ ≠ gs.fwriters(l0), n < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), pq = gs.pq, rfo = gs.rfo, tid = t, # gs.fwriters(l0) ≠ 0, gs.bq(t) ≠ [], ∅ ≠ gs.fwriters(l0), n < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), pq = gs.pq, rfo = gs.rfo, tid = t, # gs.fwriters(l0) ≠ 0, gs.bq(t) ≠ [], ∅ ≠ gs.fwriters(l0), n0 < # gs.bq(t), n < # bq(tid), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t)), isPropFO(n, l, bq(tid)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), pq = gs.pq, rfo = gs.rfo, tid = t, # gs.fwriters(l0) ≠ 0, gs.bq(t) ≠ [], ∅ ≠ gs.fwriters(l0), n < # gs.bq(t), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ n. ¬(n < # bq(tid) ∧ isPropFO(n, l, bq(tid))) ⊦
| ⟨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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), pq = gs.pq, rfo = gs.rfo, tid = t, # gs.fwriters(l0) ≠ 0, gs.bq(t) ≠ [], ∅ ≠ gs.fwriters(l0), n0 < # gs.bq(t), n < # bq(tid), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t)), isPropFO(n, l, bq(tid)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), pq = gs.pq, rfo = gs.rfo, tid = t, # gs.fwriters(l0) ≠ 0, gs.bq(t) ≠ [], ∅ ≠ gs.fwriters(l0), n < # bq(tid), n0 < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, bq(tid)), isPropFO(n0, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), pq = gs.pq, rfo = gs.rfo, tid = t, # gs.fwriters(l0) ≠ 0, gs.bq(t) ≠ [], ∅ ≠ gs.fwriters(l0), n < # bq(tid), n0 < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, bq(tid)), isPropFO(n0, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), # gs.fwriters(l0) ≠ 0, gs.bq(t) ≠ [], ∅ ≠ gs.fwriters(l0), n0 < # gs.bq(t), n < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t) ')).bq:= gs.bq(t := gs.bq(t) -p n)).rfo:= gs.rfo(t := (t ∈ gs.fwriters(l) ⊃ gs.rfo(t);gs.rfo(t) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t)), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), # gs.fwriters(l0) ≠ 0, gs.bq(t) ≠ [], ∅ ≠ gs.fwriters(l0), n0 < # gs.bq(t), n < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t) ')).bq:= gs.bq(t := gs.bq(t) -p n)).rfo:= gs.rfo(t := (t ∈ gs.fwriters(l) ⊃ gs.rfo(t);gs.rfo(t) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t)), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), # gs.fwriters(l0) ≠ 0, gs.bq(t) ≠ [], ∅ ≠ gs.fwriters(l0), n < # gs.bq(t), n0 < # gs.bq(t), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t) ')).bq:= gs.bq(t := gs.bq(t) -p n)).rfo:= gs.rfo(t := (t ∈ gs.fwriters(l) ⊃ gs.rfo(t);gs.rfo(t) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), isPropFO(n0, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), t ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: ⊦ oneMember(t, l, tsf) → (t ∈ tsf(l0) ↔ l = l0); (s) ⊦ globalCRASH ≠ propFO(t, loc); (s) Used formulas: t ∈ gs.fwriters(l)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), # gs.fwriters(l0) ≠ 0, gs.bq(t) ≠ [], ∅ ≠ gs.fwriters(l0), n < # gs.bq(t), n0 < # gs.bq(t), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t) ')).bq:= gs.bq(t := gs.bq(t) -p n)).rfo:= gs.rfo(t := (t ∈ gs.fwriters(l) ⊃ gs.rfo(t);gs.rfo(t) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), isPropFO(n0, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), t ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), # gs.fwriters(l0) ≠ 0, # gs.fwriters(l) ≠ 0, gs.bq(t) ≠ [], gs.fwriters(l) ≠ ∅, ∅ ≠ gs.fwriters(l0), n < # gs.bq(t), n0 < # gs.bq(t), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t) ')).bq:= gs.bq(t := gs.bq(t) -p n)).rfo:= gs.rfo(t := gs.rfo(t)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), isPropFO(n0, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), t ∈ gs.fwriters(l), ∀ 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), # gs.fwriters(l0) ≠ 0, # gs.fwriters(l) ≠ 0, gs.bq(t) ≠ [], gs.fwriters(l) ≠ ∅, ∅ ≠ gs.fwriters(l0), n < # gs.bq(t), n0 < # gs.bq(t), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t) ')).bq:= gs.bq(t := gs.bq(t) -p n)).rfo:= gs.rfo(t := gs.rfo(t)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), isPropFO(n0, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), t ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
Used simplifier rules: ⊦ globalCRASH ≠ propFO(t, loc); (s) ⊦ doWriteFO(t, loc) ≠ globalCRASH; (s) Used formulas: oneMember(t, l, gs.fwriters)
| ⟨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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), pq = gs.pq, rfo = gs.rfo, tid = t, # gs.fwriters(l0) ≠ 0, gs.bq(t) ≠ [], ∅ ≠ gs.fwriters(l0), n < # gs.bq(t), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ n. ¬(n < # bq(tid) ∧ isPropFO(n, l, bq(tid))) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, bq = bq0, fwriters = gs.fwriters, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), pq = gs.pq, pq = pq0, rfo = gs.rfo, rfo = rfo0, tid = t, # gs.fwriters(l0) ≠ 0, gs.bq(t) ≠ [], ∅ ≠ gs.fwriters(l0), n < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ n. ¬(n < # bq(tid) ∧ isPropFO(n, l, bq(tid))), ∀ t. labs(gs, 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, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), pq = gs.pq, pq = pq0, rfo = gs.rfo, rfo = rfo0, tid = t, # gs.fwriters(l0) ≠ 0, gs.bq(t) ≠ [], ∅ ≠ gs.fwriters(l0), n < # gs.bq(t), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ n. ¬(n < # bq(tid) ∧ isPropFO(n, l, bq(tid))), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), # gs.fwriters(l0) ≠ 0, gs.bq(t) ≠ [], ∅ ≠ gs.fwriters(l0), n < # gs.bq(t), FLITInv(((gs.pq:= gs.pq).bq:= gs.bq).rfo:= gs.rfo, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ n0. ¬ n0 < # gs.bq(t) ∨ ¬ isPropFO(n0, l, gs.bq(t)) ⊦
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t, l, gs.fwriters) ⊃ doWriteFO(t, l);propFO(t, l)), # gs.fwriters(l0) ≠ 0, gs.bq(t) ≠ [], ∅ ≠ gs.fwriters(l0), n < # gs.bq(t), FLITInv(((gs.pq:= gs.pq).bq:= gs.bq).rfo:= gs.rfo, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ n0. ¬ n0 < # gs.bq(t) ∨ ¬ isPropFO(n0, l, gs.bq(t)) ⊦ |
Used terms: n
| ⟨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, # gs0.fwriters(l0) ≠ 0, ∅ ≠ gs0.fwriters(l0), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⟨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, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, # gs0.fwriters(l0) ≠ 0, ∅ ≠ gs0.fwriters(l0), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| ⟨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, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, # gs0.fwriters(l0) ≠ 0, ∅ ≠ gs0.fwriters(l0), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⟨gs := (((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf1), ⟨CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf)⟩ (pq = pq0 ∧ fctr = fctr0 ∧ bq = bq0 ∧ fwriters = fwriters0 ∧ freaders = freaders0 ∧ rfo = rfo0 ∧ pcf = pcf1), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, # gs0.fwriters(l0) ≠ 0, ∅ ≠ gs0.fwriters(l0), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| ⟨gs := (((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf1), ⟨CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf)⟩ (pq = pq0 ∧ fctr = fctr0 ∧ bq = bq0 ∧ fwriters = fwriters0 ∧ freaders = freaders0 ∧ rfo = rfo0 ∧ pcf = pcf1), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, # gs0.fwriters(l0) ≠ 0, ∅ ≠ gs0.fwriters(l0), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⟨CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf)⟩ (pq = pq0 ∧ fctr = fctr0 ∧ bq = bq0 ∧ fwriters = fwriters0 ∧ freaders = freaders0 ∧ rfo = rfo0 ∧ pcf = pcf1), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, gs0 = (((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0, lsf0 = lsf, pcf0 = pcf1, pq = gs.pq, rfo = gs.rfo, # gs0.fwriters(l0) ≠ 0, ∅ ≠ gs0.fwriters(l0), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
| ⟨CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf)⟩ (pq = pq0 ∧ fctr = fctr0 ∧ bq = bq0 ∧ fwriters = fwriters0 ∧ freaders = freaders0 ∧ rfo = rfo0 ∧ pcf = pcf1), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, gs0 = (((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0, lsf0 = lsf, pcf0 = pcf1, pq = gs.pq, rfo = gs.rfo, # gs0.fwriters(l0) ≠ 0, ∅ ≠ gs0.fwriters(l0), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⟨CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf)⟩ (pq = pq0 ∧ fctr = fctr0 ∧ bq = bq0 ∧ fwriters = fwriters0 ∧ freaders = freaders0 ∧ rfo = rfo0 ∧ pcf = pcf1), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, # fwriters0(l0) ≠ 0, ∅ ≠ fwriters0(l0), FLITInv(gs, lsf, pcf), FLITInv((((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0, lsf, pcf1), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: size-zero: ⊦ # s ≠ 0 → s ≠ ∅; (forward) from specification set-basic size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic ⊦ (gs.fwriters:= fwriters).fwriters = fwriters; (s) ⊦ (gs.freaders:= fwriters0).fwriters = gs.fwriters; (s) ⊦ (gs.rfo:= bq0).fwriters = gs.fwriters; (s)
| ⟨CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf)⟩ (pq = pq0 ∧ fctr = fctr0 ∧ bq = bq0 ∧ fwriters = fwriters0 ∧ freaders = freaders0 ∧ rfo = rfo0 ∧ pcf = pcf1), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, # fwriters0(l0) ≠ 0, ∅ ≠ fwriters0(l0), FLITInv(gs, lsf, pcf), FLITInv((((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0, lsf, pcf1), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
⟨pcf := λ t. (pcf(t) = idle ⊃ idle;crashed), pq := λ l. [], fctr := λ l. 0, freaders := λ l. ∅, fwriters := λ l. ∅, bq := λ t. [], rfo := λ t. []⟩ (pq = pq0 ∧ fctr = fctr0 ∧ bq = bq0 ∧ fwriters = fwriters0 ∧ freaders = freaders0 ∧ rfo = rfo0 ∧ pcf = pcf1), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, # fwriters0(l0) ≠ 0, ∅ ≠ fwriters0(l0), FLITInv((((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0, lsf, pcf1), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: decl: CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf) {pcf := λ t. (pcf(t) = idle ⊃ idle;crashed), pq := λ l. [], fctr := λ l. 0, freaders := λ l. ∅, fwriters := λ l. ∅, bq := λ t. [], rfo := λ t. [] };
| ⟨pcf := λ t. (pcf(t) = idle ⊃ idle;crashed), pq := λ l. [], fctr := λ l. 0, freaders := λ l. ∅, fwriters := λ l. ∅, bq := λ t. [], rfo := λ t. []⟩ (pq = pq0 ∧ fctr = fctr0 ∧ bq = bq0 ∧ fwriters = fwriters0 ∧ freaders = freaders0 ∧ rfo = rfo0 ∧ pcf = pcf1), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, # fwriters0(l0) ≠ 0, ∅ ≠ fwriters0(l0), FLITInv((((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0, lsf, pcf1), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), flitStep(mkstate(gs, lsf, pcf), globalCRASH, mkstate(gs0, lsf0, pcf0)), reorder(ags.p, gs.pq, gs.rfo), ¬ labs(gs0, lsf0(t), pcf0(t), mkFLITPSCgs(gs.pmem, λ l. [], λ l. 0, λ l. ∅, λ l. ∅), alsf(t), (apcf(t) = idle ⊃ idle;crashed)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
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), globalCRASH, mkstate(gs0, lsf0, pcf0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf0(t).t = alsf(t).t ∧ (pcf0(t) = idle → apcf(t) = idle) ∧ pcf0(t) ≠ ready ∧ (pcf0(t) = crashed → apcf(t) ≠ idle) ∧ pcf0(t) ≠ R1 ∧ pcf0(t) ≠ R2 ∧ pcf0(t) ≠ R3 ∧ pcf0(t) ≠ R4 ∧ pcf0(t) ≠ W1 ∧ (pcf0(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ gs0.bq(lsf0(t).t) ⊃ W1;W2)) ∧ pcf0(t) ≠ W3 ∧ (pcf0(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;W4)) ∧ ( pcf0(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;W5))) ∧ ( pcf0(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;(SF ∈ gs0.bq(lsf0(t).t) ⊃ W5;W6)))) ∧ pcf0(t) ≠ W7 ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).loc = alsf(t).l) ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(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); ⊦ W7 ≠ crashed; (s) ⊦ W7 ≠ idle; (s) ⊦ W3 ≠ crashed; (s) ⊦ W3 ≠ idle; (s) ⊦ W1 ≠ crashed; (s) ⊦ W1 ≠ idle; (s) ⊦ R4 ≠ crashed; (s) ⊦ R4 ≠ idle; (s) ⊦ R3 ≠ crashed; (s) ⊦ R3 ≠ idle; (s) ⊦ R2 ≠ crashed; (s) ⊦ R2 ≠ idle; (s) ⊦ R1 ≠ crashed; (s) ⊦ R1 ≠ idle; (s) ⊦ crashed ≠ idle; (s) ⊦ crashed ≠ ready; (s) ⊦ idle ≠ ready; (s)
| 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), globalCRASH, mkstate(gs0, lsf0, pcf0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf0(t).t = alsf(t).t ∧ (pcf0(t) = idle → apcf(t) = idle) ∧ pcf0(t) ≠ ready ∧ (pcf0(t) = crashed → apcf(t) ≠ idle) ∧ pcf0(t) ≠ R1 ∧ pcf0(t) ≠ R2 ∧ pcf0(t) ≠ R3 ∧ pcf0(t) ≠ R4 ∧ pcf0(t) ≠ W1 ∧ (pcf0(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ gs0.bq(lsf0(t).t) ⊃ W1;W2)) ∧ pcf0(t) ≠ W3 ∧ (pcf0(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;W4)) ∧ ( pcf0(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;W5))) ∧ ( pcf0(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;(SF ∈ gs0.bq(lsf0(t).t) ⊃ W5;W6)))) ∧ pcf0(t) ≠ W7 ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).loc = alsf(t).l) ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).val = alsf(t).v) |
⊦ 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), globalCRASH, gs0, ls, pc) ∧ lsf0 = lsf(t := ls) ∧ pcf0 = pcf(t := pc)) ∨ (∃ tid. globalCRASH = 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. globalCRASH = (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. globalCRASH = 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. globalCRASH = 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. globalCRASH = 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) ∨ globalCRASH = 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), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf0(t).t = alsf(t).t ∧ (pcf0(t) = idle → apcf(t) = idle) ∧ pcf0(t) ≠ ready ∧ (pcf0(t) = crashed → apcf(t) ≠ idle) ∧ pcf0(t) ≠ R1 ∧ pcf0(t) ≠ R2 ∧ pcf0(t) ≠ R3 ∧ pcf0(t) ≠ R4 ∧ pcf0(t) ≠ W1 ∧ (pcf0(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ gs0.bq(lsf0(t).t) ⊃ W1;W2)) ∧ pcf0(t) ≠ W3 ∧ (pcf0(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;W4)) ∧ ( pcf0(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;W5))) ∧ ( pcf0(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;(SF ∈ gs0.bq(lsf0(t).t) ⊃ W5;W6)))) ∧ pcf0(t) ≠ W7 ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).loc = alsf(t).l) ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).val = alsf(t).v)
Used terms: pcf0, globalCRASH, 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), globalCRASH, gs0, ls, pc) ∧ lsf0 = lsf(t := ls) ∧ pcf0 = pcf(t := pc)) ∨ (∃ tid. globalCRASH = 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. globalCRASH = (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. globalCRASH = 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. globalCRASH = 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. globalCRASH = 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) ∨ globalCRASH = 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), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf0(t).t = alsf(t).t ∧ (pcf0(t) = idle → apcf(t) = idle) ∧ pcf0(t) ≠ ready ∧ (pcf0(t) = crashed → apcf(t) ≠ idle) ∧ pcf0(t) ≠ R1 ∧ pcf0(t) ≠ R2 ∧ pcf0(t) ≠ R3 ∧ pcf0(t) ≠ R4 ∧ pcf0(t) ≠ W1 ∧ (pcf0(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ gs0.bq(lsf0(t).t) ⊃ W1;W2)) ∧ pcf0(t) ≠ W3 ∧ (pcf0(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;W4)) ∧ ( pcf0(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;W5))) ∧ ( pcf0(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;(SF ∈ gs0.bq(lsf0(t).t) ⊃ W5;W6)))) ∧ pcf0(t) ≠ W7 ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).loc = alsf(t).l) ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).val = alsf(t).v) |
globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)) ∧ n < # gs.bq(t0) ∧ isPropFO(n, l, gs.bq(t0)) ∧ ⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(t0, l, fwriters; pq, bq, rfo); gs := ((gs.pq:= pq).bq:= bq).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf) ∨ ⟨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(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf0(t).t = alsf(t).t ∧ (pcf0(t) = idle → apcf(t) = idle) ∧ pcf0(t) ≠ ready ∧ (pcf0(t) = crashed → apcf(t) ≠ idle) ∧ pcf0(t) ≠ R1 ∧ pcf0(t) ≠ R2 ∧ pcf0(t) ≠ R3 ∧ pcf0(t) ≠ R4 ∧ pcf0(t) ≠ W1 ∧ (pcf0(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ gs0.bq(lsf0(t).t) ⊃ W1;W2)) ∧ pcf0(t) ≠ W3 ∧ (pcf0(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;W4)) ∧ ( pcf0(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;W5))) ∧ ( pcf0(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;(SF ∈ gs0.bq(lsf0(t).t) ⊃ W5;W6)))) ∧ pcf0(t) ≠ W7 ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).loc = alsf(t).l) ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).val = alsf(t).v)
Used simplifier rules: ⊦ globalCRASH ≠ globalPERSIST_FO(loc); (s) ⊦ globalCRASH ≠ globalPERSIST_W(loc); (s) ⊦ globalCRASH ≠ propSF(t); (s) ⊦ doWrite(t, loc, v) ≠ globalCRASH; (s) ⊦ ¬ pre(gs, ls, pc, globalCRASH); (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)
| globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)) ∧ n < # gs.bq(t0) ∧ isPropFO(n, l, gs.bq(t0)) ∧ ⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(t0, l, fwriters; pq, bq, rfo); gs := ((gs.pq:= pq).bq:= bq).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf) ∨ ⟨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(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf0(t).t = alsf(t).t ∧ (pcf0(t) = idle → apcf(t) = idle) ∧ pcf0(t) ≠ ready ∧ (pcf0(t) = crashed → apcf(t) ≠ idle) ∧ pcf0(t) ≠ R1 ∧ pcf0(t) ≠ R2 ∧ pcf0(t) ≠ R3 ∧ pcf0(t) ≠ R4 ∧ pcf0(t) ≠ W1 ∧ (pcf0(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ gs0.bq(lsf0(t).t) ⊃ W1;W2)) ∧ pcf0(t) ≠ W3 ∧ (pcf0(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;W4)) ∧ ( pcf0(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;W5))) ∧ ( pcf0(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;(SF ∈ gs0.bq(lsf0(t).t) ⊃ W5;W6)))) ∧ pcf0(t) ≠ W7 ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).loc = alsf(t).l) ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).val = alsf(t).v) |
⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(t0, l, 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, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), n < # gs.bq(t0), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf0(t).t = alsf(t).t ∧ (pcf0(t) = idle → apcf(t) = idle) ∧ pcf0(t) ≠ ready ∧ (pcf0(t) = crashed → apcf(t) ≠ idle) ∧ pcf0(t) ≠ R1 ∧ pcf0(t) ≠ R2 ∧ pcf0(t) ≠ R3 ∧ pcf0(t) ≠ R4 ∧ pcf0(t) ≠ W1 ∧ (pcf0(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ gs0.bq(lsf0(t).t) ⊃ W1;W2)) ∧ pcf0(t) ≠ W3 ∧ (pcf0(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;W4)) ∧ ( pcf0(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;W5))) ∧ ( pcf0(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;(SF ∈ gs0.bq(lsf0(t).t) ⊃ W5;W6)))) ∧ pcf0(t) ≠ W7 ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).loc = alsf(t).l) ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).val = alsf(t).v)
⟨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), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf0(t).t = alsf(t).t ∧ (pcf0(t) = idle → apcf(t) = idle) ∧ pcf0(t) ≠ ready ∧ (pcf0(t) = crashed → apcf(t) ≠ idle) ∧ pcf0(t) ≠ R1 ∧ pcf0(t) ≠ R2 ∧ pcf0(t) ≠ R3 ∧ pcf0(t) ≠ R4 ∧ pcf0(t) ≠ W1 ∧ (pcf0(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ gs0.bq(lsf0(t).t) ⊃ W1;W2)) ∧ pcf0(t) ≠ W3 ∧ (pcf0(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;W4)) ∧ ( pcf0(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;W5))) ∧ ( pcf0(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;(SF ∈ gs0.bq(lsf0(t).t) ⊃ W5;W6)))) ∧ pcf0(t) ≠ W7 ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).loc = alsf(t).l) ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).val = alsf(t).v)
| ⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(t0, l, 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, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), n < # gs.bq(t0), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf0(t).t = alsf(t).t ∧ (pcf0(t) = idle → apcf(t) = idle) ∧ pcf0(t) ≠ ready ∧ (pcf0(t) = crashed → apcf(t) ≠ idle) ∧ pcf0(t) ≠ R1 ∧ pcf0(t) ≠ R2 ∧ pcf0(t) ≠ R3 ∧ pcf0(t) ≠ R4 ∧ pcf0(t) ≠ W1 ∧ (pcf0(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ gs0.bq(lsf0(t).t) ⊃ W1;W2)) ∧ pcf0(t) ≠ W3 ∧ (pcf0(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;W4)) ∧ ( pcf0(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;W5))) ∧ ( pcf0(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;(SF ∈ gs0.bq(lsf0(t).t) ⊃ W5;W6)))) ∧ pcf0(t) ≠ W7 ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).loc = alsf(t).l) ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).val = alsf(t).v) |
⟨PROP_FO(t0, l, 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, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pq = gs.pq, rfo = gs.rfo, n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf0(t).t = alsf(t).t ∧ (pcf0(t) = idle → apcf(t) = idle) ∧ pcf0(t) ≠ ready ∧ (pcf0(t) = crashed → apcf(t) ≠ idle) ∧ pcf0(t) ≠ R1 ∧ pcf0(t) ≠ R2 ∧ pcf0(t) ≠ R3 ∧ pcf0(t) ≠ R4 ∧ pcf0(t) ≠ W1 ∧ (pcf0(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ gs0.bq(lsf0(t).t) ⊃ W1;W2)) ∧ pcf0(t) ≠ W3 ∧ (pcf0(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;W4)) ∧ ( pcf0(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;W5))) ∧ ( pcf0(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;(SF ∈ gs0.bq(lsf0(t).t) ⊃ W5;W6)))) ∧ pcf0(t) ≠ W7 ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).loc = alsf(t).l) ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).val = alsf(t).v)
| ⟨PROP_FO(t0, l, 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, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pq = gs.pq, rfo = gs.rfo, n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf0(t).t = alsf(t).t ∧ (pcf0(t) = idle → apcf(t) = idle) ∧ pcf0(t) ≠ ready ∧ (pcf0(t) = crashed → apcf(t) ≠ idle) ∧ pcf0(t) ≠ R1 ∧ pcf0(t) ≠ R2 ∧ pcf0(t) ≠ R3 ∧ pcf0(t) ≠ R4 ∧ pcf0(t) ≠ W1 ∧ (pcf0(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ gs0.bq(lsf0(t).t) ⊃ W1;W2)) ∧ pcf0(t) ≠ W3 ∧ (pcf0(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;W4)) ∧ ( pcf0(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;W5))) ∧ ( pcf0(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;(SF ∈ gs0.bq(lsf0(t).t) ⊃ W5;W6)))) ∧ pcf0(t) ≠ W7 ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).loc = alsf(t).l) ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).val = alsf(t).v) |
⟨gs := ((gs.pq:= pq0).bq:= bq0).rfo:= rfo0⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf), ⟨PROP_FO(t0, l, 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, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pq = gs.pq, rfo = gs.rfo, n < # gs.bq(t0), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf0(t).t = alsf(t).t ∧ (pcf0(t) = idle → apcf(t) = idle) ∧ pcf0(t) ≠ ready ∧ (pcf0(t) = crashed → apcf(t) ≠ idle) ∧ pcf0(t) ≠ R1 ∧ pcf0(t) ≠ R2 ∧ pcf0(t) ≠ R3 ∧ pcf0(t) ≠ R4 ∧ pcf0(t) ≠ W1 ∧ (pcf0(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ gs0.bq(lsf0(t).t) ⊃ W1;W2)) ∧ pcf0(t) ≠ W3 ∧ (pcf0(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;W4)) ∧ ( pcf0(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;W5))) ∧ ( pcf0(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;(SF ∈ gs0.bq(lsf0(t).t) ⊃ W5;W6)))) ∧ pcf0(t) ≠ W7 ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).loc = alsf(t).l) ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).val = alsf(t).v)
| ⟨gs := ((gs.pq:= pq0).bq:= bq0).rfo:= rfo0⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf), ⟨PROP_FO(t0, l, 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, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pq = gs.pq, rfo = gs.rfo, n < # gs.bq(t0), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf0(t).t = alsf(t).t ∧ (pcf0(t) = idle → apcf(t) = idle) ∧ pcf0(t) ≠ ready ∧ (pcf0(t) = crashed → apcf(t) ≠ idle) ∧ pcf0(t) ≠ R1 ∧ pcf0(t) ≠ R2 ∧ pcf0(t) ≠ R3 ∧ pcf0(t) ≠ R4 ∧ pcf0(t) ≠ W1 ∧ (pcf0(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ gs0.bq(lsf0(t).t) ⊃ W1;W2)) ∧ pcf0(t) ≠ W3 ∧ (pcf0(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;W4)) ∧ ( pcf0(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;W5))) ∧ ( pcf0(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;(SF ∈ gs0.bq(lsf0(t).t) ⊃ W5;W6)))) ∧ pcf0(t) ≠ W7 ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).loc = alsf(t).l) ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).val = alsf(t).v) |
⟨PROP_FO(t0, l, 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, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), gs0 = ((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf0 = lsf, pcf0 = pcf, pq = gs.pq, rfo = gs.rfo, n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf0(t).t = alsf(t).t ∧ (pcf0(t) = idle → apcf(t) = idle) ∧ pcf0(t) ≠ ready ∧ (pcf0(t) = crashed → apcf(t) ≠ idle) ∧ pcf0(t) ≠ R1 ∧ pcf0(t) ≠ R2 ∧ pcf0(t) ≠ R3 ∧ pcf0(t) ≠ R4 ∧ pcf0(t) ≠ W1 ∧ (pcf0(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ gs0.bq(lsf0(t).t) ⊃ W1;W2)) ∧ pcf0(t) ≠ W3 ∧ (pcf0(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;W4)) ∧ ( pcf0(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;W5))) ∧ ( pcf0(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;(SF ∈ gs0.bq(lsf0(t).t) ⊃ W5;W6)))) ∧ pcf0(t) ≠ W7 ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).loc = alsf(t).l) ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).val = alsf(t).v)
| ⟨PROP_FO(t0, l, 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, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), gs0 = ((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf0 = lsf, pcf0 = pcf, pq = gs.pq, rfo = gs.rfo, n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf0(t).t = alsf(t).t ∧ (pcf0(t) = idle → apcf(t) = idle) ∧ pcf0(t) ≠ ready ∧ (pcf0(t) = crashed → apcf(t) ≠ idle) ∧ pcf0(t) ≠ R1 ∧ pcf0(t) ≠ R2 ∧ pcf0(t) ≠ R3 ∧ pcf0(t) ≠ R4 ∧ pcf0(t) ≠ W1 ∧ (pcf0(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ gs0.bq(lsf0(t).t) ⊃ W1;W2)) ∧ pcf0(t) ≠ W3 ∧ (pcf0(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;W4)) ∧ ( pcf0(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;W5))) ∧ ( pcf0(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;(SF ∈ gs0.bq(lsf0(t).t) ⊃ W5;W6)))) ∧ pcf0(t) ≠ W7 ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).loc = alsf(t).l) ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).val = alsf(t).v) |
⟨PROP_FO(t0, l, 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, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pq = gs.pq, rfo = gs.rfo, gs.bq(t0) ≠ [], n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ 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 ∧ (pcf(t) = crashed → apcf(t) ≠ idle) ∧ pcf(t) ≠ R1 ∧ pcf(t) ≠ R2 ∧ pcf(t) ≠ R3 ∧ pcf(t) ≠ R4 ∧ pcf(t) ≠ W1 ∧ (pcf(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ bq0(lsf(t).t) ⊃ W1;W2)) ∧ pcf(t) ≠ W3 ∧ (pcf(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;W4)) ∧ (pcf(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ bq0(lsf(t).t) ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ bq0(lsf(t).t) ⊃ W4;(SF ∈ bq0(lsf(t).t) ⊃ W5;W6)))) ∧ pcf(t) ≠ W7 ∧ (pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).val = alsf(t).v)
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ (gs.bq:= bq).bq = bq; (s) ⊦ (gs.rfo:= bq0).bq = gs.bq; (s)
| ⟨PROP_FO(t0, l, 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, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pq = gs.pq, rfo = gs.rfo, gs.bq(t0) ≠ [], n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ 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 ∧ (pcf(t) = crashed → apcf(t) ≠ idle) ∧ pcf(t) ≠ R1 ∧ pcf(t) ≠ R2 ∧ pcf(t) ≠ R3 ∧ pcf(t) ≠ R4 ∧ pcf(t) ≠ W1 ∧ (pcf(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ bq0(lsf(t).t) ⊃ W1;W2)) ∧ pcf(t) ≠ W3 ∧ (pcf(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;W4)) ∧ (pcf(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ bq0(lsf(t).t) ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ bq0(lsf(t).t) ⊃ W4;(SF ∈ bq0(lsf(t).t) ⊃ W5;W6)))) ∧ pcf(t) ≠ W7 ∧ (pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).val = alsf(t).v) |
⟨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, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pq = gs.pq, rfo = gs.rfo, tid = t0, gs.bq(t0) ≠ [], n < # gs.bq(t0), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ 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 ∧ (pcf(t) = crashed → apcf(t) ≠ idle) ∧ pcf(t) ≠ R1 ∧ pcf(t) ≠ R2 ∧ pcf(t) ≠ R3 ∧ pcf(t) ≠ R4 ∧ pcf(t) ≠ W1 ∧ (pcf(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ bq0(lsf(t).t) ⊃ W1;W2)) ∧ pcf(t) ≠ W3 ∧ (pcf(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;W4)) ∧ (pcf(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ bq0(lsf(t).t) ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ bq0(lsf(t).t) ⊃ W4;(SF ∈ bq0(lsf(t).t) ⊃ W5;W6)))) ∧ pcf(t) ≠ W7 ∧ (pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).val = alsf(t).v)
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, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pq = gs.pq, rfo = gs.rfo, tid = t0, gs.bq(t0) ≠ [], n < # gs.bq(t0), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ 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 ∧ (pcf(t) = crashed → apcf(t) ≠ idle) ∧ pcf(t) ≠ R1 ∧ pcf(t) ≠ R2 ∧ pcf(t) ≠ R3 ∧ pcf(t) ≠ R4 ∧ pcf(t) ≠ W1 ∧ (pcf(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ bq0(lsf(t).t) ⊃ W1;W2)) ∧ pcf(t) ≠ W3 ∧ (pcf(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;W4)) ∧ (pcf(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ bq0(lsf(t).t) ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ bq0(lsf(t).t) ⊃ W4;(SF ∈ bq0(lsf(t).t) ⊃ W5;W6)))) ∧ pcf(t) ≠ W7 ∧ (pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).val = alsf(t).v) |
⟨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, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pq = gs.pq, rfo = gs.rfo, tid = t0, gs.bq(t0) ≠ [], n0 < # gs.bq(t0), n < # bq(tid), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, bq(tid)), reorder(ags.p, gs.pq, gs.rfo), ∀ 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 ∧ (pcf(t) = crashed → apcf(t) ≠ idle) ∧ pcf(t) ≠ R1 ∧ pcf(t) ≠ R2 ∧ pcf(t) ≠ R3 ∧ pcf(t) ≠ R4 ∧ pcf(t) ≠ W1 ∧ (pcf(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ bq0(lsf(t).t) ⊃ W1;W2)) ∧ pcf(t) ≠ W3 ∧ (pcf(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;W4)) ∧ (pcf(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ bq0(lsf(t).t) ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ bq0(lsf(t).t) ⊃ W4;(SF ∈ bq0(lsf(t).t) ⊃ W5;W6)))) ∧ pcf(t) ≠ W7 ∧ (pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).val = alsf(t).v)
⟨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, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pq = gs.pq, rfo = gs.rfo, tid = t0, gs.bq(t0) ≠ [], n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ n. ¬(n < # bq(tid) ∧ isPropFO(n, l, bq(tid))) ⊦ lsf(t).t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ pcf(t) ≠ ready ∧ (pcf(t) = crashed → apcf(t) ≠ idle) ∧ pcf(t) ≠ R1 ∧ pcf(t) ≠ R2 ∧ pcf(t) ≠ R3 ∧ pcf(t) ≠ R4 ∧ pcf(t) ≠ W1 ∧ (pcf(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ bq0(lsf(t).t) ⊃ W1;W2)) ∧ pcf(t) ≠ W3 ∧ (pcf(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;W4)) ∧ (pcf(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ bq0(lsf(t).t) ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ bq0(lsf(t).t) ⊃ W4;(SF ∈ bq0(lsf(t).t) ⊃ W5;W6)))) ∧ pcf(t) ≠ W7 ∧ (pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).val = alsf(t).v)
| ⟨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, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pq = gs.pq, rfo = gs.rfo, tid = t0, gs.bq(t0) ≠ [], n0 < # gs.bq(t0), n < # bq(tid), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, bq(tid)), reorder(ags.p, gs.pq, gs.rfo), ∀ 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 ∧ (pcf(t) = crashed → apcf(t) ≠ idle) ∧ pcf(t) ≠ R1 ∧ pcf(t) ≠ R2 ∧ pcf(t) ≠ R3 ∧ pcf(t) ≠ R4 ∧ pcf(t) ≠ W1 ∧ (pcf(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ bq0(lsf(t).t) ⊃ W1;W2)) ∧ pcf(t) ≠ W3 ∧ (pcf(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;W4)) ∧ (pcf(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ bq0(lsf(t).t) ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ bq0(lsf(t).t) ⊃ W4;(SF ∈ bq0(lsf(t).t) ⊃ W5;W6)))) ∧ pcf(t) ≠ W7 ∧ (pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).val = alsf(t).v) |
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, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pq = gs.pq, rfo = gs.rfo, tid = t0, gs.bq(t0) ≠ [], n < # bq(tid), n0 < # gs.bq(t0), 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, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ 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 ∧ (pcf(t) = crashed → apcf(t) ≠ idle) ∧ pcf(t) ≠ R1 ∧ pcf(t) ≠ R2 ∧ pcf(t) ≠ R3 ∧ pcf(t) ≠ R4 ∧ pcf(t) ≠ W1 ∧ (pcf(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ bq0(lsf(t).t) ⊃ W1;W2)) ∧ pcf(t) ≠ W3 ∧ (pcf(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;W4)) ∧ (pcf(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ bq0(lsf(t).t) ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ bq0(lsf(t).t) ⊃ W4;(SF ∈ bq0(lsf(t).t) ⊃ W5;W6)))) ∧ pcf(t) ≠ W7 ∧ (pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).val = alsf(t).v)
| 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, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pq = gs.pq, rfo = gs.rfo, tid = t0, gs.bq(t0) ≠ [], n < # bq(tid), n0 < # gs.bq(t0), 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, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ 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 ∧ (pcf(t) = crashed → apcf(t) ≠ idle) ∧ pcf(t) ≠ R1 ∧ pcf(t) ≠ R2 ∧ pcf(t) ≠ R3 ∧ pcf(t) ≠ R4 ∧ pcf(t) ≠ W1 ∧ (pcf(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ bq0(lsf(t).t) ⊃ W1;W2)) ∧ pcf(t) ≠ W3 ∧ (pcf(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;W4)) ∧ (pcf(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ bq0(lsf(t).t) ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ bq0(lsf(t).t) ⊃ W4;(SF ∈ bq0(lsf(t).t) ⊃ W5;W6)))) ∧ pcf(t) ≠ W7 ∧ (pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).val = alsf(t).v) |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), gs.bq(t0) ≠ [], n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ 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 ∧ (pcf(t) = crashed → apcf(t) ≠ idle) ∧ pcf(t) ≠ R1 ∧ pcf(t) ≠ R2 ∧ pcf(t) ≠ R3 ∧ pcf(t) ≠ R4 ∧ pcf(t) ≠ W1 ∧ (pcf(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W1;W2)) ∧ pcf(t) ≠ W3 ∧ (pcf(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W3;W4)) ∧ ( pcf(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W4;W5) )) ∧ ( pcf(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W4 ;(SF ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W5;W6) ) )) ∧ pcf(t) ≠ W7 ∧ (pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).val = alsf(t).v)
Used simplifier rules: ⊦ x + a = x + a '; (s)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), gs.bq(t0) ≠ [], n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ 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 ∧ (pcf(t) = crashed → apcf(t) ≠ idle) ∧ pcf(t) ≠ R1 ∧ pcf(t) ≠ R2 ∧ pcf(t) ≠ R3 ∧ pcf(t) ≠ R4 ∧ pcf(t) ≠ W1 ∧ (pcf(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W1;W2)) ∧ pcf(t) ≠ W3 ∧ (pcf(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W3;W4)) ∧ ( pcf(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W4;W5) )) ∧ ( pcf(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W4 ;(SF ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W5;W6) ) )) ∧ pcf(t) ≠ W7 ∧ (pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).val = alsf(t).v) |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), gs.bq(t0) ≠ [], lsf(t).t ≠ alsf(t).t, n < # gs.bq(t0), n0 < # gs.bq(t0), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), isPropFO(n0, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = idle, gs.bq(t0) ≠ [], apcf(t) ≠ idle, n < # gs.bq(t0), n0 < # gs.bq(t0), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), isPropFO(n0, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = ready, gs.bq(t0) ≠ [], n < # gs.bq(t0), n0 < # gs.bq(t0), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), isPropFO(n0, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, apcf(t) = idle, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = crashed, gs.bq(t0) ≠ [], n < # gs.bq(t0), n0 < # gs.bq(t0), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), isPropFO(n0, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = R1, gs.bq(t0) ≠ [], n < # gs.bq(t0), n0 < # gs.bq(t0), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), isPropFO(n0, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = R2, gs.bq(t0) ≠ [], n < # gs.bq(t0), n0 < # gs.bq(t0), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), isPropFO(n0, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = R3, gs.bq(t0) ≠ [], n < # gs.bq(t0), n0 < # gs.bq(t0), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), isPropFO(n0, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = R4, gs.bq(t0) ≠ [], n < # gs.bq(t0), n0 < # gs.bq(t0), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), isPropFO(n0, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W1, gs.bq(t0) ≠ [], n < # gs.bq(t0), n0 < # gs.bq(t0), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), isPropFO(n0, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W2, gs.bq(t0) ≠ [], (apcf(t) = idle ⊃ idle;crashed) ≠ (SF ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W1;W2), n < # gs.bq(t0), n0 < # gs.bq(t0), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), isPropFO(n0, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W3, gs.bq(t0) ≠ [], n < # gs.bq(t0), n0 < # gs.bq(t0), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), isPropFO(n0, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W4, gs.bq(t0) ≠ [], (apcf(t) = idle ⊃ idle;crashed) ≠ (W(lsf(t).loc, lsf(t).val) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W3;W4), n < # gs.bq(t0), n0 < # gs.bq(t0), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), isPropFO(n0, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W5, gs.bq(t0) ≠ [], (apcf(t) = idle ⊃ idle;crashed) ≠ (W(lsf(t).loc, lsf(t).val) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W4;W5) ), n < # gs.bq(t0), n0 < # gs.bq(t0), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), isPropFO(n0, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W6, gs.bq(t0) ≠ [], (apcf(t) = idle ⊃ idle;crashed) ≠ (W(lsf(t).loc, lsf(t).val) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W4 ;(SF ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W5;W6) ) ), n < # gs.bq(t0), n0 < # gs.bq(t0), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), isPropFO(n0, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W7, gs.bq(t0) ≠ [], n < # gs.bq(t0), n0 < # gs.bq(t0), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), isPropFO(n0, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), gs.bq(t0) ≠ [], lsf(t).loc ≠ alsf(t).l, n < # gs.bq(t0), n0 < # gs.bq(t0), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), isPropFO(n0, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ⊦
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), gs.bq(t0) ≠ [], lsf(t).val ≠ alsf(t).v, n < # gs.bq(t0), n0 < # gs.bq(t0), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), isPropFO(n0, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ⊦
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), gs.bq(t0) ≠ [], lsf(t).t ≠ alsf(t).t, n < # gs.bq(t0), n0 < # gs.bq(t0), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), isPropFO(n0, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), gs.bq(t0) ≠ [], lsf(t).t ≠ alsf(t).t, n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: ⊦ oneMember(t, l, tsf) → (t ∈ tsf(l0) ↔ l = l0); (s) ⊦ globalCRASH ≠ propFO(t, loc); (s) Used formulas: t0 ∈ gs.fwriters(l)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), gs.bq(t0) ≠ [], lsf(t).t ≠ alsf(t).t, n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), # gs.fwriters(l) ≠ 0, gs.bq(t0) ≠ [], gs.fwriters(l) ≠ ∅, lsf(t).t ≠ alsf(t).t, n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := gs.rfo(t0)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ 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, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), # gs.fwriters(l) ≠ 0, gs.bq(t0) ≠ [], gs.fwriters(l) ≠ ∅, lsf(t).t ≠ alsf(t).t, n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := gs.rfo(t0)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
Used simplifier rules: ⊦ globalCRASH ≠ propFO(t, loc); (s) ⊦ doWriteFO(t, loc) ≠ globalCRASH; (s) Used formulas: oneMember(t0, l, gs.fwriters)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = idle, gs.bq(t0) ≠ [], apcf(t) ≠ idle, n < # gs.bq(t0), n0 < # gs.bq(t0), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), isPropFO(n0, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = idle, gs.bq(t0) ≠ [], apcf(t) ≠ idle, n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: ⊦ oneMember(t, l, tsf) → (t ∈ tsf(l0) ↔ l = l0); (s) ⊦ globalCRASH ≠ propFO(t, loc); (s) Used formulas: t0 ∈ gs.fwriters(l)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = idle, gs.bq(t0) ≠ [], apcf(t) ≠ idle, n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = idle, # gs.fwriters(l) ≠ 0, gs.bq(t0) ≠ [], gs.fwriters(l) ≠ ∅, apcf(t) ≠ idle, n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := gs.rfo(t0)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ 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, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = idle, # gs.fwriters(l) ≠ 0, gs.bq(t0) ≠ [], gs.fwriters(l) ≠ ∅, apcf(t) ≠ idle, n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := gs.rfo(t0)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
Used simplifier rules: ⊦ globalCRASH ≠ propFO(t, loc); (s) ⊦ doWriteFO(t, loc) ≠ globalCRASH; (s) Used formulas: oneMember(t0, l, gs.fwriters)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = ready, gs.bq(t0) ≠ [], n < # gs.bq(t0), n0 < # gs.bq(t0), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), isPropFO(n0, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = ready, gs.bq(t0) ≠ [], n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: ⊦ oneMember(t, l, tsf) → (t ∈ tsf(l0) ↔ l = l0); (s) ⊦ globalCRASH ≠ propFO(t, loc); (s) Used formulas: t0 ∈ gs.fwriters(l)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = ready, gs.bq(t0) ≠ [], n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = ready, # gs.fwriters(l) ≠ 0, gs.bq(t0) ≠ [], gs.fwriters(l) ≠ ∅, n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := gs.rfo(t0)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ 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, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = ready, # gs.fwriters(l) ≠ 0, gs.bq(t0) ≠ [], gs.fwriters(l) ≠ ∅, n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := gs.rfo(t0)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
Used simplifier rules: ⊦ globalCRASH ≠ propFO(t, loc); (s) ⊦ doWriteFO(t, loc) ≠ globalCRASH; (s) Used formulas: oneMember(t0, l, gs.fwriters)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, apcf(t) = idle, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = crashed, gs.bq(t0) ≠ [], n < # gs.bq(t0), n0 < # gs.bq(t0), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), isPropFO(n0, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, apcf(t) = idle, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = crashed, gs.bq(t0) ≠ [], n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: ⊦ oneMember(t, l, tsf) → (t ∈ tsf(l0) ↔ l = l0); (s) ⊦ globalCRASH ≠ propFO(t, loc); (s) Used formulas: t0 ∈ gs.fwriters(l)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, apcf(t) = idle, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = crashed, gs.bq(t0) ≠ [], n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, apcf(t) = idle, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = crashed, # gs.fwriters(l) ≠ 0, gs.bq(t0) ≠ [], gs.fwriters(l) ≠ ∅, n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := gs.rfo(t0)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ 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, apcf(t) = idle, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = crashed, # gs.fwriters(l) ≠ 0, gs.bq(t0) ≠ [], gs.fwriters(l) ≠ ∅, n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := gs.rfo(t0)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
Used simplifier rules: ⊦ globalCRASH ≠ propFO(t, loc); (s) ⊦ doWriteFO(t, loc) ≠ globalCRASH; (s) Used formulas: oneMember(t0, l, gs.fwriters)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = R1, gs.bq(t0) ≠ [], n < # gs.bq(t0), n0 < # gs.bq(t0), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), isPropFO(n0, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = R1, gs.bq(t0) ≠ [], n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: ⊦ oneMember(t, l, tsf) → (t ∈ tsf(l0) ↔ l = l0); (s) ⊦ globalCRASH ≠ propFO(t, loc); (s) Used formulas: t0 ∈ gs.fwriters(l)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = R1, gs.bq(t0) ≠ [], n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = R1, # gs.fwriters(l) ≠ 0, gs.bq(t0) ≠ [], gs.fwriters(l) ≠ ∅, n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := gs.rfo(t0)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ 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, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = R1, # gs.fwriters(l) ≠ 0, gs.bq(t0) ≠ [], gs.fwriters(l) ≠ ∅, n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := gs.rfo(t0)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
Used simplifier rules: ⊦ globalCRASH ≠ propFO(t, loc); (s) ⊦ doWriteFO(t, loc) ≠ globalCRASH; (s) Used formulas: oneMember(t0, l, gs.fwriters)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = R2, gs.bq(t0) ≠ [], n < # gs.bq(t0), n0 < # gs.bq(t0), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), isPropFO(n0, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = R2, gs.bq(t0) ≠ [], n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: ⊦ oneMember(t, l, tsf) → (t ∈ tsf(l0) ↔ l = l0); (s) ⊦ globalCRASH ≠ propFO(t, loc); (s) Used formulas: t0 ∈ gs.fwriters(l)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = R2, gs.bq(t0) ≠ [], n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = R2, # gs.fwriters(l) ≠ 0, gs.bq(t0) ≠ [], gs.fwriters(l) ≠ ∅, n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := gs.rfo(t0)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ 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, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = R2, # gs.fwriters(l) ≠ 0, gs.bq(t0) ≠ [], gs.fwriters(l) ≠ ∅, n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := gs.rfo(t0)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
Used simplifier rules: ⊦ globalCRASH ≠ propFO(t, loc); (s) ⊦ doWriteFO(t, loc) ≠ globalCRASH; (s) Used formulas: oneMember(t0, l, gs.fwriters)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = R3, gs.bq(t0) ≠ [], n < # gs.bq(t0), n0 < # gs.bq(t0), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), isPropFO(n0, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = R3, gs.bq(t0) ≠ [], n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: ⊦ oneMember(t, l, tsf) → (t ∈ tsf(l0) ↔ l = l0); (s) ⊦ globalCRASH ≠ propFO(t, loc); (s) Used formulas: t0 ∈ gs.fwriters(l)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = R3, gs.bq(t0) ≠ [], n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = R3, # gs.fwriters(l) ≠ 0, gs.bq(t0) ≠ [], gs.fwriters(l) ≠ ∅, n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := gs.rfo(t0)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ 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, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = R3, # gs.fwriters(l) ≠ 0, gs.bq(t0) ≠ [], gs.fwriters(l) ≠ ∅, n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := gs.rfo(t0)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
Used simplifier rules: ⊦ globalCRASH ≠ propFO(t, loc); (s) ⊦ doWriteFO(t, loc) ≠ globalCRASH; (s) Used formulas: oneMember(t0, l, gs.fwriters)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = R4, gs.bq(t0) ≠ [], n < # gs.bq(t0), n0 < # gs.bq(t0), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), isPropFO(n0, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = R4, gs.bq(t0) ≠ [], n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: ⊦ oneMember(t, l, tsf) → (t ∈ tsf(l0) ↔ l = l0); (s) ⊦ globalCRASH ≠ propFO(t, loc); (s) Used formulas: t0 ∈ gs.fwriters(l)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = R4, gs.bq(t0) ≠ [], n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = R4, # gs.fwriters(l) ≠ 0, gs.bq(t0) ≠ [], gs.fwriters(l) ≠ ∅, n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := gs.rfo(t0)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ 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, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = R4, # gs.fwriters(l) ≠ 0, gs.bq(t0) ≠ [], gs.fwriters(l) ≠ ∅, n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := gs.rfo(t0)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
Used simplifier rules: ⊦ globalCRASH ≠ propFO(t, loc); (s) ⊦ doWriteFO(t, loc) ≠ globalCRASH; (s) Used formulas: oneMember(t0, l, gs.fwriters)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W1, gs.bq(t0) ≠ [], n < # gs.bq(t0), n0 < # gs.bq(t0), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), isPropFO(n0, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W1, gs.bq(t0) ≠ [], n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: ⊦ oneMember(t, l, tsf) → (t ∈ tsf(l0) ↔ l = l0); (s) ⊦ globalCRASH ≠ propFO(t, loc); (s) Used formulas: t0 ∈ gs.fwriters(l)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W1, gs.bq(t0) ≠ [], n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W1, # gs.fwriters(l) ≠ 0, gs.bq(t0) ≠ [], gs.fwriters(l) ≠ ∅, n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := gs.rfo(t0)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ 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, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W1, # gs.fwriters(l) ≠ 0, gs.bq(t0) ≠ [], gs.fwriters(l) ≠ ∅, n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := gs.rfo(t0)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
Used simplifier rules: ⊦ globalCRASH ≠ propFO(t, loc); (s) ⊦ doWriteFO(t, loc) ≠ globalCRASH; (s) Used formulas: oneMember(t0, l, gs.fwriters)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W2, gs.bq(t0) ≠ [], (apcf(t) = idle ⊃ idle;crashed) ≠ (SF ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W1;W2), n < # gs.bq(t0), n0 < # gs.bq(t0), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), isPropFO(n0, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W2, gs.bq(t0) ≠ [], (apcf(t) = idle ⊃ idle;crashed) ≠ (SF ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W1;W2), n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: ⊦ oneMember(t, l, tsf) → (t ∈ tsf(l0) ↔ l = l0); (s) ⊦ globalCRASH ≠ propFO(t, loc); (s) Used formulas: t0 ∈ gs.fwriters(l)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W2, gs.bq(t0) ≠ [], (apcf(t) = idle ⊃ idle;crashed) ≠ (SF ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W1;W2), n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W2, # gs.fwriters(l) ≠ 0, gs.bq(t0) ≠ [], gs.fwriters(l) ≠ ∅, (apcf(t) = idle ⊃ idle;crashed) ≠ (SF ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W1;W2), n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := gs.rfo(t0)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ 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, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W2, # gs.fwriters(l) ≠ 0, gs.bq(t0) ≠ [], gs.fwriters(l) ≠ ∅, (apcf(t) = idle ⊃ idle;crashed) ≠ (SF ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W1;W2), n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := gs.rfo(t0)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
Used simplifier rules: ⊦ globalCRASH ≠ propFO(t, loc); (s) ⊦ doWriteFO(t, loc) ≠ globalCRASH; (s) Used formulas: oneMember(t0, l, gs.fwriters)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W3, gs.bq(t0) ≠ [], n < # gs.bq(t0), n0 < # gs.bq(t0), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), isPropFO(n0, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W3, gs.bq(t0) ≠ [], n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: ⊦ oneMember(t, l, tsf) → (t ∈ tsf(l0) ↔ l = l0); (s) ⊦ globalCRASH ≠ propFO(t, loc); (s) Used formulas: t0 ∈ gs.fwriters(l)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W3, gs.bq(t0) ≠ [], n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W3, # gs.fwriters(l) ≠ 0, gs.bq(t0) ≠ [], gs.fwriters(l) ≠ ∅, n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := gs.rfo(t0)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ 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, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W3, # gs.fwriters(l) ≠ 0, gs.bq(t0) ≠ [], gs.fwriters(l) ≠ ∅, n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := gs.rfo(t0)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
Used simplifier rules: ⊦ globalCRASH ≠ propFO(t, loc); (s) ⊦ doWriteFO(t, loc) ≠ globalCRASH; (s) Used formulas: oneMember(t0, l, gs.fwriters)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W4, gs.bq(t0) ≠ [], (apcf(t) = idle ⊃ idle;crashed) ≠ (W(lsf(t).loc, lsf(t).val) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W3;W4), n < # gs.bq(t0), n0 < # gs.bq(t0), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), isPropFO(n0, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W4, gs.bq(t0) ≠ [], (apcf(t) = idle ⊃ idle;crashed) ≠ (W(lsf(t).loc, lsf(t).val) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W3;W4), n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: ⊦ oneMember(t, l, tsf) → (t ∈ tsf(l0) ↔ l = l0); (s) ⊦ globalCRASH ≠ propFO(t, loc); (s) Used formulas: t0 ∈ gs.fwriters(l)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W4, gs.bq(t0) ≠ [], (apcf(t) = idle ⊃ idle;crashed) ≠ (W(lsf(t).loc, lsf(t).val) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W3;W4), n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W4, # gs.fwriters(l) ≠ 0, gs.bq(t0) ≠ [], gs.fwriters(l) ≠ ∅, (apcf(t) = idle ⊃ idle;crashed) ≠ (W(lsf(t).loc, lsf(t).val) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W3;W4), n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := gs.rfo(t0)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ 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, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W4, # gs.fwriters(l) ≠ 0, gs.bq(t0) ≠ [], gs.fwriters(l) ≠ ∅, (apcf(t) = idle ⊃ idle;crashed) ≠ (W(lsf(t).loc, lsf(t).val) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W3;W4), n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := gs.rfo(t0)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
Used simplifier rules: ⊦ globalCRASH ≠ propFO(t, loc); (s) ⊦ doWriteFO(t, loc) ≠ globalCRASH; (s) Used formulas: oneMember(t0, l, gs.fwriters)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W5, gs.bq(t0) ≠ [], (apcf(t) = idle ⊃ idle;crashed) ≠ (W(lsf(t).loc, lsf(t).val) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W4;W5) ), n < # gs.bq(t0), n0 < # gs.bq(t0), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), isPropFO(n0, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W5, gs.bq(t0) ≠ [], (apcf(t) = idle ⊃ idle;crashed) ≠ (W(lsf(t).loc, lsf(t).val) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W4;W5) ), n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: ⊦ oneMember(t, l, tsf) → (t ∈ tsf(l0) ↔ l = l0); (s) ⊦ globalCRASH ≠ propFO(t, loc); (s) Used formulas: t0 ∈ gs.fwriters(l)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W5, gs.bq(t0) ≠ [], (apcf(t) = idle ⊃ idle;crashed) ≠ (W(lsf(t).loc, lsf(t).val) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W4;W5) ), n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W5, # gs.fwriters(l) ≠ 0, gs.bq(t0) ≠ [], gs.fwriters(l) ≠ ∅, (apcf(t) = idle ⊃ idle;crashed) ≠ (W(lsf(t).loc, lsf(t).val) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W4;W5) ), n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := gs.rfo(t0)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ 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, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W5, # gs.fwriters(l) ≠ 0, gs.bq(t0) ≠ [], gs.fwriters(l) ≠ ∅, (apcf(t) = idle ⊃ idle;crashed) ≠ (W(lsf(t).loc, lsf(t).val) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W4;W5) ), n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := gs.rfo(t0)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
Used simplifier rules: ⊦ globalCRASH ≠ propFO(t, loc); (s) ⊦ doWriteFO(t, loc) ≠ globalCRASH; (s) Used formulas: oneMember(t0, l, gs.fwriters)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W6, gs.bq(t0) ≠ [], (apcf(t) = idle ⊃ idle;crashed) ≠ (W(lsf(t).loc, lsf(t).val) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W4 ;(SF ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W5;W6) ) ), n < # gs.bq(t0), n0 < # gs.bq(t0), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), isPropFO(n0, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W6, gs.bq(t0) ≠ [], (apcf(t) = idle ⊃ idle;crashed) ≠ (W(lsf(t).loc, lsf(t).val) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W4 ;(SF ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W5;W6) ) ), n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: ⊦ oneMember(t, l, tsf) → (t ∈ tsf(l0) ↔ l = l0); (s) ⊦ globalCRASH ≠ propFO(t, loc); (s) Used formulas: t0 ∈ gs.fwriters(l)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W6, gs.bq(t0) ≠ [], (apcf(t) = idle ⊃ idle;crashed) ≠ (W(lsf(t).loc, lsf(t).val) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W4 ;(SF ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W5;W6) ) ), n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W6, # gs.fwriters(l) ≠ 0, gs.bq(t0) ≠ [], gs.fwriters(l) ≠ ∅, (apcf(t) = idle ⊃ idle;crashed) ≠ (W(lsf(t).loc, lsf(t).val) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W4 ;(SF ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W5;W6) ) ), n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := gs.rfo(t0)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ 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, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W6, # gs.fwriters(l) ≠ 0, gs.bq(t0) ≠ [], gs.fwriters(l) ≠ ∅, (apcf(t) = idle ⊃ idle;crashed) ≠ (W(lsf(t).loc, lsf(t).val) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W4 ;(SF ∈ (t0 = lsf(t).t ⊃ gs.bq(lsf(t).t) -p n;gs.bq(lsf(t).t)) ⊃ W5;W6) ) ), n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := gs.rfo(t0)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
Used simplifier rules: ⊦ globalCRASH ≠ propFO(t, loc); (s) ⊦ doWriteFO(t, loc) ≠ globalCRASH; (s) Used formulas: oneMember(t0, l, gs.fwriters)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W7, gs.bq(t0) ≠ [], n < # gs.bq(t0), n0 < # gs.bq(t0), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), isPropFO(n0, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W7, gs.bq(t0) ≠ [], n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
Used simplifier rules: ⊦ oneMember(t, l, tsf) → (t ∈ tsf(l0) ↔ l = l0); (s) ⊦ globalCRASH ≠ propFO(t, loc); (s) Used formulas: t0 ∈ gs.fwriters(l)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W7, gs.bq(t0) ≠ [], n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W7, # gs.fwriters(l) ≠ 0, gs.bq(t0) ≠ [], gs.fwriters(l) ≠ ∅, n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := gs.rfo(t0)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ 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, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pcf(t) = W7, # gs.fwriters(l) ≠ 0, gs.bq(t0) ≠ [], gs.fwriters(l) ≠ ∅, n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := gs.rfo(t0)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ |
Used simplifier rules: ⊦ globalCRASH ≠ propFO(t, loc); (s) ⊦ doWriteFO(t, loc) ≠ globalCRASH; (s) Used formulas: oneMember(t0, l, gs.fwriters)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), gs.bq(t0) ≠ [], lsf(t).loc ≠ alsf(t).l, n < # gs.bq(t0), n0 < # gs.bq(t0), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), isPropFO(n0, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), gs.bq(t0) ≠ [], lsf(t).loc ≠ alsf(t).l, n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ⊦
Used simplifier rules: ⊦ oneMember(t, l, tsf) → (t ∈ tsf(l0) ↔ l = l0); (s) ⊦ globalCRASH ≠ propFO(t, loc); (s) Used formulas: t0 ∈ gs.fwriters(l)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), gs.bq(t0) ≠ [], lsf(t).loc ≠ alsf(t).l, n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), # gs.fwriters(l) ≠ 0, gs.bq(t0) ≠ [], gs.fwriters(l) ≠ ∅, lsf(t).loc ≠ alsf(t).l, n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := gs.rfo(t0)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ⊦
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, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), # gs.fwriters(l) ≠ 0, gs.bq(t0) ≠ [], gs.fwriters(l) ≠ ∅, lsf(t).loc ≠ alsf(t).l, n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := gs.rfo(t0)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ⊦ |
Used simplifier rules: ⊦ globalCRASH ≠ propFO(t, loc); (s) ⊦ doWriteFO(t, loc) ≠ globalCRASH; (s) Used formulas: oneMember(t0, l, gs.fwriters)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), gs.bq(t0) ≠ [], lsf(t).val ≠ alsf(t).v, n < # gs.bq(t0), n0 < # gs.bq(t0), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), isPropFO(n0, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), gs.bq(t0) ≠ [], lsf(t).val ≠ alsf(t).v, n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ⊦
Used simplifier rules: ⊦ oneMember(t, l, tsf) → (t ∈ tsf(l0) ↔ l = l0); (s) ⊦ globalCRASH ≠ propFO(t, loc); (s) Used formulas: t0 ∈ gs.fwriters(l)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), gs.bq(t0) ≠ [], lsf(t).val ≠ alsf(t).v, n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv (((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := (t0 ∈ gs.fwriters(l) ⊃ gs.rfo(t0);gs.rfo(t0) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ⊦ |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), # gs.fwriters(l) ≠ 0, gs.bq(t0) ≠ [], gs.fwriters(l) ≠ ∅, lsf(t).val ≠ alsf(t).v, n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := gs.rfo(t0)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ⊦
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, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), # gs.fwriters(l) ≠ 0, gs.bq(t0) ≠ [], gs.fwriters(l) ≠ ∅, lsf(t).val ≠ alsf(t).v, n0 < # gs.bq(t0), n < # gs.bq(t0), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(t0) ')).bq:= gs.bq(t0 := gs.bq(t0) -p n)).rfo:= gs.rfo(t0 := gs.rfo(t0)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(t0)), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), t0 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ⊦ |
Used simplifier rules: ⊦ globalCRASH ≠ propFO(t, loc); (s) ⊦ doWriteFO(t, loc) ≠ globalCRASH; (s) Used formulas: oneMember(t0, l, gs.fwriters)
| ⟨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, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pq = gs.pq, rfo = gs.rfo, tid = t0, gs.bq(t0) ≠ [], n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ n. ¬(n < # bq(tid) ∧ isPropFO(n, l, bq(tid))) ⊦ lsf(t).t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ pcf(t) ≠ ready ∧ (pcf(t) = crashed → apcf(t) ≠ idle) ∧ pcf(t) ≠ R1 ∧ pcf(t) ≠ R2 ∧ pcf(t) ≠ R3 ∧ pcf(t) ≠ R4 ∧ pcf(t) ≠ W1 ∧ (pcf(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ bq0(lsf(t).t) ⊃ W1;W2)) ∧ pcf(t) ≠ W3 ∧ (pcf(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;W4)) ∧ (pcf(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ bq0(lsf(t).t) ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ bq0(lsf(t).t) ⊃ W4;(SF ∈ bq0(lsf(t).t) ⊃ W5;W6)))) ∧ pcf(t) ≠ W7 ∧ (pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).val = alsf(t).v) |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, bq = bq0, fwriters = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pq = gs.pq, pq = pq0, rfo = gs.rfo, rfo = rfo0, tid = t0, gs.bq(t0) ≠ [], n < # gs.bq(t0), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ n. ¬(n < # bq(tid) ∧ isPropFO(n, l, bq(tid))), ∀ 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 ∧ (pcf(t) = crashed → apcf(t) ≠ idle) ∧ pcf(t) ≠ R1 ∧ pcf(t) ≠ R2 ∧ pcf(t) ≠ R3 ∧ pcf(t) ≠ R4 ∧ pcf(t) ≠ W1 ∧ (pcf(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ bq0(lsf(t).t) ⊃ W1;W2)) ∧ pcf(t) ≠ W3 ∧ (pcf(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;W4)) ∧ (pcf(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ bq0(lsf(t).t) ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ bq0(lsf(t).t) ⊃ W4;(SF ∈ bq0(lsf(t).t) ⊃ W5;W6)))) ∧ pcf(t) ≠ W7 ∧ (pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).val = alsf(t).v)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, bq = bq0, fwriters = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), pq = gs.pq, pq = pq0, rfo = gs.rfo, rfo = rfo0, tid = t0, gs.bq(t0) ≠ [], n < # gs.bq(t0), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ n. ¬(n < # bq(tid) ∧ isPropFO(n, l, bq(tid))), ∀ 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 ∧ (pcf(t) = crashed → apcf(t) ≠ idle) ∧ pcf(t) ≠ R1 ∧ pcf(t) ≠ R2 ∧ pcf(t) ≠ R3 ∧ pcf(t) ≠ R4 ∧ pcf(t) ≠ W1 ∧ (pcf(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ bq0(lsf(t).t) ⊃ W1;W2)) ∧ pcf(t) ≠ W3 ∧ (pcf(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;W4)) ∧ (pcf(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ bq0(lsf(t).t) ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ bq0(lsf(t).t) ⊃ W4;(SF ∈ bq0(lsf(t).t) ⊃ W5;W6)))) ∧ pcf(t) ≠ W7 ∧ (pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).val = alsf(t).v) |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), gs.bq(t0) ≠ [], n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= gs.pq).bq:= gs.bq).rfo:= gs.rfo, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ n0. ¬ n0 < # gs.bq(t0) ∨ ¬ isPropFO(n0, l, gs.bq(t0)) ⊦ lsf(t).t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ pcf(t) ≠ ready ∧ (pcf(t) = crashed → apcf(t) ≠ idle) ∧ pcf(t) ≠ R1 ∧ pcf(t) ≠ R2 ∧ pcf(t) ≠ R3 ∧ pcf(t) ≠ R4 ∧ pcf(t) ≠ W1 ∧ (pcf(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ gs.bq(lsf(t).t) ⊃ W1;W2)) ∧ pcf(t) ≠ W3 ∧ (pcf(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(lsf(t).t) ⊃ W3;W4)) ∧ (pcf(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (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) = idle ⊃ idle;crashed) = (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 ∧ (pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).val = alsf(t).v)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, globalCRASH = (oneMember(t0, l, gs.fwriters) ⊃ doWriteFO(t0, l);propFO(t0, l)), gs.bq(t0) ≠ [], n < # gs.bq(t0), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= gs.pq).bq:= gs.bq).rfo:= gs.rfo, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(t0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ n0. ¬ n0 < # gs.bq(t0) ∨ ¬ isPropFO(n0, l, gs.bq(t0)) ⊦ lsf(t).t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ pcf(t) ≠ ready ∧ (pcf(t) = crashed → apcf(t) ≠ idle) ∧ pcf(t) ≠ R1 ∧ pcf(t) ≠ R2 ∧ pcf(t) ≠ R3 ∧ pcf(t) ≠ R4 ∧ pcf(t) ≠ W1 ∧ (pcf(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ gs.bq(lsf(t).t) ⊃ W1;W2)) ∧ pcf(t) ≠ W3 ∧ (pcf(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(lsf(t).t) ⊃ W3;W4)) ∧ (pcf(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (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) = idle ⊃ idle;crashed) = (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 ∧ (pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W2 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).val = alsf(t).v) |
Used terms: n
| ⟨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), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf0(t).t = alsf(t).t ∧ (pcf0(t) = idle → apcf(t) = idle) ∧ pcf0(t) ≠ ready ∧ (pcf0(t) = crashed → apcf(t) ≠ idle) ∧ pcf0(t) ≠ R1 ∧ pcf0(t) ≠ R2 ∧ pcf0(t) ≠ R3 ∧ pcf0(t) ≠ R4 ∧ pcf0(t) ≠ W1 ∧ (pcf0(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ gs0.bq(lsf0(t).t) ⊃ W1;W2)) ∧ pcf0(t) ≠ W3 ∧ (pcf0(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;W4)) ∧ ( pcf0(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;W5))) ∧ ( pcf0(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;(SF ∈ gs0.bq(lsf0(t).t) ⊃ W5;W6)))) ∧ pcf0(t) ≠ W7 ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).loc = alsf(t).l) ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).val = alsf(t).v) |
⟨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, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf0(t).t = alsf(t).t ∧ (pcf0(t) = idle → apcf(t) = idle) ∧ pcf0(t) ≠ ready ∧ (pcf0(t) = crashed → apcf(t) ≠ idle) ∧ pcf0(t) ≠ R1 ∧ pcf0(t) ≠ R2 ∧ pcf0(t) ≠ R3 ∧ pcf0(t) ≠ R4 ∧ pcf0(t) ≠ W1 ∧ (pcf0(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ gs0.bq(lsf0(t).t) ⊃ W1;W2)) ∧ pcf0(t) ≠ W3 ∧ (pcf0(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;W4)) ∧ ( pcf0(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;W5))) ∧ ( pcf0(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;(SF ∈ gs0.bq(lsf0(t).t) ⊃ W5;W6)))) ∧ pcf0(t) ≠ W7 ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).loc = alsf(t).l) ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).val = alsf(t).v)
| ⟨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, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf0(t).t = alsf(t).t ∧ (pcf0(t) = idle → apcf(t) = idle) ∧ pcf0(t) ≠ ready ∧ (pcf0(t) = crashed → apcf(t) ≠ idle) ∧ pcf0(t) ≠ R1 ∧ pcf0(t) ≠ R2 ∧ pcf0(t) ≠ R3 ∧ pcf0(t) ≠ R4 ∧ pcf0(t) ≠ W1 ∧ (pcf0(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ gs0.bq(lsf0(t).t) ⊃ W1;W2)) ∧ pcf0(t) ≠ W3 ∧ (pcf0(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;W4)) ∧ ( pcf0(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;W5))) ∧ ( pcf0(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;(SF ∈ gs0.bq(lsf0(t).t) ⊃ W5;W6)))) ∧ pcf0(t) ≠ W7 ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).loc = alsf(t).l) ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).val = alsf(t).v) |
⟨gs := (((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf1), ⟨CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf)⟩ (pq = pq0 ∧ fctr = fctr0 ∧ bq = bq0 ∧ fwriters = fwriters0 ∧ freaders = freaders0 ∧ rfo = rfo0 ∧ pcf = pcf1), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf0(t).t = alsf(t).t ∧ (pcf0(t) = idle → apcf(t) = idle) ∧ pcf0(t) ≠ ready ∧ (pcf0(t) = crashed → apcf(t) ≠ idle) ∧ pcf0(t) ≠ R1 ∧ pcf0(t) ≠ R2 ∧ pcf0(t) ≠ R3 ∧ pcf0(t) ≠ R4 ∧ pcf0(t) ≠ W1 ∧ (pcf0(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ gs0.bq(lsf0(t).t) ⊃ W1;W2)) ∧ pcf0(t) ≠ W3 ∧ (pcf0(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;W4)) ∧ ( pcf0(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;W5))) ∧ ( pcf0(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;(SF ∈ gs0.bq(lsf0(t).t) ⊃ W5;W6)))) ∧ pcf0(t) ≠ W7 ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).loc = alsf(t).l) ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).val = alsf(t).v)
| ⟨gs := (((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf1), ⟨CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf)⟩ (pq = pq0 ∧ fctr = fctr0 ∧ bq = bq0 ∧ fwriters = fwriters0 ∧ freaders = freaders0 ∧ rfo = rfo0 ∧ pcf = pcf1), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf0(t).t = alsf(t).t ∧ (pcf0(t) = idle → apcf(t) = idle) ∧ pcf0(t) ≠ ready ∧ (pcf0(t) = crashed → apcf(t) ≠ idle) ∧ pcf0(t) ≠ R1 ∧ pcf0(t) ≠ R2 ∧ pcf0(t) ≠ R3 ∧ pcf0(t) ≠ R4 ∧ pcf0(t) ≠ W1 ∧ (pcf0(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ gs0.bq(lsf0(t).t) ⊃ W1;W2)) ∧ pcf0(t) ≠ W3 ∧ (pcf0(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;W4)) ∧ ( pcf0(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;W5))) ∧ ( pcf0(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;(SF ∈ gs0.bq(lsf0(t).t) ⊃ W5;W6)))) ∧ pcf0(t) ≠ W7 ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).loc = alsf(t).l) ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).val = alsf(t).v) |
⟨CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf)⟩ (pq = pq0 ∧ fctr = fctr0 ∧ bq = bq0 ∧ fwriters = fwriters0 ∧ freaders = freaders0 ∧ rfo = rfo0 ∧ pcf = pcf1), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, gs0 = (((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0, lsf0 = lsf, pcf0 = pcf1, pq = gs.pq, rfo = gs.rfo, FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf0(t).t = alsf(t).t ∧ (pcf0(t) = idle → apcf(t) = idle) ∧ pcf0(t) ≠ ready ∧ (pcf0(t) = crashed → apcf(t) ≠ idle) ∧ pcf0(t) ≠ R1 ∧ pcf0(t) ≠ R2 ∧ pcf0(t) ≠ R3 ∧ pcf0(t) ≠ R4 ∧ pcf0(t) ≠ W1 ∧ (pcf0(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ gs0.bq(lsf0(t).t) ⊃ W1;W2)) ∧ pcf0(t) ≠ W3 ∧ (pcf0(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;W4)) ∧ ( pcf0(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;W5))) ∧ ( pcf0(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;(SF ∈ gs0.bq(lsf0(t).t) ⊃ W5;W6)))) ∧ pcf0(t) ≠ W7 ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).loc = alsf(t).l) ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).val = alsf(t).v)
| ⟨CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf)⟩ (pq = pq0 ∧ fctr = fctr0 ∧ bq = bq0 ∧ fwriters = fwriters0 ∧ freaders = freaders0 ∧ rfo = rfo0 ∧ pcf = pcf1), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, gs0 = (((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0, lsf0 = lsf, pcf0 = pcf1, pq = gs.pq, rfo = gs.rfo, FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf0(t).t = alsf(t).t ∧ (pcf0(t) = idle → apcf(t) = idle) ∧ pcf0(t) ≠ ready ∧ (pcf0(t) = crashed → apcf(t) ≠ idle) ∧ pcf0(t) ≠ R1 ∧ pcf0(t) ≠ R2 ∧ pcf0(t) ≠ R3 ∧ pcf0(t) ≠ R4 ∧ pcf0(t) ≠ W1 ∧ (pcf0(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ gs0.bq(lsf0(t).t) ⊃ W1;W2)) ∧ pcf0(t) ≠ W3 ∧ (pcf0(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;W4)) ∧ ( pcf0(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;W5))) ∧ ( pcf0(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf0(t).loc, lsf0(t).val) ∈ gs0.bq(lsf0(t).t) ⊃ W3;(FO(lsf0(t).loc) ∈ gs0.bq(lsf0(t).t) ⊃ W4;(SF ∈ gs0.bq(lsf0(t).t) ⊃ W5;W6)))) ∧ pcf0(t) ≠ W7 ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).loc = alsf(t).l) ∧ (pcf0(t) = W2 ∨ pcf0(t) = W4 ∨ pcf0(t) = W5 ∨ pcf0(t) = W6 → lsf0(t).val = alsf(t).v) |
⟨CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf)⟩ (pq = pq0 ∧ fctr = fctr0 ∧ bq = bq0 ∧ fwriters = fwriters0 ∧ freaders = freaders0 ∧ rfo = rfo0 ∧ pcf = pcf1), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, FLITInv((((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0, lsf, pcf1), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf(t).t = alsf(t).t ∧ (pcf1(t) = idle → apcf(t) = idle) ∧ pcf1(t) ≠ ready ∧ (pcf1(t) = crashed → apcf(t) ≠ idle) ∧ pcf1(t) ≠ R1 ∧ pcf1(t) ≠ R2 ∧ pcf1(t) ≠ R3 ∧ pcf1(t) ≠ R4 ∧ pcf1(t) ≠ W1 ∧ (pcf1(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ bq0(lsf(t).t) ⊃ W1;W2)) ∧ pcf1(t) ≠ W3 ∧ (pcf1(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;W4)) ∧ (pcf1(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ bq0(lsf(t).t) ⊃ W4;W5))) ∧ ( pcf1(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ bq0(lsf(t).t) ⊃ W4;(SF ∈ bq0(lsf(t).t) ⊃ W5;W6)))) ∧ pcf1(t) ≠ W7 ∧ (pcf1(t) = W2 ∨ pcf1(t) = W4 ∨ pcf1(t) = W5 ∨ pcf1(t) = W6 → lsf(t).loc = alsf(t).l) ∧ (pcf1(t) = W2 ∨ pcf1(t) = W4 ∨ pcf1(t) = W5 ∨ pcf1(t) = W6 → lsf(t).val = alsf(t).v)
Used simplifier rules: ⊦ (gs.bq:= bq).bq = bq; (s) ⊦ (gs.fwriters:= fwriters).bq = gs.bq; (s) ⊦ (gs.freaders:= fwriters0).bq = gs.bq; (s) ⊦ (gs.rfo:= bq0).bq = gs.bq; (s)
| ⟨CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf)⟩ (pq = pq0 ∧ fctr = fctr0 ∧ bq = bq0 ∧ fwriters = fwriters0 ∧ freaders = freaders0 ∧ rfo = rfo0 ∧ pcf = pcf1), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, FLITInv((((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0, lsf, pcf1), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf(t).t = alsf(t).t ∧ (pcf1(t) = idle → apcf(t) = idle) ∧ pcf1(t) ≠ ready ∧ (pcf1(t) = crashed → apcf(t) ≠ idle) ∧ pcf1(t) ≠ R1 ∧ pcf1(t) ≠ R2 ∧ pcf1(t) ≠ R3 ∧ pcf1(t) ≠ R4 ∧ pcf1(t) ≠ W1 ∧ (pcf1(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ bq0(lsf(t).t) ⊃ W1;W2)) ∧ pcf1(t) ≠ W3 ∧ (pcf1(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;W4)) ∧ (pcf1(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ bq0(lsf(t).t) ⊃ W4;W5))) ∧ ( pcf1(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ bq0(lsf(t).t) ⊃ W4;(SF ∈ bq0(lsf(t).t) ⊃ W5;W6)))) ∧ pcf1(t) ≠ W7 ∧ (pcf1(t) = W2 ∨ pcf1(t) = W4 ∨ pcf1(t) = W5 ∨ pcf1(t) = W6 → lsf(t).loc = alsf(t).l) ∧ (pcf1(t) = W2 ∨ pcf1(t) = W4 ∨ pcf1(t) = W5 ∨ pcf1(t) = W6 → lsf(t).val = alsf(t).v) |
⟨pcf := λ t. (pcf(t) = idle ⊃ idle;crashed), pq := λ l. [], fctr := λ l. 0, freaders := λ l. ∅, fwriters := λ l. ∅, bq := λ t. [], rfo := λ t. []⟩ (pq = pq0 ∧ fctr = fctr0 ∧ bq = bq0 ∧ fwriters = fwriters0 ∧ freaders = freaders0 ∧ rfo = rfo0 ∧ pcf = pcf1), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, FLITInv(gs, lsf, pcf), FLITInv((((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0, lsf, pcf1), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf(t).t = alsf(t).t ∧ (pcf1(t) = idle → apcf(t) = idle) ∧ pcf1(t) ≠ ready ∧ (pcf1(t) = crashed → apcf(t) ≠ idle) ∧ pcf1(t) ≠ R1 ∧ pcf1(t) ≠ R2 ∧ pcf1(t) ≠ R3 ∧ pcf1(t) ≠ R4 ∧ pcf1(t) ≠ W1 ∧ (pcf1(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ bq0(lsf(t).t) ⊃ W1;W2)) ∧ pcf1(t) ≠ W3 ∧ (pcf1(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;W4)) ∧ (pcf1(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ bq0(lsf(t).t) ⊃ W4;W5))) ∧ ( pcf1(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ bq0(lsf(t).t) ⊃ W4;(SF ∈ bq0(lsf(t).t) ⊃ W5;W6)))) ∧ pcf1(t) ≠ W7 ∧ (pcf1(t) = W2 ∨ pcf1(t) = W4 ∨ pcf1(t) = W5 ∨ pcf1(t) = W6 → lsf(t).loc = alsf(t).l) ∧ (pcf1(t) = W2 ∨ pcf1(t) = W4 ∨ pcf1(t) = W5 ∨ pcf1(t) = W6 → lsf(t).val = alsf(t).v)
Used simplifier rules: decl: CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf) {pcf := λ t. (pcf(t) = idle ⊃ idle;crashed), pq := λ l. [], fctr := λ l. 0, freaders := λ l. ∅, fwriters := λ l. ∅, bq := λ t. [], rfo := λ t. [] };
| ⟨pcf := λ t. (pcf(t) = idle ⊃ idle;crashed), pq := λ l. [], fctr := λ l. 0, freaders := λ l. ∅, fwriters := λ l. ∅, bq := λ t. [], rfo := λ t. []⟩ (pq = pq0 ∧ fctr = fctr0 ∧ bq = bq0 ∧ fwriters = fwriters0 ∧ freaders = freaders0 ∧ rfo = rfo0 ∧ pcf = pcf1), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, FLITInv(gs, lsf, pcf), FLITInv((((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0, lsf, pcf1), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf(t).t = alsf(t).t ∧ (pcf1(t) = idle → apcf(t) = idle) ∧ pcf1(t) ≠ ready ∧ (pcf1(t) = crashed → apcf(t) ≠ idle) ∧ pcf1(t) ≠ R1 ∧ pcf1(t) ≠ R2 ∧ pcf1(t) ≠ R3 ∧ pcf1(t) ≠ R4 ∧ pcf1(t) ≠ W1 ∧ (pcf1(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ bq0(lsf(t).t) ⊃ W1;W2)) ∧ pcf1(t) ≠ W3 ∧ (pcf1(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;W4)) ∧ (pcf1(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ bq0(lsf(t).t) ⊃ W4;W5))) ∧ ( pcf1(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ bq0(lsf(t).t) ⊃ W4;(SF ∈ bq0(lsf(t).t) ⊃ W5;W6)))) ∧ pcf1(t) ≠ W7 ∧ (pcf1(t) = W2 ∨ pcf1(t) = W4 ∨ pcf1(t) = W5 ∨ pcf1(t) = W6 → lsf(t).loc = alsf(t).l) ∧ (pcf1(t) = W2 ∨ pcf1(t) = W4 ∨ pcf1(t) = W5 ∨ pcf1(t) = W6 → lsf(t).val = alsf(t).v) |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, (λ l. []) = pq0, (λ l. 0) = fctr0, (λ t. []) = bq0, (λ l. ∅) = fwriters0, (λ l. ∅) = freaders0, (λ t. []) = rfo0, (λ t. (pcf(t) = idle ⊃ idle;crashed)) = pcf1, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, FLITInv((((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0, lsf, pcf1), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf(t).t = alsf(t).t ∧ (pcf1(t) = idle → apcf(t) = idle) ∧ pcf1(t) ≠ ready ∧ (pcf1(t) = crashed → apcf(t) ≠ idle) ∧ pcf1(t) ≠ R1 ∧ pcf1(t) ≠ R2 ∧ pcf1(t) ≠ R3 ∧ pcf1(t) ≠ R4 ∧ pcf1(t) ≠ W1 ∧ (pcf1(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ bq0(lsf(t).t) ⊃ W1;W2)) ∧ pcf1(t) ≠ W3 ∧ (pcf1(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;W4)) ∧ (pcf1(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ bq0(lsf(t).t) ⊃ W4;W5))) ∧ ( pcf1(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ bq0(lsf(t).t) ⊃ W4;(SF ∈ bq0(lsf(t).t) ⊃ W5;W6)))) ∧ pcf1(t) ≠ W7 ∧ (pcf1(t) = W2 ∨ pcf1(t) = W4 ∨ pcf1(t) = W5 ∨ pcf1(t) = W6 → lsf(t).loc = alsf(t).l) ∧ (pcf1(t) = W2 ∨ pcf1(t) = W4 ∨ pcf1(t) = W5 ∨ pcf1(t) = W6 → lsf(t).val = alsf(t).v)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, (λ l. []) = pq0, (λ l. 0) = fctr0, (λ t. []) = bq0, (λ l. ∅) = fwriters0, (λ l. ∅) = freaders0, (λ t. []) = rfo0, (λ t. (pcf(t) = idle ⊃ idle;crashed)) = pcf1, bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, FLITInv((((((gs.pq:= pq0).fctr:= fctr0).bq:= bq0).fwriters:= fwriters0).freaders:= freaders0).rfo:= rfo0, lsf, pcf1), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf(t).t = alsf(t).t ∧ (pcf1(t) = idle → apcf(t) = idle) ∧ pcf1(t) ≠ ready ∧ (pcf1(t) = crashed → apcf(t) ≠ idle) ∧ pcf1(t) ≠ R1 ∧ pcf1(t) ≠ R2 ∧ pcf1(t) ≠ R3 ∧ pcf1(t) ≠ R4 ∧ pcf1(t) ≠ W1 ∧ (pcf1(t) = W2 → (apcf(t) = idle ⊃ idle;crashed) = (SF ∈ bq0(lsf(t).t) ⊃ W1;W2)) ∧ pcf1(t) ≠ W3 ∧ (pcf1(t) = W4 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;W4)) ∧ (pcf1(t) = W5 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ bq0(lsf(t).t) ⊃ W4;W5))) ∧ ( pcf1(t) = W6 → (apcf(t) = idle ⊃ idle;crashed) = (W(lsf(t).loc, lsf(t).val) ∈ bq0(lsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ bq0(lsf(t).t) ⊃ W4;(SF ∈ bq0(lsf(t).t) ⊃ W5;W6)))) ∧ pcf1(t) ≠ W7 ∧ (pcf1(t) = W2 ∨ pcf1(t) = W4 ∨ pcf1(t) = W5 ∨ pcf1(t) = W6 → lsf(t).loc = alsf(t).l) ∧ (pcf1(t) = W2 ∨ pcf1(t) = W4 ∨ pcf1(t) = W5 ∨ pcf1(t) = W6 → lsf(t).val = alsf(t).v) |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, FLITInv(gs, lsf, pcf), FLITInv ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. []), lsf, λ t. (pcf(t) = idle ⊃ idle;crashed)), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ 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) ≠ idle → apcf(t) ≠ idle)
Used simplifier rules: ⊦ W6 ≠ crashed; (s) ⊦ W6 ≠ idle; (s) ⊦ W5 ≠ crashed; (s) ⊦ W5 ≠ idle; (s) ⊦ W4 ≠ crashed; (s) ⊦ W4 ≠ idle; (s) ⊦ W2 ≠ crashed; (s) ⊦ W2 ≠ idle; (s) ⊦ W7 ≠ crashed; (s) ⊦ W7 ≠ idle; (s) ⊦ W3 ≠ crashed; (s) ⊦ W3 ≠ idle; (s) ⊦ W1 ≠ crashed; (s) ⊦ W1 ≠ idle; (s) ⊦ R4 ≠ crashed; (s) ⊦ R4 ≠ idle; (s) ⊦ R3 ≠ crashed; (s) ⊦ R3 ≠ idle; (s) ⊦ R2 ≠ crashed; (s) ⊦ R2 ≠ idle; (s) ⊦ R1 ≠ crashed; (s) ⊦ R1 ≠ idle; (s) ⊦ crashed ≠ idle; (s) ⊦ crashed ≠ ready; (s) ⊦ idle ≠ ready; (s)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, FLITInv(gs, lsf, pcf), FLITInv ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. []), lsf, λ t. (pcf(t) = idle ⊃ idle;crashed)), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ 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) ≠ idle → apcf(t) ≠ idle) |
ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, FLITInv ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. []), lsf, λ t. (pcf(t) = idle ⊃ idle;crashed)), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ 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) ≠ idle → apcf(t) ≠ idle)
Used terms: t
| ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, FLITInv ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. []), lsf, λ t. (pcf(t) = idle ⊃ idle;crashed)), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), reorder(ags.p, gs.pq, gs.rfo), ∀ 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) ≠ idle → apcf(t) ≠ idle) |
ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(t).t = alsf(t).t, ags.writers = gs.fwriters, apcf(t) = idle, pcf(t) ≠ idle, pcf(t) ≠ W7, pcf(t) ≠ W6, pcf(t) ≠ W5, pcf(t) ≠ W4, pcf(t) ≠ W3, pcf(t) ≠ W2, pcf(t) ≠ W1, pcf(t) ≠ R4, pcf(t) ≠ R3, pcf(t) ≠ R2, pcf(t) ≠ R1, pcf(t) ≠ crashed, pcf(t) ≠ ready, FLITInv ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. []), lsf, λ t. (pcf(t) = idle ⊃ idle;crashed)), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦
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); ⊦ idle ≠ ready; (s) ⊦ crashed ≠ idle; (s) ⊦ R1 ≠ idle; (s) ⊦ R2 ≠ idle; (s) ⊦ R3 ≠ idle; (s) ⊦ R4 ≠ idle; (s) ⊦ W1 ≠ idle; (s) ⊦ W2 ≠ idle; (s) ⊦ W3 ≠ idle; (s) ⊦ W4 ≠ idle; (s) ⊦ W5 ≠ idle; (s) ⊦ W6 ≠ idle; (s) ⊦ W7 ≠ idle; (s)
| ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(t).t = alsf(t).t, ags.writers = gs.fwriters, apcf(t) = idle, pcf(t) ≠ idle, pcf(t) ≠ W7, pcf(t) ≠ W6, pcf(t) ≠ W5, pcf(t) ≠ W4, pcf(t) ≠ W3, pcf(t) ≠ W2, pcf(t) ≠ W1, pcf(t) ≠ R4, pcf(t) ≠ R3, pcf(t) ≠ R2, pcf(t) ≠ R1, pcf(t) ≠ crashed, pcf(t) ≠ ready, FLITInv ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. []), lsf, λ t. (pcf(t) = idle ⊃ idle;crashed)), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ 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 ;;
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.