| FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), flitStep(mkstate(gs, lsf, pcf), propSF(tid), mkstate(gs0, lsf0, pcf0)), abs(mkstate(gs, lsf, pcf), mkstate(ags, alsf, apcf)) ⊦ ∃ ags0, alsf0, apcf0. flitpscStep(mkstate(ags, alsf, apcf), sfencePSC(tid), 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), propSF(tid), mkstate(gs0, lsf0, pcf0)) ⊦ ∃ ags0, alsf0, apcf0. flitpscStep(mkstate(ags, alsf, apcf), sfencePSC(tid), 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), propSF(tid), mkstate(gs0, lsf0, pcf0)) ⊦ ∃ ags0, alsf0, apcf0. flitpscStep(mkstate(ags, alsf, apcf), sfencePSC(tid), 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), propSF(tid), mkstate(gs0, lsf0, pcf0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(ags, alsf(t), apcf(t), sfencePSC(tid)) ∧ ags0 = gstepf(ags, alsf(t), apcf(t), sfencePSC(tid)) ∧ alsf0 = alsf(t := lstepf(ags, alsf(t), apcf(t), sfencePSC(tid))) ∧ apcf0 = apcf(t := pcstepf(ags, alsf(t), apcf(t), sfencePSC(tid)))) ∧ ags0.mem = gs0.pmem ∧ ags0.ctr = gs0.fctr ∧ reorder(ags0.p, gs0.pq, gs0.rfo) ∧ ags0.writers = gs0.fwriters ∧ (∀ t. labs(gs0, lsf0(t), pcf0(t), ags0, alsf0(t), apcf0(t)))
Used simplifier rules: abs-def: ⊦ abs(mkstate(gs, lsf, pcf), mkstate(ags, alsf, apcf)) ↔ gabs(gs, lsf, pcf, ags, alsf, apcf) ∧ (∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t))); gabs-def: ⊦ gabs(gs, lsf, pcf, ags, alsf, apcf) ↔ ags.mem = gs.pmem ∧ ags.ctr = gs.fctr ∧ reorder(ags.p, gs.pq, gs.rfo) ∧ ags.writers = gs.fwriters; ⊦ globalPSCCRASH ≠ sfencePSC(t); (s) ⊦ globalPSCPERSIST_FO(l) ≠ sfencePSC(t); (s) ⊦ globalPSCPERSIST_W(l) ≠ sfencePSC(t); (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), propSF(tid), mkstate(gs0, lsf0, pcf0)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(ags, alsf(t), apcf(t), sfencePSC(tid)) ∧ ags0 = gstepf(ags, alsf(t), apcf(t), sfencePSC(tid)) ∧ alsf0 = alsf(t := lstepf(ags, alsf(t), apcf(t), sfencePSC(tid))) ∧ apcf0 = apcf(t := pcstepf(ags, alsf(t), apcf(t), sfencePSC(tid)))) ∧ ags0.mem = gs0.pmem ∧ ags0.ctr = gs0.fctr ∧ reorder(ags0.p, gs0.pq, gs0.rfo) ∧ ags0.writers = gs0.fwriters ∧ (∀ t. labs(gs0, lsf0(t), pcf0(t), ags0, alsf0(t), apcf0(t))) |
ags = mkFLITPSCgs(mem, p, ctr, writers, writers0), ctr = gs.fctr, mem = gs.pmem, writers = gs.fwriters, FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), flitStep(mkstate(gs, lsf, pcf), propSF(tid), mkstate(gs0, lsf0, pcf0)), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(ags, alsf(t), apcf(t), sfencePSC(tid)) ∧ ags0 = gstepf(ags, alsf(t), apcf(t), sfencePSC(tid)) ∧ alsf0 = alsf(t := lstepf(ags, alsf(t), apcf(t), sfencePSC(tid))) ∧ apcf0 = apcf(t := pcstepf(ags, alsf(t), apcf(t), sfencePSC(tid)))) ∧ ags0.mem = gs0.pmem ∧ ags0.ctr = gs0.fctr ∧ reorder(ags0.p, gs0.pq, gs0.rfo) ∧ ags0.writers = gs0.fwriters ∧ (∀ t. labs(gs0, lsf0(t), pcf0(t), ags0, alsf0(t), apcf0(t)))
Used simplifier rules: ⊦ (((mem = gs.mem ∧ p = gs.p) ∧ ctr = gs.ctr) ∧ writers = gs.writers) ∧ readers = gs.readers ↔ gs = mkFLITPSCgs(mem, p, ctr, writers, readers); (elim) Used terms: ags, mem, ctr, writers, writers0, p
| ags = mkFLITPSCgs(mem, p, ctr, writers, writers0), ctr = gs.fctr, mem = gs.pmem, writers = gs.fwriters, FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), flitStep(mkstate(gs, lsf, pcf), propSF(tid), mkstate(gs0, lsf0, pcf0)), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(ags, alsf(t), apcf(t), sfencePSC(tid)) ∧ ags0 = gstepf(ags, alsf(t), apcf(t), sfencePSC(tid)) ∧ alsf0 = alsf(t := lstepf(ags, alsf(t), apcf(t), sfencePSC(tid))) ∧ apcf0 = apcf(t := pcstepf(ags, alsf(t), apcf(t), sfencePSC(tid)))) ∧ ags0.mem = gs0.pmem ∧ ags0.ctr = gs0.fctr ∧ reorder(ags0.p, gs0.pq, gs0.rfo) ∧ ags0.writers = gs0.fwriters ∧ (∀ t. labs(gs0, lsf0(t), pcf0(t), ags0, alsf0(t), apcf0(t))) |
FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), flitStep(mkstate(gs, lsf, pcf), propSF(tid), mkstate(gs0, lsf0, pcf0)), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)))) ∧ ags0.mem = gs0.pmem ∧ ags0.ctr = gs0.fctr ∧ reorder(ags0.p, gs0.pq, gs0.rfo) ∧ ags0.writers = gs0.fwriters ∧ (∀ t. labs(gs0, lsf0(t), pcf0(t), ags0, alsf0(t), apcf0(t)))
| FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), flitStep(mkstate(gs, lsf, pcf), propSF(tid), mkstate(gs0, lsf0, pcf0)), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)))) ∧ ags0.mem = gs0.pmem ∧ ags0.ctr = gs0.fctr ∧ reorder(ags0.p, gs0.pq, gs0.rfo) ∧ ags0.writers = gs0.fwriters ∧ (∀ t. labs(gs0, lsf0(t), pcf0(t), ags0, alsf0(t), apcf0(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), propSF(tid), gs0, ls, pc) ∧ lsf0 = lsf(t := ls) ∧ pcf0 = pcf(t := pc)) ∨ (∃ tid0. propSF(tid) = doWrite(tid0, gs.bq(tid0).head.l, gs.bq(tid0).head.v) ∧ (gs.bq(tid0) ≠ [] ∧ gs.bq(tid0).head.W?) ∧ gs0 = (gs.pq:= gs.pq(gs.bq(tid0).head.l := gs.pq(gs.bq(tid0).head.l) + W(gs.bq(tid0).head.v, tid0))).bq:= gs.bq(tid0 := gs.bq(tid0).tail) ∧ lsf0 = lsf ∧ pcf0 = pcf) ∨ (∃ tid0, l. propSF(tid) = (oneMember(tid0, l, gs.fwriters) ⊃ doWriteFO(tid0, l);propFO(tid0, l)) ∧ (∃ n. n < # gs.bq(tid0) ∧ isPropFO(n, l, gs.bq(tid0))) ∧ ⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(tid0, l, fwriters; pq, bq, rfo); gs := ((gs.pq:= pq).bq:= bq).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf)) ∨ (∃ tid0. propSF(tid) = propSF(tid0) ∧ (gs.bq(tid0) ≠ [] ∧ gs.bq(tid0).head = SF ∧ (∀ l. ¬ FO(tid0) ∈ gs.pq(l))) ∧ gs0 = gs.bq:= gs.bq(tid0 := gs.bq(tid0).tail) ∧ lsf0 = lsf ∧ pcf0 = pcf) ∨ (∃ loc. propSF(tid) = 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. propSF(tid) = 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) ∨ propSF(tid) = 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), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)))) ∧ ags0.mem = gs0.pmem ∧ ags0.ctr = gs0.fctr ∧ reorder(ags0.p, gs0.pq, gs0.rfo) ∧ ags0.writers = gs0.fwriters ∧ (∀ t. labs(gs0, lsf0(t), pcf0(t), ags0, alsf0(t), apcf0(t)))
Used terms: pcf0, propSF(tid), 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), propSF(tid), gs0, ls, pc) ∧ lsf0 = lsf(t := ls) ∧ pcf0 = pcf(t := pc)) ∨ (∃ tid0. propSF(tid) = doWrite(tid0, gs.bq(tid0).head.l, gs.bq(tid0).head.v) ∧ (gs.bq(tid0) ≠ [] ∧ gs.bq(tid0).head.W?) ∧ gs0 = (gs.pq:= gs.pq(gs.bq(tid0).head.l := gs.pq(gs.bq(tid0).head.l) + W(gs.bq(tid0).head.v, tid0))).bq:= gs.bq(tid0 := gs.bq(tid0).tail) ∧ lsf0 = lsf ∧ pcf0 = pcf) ∨ (∃ tid0, l. propSF(tid) = (oneMember(tid0, l, gs.fwriters) ⊃ doWriteFO(tid0, l);propFO(tid0, l)) ∧ (∃ n. n < # gs.bq(tid0) ∧ isPropFO(n, l, gs.bq(tid0))) ∧ ⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(tid0, l, fwriters; pq, bq, rfo); gs := ((gs.pq:= pq).bq:= bq).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf)) ∨ (∃ tid0. propSF(tid) = propSF(tid0) ∧ (gs.bq(tid0) ≠ [] ∧ gs.bq(tid0).head = SF ∧ (∀ l. ¬ FO(tid0) ∈ gs.pq(l))) ∧ gs0 = gs.bq:= gs.bq(tid0 := gs.bq(tid0).tail) ∧ lsf0 = lsf ∧ pcf0 = pcf) ∨ (∃ loc. propSF(tid) = 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. propSF(tid) = 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) ∨ propSF(tid) = 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), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)))) ∧ ags0.mem = gs0.pmem ∧ ags0.ctr = gs0.fctr ∧ reorder(ags0.p, gs0.pq, gs0.rfo) ∧ ags0.writers = gs0.fwriters ∧ (∀ t. labs(gs0, lsf0(t), pcf0(t), ags0, alsf0(t), apcf0(t))) |
pre(gs, lsf(t), pcf(t), propSF(tid)) ∧ ls = lstepf(gs, lsf(t), pcf(t), propSF(tid)) ∧ gs0 = gstepf(gs, lsf(t), pcf(t), propSF(tid)) ∧ pc = pcstepf(gs, lsf(t), pcf(t), propSF(tid)) ∧ lsf0 = lsf(t := lstepf(gs, lsf(t), pcf(t), propSF(tid))) ∧ pcf0 = pcf(t := pcstepf(gs, lsf(t), pcf(t), propSF(tid))) ∨ propSF(tid) = (oneMember(tid0, l, gs.fwriters) ⊃ doWriteFO(tid0, l);propFO(tid0, l)) ∧ n < # gs.bq(tid0) ∧ isPropFO(n, l, gs.bq(tid0)) ∧ ⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(tid0, l, fwriters; pq, bq, rfo); gs := ((gs.pq:= pq).bq:= bq).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf) ∨ tid = tid1 ∧ gs.bq(tid1) ≠ [] ∧ gs.bq(tid1).head = SF ∧ (∀ l. ¬ FO(tid1) ∈ gs.pq(l)) ∧ gs0 = gs.bq:= gs.bq(tid1 := gs.bq(tid1).tail) ∧ lsf0 = lsf ∧ pcf0 = pcf, FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)))) ∧ ags0.mem = gs0.pmem ∧ ags0.ctr = gs0.fctr ∧ reorder(ags0.p, gs0.pq, gs0.rfo) ∧ ags0.writers = gs0.fwriters ∧ (∀ t. labs(gs0, lsf0(t), pcf0(t), ags0, alsf0(t), apcf0(t)))
Used simplifier rules: ⊦ globalCRASH ≠ propSF(t); (s) ⊦ globalPERSIST_FO(loc) ≠ propSF(t); (s) ⊦ globalPERSIST_W(loc) ≠ propSF(t); (s) ⊦ propSF(t) = propSF(t0) ↔ t = t0; (s) ⊦ doWrite(t, loc, v) ≠ propSF(t0); (s) ⊦ lstep(gs, ls, pc, a, gs0, ls0, pc0) ↔ pre(gs, ls, pc, a) ∧ ls0 = lstepf(gs, ls, pc, a) ∧ gs0 = gstepf(gs, ls, pc, a) ∧ pc0 = pcstepf(gs, ls, pc, a); (s)
| pre(gs, lsf(t), pcf(t), propSF(tid)) ∧ ls = lstepf(gs, lsf(t), pcf(t), propSF(tid)) ∧ gs0 = gstepf(gs, lsf(t), pcf(t), propSF(tid)) ∧ pc = pcstepf(gs, lsf(t), pcf(t), propSF(tid)) ∧ lsf0 = lsf(t := lstepf(gs, lsf(t), pcf(t), propSF(tid))) ∧ pcf0 = pcf(t := pcstepf(gs, lsf(t), pcf(t), propSF(tid))) ∨ propSF(tid) = (oneMember(tid0, l, gs.fwriters) ⊃ doWriteFO(tid0, l);propFO(tid0, l)) ∧ n < # gs.bq(tid0) ∧ isPropFO(n, l, gs.bq(tid0)) ∧ ⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(tid0, l, fwriters; pq, bq, rfo); gs := ((gs.pq:= pq).bq:= bq).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf) ∨ tid = tid1 ∧ gs.bq(tid1) ≠ [] ∧ gs.bq(tid1).head = SF ∧ (∀ l. ¬ FO(tid1) ∈ gs.pq(l)) ∧ gs0 = gs.bq:= gs.bq(tid1 := gs.bq(tid1).tail) ∧ lsf0 = lsf ∧ pcf0 = pcf, FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)))) ∧ ags0.mem = gs0.pmem ∧ ags0.ctr = gs0.fctr ∧ reorder(ags0.p, gs0.pq, gs0.rfo) ∧ ags0.writers = gs0.fwriters ∧ (∀ t. labs(gs0, lsf0(t), pcf0(t), ags0, alsf0(t), apcf0(t))) |
gs0 = gstepf(gs, lsf(t), pcf(t), propSF(tid)), ls = lstepf(gs, lsf(t), pcf(t), propSF(tid)), lsf0 = lsf(t := lstepf(gs, lsf(t), pcf(t), propSF(tid))), pc = pcstepf(gs, lsf(t), pcf(t), propSF(tid)), pcf0 = pcf(t := pcstepf(gs, lsf(t), pcf(t), propSF(tid))), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), pre(gs, lsf(t), pcf(t), propSF(tid)), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)))) ∧ ags0.mem = gs0.pmem ∧ ags0.ctr = gs0.fctr ∧ reorder(ags0.p, gs0.pq, gs0.rfo) ∧ ags0.writers = gs0.fwriters ∧ (∀ t. labs(gs0, lsf0(t), pcf0(t), ags0, alsf0(t), apcf0(t)))
⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(tid0, l, fwriters; pq, bq, rfo); gs := ((gs.pq:= pq).bq:= bq).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf), propSF(tid) = (oneMember(tid0, l, gs.fwriters) ⊃ doWriteFO(tid0, l);propFO(tid0, l)), n < # gs.bq(tid0), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), isPropFO(n, l, gs.bq(tid0)), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)))) ∧ ags0.mem = gs0.pmem ∧ ags0.ctr = gs0.fctr ∧ reorder(ags0.p, gs0.pq, gs0.rfo) ∧ ags0.writers = gs0.fwriters ∧ (∀ t. labs(gs0, lsf0(t), pcf0(t), ags0, alsf0(t), apcf0(t)))
gs.bq(tid1).head = SF, gs0 = gs.bq:= gs.bq(tid1 := gs.bq(tid1).tail), lsf0 = lsf, pcf0 = pcf, tid = tid1, gs.bq(tid1) ≠ [], FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)))) ∧ ags0.mem = gs0.pmem ∧ ags0.ctr = gs0.fctr ∧ reorder(ags0.p, gs0.pq, gs0.rfo) ∧ ags0.writers = gs0.fwriters ∧ (∀ t. labs(gs0, lsf0(t), pcf0(t), ags0, alsf0(t), apcf0(t)))
| gs0 = gstepf(gs, lsf(t), pcf(t), propSF(tid)), ls = lstepf(gs, lsf(t), pcf(t), propSF(tid)), lsf0 = lsf(t := lstepf(gs, lsf(t), pcf(t), propSF(tid))), pc = pcstepf(gs, lsf(t), pcf(t), propSF(tid)), pcf0 = pcf(t := pcstepf(gs, lsf(t), pcf(t), propSF(tid))), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), pre(gs, lsf(t), pcf(t), propSF(tid)), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)))) ∧ ags0.mem = gs0.pmem ∧ ags0.ctr = gs0.fctr ∧ reorder(ags0.p, gs0.pq, gs0.rfo) ∧ ags0.writers = gs0.fwriters ∧ (∀ t. labs(gs0, lsf0(t), pcf0(t), ags0, alsf0(t), apcf0(t))) |
FLITInv(gs, lsf, pcf), FLITInv (gstepf(gs, lsf(t), pcf(t), propSF(tid)), lsf(t := lstepf(gs, lsf(t), pcf(t), propSF(tid))), pcf(t := pcstepf(gs, lsf(t), pcf(t), propSF(tid)))), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), pre(gs, lsf(t), pcf(t), propSF(tid)), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)))) ∧ ags0.mem = gstepf(gs, lsf(t), pcf(t), propSF(tid)).pmem ∧ ags0.ctr = gstepf(gs, lsf(t), pcf(t), propSF(tid)).fctr ∧ reorder(ags0.p, gstepf(gs, lsf(t), pcf(t), propSF(tid)).pq, gstepf(gs, lsf(t), pcf(t), propSF(tid)).rfo) ∧ ags0.writers = gstepf(gs, lsf(t), pcf(t), propSF(tid)).fwriters ∧ (∀ t0. labs (gstepf(gs, lsf(t), pcf(t), propSF(tid)), (t = t0 ⊃ lstepf(gs, lsf(t0), pcf(t0), propSF(tid));lsf(t0)), (t = t0 ⊃ pcstepf(gs, lsf(t0), pcf(t0), propSF(tid));pcf(t0)), ags0, alsf0(t0), apcf0(t0)))
| FLITInv(gs, lsf, pcf), FLITInv (gstepf(gs, lsf(t), pcf(t), propSF(tid)), lsf(t := lstepf(gs, lsf(t), pcf(t), propSF(tid))), pcf(t := pcstepf(gs, lsf(t), pcf(t), propSF(tid)))), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), pre(gs, lsf(t), pcf(t), propSF(tid)), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)))) ∧ ags0.mem = gstepf(gs, lsf(t), pcf(t), propSF(tid)).pmem ∧ ags0.ctr = gstepf(gs, lsf(t), pcf(t), propSF(tid)).fctr ∧ reorder(ags0.p, gstepf(gs, lsf(t), pcf(t), propSF(tid)).pq, gstepf(gs, lsf(t), pcf(t), propSF(tid)).rfo) ∧ ags0.writers = gstepf(gs, lsf(t), pcf(t), propSF(tid)).fwriters ∧ (∀ t0. labs (gstepf(gs, lsf(t), pcf(t), propSF(tid)), (t = t0 ⊃ lstepf(gs, lsf(t0), pcf(t0), propSF(tid));lsf(t0)), (t = t0 ⊃ pcstepf(gs, lsf(t0), pcf(t0), propSF(tid));pcf(t0)), ags0, alsf0(t0), apcf0(t0))) |
Used simplifier rules: FLITPC freely generated by R1, R2, R3, R4, W1, W2, W3, W4, W5, W6, W7, crashed, idle, ready ;; ⊦ gstepf(gs, ls, ready, a) = gs; (s) ⊦ pre(gs, ls, ready, a) ↔ (∃ loc0, val0. a = invFLITWRITE(ls.t, loc0, val0)) ∨ (∃ loc0. a = invFLITREAD(ls.t, loc0)) ∨ a = callFLITCOMPLETE(ls.t) ∧ gs.bq(ls.t) = [] ∧ (∀ l. ¬ FO(ls.t) ∈ gs.pq(l)); (s) ⊦ invFLITWRITE(t, loc, v) ≠ propSF(t0); (s) ⊦ invFLITREAD(t, loc) ≠ propSF(t0); (s) ⊦ callFLITCOMPLETE(t) ≠ propSF(t0); (s) ⊦ pre(gs, ls, idle, a) ↔ a = callRUN(ls.t); (s) ⊦ callRUN(t) ≠ propSF(t0); (s) ⊦ pre(gs, ls, crashed, a) ↔ false; (s) ⊦ pcstepf(gs, ls, W7, a) = ready; (s) ⊦ pre(gs, ls, W7, a) ↔ a = retFLITWRITE(ls.t); (s) ⊦ propSF(t) ≠ retFLITWRITE(t0); (s) ⊦ gstepf(gs, ls, W6, a) = (gs.fctr:= gs.fctr(ls.loc := gs.fctr(ls.loc) - 1)) .fwriters:= gs.fwriters(ls.loc := gs.fwriters(ls.loc) -- ls.t); (s) ⊦ lstepf(gs, ls, W6, a) = ls; (s) ⊦ pcstepf(gs, ls, W6, a) = W7; (s) ⊦ pre(gs, ls, W6, a) ↔ (gs.bq(ls.t) = [] ∧ (∀ l. ¬ FO(ls.t) ∈ gs.pq(l))) ∧ a = ctrDec(ls.t, ls.loc); (s) ⊦ ctrDec(t, loc) ≠ propSF(t0); (s) ⊦ pcstepf(gs, ls, W5, a) = W6; (s) ⊦ pre(gs, ls, W5, a) ↔ a = τ; (s) ⊦ propSF(t) ≠ τ; (s) ⊦ pcstepf(gs, ls, W4, a) = W5; (s) ⊦ pre(gs, ls, W4, a) ↔ a = τ; (s) ⊦ pcstepf(gs, ls, W3, a) = W4; (s) ⊦ pre(gs, ls, W3, a) ↔ a = τ; (s) ⊦ gstepf(gs, ls, W2, a) = (gs.fctr:= gs.fctr(ls.loc := gs.fctr(ls.loc) + 1)) .fwriters:= gs.fwriters(ls.loc := gs.fwriters(ls.loc) ++ ls.t); (s) ⊦ lstepf(gs, ls, W2, a) = ls; (s) ⊦ pcstepf(gs, ls, W2, a) = W3; (s) ⊦ pre(gs, ls, W2, a) ↔ (gs.bq(ls.t) = [] ∧ (∀ l. ¬ FO(ls.t) ∈ gs.pq(l))) ∧ a = ctrInc(ls.t, ls.loc); (s) ⊦ ctrInc(t, loc) ≠ propSF(t0); (s) ⊦ gstepf(gs, ls, W1, a) = gs.bq:= gs.bq(ls.t := gs.bq(ls.t) + SF); (s) ⊦ x + a = x + a '; (s) ⊦ lstepf(gs, ls, W1, a) = ls; (s) ⊦ pcstepf(gs, ls, W1, a) = W2; (s) ⊦ pre(gs, ls, W1, a) ↔ a = sfence(ls.t); (s) ⊦ propSF(t) ≠ sfence(t0); (s) ⊦ pcstepf(gs, ls, R4, a) = ready; (s) ⊦ pre(gs, ls, R4, a) ↔ a = retFLITREAD(ls.t, ls.val); (s) ⊦ propSF(t) ≠ retFLITREAD(t0, v); (s) ⊦ gstepf(gs, ls, R3, a) = ( (gs.bq:= gs.bq(ls.t := gs.bq(ls.t) + FO(ls.loc))) .rfo:= gs.rfo(ls.t := gs.rfo(ls.t) + FO(ls.loc))) .freaders:= gs.freaders(ls.loc := gs.freaders(ls.loc) -- ls.t); (s) ⊦ lstepf(gs, ls, R3, a) = ls; (s) ⊦ pcstepf(gs, ls, R3, a) = R4; (s) ⊦ pre(gs, ls, R3, a) ↔ a = pwb(ls.t, ls.loc); (s) ⊦ propSF(t) ≠ pwb(t0, loc); (s) ⊦ gstepf(gs, ls, R2, a) = (gs.fctr(ls.loc) ≠ 0 ⊃ gs ;gs.freaders:= gs.freaders(ls.loc := gs.freaders(ls.loc) -- ls.t) ); (s) ⊦ lstepf(gs, ls, R2, a) = ls; (s) ⊦ pcstepf(gs, ls, R2, a) = (gs.fctr(ls.loc) ≠ 0 ⊃ R3;R4); (s) ⊦ pre(gs, ls, R2, a) ↔ a = ctrRead(ls.t, ls.loc, gs.fctr(ls.loc)); (s) ⊦ ctrRead(t, loc, n) ≠ propSF(t0); (s) ⊦ gstepf(gs, ls, R1, a) = gs.freaders:= gs.freaders(ls.loc := gs.freaders(ls.loc) ++ ls.t); (s) ⊦ lstepf(gs, ls, R1, a) = ls.val:= (((gs.pmem ⊕ gs.pq) ⊕ gs.bq(ls.t)))(ls.loc); (s) ⊦ pcstepf(gs, ls, R1, a) = R2; (s) ⊦ pre(gs, ls, R1, a) ↔ a = doRead(ls.t, ls.loc, ((gs.pmem ⊕ gs.pq))(ls.loc)); (s) ⊦ ((mem ⊕ p))(l) = mem(l) ⊕ p(l); (s) ⊦ reorder(p, pq, rfo) → v ⊕ pq(l) = v ⊕ p(l); (s) ⊦ doRead(t, loc, v) ≠ propSF(t0); (s)
| ⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(tid0, l, fwriters; pq, bq, rfo); gs := ((gs.pq:= pq).bq:= bq).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf), propSF(tid) = (oneMember(tid0, l, gs.fwriters) ⊃ doWriteFO(tid0, l);propFO(tid0, l)), n < # gs.bq(tid0), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), isPropFO(n, l, gs.bq(tid0)), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)))) ∧ ags0.mem = gs0.pmem ∧ ags0.ctr = gs0.fctr ∧ reorder(ags0.p, gs0.pq, gs0.rfo) ∧ ags0.writers = gs0.fwriters ∧ (∀ t. labs(gs0, lsf0(t), pcf0(t), ags0, alsf0(t), apcf0(t))) |
⟨PROP_FO(tid0, l, fwriters; pq, bq, rfo); gs := ((gs.pq:= pq).bq:= bq).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf), bq = gs.bq, fwriters = gs.fwriters, pq = gs.pq, propSF(tid) = (oneMember(tid0, l, gs.fwriters) ⊃ doWriteFO(tid0, l);propFO(tid0, l)), rfo = gs.rfo, n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), isPropFO(n, l, gs.bq(tid0)), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)))) ∧ ags0.mem = gs0.pmem ∧ ags0.ctr = gs0.fctr ∧ reorder(ags0.p, gs0.pq, gs0.rfo) ∧ ags0.writers = gs0.fwriters ∧ (∀ t. labs(gs0, lsf0(t), pcf0(t), ags0, alsf0(t), apcf0(t)))
| ⟨PROP_FO(tid0, l, fwriters; pq, bq, rfo); gs := ((gs.pq:= pq).bq:= bq).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf), bq = gs.bq, fwriters = gs.fwriters, pq = gs.pq, propSF(tid) = (oneMember(tid0, l, gs.fwriters) ⊃ doWriteFO(tid0, l);propFO(tid0, l)), rfo = gs.rfo, n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), isPropFO(n, l, gs.bq(tid0)), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)))) ∧ ags0.mem = gs0.pmem ∧ ags0.ctr = gs0.fctr ∧ reorder(ags0.p, gs0.pq, gs0.rfo) ∧ ags0.writers = gs0.fwriters ∧ (∀ t. labs(gs0, lsf0(t), pcf0(t), ags0, alsf0(t), apcf0(t))) |
⟨gs := ((gs.pq:= pq0).bq:= bq0).rfo:= rfo0⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf), ⟨PROP_FO(tid0, l, fwriters; pq, bq, rfo)⟩ (pq = pq0 ∧ bq = bq0 ∧ rfo = rfo0), bq = gs.bq, fwriters = gs.fwriters, pq = gs.pq, propSF(tid) = (oneMember(tid0, l, gs.fwriters) ⊃ doWriteFO(tid0, l);propFO(tid0, l)), rfo = gs.rfo, n < # gs.bq(tid0), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), isPropFO(n, l, gs.bq(tid0)), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)))) ∧ ags0.mem = gs0.pmem ∧ ags0.ctr = gs0.fctr ∧ reorder(ags0.p, gs0.pq, gs0.rfo) ∧ ags0.writers = gs0.fwriters ∧ (∀ t. labs(gs0, lsf0(t), pcf0(t), ags0, alsf0(t), apcf0(t)))
| ⟨gs := ((gs.pq:= pq0).bq:= bq0).rfo:= rfo0⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf), ⟨PROP_FO(tid0, l, fwriters; pq, bq, rfo)⟩ (pq = pq0 ∧ bq = bq0 ∧ rfo = rfo0), bq = gs.bq, fwriters = gs.fwriters, pq = gs.pq, propSF(tid) = (oneMember(tid0, l, gs.fwriters) ⊃ doWriteFO(tid0, l);propFO(tid0, l)), rfo = gs.rfo, n < # gs.bq(tid0), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), isPropFO(n, l, gs.bq(tid0)), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)))) ∧ ags0.mem = gs0.pmem ∧ ags0.ctr = gs0.fctr ∧ reorder(ags0.p, gs0.pq, gs0.rfo) ∧ ags0.writers = gs0.fwriters ∧ (∀ t. labs(gs0, lsf0(t), pcf0(t), ags0, alsf0(t), apcf0(t))) |
⟨PROP_FO(tid0, l, fwriters; pq, bq, rfo)⟩ (pq = pq0 ∧ bq = bq0 ∧ rfo = rfo0), bq = gs.bq, fwriters = gs.fwriters, gs0 = ((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf0 = lsf, pcf0 = pcf, pq = gs.pq, propSF(tid) = (oneMember(tid0, l, gs.fwriters) ⊃ doWriteFO(tid0, l);propFO(tid0, l)), rfo = gs.rfo, n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), isPropFO(n, l, gs.bq(tid0)), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)))) ∧ ags0.mem = gs0.pmem ∧ ags0.ctr = gs0.fctr ∧ reorder(ags0.p, gs0.pq, gs0.rfo) ∧ ags0.writers = gs0.fwriters ∧ (∀ t. labs(gs0, lsf0(t), pcf0(t), ags0, alsf0(t), apcf0(t)))
| ⟨PROP_FO(tid0, l, fwriters; pq, bq, rfo)⟩ (pq = pq0 ∧ bq = bq0 ∧ rfo = rfo0), bq = gs.bq, fwriters = gs.fwriters, gs0 = ((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf0 = lsf, pcf0 = pcf, pq = gs.pq, propSF(tid) = (oneMember(tid0, l, gs.fwriters) ⊃ doWriteFO(tid0, l);propFO(tid0, l)), rfo = gs.rfo, n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), isPropFO(n, l, gs.bq(tid0)), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)))) ∧ ags0.mem = gs0.pmem ∧ ags0.ctr = gs0.fctr ∧ reorder(ags0.p, gs0.pq, gs0.rfo) ∧ ags0.writers = gs0.fwriters ∧ (∀ t. labs(gs0, lsf0(t), pcf0(t), ags0, alsf0(t), apcf0(t))) |
⟨PROP_FO(tid0, l, gs.fwriters; pq, bq, rfo)⟩ (pq = pq0 ∧ bq = bq0 ∧ rfo = rfo0), bq = gs.bq, pq = gs.pq, propSF(tid) = (oneMember(tid0, l, gs.fwriters) ⊃ doWriteFO(tid0, l);propFO(tid0, l)), rfo = gs.rfo, gs.bq(tid0) ≠ [], n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), isPropFO(n, l, gs.bq(tid0)), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, pq0, rfo0) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf(t), pcf(t), ags0, alsf0(t), apcf0(t)))
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) 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) ⊦ (gs.rfo:= bq0).rfo = bq0; (s) ⊦ (gs.pq:= pq).pq = pq; (s) ⊦ (gs.bq:= bq).pq = gs.pq; (s) ⊦ (gs.rfo:= bq0).pq = gs.pq; (s) ⊦ (gs.pq:= pq).fctr = gs.fctr; (s) ⊦ (gs.bq:= bq).fctr = gs.fctr; (s) ⊦ (gs.rfo:= bq0).fctr = gs.fctr; (s) ⊦ (gs.pq:= pq).pmem = gs.pmem; (s) ⊦ (gs.bq:= bq).pmem = gs.pmem; (s) ⊦ (gs.rfo:= bq0).pmem = gs.pmem; (s)
| ⟨PROP_FO(tid0, l, gs.fwriters; pq, bq, rfo)⟩ (pq = pq0 ∧ bq = bq0 ∧ rfo = rfo0), bq = gs.bq, pq = gs.pq, propSF(tid) = (oneMember(tid0, l, gs.fwriters) ⊃ doWriteFO(tid0, l);propFO(tid0, l)), rfo = gs.rfo, gs.bq(tid0) ≠ [], n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), isPropFO(n, l, gs.bq(tid0)), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, pq0, rfo0) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf(t), pcf(t), ags0, alsf0(t), apcf0(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), bq = gs.bq, fwriters = gs.fwriters, pq = gs.pq, propSF(tid1) = (oneMember(tid0, l, gs.fwriters) ⊃ doWriteFO(tid0, l);propFO(tid0, l)), rfo = gs.rfo, tid = tid0, gs.bq(tid0) ≠ [], n < # gs.bq(tid0), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), isPropFO(n, l, gs.bq(tid0)), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, pq0, rfo0) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf(t), pcf(t), ags0, alsf0(t), apcf0(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), bq = gs.bq, fwriters = gs.fwriters, pq = gs.pq, propSF(tid1) = (oneMember(tid0, l, gs.fwriters) ⊃ doWriteFO(tid0, l);propFO(tid0, l)), rfo = gs.rfo, tid = tid0, gs.bq(tid0) ≠ [], n < # gs.bq(tid0), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), isPropFO(n, l, gs.bq(tid0)), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, pq0, rfo0) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf(t), pcf(t), ags0, alsf0(t), apcf0(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), bq = gs.bq, fwriters = gs.fwriters, pq = gs.pq, propSF(tid1) = (oneMember(tid0, l, gs.fwriters) ⊃ doWriteFO(tid0, l);propFO(tid0, l)), rfo = gs.rfo, tid = tid0, gs.bq(tid0) ≠ [], n0 < # gs.bq(tid0), n < # bq(tid), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), isPropFO(n0, l, gs.bq(tid0)), isPropFO(n, l, bq(tid)), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, pq0, rfo0) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf(t), pcf(t), ags0, alsf0(t), apcf0(t)))
⟨skip⟩ (pq = pq0 ∧ bq = bq0 ∧ rfo = rfo0), bq = gs.bq, fwriters = gs.fwriters, pq = gs.pq, propSF(tid1) = (oneMember(tid0, l, gs.fwriters) ⊃ doWriteFO(tid0, l);propFO(tid0, l)), rfo = gs.rfo, tid = tid0, gs.bq(tid0) ≠ [], n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), isPropFO(n, l, gs.bq(tid0)), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ n. ¬(n < # bq(tid) ∧ isPropFO(n, l, bq(tid))) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, pq0, rfo0) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf(t), pcf(t), ags0, alsf0(t), apcf0(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), bq = gs.bq, fwriters = gs.fwriters, pq = gs.pq, propSF(tid1) = (oneMember(tid0, l, gs.fwriters) ⊃ doWriteFO(tid0, l);propFO(tid0, l)), rfo = gs.rfo, tid = tid0, gs.bq(tid0) ≠ [], n0 < # gs.bq(tid0), n < # bq(tid), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), isPropFO(n0, l, gs.bq(tid0)), isPropFO(n, l, bq(tid)), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, pq0, rfo0) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf(t), pcf(t), ags0, alsf0(t), apcf0(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, bq = gs.bq, fwriters = gs.fwriters, pq = gs.pq, propSF(tid1) = (oneMember(tid0, l, gs.fwriters) ⊃ doWriteFO(tid0, l);propFO(tid0, l)), rfo = gs.rfo, tid = tid0, gs.bq(tid0) ≠ [], n < # bq(tid), n0 < # gs.bq(tid0), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), isPropFO(n, l, bq(tid)), isPropFO(n0, l, gs.bq(tid0)), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, pq0, rfo0) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf(t), pcf(t), ags0, alsf0(t), apcf0(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, bq = gs.bq, fwriters = gs.fwriters, pq = gs.pq, propSF(tid1) = (oneMember(tid0, l, gs.fwriters) ⊃ doWriteFO(tid0, l);propFO(tid0, l)), rfo = gs.rfo, tid = tid0, gs.bq(tid0) ≠ [], n < # bq(tid), n0 < # gs.bq(tid0), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), isPropFO(n, l, bq(tid)), isPropFO(n0, l, gs.bq(tid0)), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, pq0, rfo0) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf(t), pcf(t), ags0, alsf0(t), apcf0(t))) |
propSF(tid1) = (oneMember(tid0, l, gs.fwriters) ⊃ doWriteFO(tid0, l);propFO(tid0, l)), gs.bq(tid0) ≠ [], n0 < # gs.bq(tid0), n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv ( ((gs.pq:= gs.pq(l := gs.pq(l) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)) .rfo:= gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n)), lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), isPropFO(n0, l, gs.bq(tid0)), isPropFO(n, l, gs.bq(tid0)), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq(l := gs.pq(l) + FO(tid0) '), gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n))) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs ( ((gs.pq:= gs.pq(l := gs.pq(l) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)) .rfo:= gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n)), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t)))
Used simplifier rules: ⊦ x + a = x + a '; (s)
| propSF(tid1) = (oneMember(tid0, l, gs.fwriters) ⊃ doWriteFO(tid0, l);propFO(tid0, l)), gs.bq(tid0) ≠ [], n0 < # gs.bq(tid0), n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv ( ((gs.pq:= gs.pq(l := gs.pq(l) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)) .rfo:= gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n)), lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), isPropFO(n0, l, gs.bq(tid0)), isPropFO(n, l, gs.bq(tid0)), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq(l := gs.pq(l) + FO(tid0) '), gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n))) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs ( ((gs.pq:= gs.pq(l := gs.pq(l) + FO(tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0) -p n)) .rfo:= gs.rfo(tid0 := (tid0 ∈ gs.fwriters(l) ⊃ gs.rfo(tid0);gs.rfo(tid0) -p n)), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t))) |
Used simplifier rules: ⊦ propFO(t, loc) ≠ propSF(t0); (s) ⊦ doWriteFO(t, loc) ≠ propSF(t0); (s) Used formulas: oneMember(tid0, l, gs.fwriters)
| ⟨skip⟩ (pq = pq0 ∧ bq = bq0 ∧ rfo = rfo0), bq = gs.bq, fwriters = gs.fwriters, pq = gs.pq, propSF(tid1) = (oneMember(tid0, l, gs.fwriters) ⊃ doWriteFO(tid0, l);propFO(tid0, l)), rfo = gs.rfo, tid = tid0, gs.bq(tid0) ≠ [], n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), isPropFO(n, l, gs.bq(tid0)), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ n. ¬(n < # bq(tid) ∧ isPropFO(n, l, bq(tid))) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, pq0, rfo0) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf(t), pcf(t), ags0, alsf0(t), apcf0(t))) |
bq = gs.bq, bq = bq0, fwriters = gs.fwriters, pq = gs.pq, pq = pq0, propSF(tid1) = (oneMember(tid0, l, gs.fwriters) ⊃ doWriteFO(tid0, l);propFO(tid0, l)), rfo = gs.rfo, rfo = rfo0, tid = tid0, gs.bq(tid0) ≠ [], n < # gs.bq(tid0), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), isPropFO(n, l, gs.bq(tid0)), reorder(p, gs.pq, gs.rfo), ∀ n. ¬(n < # bq(tid) ∧ isPropFO(n, l, bq(tid))), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, pq0, rfo0) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf(t), pcf(t), ags0, alsf0(t), apcf0(t)))
| bq = gs.bq, bq = bq0, fwriters = gs.fwriters, pq = gs.pq, pq = pq0, propSF(tid1) = (oneMember(tid0, l, gs.fwriters) ⊃ doWriteFO(tid0, l);propFO(tid0, l)), rfo = gs.rfo, rfo = rfo0, tid = tid0, gs.bq(tid0) ≠ [], n < # gs.bq(tid0), FLITInv(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), isPropFO(n, l, gs.bq(tid0)), reorder(p, gs.pq, gs.rfo), ∀ n. ¬(n < # bq(tid) ∧ isPropFO(n, l, bq(tid))), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, pq0, rfo0) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(((gs.pq:= pq0).bq:= bq0).rfo:= rfo0, lsf(t), pcf(t), ags0, alsf0(t), apcf0(t))) |
propSF(tid1) = (oneMember(tid0, l, gs.fwriters) ⊃ doWriteFO(tid0, l);propFO(tid0, l)), gs.bq(tid0) ≠ [], n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= gs.pq).bq:= gs.bq).rfo:= gs.rfo, lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), isPropFO(n, l, gs.bq(tid0)), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ n0. ¬ n0 < # gs.bq(tid0) ∨ ¬ isPropFO(n0, l, gs.bq(tid0)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq, gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(((gs.pq:= gs.pq).bq:= gs.bq).rfo:= gs.rfo, lsf(t), pcf(t), ags0, alsf0(t), apcf0(t)))
| propSF(tid1) = (oneMember(tid0, l, gs.fwriters) ⊃ doWriteFO(tid0, l);propFO(tid0, l)), gs.bq(tid0) ≠ [], n < # gs.bq(tid0), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= gs.pq).bq:= gs.bq).rfo:= gs.rfo, lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), isPropFO(n, l, gs.bq(tid0)), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ n0. ¬ n0 < # gs.bq(tid0) ∨ ¬ isPropFO(n0, l, gs.bq(tid0)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq, gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(((gs.pq:= gs.pq).bq:= gs.bq).rfo:= gs.rfo, lsf(t), pcf(t), ags0, alsf0(t), apcf0(t))) |
Used terms: n
| gs.bq(tid1).head = SF, gs0 = gs.bq:= gs.bq(tid1 := gs.bq(tid1).tail), lsf0 = lsf, pcf0 = pcf, tid = tid1, gs.bq(tid1) ≠ [], FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid)))) ∧ ags0.mem = gs0.pmem ∧ ags0.ctr = gs0.fctr ∧ reorder(ags0.p, gs0.pq, gs0.rfo) ∧ ags0.writers = gs0.fwriters ∧ (∀ t. labs(gs0, lsf0(t), pcf0(t), ags0, alsf0(t), apcf0(t))) |
gs.bq(tid1).head = SF, gs.bq(tid1) ≠ [], FLITInv(gs, lsf, pcf), FLITInv(gs.bq:= gs.bq(tid1 := gs.bq(tid1).tail), lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq, gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(gs.bq:= gs.bq(tid1 := gs.bq(tid1).tail), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t)))
Used simplifier rules: ⊦ (gs.bq:= bq).fwriters = gs.fwriters; (s) ⊦ (gs.bq:= bq).rfo = gs.rfo; (s) ⊦ (gs.bq:= bq).pq = gs.pq; (s) ⊦ (gs.bq:= bq).fctr = gs.fctr; (s) ⊦ (gs.bq:= bq).pmem = gs.pmem; (s)
| gs.bq(tid1).head = SF, gs.bq(tid1) ≠ [], FLITInv(gs, lsf, pcf), FLITInv(gs.bq:= gs.bq(tid1 := gs.bq(tid1).tail), lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq, gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(gs.bq:= gs.bq(tid1 := gs.bq(tid1).tail), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t))) |
gs.bq(tid1) = head + bel, head = SF, gs.bq(tid1) ≠ [], FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq, gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t)))
Used simplifier rules: ⊦ x ≠ [] → (head = x.head ∧ tail = x.tail ↔ x = head + tail); (elim) Used terms: gs.bq(tid1), head, bel
| gs.bq(tid1) = head + bel, head = SF, gs.bq(tid1) ≠ [], FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq, gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t))) |
gs.bq(tid1) = SF ' + bel, FLITInv(gs, lsf, pcf), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq, gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t)))
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a ∈ a0 ' + x ↔ a = a0 ∨ a ∈ x; (s) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ a + x = a ' + x; (s)
| gs.bq(tid1) = SF ' + bel, FLITInv(gs, lsf, pcf), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq, gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t))) |
gs.bq(tid1) = SF ' + bel, FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), pcf(tid1) = W2 ∨ pcf(tid1) = W6 ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq, gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t)))
gs.bq(tid1) = SF ' + bel, pcf(tid1) ≠ W2, pcf(tid1) ≠ W6, FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq, gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t)))
Used formulas: pcf(tid1) = W2 ∨ pcf(tid1) = W6
| gs.bq(tid1) = SF ' + bel, FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), pcf(tid1) = W2 ∨ pcf(tid1) = W6 ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq, gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t))) |
gs.bq(tid1) = SF ' + bel, FLITInv(gs, lsf, pcf), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), labs(gs, lsf(tid1), pcf(tid1), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1)), reorder(p, gs.pq, gs.rfo), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), pcf(tid1) = W2 ∨ pcf(tid1) = W6 ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq, gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t)))
Used terms: tid1
| gs.bq(tid1) = SF ' + bel, FLITInv(gs, lsf, pcf), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), labs(gs, lsf(tid1), pcf(tid1), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1)), reorder(p, gs.pq, gs.rfo), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), pcf(tid1) = W2 ∨ pcf(tid1) = W6 ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq, gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t))) |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = alsf(tid1).t, FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), pcf(tid1) = idle → apcf(tid1) = idle, pcf(tid1) = ready → apcf(tid1) = ready, pcf(tid1) = crashed → apcf(tid1) = crashed, pcf(tid1) = R1 → apcf(tid1) = R1, pcf(tid1) = R2 → apcf(tid1) = R2, pcf(tid1) = R3 → apcf(tid1) = R3, pcf(tid1) = R4 → apcf(tid1) = R4, pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).loc = alsf(tid1).l, pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).val = alsf(tid1).v, pcf(tid1) = W1 → apcf(tid1) = W1, pcf(tid1) = W2 → apcf(tid1) = (SF ∈ gs.bq(alsf(tid1).t) ⊃ W1;W2), pcf(tid1) = W3 → apcf(tid1) = W3, pcf(tid1) = W4 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ gs.bq(alsf(tid1).t) ⊃ W3;W4), pcf(tid1) = W5 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ gs.bq(alsf(tid1).t) ⊃ W3;(FO(lsf(tid1).loc) ∈ gs.bq(alsf(tid1).t) ⊃ W4;W5)), pcf(tid1) = W6 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ gs.bq(alsf(tid1).t) ⊃ W3;(FO(lsf(tid1).loc) ∈ gs.bq(alsf(tid1).t) ⊃ W4;(SF ∈ gs.bq(alsf(tid1).t) ⊃ W5;W6))), pcf(tid1) = W7 → apcf(tid1) = W7, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).loc = alsf(tid1).l, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).val = alsf(tid1).v, ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), pcf(tid1) = W2 ∨ pcf(tid1) = W6 ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq, gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), ags0, alsf0(t), apcf0(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);
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = alsf(tid1).t, FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), pcf(tid1) = idle → apcf(tid1) = idle, pcf(tid1) = ready → apcf(tid1) = ready, pcf(tid1) = crashed → apcf(tid1) = crashed, pcf(tid1) = R1 → apcf(tid1) = R1, pcf(tid1) = R2 → apcf(tid1) = R2, pcf(tid1) = R3 → apcf(tid1) = R3, pcf(tid1) = R4 → apcf(tid1) = R4, pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).loc = alsf(tid1).l, pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).val = alsf(tid1).v, pcf(tid1) = W1 → apcf(tid1) = W1, pcf(tid1) = W2 → apcf(tid1) = (SF ∈ gs.bq(alsf(tid1).t) ⊃ W1;W2), pcf(tid1) = W3 → apcf(tid1) = W3, pcf(tid1) = W4 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ gs.bq(alsf(tid1).t) ⊃ W3;W4), pcf(tid1) = W5 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ gs.bq(alsf(tid1).t) ⊃ W3;(FO(lsf(tid1).loc) ∈ gs.bq(alsf(tid1).t) ⊃ W4;W5)), pcf(tid1) = W6 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ gs.bq(alsf(tid1).t) ⊃ W3;(FO(lsf(tid1).loc) ∈ gs.bq(alsf(tid1).t) ⊃ W4;(SF ∈ gs.bq(alsf(tid1).t) ⊃ W5;W6))), pcf(tid1) = W7 → apcf(tid1) = W7, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).loc = alsf(tid1).l, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).val = alsf(tid1).v, ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), pcf(tid1) = W2 ∨ pcf(tid1) = W6 ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq, gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t))) |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = t0, alsf(tid1) = mkFLITPSCls(t0, l0, v), FLITInv(gs, lsf, pcf), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).val = v, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).loc = l0, pcf(tid1) = W7 → apcf(tid1) = W7, pcf(tid1) = W6 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ gs.bq(t0) ⊃ W3;(FO(lsf(tid1).loc) ∈ gs.bq(t0) ⊃ W4;(SF ∈ gs.bq(t0) ⊃ W5;W6))), pcf(tid1) = W5 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ gs.bq(t0) ⊃ W3;(FO(lsf(tid1).loc) ∈ gs.bq(t0) ⊃ W4;W5)), pcf(tid1) = W4 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ gs.bq(t0) ⊃ W3;W4), pcf(tid1) = W3 → apcf(tid1) = W3, pcf(tid1) = W2 → apcf(tid1) = (SF ∈ gs.bq(t0) ⊃ W1;W2), pcf(tid1) = W1 → apcf(tid1) = W1, pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).val = v, pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).loc = l0, pcf(tid1) = R4 → apcf(tid1) = R4, pcf(tid1) = R3 → apcf(tid1) = R3, pcf(tid1) = R2 → apcf(tid1) = R2, pcf(tid1) = R1 → apcf(tid1) = R1, pcf(tid1) = crashed → apcf(tid1) = crashed, pcf(tid1) = ready → apcf(tid1) = ready, pcf(tid1) = idle → apcf(tid1) = idle, ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), pcf(tid1) = W2 ∨ pcf(tid1) = W6 ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq, gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t)))
Used simplifier rules: ⊦ (t = ls.t ∧ l = ls.l) ∧ v = ls.v ↔ ls = mkFLITPSCls(t, l, v); (elim) Used terms: alsf(tid1), t0, l0, v
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = t0, alsf(tid1) = mkFLITPSCls(t0, l0, v), FLITInv(gs, lsf, pcf), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).val = v, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).loc = l0, pcf(tid1) = W7 → apcf(tid1) = W7, pcf(tid1) = W6 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ gs.bq(t0) ⊃ W3;(FO(lsf(tid1).loc) ∈ gs.bq(t0) ⊃ W4;(SF ∈ gs.bq(t0) ⊃ W5;W6))), pcf(tid1) = W5 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ gs.bq(t0) ⊃ W3;(FO(lsf(tid1).loc) ∈ gs.bq(t0) ⊃ W4;W5)), pcf(tid1) = W4 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ gs.bq(t0) ⊃ W3;W4), pcf(tid1) = W3 → apcf(tid1) = W3, pcf(tid1) = W2 → apcf(tid1) = (SF ∈ gs.bq(t0) ⊃ W1;W2), pcf(tid1) = W1 → apcf(tid1) = W1, pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).val = v, pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).loc = l0, pcf(tid1) = R4 → apcf(tid1) = R4, pcf(tid1) = R3 → apcf(tid1) = R3, pcf(tid1) = R2 → apcf(tid1) = R2, pcf(tid1) = R1 → apcf(tid1) = R1, pcf(tid1) = crashed → apcf(tid1) = crashed, pcf(tid1) = ready → apcf(tid1) = ready, pcf(tid1) = idle → apcf(tid1) = idle, ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), pcf(tid1) = W2 ∨ pcf(tid1) = W6 ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq, gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t))) |
gs.bq(tid1) = SF ' + bel, alsf(tid1) = mkFLITPSCls(lsf(tid1).t, l0, v), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), pcf(tid1) = idle → apcf(tid1) = idle, pcf(tid1) = ready → apcf(tid1) = ready, pcf(tid1) = crashed → apcf(tid1) = crashed, pcf(tid1) = R1 → apcf(tid1) = R1, pcf(tid1) = R2 → apcf(tid1) = R2, pcf(tid1) = R3 → apcf(tid1) = R3, pcf(tid1) = R4 → apcf(tid1) = R4, pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).loc = l0, pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).val = v, pcf(tid1) = W1 → apcf(tid1) = W1, pcf(tid1) = W2 → apcf(tid1) = (SF ∈ gs.bq(lsf(tid1).t) ⊃ W1;W2), pcf(tid1) = W3 → apcf(tid1) = W3, pcf(tid1) = W4 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ gs.bq(lsf(tid1).t) ⊃ W3;W4), pcf(tid1) = W5 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ gs.bq(lsf(tid1).t) ⊃ W3;(FO(lsf(tid1).loc) ∈ gs.bq(lsf(tid1).t) ⊃ W4;W5)), pcf(tid1) = W6 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ gs.bq(lsf(tid1).t) ⊃ W3;(FO(lsf(tid1).loc) ∈ gs.bq(lsf(tid1).t) ⊃ W4;(SF ∈ gs.bq(lsf(tid1).t) ⊃ W5;W6))), pcf(tid1) = W7 → apcf(tid1) = W7, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).loc = l0, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).val = v, ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), pcf(tid1) = W2 ∨ pcf(tid1) = W6 ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq, gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t)))
| gs.bq(tid1) = SF ' + bel, alsf(tid1) = mkFLITPSCls(lsf(tid1).t, l0, v), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), pcf(tid1) = idle → apcf(tid1) = idle, pcf(tid1) = ready → apcf(tid1) = ready, pcf(tid1) = crashed → apcf(tid1) = crashed, pcf(tid1) = R1 → apcf(tid1) = R1, pcf(tid1) = R2 → apcf(tid1) = R2, pcf(tid1) = R3 → apcf(tid1) = R3, pcf(tid1) = R4 → apcf(tid1) = R4, pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).loc = l0, pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).val = v, pcf(tid1) = W1 → apcf(tid1) = W1, pcf(tid1) = W2 → apcf(tid1) = (SF ∈ gs.bq(lsf(tid1).t) ⊃ W1;W2), pcf(tid1) = W3 → apcf(tid1) = W3, pcf(tid1) = W4 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ gs.bq(lsf(tid1).t) ⊃ W3;W4), pcf(tid1) = W5 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ gs.bq(lsf(tid1).t) ⊃ W3;(FO(lsf(tid1).loc) ∈ gs.bq(lsf(tid1).t) ⊃ W4;W5)), pcf(tid1) = W6 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ gs.bq(lsf(tid1).t) ⊃ W3;(FO(lsf(tid1).loc) ∈ gs.bq(lsf(tid1).t) ⊃ W4;(SF ∈ gs.bq(lsf(tid1).t) ⊃ W5;W6))), pcf(tid1) = W7 → apcf(tid1) = W7, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).loc = l0, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).val = v, ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), pcf(tid1) = W2 ∨ pcf(tid1) = W6 ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq, gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t))) |
⊦ FLITInv(gs, lsf, pcf) ↔ FLITGInv(gs) ∧ (∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)))
gs.bq(tid1) = SF ' + bel, alsf(tid1) = mkFLITPSCls(lsf(tid1).t, l0, v), FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).val = v, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).loc = l0, pcf(tid1) = W7 → apcf(tid1) = W7, pcf(tid1) = W6 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ gs.bq(lsf(tid1).t) ⊃ W3;(FO(lsf(tid1).loc) ∈ gs.bq(lsf(tid1).t) ⊃ W4;(SF ∈ gs.bq(lsf(tid1).t) ⊃ W5;W6))), pcf(tid1) = W5 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ gs.bq(lsf(tid1).t) ⊃ W3;(FO(lsf(tid1).loc) ∈ gs.bq(lsf(tid1).t) ⊃ W4;W5)), pcf(tid1) = W4 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ gs.bq(lsf(tid1).t) ⊃ W3;W4), pcf(tid1) = W3 → apcf(tid1) = W3, pcf(tid1) = W2 → apcf(tid1) = (SF ∈ gs.bq(lsf(tid1).t) ⊃ W1;W2), pcf(tid1) = W1 → apcf(tid1) = W1, pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).val = v, pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).loc = l0, pcf(tid1) = R4 → apcf(tid1) = R4, pcf(tid1) = R3 → apcf(tid1) = R3, pcf(tid1) = R2 → apcf(tid1) = R2, pcf(tid1) = R1 → apcf(tid1) = R1, pcf(tid1) = crashed → apcf(tid1) = crashed, pcf(tid1) = ready → apcf(tid1) = ready, pcf(tid1) = idle → apcf(tid1) = idle, ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), pcf(tid1) = W2 ∨ pcf(tid1) = W6 ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq, gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t)))
Used terms: gs, lsf, pcf
| ⊦ FLITInv(gs, lsf, pcf) ↔ FLITGInv(gs) ∧ (∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t))) |
| gs.bq(tid1) = SF ' + bel, alsf(tid1) = mkFLITPSCls(lsf(tid1).t, l0, v), FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).val = v, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).loc = l0, pcf(tid1) = W7 → apcf(tid1) = W7, pcf(tid1) = W6 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ gs.bq(lsf(tid1).t) ⊃ W3;(FO(lsf(tid1).loc) ∈ gs.bq(lsf(tid1).t) ⊃ W4;(SF ∈ gs.bq(lsf(tid1).t) ⊃ W5;W6))), pcf(tid1) = W5 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ gs.bq(lsf(tid1).t) ⊃ W3;(FO(lsf(tid1).loc) ∈ gs.bq(lsf(tid1).t) ⊃ W4;W5)), pcf(tid1) = W4 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ gs.bq(lsf(tid1).t) ⊃ W3;W4), pcf(tid1) = W3 → apcf(tid1) = W3, pcf(tid1) = W2 → apcf(tid1) = (SF ∈ gs.bq(lsf(tid1).t) ⊃ W1;W2), pcf(tid1) = W1 → apcf(tid1) = W1, pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).val = v, pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).loc = l0, pcf(tid1) = R4 → apcf(tid1) = R4, pcf(tid1) = R3 → apcf(tid1) = R3, pcf(tid1) = R2 → apcf(tid1) = R2, pcf(tid1) = R1 → apcf(tid1) = R1, pcf(tid1) = crashed → apcf(tid1) = crashed, pcf(tid1) = ready → apcf(tid1) = ready, pcf(tid1) = idle → apcf(tid1) = idle, ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), pcf(tid1) = W2 ∨ pcf(tid1) = W6 ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq, gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t))) |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(lsf(tid1).t, l0, v), FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), pcf(tid1)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), pcf(tid1) = idle → apcf(tid1) = idle, pcf(tid1) = ready → apcf(tid1) = ready, pcf(tid1) = crashed → apcf(tid1) = crashed, pcf(tid1) = R1 → apcf(tid1) = R1, pcf(tid1) = R2 → apcf(tid1) = R2, pcf(tid1) = R3 → apcf(tid1) = R3, pcf(tid1) = R4 → apcf(tid1) = R4, pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).loc = l0, pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).val = v, pcf(tid1) = W1 → apcf(tid1) = W1, pcf(tid1) = W2 → apcf(tid1) = (SF ∈ gs.bq(lsf(tid1).t) ⊃ W1;W2), pcf(tid1) = W3 → apcf(tid1) = W3, pcf(tid1) = W4 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ gs.bq(lsf(tid1).t) ⊃ W3;W4), pcf(tid1) = W5 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ gs.bq(lsf(tid1).t) ⊃ W3;(FO(lsf(tid1).loc) ∈ gs.bq(lsf(tid1).t) ⊃ W4;W5)), pcf(tid1) = W6 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ gs.bq(lsf(tid1).t) ⊃ W3;(FO(lsf(tid1).loc) ∈ gs.bq(lsf(tid1).t) ⊃ W4;(SF ∈ gs.bq(lsf(tid1).t) ⊃ W5;W6))), pcf(tid1) = W7 → apcf(tid1) = W7, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).loc = l0, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).val = v, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), pcf(tid1) = W2 ∨ pcf(tid1) = W6 ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq, gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t)))
Used terms: tid1
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(lsf(tid1).t, l0, v), FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), pcf(tid1)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), pcf(tid1) = idle → apcf(tid1) = idle, pcf(tid1) = ready → apcf(tid1) = ready, pcf(tid1) = crashed → apcf(tid1) = crashed, pcf(tid1) = R1 → apcf(tid1) = R1, pcf(tid1) = R2 → apcf(tid1) = R2, pcf(tid1) = R3 → apcf(tid1) = R3, pcf(tid1) = R4 → apcf(tid1) = R4, pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).loc = l0, pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).val = v, pcf(tid1) = W1 → apcf(tid1) = W1, pcf(tid1) = W2 → apcf(tid1) = (SF ∈ gs.bq(lsf(tid1).t) ⊃ W1;W2), pcf(tid1) = W3 → apcf(tid1) = W3, pcf(tid1) = W4 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ gs.bq(lsf(tid1).t) ⊃ W3;W4), pcf(tid1) = W5 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ gs.bq(lsf(tid1).t) ⊃ W3;(FO(lsf(tid1).loc) ∈ gs.bq(lsf(tid1).t) ⊃ W4;W5)), pcf(tid1) = W6 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ gs.bq(lsf(tid1).t) ⊃ W3;(FO(lsf(tid1).loc) ∈ gs.bq(lsf(tid1).t) ⊃ W4;(SF ∈ gs.bq(lsf(tid1).t) ⊃ W5;W6))), pcf(tid1) = W7 → apcf(tid1) = W7, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).loc = l0, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).val = v, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), pcf(tid1) = W2 ∨ pcf(tid1) = W6 ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq, gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t))) |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, l0, v), FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), pcf(tid1)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).val = v, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).loc = l0, pcf(tid1) = W7 → apcf(tid1) = W7, pcf(tid1) = W3 → apcf(tid1) = W3, pcf(tid1) = W1 → apcf(tid1) = W1, pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).val = v, pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).loc = l0, pcf(tid1) = R4 → apcf(tid1) = R4, pcf(tid1) = R3 → apcf(tid1) = R3, pcf(tid1) = R2 → apcf(tid1) = R2, pcf(tid1) = R1 → apcf(tid1) = R1, pcf(tid1) = crashed → apcf(tid1) = crashed, pcf(tid1) = ready → apcf(tid1) = ready, pcf(tid1) = idle → apcf(tid1) = idle, pcf(tid1) = W6 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W5 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W4 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;W4), pcf(tid1) = W2 → apcf(tid1) = W1, ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), pcf(tid1) = W2 ∨ pcf(tid1) = W6 ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq, gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t)))
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a ∈ a0 ' + x ↔ a = a0 ∨ a ∈ x; (s) ⊦ W(l, v) ≠ SF; (s) ⊦ FO(l) ≠ SF; (s)
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, l0, v), FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), pcf(tid1)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).val = v, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).loc = l0, pcf(tid1) = W7 → apcf(tid1) = W7, pcf(tid1) = W3 → apcf(tid1) = W3, pcf(tid1) = W1 → apcf(tid1) = W1, pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).val = v, pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).loc = l0, pcf(tid1) = R4 → apcf(tid1) = R4, pcf(tid1) = R3 → apcf(tid1) = R3, pcf(tid1) = R2 → apcf(tid1) = R2, pcf(tid1) = R1 → apcf(tid1) = R1, pcf(tid1) = crashed → apcf(tid1) = crashed, pcf(tid1) = ready → apcf(tid1) = ready, pcf(tid1) = idle → apcf(tid1) = idle, pcf(tid1) = W6 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W5 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W4 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;W4), pcf(tid1) = W2 → apcf(tid1) = W1, ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), pcf(tid1) = W2 ∨ pcf(tid1) = W6 ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq, gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t))) |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, l0, v), FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), pcf(tid1)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), pcf(tid1) = W2 → apcf(tid1) = W1, pcf(tid1) = W4 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;W4), pcf(tid1) = W5 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = idle → apcf(tid1) = idle, pcf(tid1) = ready → apcf(tid1) = ready, pcf(tid1) = crashed → apcf(tid1) = crashed, pcf(tid1) = R1 → apcf(tid1) = R1, pcf(tid1) = R2 → apcf(tid1) = R2, pcf(tid1) = R3 → apcf(tid1) = R3, pcf(tid1) = R4 → apcf(tid1) = R4, pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).loc = l0, pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).val = v, pcf(tid1) = W1 → apcf(tid1) = W1, pcf(tid1) = W3 → apcf(tid1) = W3, pcf(tid1) = W7 → apcf(tid1) = W7, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).loc = l0, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).val = v, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), pcf(tid1) = W2 ∨ pcf(tid1) = W6 ⊦ (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1)) = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf(tid1 := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1))) = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf(tid1 := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1))) = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1)).mem = gs.pmem ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1)).ctr = gs.fctr ∧ reorder(gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1)).p, gs.pq, gs.rfo) ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1)).writers = gs.fwriters ∧ (∀ t. labs (gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1)), alsf(tid1 := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1)))(t), apcf(tid1 := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1)))(t)))
Used terms: gstepf (mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1)), alsf (tid1 := lstepf (mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1)) ), apcf (tid1 := pcstepf (mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1)) )
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, l0, v), FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), pcf(tid1)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), pcf(tid1) = W2 → apcf(tid1) = W1, pcf(tid1) = W4 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;W4), pcf(tid1) = W5 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = idle → apcf(tid1) = idle, pcf(tid1) = ready → apcf(tid1) = ready, pcf(tid1) = crashed → apcf(tid1) = crashed, pcf(tid1) = R1 → apcf(tid1) = R1, pcf(tid1) = R2 → apcf(tid1) = R2, pcf(tid1) = R3 → apcf(tid1) = R3, pcf(tid1) = R4 → apcf(tid1) = R4, pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).loc = l0, pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).val = v, pcf(tid1) = W1 → apcf(tid1) = W1, pcf(tid1) = W3 → apcf(tid1) = W3, pcf(tid1) = W7 → apcf(tid1) = W7, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).loc = l0, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).val = v, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), pcf(tid1) = W2 ∨ pcf(tid1) = W6 ⊦ (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1)) = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf(tid1 := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1))) = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf(tid1 := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1))) = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1)).mem = gs.pmem ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1)).ctr = gs.fctr ∧ reorder(gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1)).p, gs.pq, gs.rfo) ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1)).writers = gs.fwriters ∧ (∀ t. labs (gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1)), alsf(tid1 := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1)))(t), apcf(tid1 := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1)))(t))) |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, l0, v), FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), pcf(tid1)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).val = v, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).loc = l0, pcf(tid1) = W7 → apcf(tid1) = W7, pcf(tid1) = W3 → apcf(tid1) = W3, pcf(tid1) = W1 → apcf(tid1) = W1, pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).val = v, pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).loc = l0, pcf(tid1) = R4 → apcf(tid1) = R4, pcf(tid1) = R3 → apcf(tid1) = R3, pcf(tid1) = R2 → apcf(tid1) = R2, pcf(tid1) = R1 → apcf(tid1) = R1, pcf(tid1) = crashed → apcf(tid1) = crashed, pcf(tid1) = ready → apcf(tid1) = ready, pcf(tid1) = idle → apcf(tid1) = idle, pcf(tid1) = W6 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W5 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W4 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;W4), pcf(tid1) = W2 → apcf(tid1) = W1, ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), pcf(tid1) = W2 ∨ pcf(tid1) = W6 ⊦ (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)) = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf(tid1 := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1))) = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf(tid1 := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1))) = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)).mem = gs.pmem ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)).ctr = gs.fctr ∧ reorder(gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)).p, gs.pq, gs.rfo) ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)).writers = gs.fwriters ∧ labs (gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)), (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)), (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)))
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, l0, v), FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), pcf(tid1)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).val = v, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).loc = l0, pcf(tid1) = W7 → apcf(tid1) = W7, pcf(tid1) = W3 → apcf(tid1) = W3, pcf(tid1) = W1 → apcf(tid1) = W1, pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).val = v, pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).loc = l0, pcf(tid1) = R4 → apcf(tid1) = R4, pcf(tid1) = R3 → apcf(tid1) = R3, pcf(tid1) = R2 → apcf(tid1) = R2, pcf(tid1) = R1 → apcf(tid1) = R1, pcf(tid1) = crashed → apcf(tid1) = crashed, pcf(tid1) = ready → apcf(tid1) = ready, pcf(tid1) = idle → apcf(tid1) = idle, pcf(tid1) = W6 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W5 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W4 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;W4), pcf(tid1) = W2 → apcf(tid1) = W1, ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), pcf(tid1) = W2 ∨ pcf(tid1) = W6 ⊦ (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)) = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf(tid1 := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1))) = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf(tid1 := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1))) = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)).mem = gs.pmem ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)).ctr = gs.fctr ∧ reorder(gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)).p, gs.pq, gs.rfo) ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)).writers = gs.fwriters ∧ labs (gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)), (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)), (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t))) |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, l0, v), pcf(tid1) = W2, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), pcf(tid1)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), pcf(tid1) = W2 → apcf(tid1) = W1, pcf(tid1) = W4 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;W4), pcf(tid1) = W5 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = idle → apcf(tid1) = idle, pcf(tid1) = ready → apcf(tid1) = ready, pcf(tid1) = crashed → apcf(tid1) = crashed, pcf(tid1) = R1 → apcf(tid1) = R1, pcf(tid1) = R2 → apcf(tid1) = R2, pcf(tid1) = R3 → apcf(tid1) = R3, pcf(tid1) = R4 → apcf(tid1) = R4, pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).loc = l0, pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).val = v, pcf(tid1) = W1 → apcf(tid1) = W1, pcf(tid1) = W3 → apcf(tid1) = W3, pcf(tid1) = W7 → apcf(tid1) = W7, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).loc = l0, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).val = v, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)) = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf(tid1 := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1))) = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf(tid1 := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1))) = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)).mem = gs.pmem ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)).ctr = gs.fctr ∧ reorder(gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)).p, gs.pq, gs.rfo) ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)).writers = gs.fwriters ∧ labs (gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)), (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)), (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)))
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, l0, v), pcf(tid1) = W6, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), pcf(tid1)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), pcf(tid1) = W2 → apcf(tid1) = W1, pcf(tid1) = W4 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;W4), pcf(tid1) = W5 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = idle → apcf(tid1) = idle, pcf(tid1) = ready → apcf(tid1) = ready, pcf(tid1) = crashed → apcf(tid1) = crashed, pcf(tid1) = R1 → apcf(tid1) = R1, pcf(tid1) = R2 → apcf(tid1) = R2, pcf(tid1) = R3 → apcf(tid1) = R3, pcf(tid1) = R4 → apcf(tid1) = R4, pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).loc = l0, pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).val = v, pcf(tid1) = W1 → apcf(tid1) = W1, pcf(tid1) = W3 → apcf(tid1) = W3, pcf(tid1) = W7 → apcf(tid1) = W7, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).loc = l0, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).val = v, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)) = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf(tid1 := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1))) = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf(tid1 := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1))) = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)).mem = gs.pmem ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)).ctr = gs.fctr ∧ reorder(gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)).p, gs.pq, gs.rfo) ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)).writers = gs.fwriters ∧ labs (gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)), (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)), (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)))
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, l0, v), pcf(tid1) = W2, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), pcf(tid1)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), pcf(tid1) = W2 → apcf(tid1) = W1, pcf(tid1) = W4 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;W4), pcf(tid1) = W5 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = idle → apcf(tid1) = idle, pcf(tid1) = ready → apcf(tid1) = ready, pcf(tid1) = crashed → apcf(tid1) = crashed, pcf(tid1) = R1 → apcf(tid1) = R1, pcf(tid1) = R2 → apcf(tid1) = R2, pcf(tid1) = R3 → apcf(tid1) = R3, pcf(tid1) = R4 → apcf(tid1) = R4, pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).loc = l0, pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).val = v, pcf(tid1) = W1 → apcf(tid1) = W1, pcf(tid1) = W3 → apcf(tid1) = W3, pcf(tid1) = W7 → apcf(tid1) = W7, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).loc = l0, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).val = v, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)) = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf(tid1 := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1))) = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf(tid1 := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1))) = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)).mem = gs.pmem ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)).ctr = gs.fctr ∧ reorder(gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)).p, gs.pq, gs.rfo) ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)).writers = gs.fwriters ∧ labs (gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)), (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)), (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t))) |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, l0, v), pcf(tid1) = W2, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), pcf(tid1)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).val = v, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).loc = l0, pcf(tid1) = W7 → apcf(tid1) = W7, pcf(tid1) = W3 → apcf(tid1) = W3, pcf(tid1) = W1 → apcf(tid1) = W1, pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).val = v, pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).loc = l0, pcf(tid1) = R4 → apcf(tid1) = R4, pcf(tid1) = R3 → apcf(tid1) = R3, pcf(tid1) = R2 → apcf(tid1) = R2, pcf(tid1) = R1 → apcf(tid1) = R1, pcf(tid1) = crashed → apcf(tid1) = crashed, pcf(tid1) = ready → apcf(tid1) = ready, pcf(tid1) = idle → apcf(tid1) = idle, pcf(tid1) = W6 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W5 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W4 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;W4), pcf(tid1) = W2 → apcf(tid1) = W1, ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ ∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)) = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf(tid1 := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1))) = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf(tid1 := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1))) = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, l0, v), pcf(tid1) = W2, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), pcf(tid1)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ¬ labs (gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)), (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)), (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t))), pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).val = v, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).loc = l0, pcf(tid1) = W7 → apcf(tid1) = W7, pcf(tid1) = W3 → apcf(tid1) = W3, pcf(tid1) = W1 → apcf(tid1) = W1, pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).val = v, pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).loc = l0, pcf(tid1) = R4 → apcf(tid1) = R4, pcf(tid1) = R3 → apcf(tid1) = R3, pcf(tid1) = R2 → apcf(tid1) = R2, pcf(tid1) = R1 → apcf(tid1) = R1, pcf(tid1) = crashed → apcf(tid1) = crashed, pcf(tid1) = ready → apcf(tid1) = ready, pcf(tid1) = idle → apcf(tid1) = idle, pcf(tid1) = W6 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W5 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W4 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;W4), pcf(tid1) = W2 → apcf(tid1) = W1, ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦
Used simplifier rules: ⊦ gstepf(gs, ls, W1, a) = gs; (s) ⊦ 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)
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, l0, v), pcf(tid1) = W2, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), pcf(tid1)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).val = v, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).loc = l0, pcf(tid1) = W7 → apcf(tid1) = W7, pcf(tid1) = W3 → apcf(tid1) = W3, pcf(tid1) = W1 → apcf(tid1) = W1, pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).val = v, pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).loc = l0, pcf(tid1) = R4 → apcf(tid1) = R4, pcf(tid1) = R3 → apcf(tid1) = R3, pcf(tid1) = R2 → apcf(tid1) = R2, pcf(tid1) = R1 → apcf(tid1) = R1, pcf(tid1) = crashed → apcf(tid1) = crashed, pcf(tid1) = ready → apcf(tid1) = ready, pcf(tid1) = idle → apcf(tid1) = idle, pcf(tid1) = W6 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W5 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W4 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;W4), pcf(tid1) = W2 → apcf(tid1) = W1, ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ ∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)) = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf(tid1 := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1))) = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf(tid1 := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1))) = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = W1, pcf(tid1) = W2, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W2), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ ∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0) = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf(tid1 := mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val)) = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf(tid1 := W2) = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))
Used simplifier rules: ⊦ pcstepf(gs, ls, W1, a) = W2; (s) ⊦ lstepf(gs, ls, W1, a) = ls; (s) ⊦ gstepf(gs, ls, W1, a) = gs; (s) ⊦ W2 ≠ W4; (s) ⊦ W2 ≠ W5; (s) ⊦ W2 ≠ W6; (s) ⊦ W2 ≠ idle; (s) ⊦ W2 ≠ ready; (s) ⊦ W2 ≠ crashed; (s) ⊦ R1 ≠ W2; (s) ⊦ R2 ≠ W2; (s) ⊦ R3 ≠ W2; (s) ⊦ R4 ≠ W2; (s) ⊦ W2 ≠ W3; (s) ⊦ W2 ≠ W7; (s)
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = W1, pcf(tid1) = W2, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W2), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ ∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0) = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf(tid1 := mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val)) = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf(tid1 := W2) = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = W1, pcf(tid1) = W2, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W2), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1)) ∧ mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0) = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1)) ∧ alsf(tid1 := mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val)) = alsf(tid1 := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1))) ∧ apcf(tid1 := W2) = apcf(tid1 := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1)))
Used terms: tid1
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = W1, pcf(tid1) = W2, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W2), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1)) ∧ mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0) = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1)) ∧ alsf(tid1 := mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val)) = alsf(tid1 := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1))) ∧ apcf(tid1 := W2) = apcf(tid1 := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1))) |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = W1, pcf(tid1) = W2, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W2), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ ¬ FO(tid1) ∈ gs.pq(l) ∧ ¬ FO(l) ∈ gs.rfo(tid1)
Used simplifier rules: ⊦ pcstepf(gs, ls, W1, a) = W2; (s) ⊦ lstepf(gs, ls, W1, a) = ls; (s) ⊦ mkFLITPSCgs(mem, p, ctr, writers, writers0) = mkFLITPSCgs(mem0, p0, ctr0, writers1, writers2) ↔ mem = mem0 ∧ p = p0 ∧ ctr = ctr0 ∧ writers = writers1 ∧ writers0 = writers2; (ws) ⊦ gstepf(gs, ls, W1, a) = gs; (s) ⊦ sfencePSC(t) = sfencePSC(t0) ↔ t = t0; (s) ⊦ mkFLITPSCls(t, l, v).t = t; (s) ⊦ reorder(p, pq, rfo) → (FO(t) ∈ p(l) ↔ FO(t) ∈ pq(l) ∨ FO(l) ∈ rfo(t)); (s) ⊦ mkFLITPSCgs(mem, p, ctr, writers, writers0).p = p; (s) ⊦ pre(gs, ls, W1, a) ↔ (∀ l. ¬ FO(ls.t) ∈ gs.p(l)) ∧ a = sfencePSC(ls.t); (s)
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = W1, pcf(tid1) = W2, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W2), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ ¬ FO(tid1) ∈ gs.pq(l) ∧ ¬ FO(l) ∈ gs.rfo(tid1) |
⊦ FLITGInv(gs) ↔ ctrok(gs.fctr, gs.fwriters) ∧ writersOk(gs.bq, gs.pq, gs.fwriters) ∧ pendingOk(gs.bq, gs.pq) ∧ SFTrailing(gs.bq) ∧ readFOsOk(gs.rfo, gs.fwriters)
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = W1, pcf(tid1) = W2, FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W2), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ ¬ FO(tid1) ∈ gs.pq(l) ∧ ¬ FO(l) ∈ gs.rfo(tid1)
Used terms: gs
| ⊦ FLITGInv(gs) ↔ ctrok(gs.fctr, gs.fwriters) ∧ writersOk(gs.bq, gs.pq, gs.fwriters) ∧ pendingOk(gs.bq, gs.pq) ∧ SFTrailing(gs.bq) ∧ readFOsOk(gs.rfo, gs.fwriters) |
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = W1, pcf(tid1) = W2, FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W2), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ ¬ FO(tid1) ∈ gs.pq(l) ∧ ¬ FO(l) ∈ gs.rfo(tid1) |
gs.bq(tid1) = SF ', lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = W1, pcf(tid1) = W2, FLITInv(gs.bq:= gs.bq(tid1 := []), lsf, pcf), FLITLInv(gs, lsf(tid1), W2), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ ¬ FO(tid1) ∈ gs.pq(l) ∧ ¬ FO(l) ∈ gs.rfo(tid1)
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x + [] = x; (s) SFTrailing-leading-SF: ⊦ SFTrailing(bq) ∧ bq(t) = SF ' + bel → bel = []; (forward) from specification FLIT-preds
| gs.bq(tid1) = SF ', lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = W1, pcf(tid1) = W2, FLITInv(gs.bq:= gs.bq(tid1 := []), lsf, pcf), FLITLInv(gs, lsf(tid1), W2), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ ¬ FO(tid1) ∈ gs.pq(l) ∧ ¬ FO(l) ∈ gs.rfo(tid1) |
⊦ FLITLInv(gs, ls, pc) ↔ (pc = W1 ∨ pc = W2 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → notMember(ls.t, gs.freaders)) ∧ (pc = W1 ∨ pc = W2 ∨ pc = W7 → notMember(ls.t, gs.fwriters)) ∧ (pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 → oneMember(ls.t, ls.loc, gs.fwriters)) ∧ (pc = W1 ∨ pc = W2 → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = W3 ∨ pc = W7 → noPending(ls.t, gs.bq, gs.pq)) ∧ (pc = W5 ∨ pc = W6 → FOFollowsW(ls.t, gs.bq(ls.t), gs.pq(ls.loc), ls.loc)) ∧ (pc = W1 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W7 → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → gs.rfo(ls.t) = []) ∧ (pc = W3 → gs.bq(ls.t) = []) ∧ (pc = W4 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ') ∧ (pc = W5 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = FO(ls.loc) ' ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' + FO(ls.loc) ') ∧ (pc = W6 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = SF ' ∨ gs.bq(ls.t) = FO(ls.loc) ' + SF ' ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' + FO(ls.loc) ' + SF ') ∧ (pc = W4 ∨ pc = W5 ∨ pc = W6 → gs.bq(ls.t) ≠ [] ∧ gs.bq(ls.t).head.W? → gs.bq(ls.t).head = W(ls.loc, ls.val)) ∧ (pc = W1 ∨ pc = W7 → gs.rfo(ls.t) = gs.bq(ls.t)) ∧ (pc = W2 → gs.rfo(ls.t) = gs.bq(ls.t) ∨ gs.rfo(ls.t) + SF ' = gs.bq(ls.t)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → notMember(ls.t, gs.fwriters)) ∧ (pc = R1 ∨ pc = R4 → notMember(ls.t, gs.freaders)) ∧ (pc = R2 ∨ pc = R3 → oneMember(ls.t, ls.loc, gs.freaders)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → gs.rfo(ls.t) = gs.bq(ls.t)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → notMember(ls.t, gs.fwriters)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → notMember(ls.t, gs.freaders)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = idle ∨ pc = crashed → noPending(ls.t, gs.bq, gs.pq)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → gs.rfo(ls.t) = gs.bq(ls.t))
gs.bq(tid1) = SF ', lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = W1, pcf(tid1) = W2, FLITInv(gs.bq:= gs.bq(tid1 := []), lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), W2 = W1 ∨ W2 = W2 ∨ W2 = W3 ∨ W2 = W4 ∨ W2 = W5 ∨ W2 = W6 ∨ W2 = W7 → notMember(lsf(tid1).t, gs.freaders), W2 = W1 ∨ W2 = W2 ∨ W2 = W7 → notMember(lsf(tid1).t, gs.fwriters), W2 = W3 ∨ W2 = W4 ∨ W2 = W5 ∨ W2 = W6 → oneMember(lsf(tid1).t, lsf(tid1).loc, gs.fwriters), W2 = W1 ∨ W2 = W2 → noPendingW(lsf(tid1).t, gs.bq, gs.pq), W2 = W3 ∨ W2 = W7 → noPending(lsf(tid1).t, gs.bq, gs.pq), W2 = W5 ∨ W2 = W6 → FOFollowsW(lsf(tid1).t, gs.bq(lsf(tid1).t), gs.pq(lsf(tid1).loc), lsf(tid1).loc), W2 = W1 ∨ W2 = W3 ∨ W2 = W4 ∨ W2 = W5 ∨ W2 = W7 → ¬ SF ∈ gs.bq(lsf(tid1).t), W2 = W3 ∨ W2 = W4 ∨ W2 = W5 ∨ W2 = W6 ∨ W2 = W7 → gs.rfo(lsf(tid1).t) = [], W2 = W3 → gs.bq(lsf(tid1).t) = [], W2 = W4 → gs.bq(lsf(tid1).t) = [] ∨ gs.bq(lsf(tid1).t) = W(lsf(tid1).loc, lsf(tid1).val) ', W2 = W5 → gs.bq(lsf(tid1).t) = [] ∨ gs.bq(lsf(tid1).t) = FO(lsf(tid1).loc) ' ∨ gs.bq(lsf(tid1).t) = W(lsf(tid1).loc, lsf(tid1).val) ' + FO(lsf(tid1).loc) ', W2 = W6 → gs.bq(lsf(tid1).t) = [] ∨ gs.bq(lsf(tid1).t) = SF ' ∨ gs.bq(lsf(tid1).t) = FO(lsf(tid1).loc) ' + SF ' ∨ gs.bq(lsf(tid1).t) = W(lsf(tid1).loc, lsf(tid1).val) ' + FO(lsf(tid1).loc) ' + SF ', W2 = W4 ∨ W2 = W5 ∨ W2 = W6 → gs.bq(lsf(tid1).t) ≠ [] ∧ gs.bq(lsf(tid1).t).head.W? → gs.bq(lsf(tid1).t).head = W(lsf(tid1).loc, lsf(tid1).val), W2 = W1 ∨ W2 = W7 → gs.rfo(lsf(tid1).t) = gs.bq(lsf(tid1).t), W2 = W2 → gs.rfo(lsf(tid1).t) = gs.bq(lsf(tid1).t) ∨ gs.rfo(lsf(tid1).t) + SF ' = gs.bq(lsf(tid1).t), W2 = R1 ∨ W2 = R2 ∨ W2 = R3 ∨ W2 = R4 → noPendingW(lsf(tid1).t, gs.bq, gs.pq), W2 = R1 ∨ W2 = R2 ∨ W2 = R3 ∨ W2 = R4 → notMember(lsf(tid1).t, gs.fwriters), W2 = R1 ∨ W2 = R4 → notMember(lsf(tid1).t, gs.freaders), W2 = R2 ∨ W2 = R3 → oneMember(lsf(tid1).t, lsf(tid1).loc, gs.freaders), W2 = R1 ∨ W2 = R2 ∨ W2 = R3 ∨ W2 = R4 → ¬ SF ∈ gs.bq(lsf(tid1).t), W2 = R1 ∨ W2 = R2 ∨ W2 = R3 ∨ W2 = R4 → gs.rfo(lsf(tid1).t) = gs.bq(lsf(tid1).t), W2 = idle ∨ W2 = ready ∨ W2 = crashed → notMember(lsf(tid1).t, gs.fwriters), W2 = idle ∨ W2 = ready ∨ W2 = crashed → notMember(lsf(tid1).t, gs.freaders), W2 = idle ∨ W2 = ready ∨ W2 = crashed → noPendingW(lsf(tid1).t, gs.bq, gs.pq), W2 = idle ∨ W2 = crashed → noPending(lsf(tid1).t, gs.bq, gs.pq), W2 = idle ∨ W2 = ready ∨ W2 = crashed → ¬ SF ∈ gs.bq(lsf(tid1).t), W2 = idle ∨ W2 = ready ∨ W2 = crashed → gs.rfo(lsf(tid1).t) = gs.bq(lsf(tid1).t), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ ¬ FO(tid1) ∈ gs.pq(l) ∧ ¬ FO(l) ∈ gs.rfo(tid1)
Used terms: gs, lsf(tid1), W2
| ⊦ FLITLInv(gs, ls, pc) ↔ (pc = W1 ∨ pc = W2 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → notMember(ls.t, gs.freaders)) ∧ (pc = W1 ∨ pc = W2 ∨ pc = W7 → notMember(ls.t, gs.fwriters)) ∧ (pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 → oneMember(ls.t, ls.loc, gs.fwriters)) ∧ (pc = W1 ∨ pc = W2 → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = W3 ∨ pc = W7 → noPending(ls.t, gs.bq, gs.pq)) ∧ (pc = W5 ∨ pc = W6 → FOFollowsW(ls.t, gs.bq(ls.t), gs.pq(ls.loc), ls.loc)) ∧ (pc = W1 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W7 → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → gs.rfo(ls.t) = []) ∧ (pc = W3 → gs.bq(ls.t) = []) ∧ (pc = W4 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ') ∧ (pc = W5 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = FO(ls.loc) ' ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' + FO(ls.loc) ') ∧ (pc = W6 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = SF ' ∨ gs.bq(ls.t) = FO(ls.loc) ' + SF ' ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' + FO(ls.loc) ' + SF ') ∧ (pc = W4 ∨ pc = W5 ∨ pc = W6 → gs.bq(ls.t) ≠ [] ∧ gs.bq(ls.t).head.W? → gs.bq(ls.t).head = W(ls.loc, ls.val)) ∧ (pc = W1 ∨ pc = W7 → gs.rfo(ls.t) = gs.bq(ls.t)) ∧ (pc = W2 → gs.rfo(ls.t) = gs.bq(ls.t) ∨ gs.rfo(ls.t) + SF ' = gs.bq(ls.t)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → notMember(ls.t, gs.fwriters)) ∧ (pc = R1 ∨ pc = R4 → notMember(ls.t, gs.freaders)) ∧ (pc = R2 ∨ pc = R3 → oneMember(ls.t, ls.loc, gs.freaders)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → gs.rfo(ls.t) = gs.bq(ls.t)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → notMember(ls.t, gs.fwriters)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → notMember(ls.t, gs.freaders)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = idle ∨ pc = crashed → noPending(ls.t, gs.bq, gs.pq)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → gs.rfo(ls.t) = gs.bq(ls.t)) |
| gs.bq(tid1) = SF ', lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = W1, pcf(tid1) = W2, FLITInv(gs.bq:= gs.bq(tid1 := []), lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), W2 = W1 ∨ W2 = W2 ∨ W2 = W3 ∨ W2 = W4 ∨ W2 = W5 ∨ W2 = W6 ∨ W2 = W7 → notMember(lsf(tid1).t, gs.freaders), W2 = W1 ∨ W2 = W2 ∨ W2 = W7 → notMember(lsf(tid1).t, gs.fwriters), W2 = W3 ∨ W2 = W4 ∨ W2 = W5 ∨ W2 = W6 → oneMember(lsf(tid1).t, lsf(tid1).loc, gs.fwriters), W2 = W1 ∨ W2 = W2 → noPendingW(lsf(tid1).t, gs.bq, gs.pq), W2 = W3 ∨ W2 = W7 → noPending(lsf(tid1).t, gs.bq, gs.pq), W2 = W5 ∨ W2 = W6 → FOFollowsW(lsf(tid1).t, gs.bq(lsf(tid1).t), gs.pq(lsf(tid1).loc), lsf(tid1).loc), W2 = W1 ∨ W2 = W3 ∨ W2 = W4 ∨ W2 = W5 ∨ W2 = W7 → ¬ SF ∈ gs.bq(lsf(tid1).t), W2 = W3 ∨ W2 = W4 ∨ W2 = W5 ∨ W2 = W6 ∨ W2 = W7 → gs.rfo(lsf(tid1).t) = [], W2 = W3 → gs.bq(lsf(tid1).t) = [], W2 = W4 → gs.bq(lsf(tid1).t) = [] ∨ gs.bq(lsf(tid1).t) = W(lsf(tid1).loc, lsf(tid1).val) ', W2 = W5 → gs.bq(lsf(tid1).t) = [] ∨ gs.bq(lsf(tid1).t) = FO(lsf(tid1).loc) ' ∨ gs.bq(lsf(tid1).t) = W(lsf(tid1).loc, lsf(tid1).val) ' + FO(lsf(tid1).loc) ', W2 = W6 → gs.bq(lsf(tid1).t) = [] ∨ gs.bq(lsf(tid1).t) = SF ' ∨ gs.bq(lsf(tid1).t) = FO(lsf(tid1).loc) ' + SF ' ∨ gs.bq(lsf(tid1).t) = W(lsf(tid1).loc, lsf(tid1).val) ' + FO(lsf(tid1).loc) ' + SF ', W2 = W4 ∨ W2 = W5 ∨ W2 = W6 → gs.bq(lsf(tid1).t) ≠ [] ∧ gs.bq(lsf(tid1).t).head.W? → gs.bq(lsf(tid1).t).head = W(lsf(tid1).loc, lsf(tid1).val), W2 = W1 ∨ W2 = W7 → gs.rfo(lsf(tid1).t) = gs.bq(lsf(tid1).t), W2 = W2 → gs.rfo(lsf(tid1).t) = gs.bq(lsf(tid1).t) ∨ gs.rfo(lsf(tid1).t) + SF ' = gs.bq(lsf(tid1).t), W2 = R1 ∨ W2 = R2 ∨ W2 = R3 ∨ W2 = R4 → noPendingW(lsf(tid1).t, gs.bq, gs.pq), W2 = R1 ∨ W2 = R2 ∨ W2 = R3 ∨ W2 = R4 → notMember(lsf(tid1).t, gs.fwriters), W2 = R1 ∨ W2 = R4 → notMember(lsf(tid1).t, gs.freaders), W2 = R2 ∨ W2 = R3 → oneMember(lsf(tid1).t, lsf(tid1).loc, gs.freaders), W2 = R1 ∨ W2 = R2 ∨ W2 = R3 ∨ W2 = R4 → ¬ SF ∈ gs.bq(lsf(tid1).t), W2 = R1 ∨ W2 = R2 ∨ W2 = R3 ∨ W2 = R4 → gs.rfo(lsf(tid1).t) = gs.bq(lsf(tid1).t), W2 = idle ∨ W2 = ready ∨ W2 = crashed → notMember(lsf(tid1).t, gs.fwriters), W2 = idle ∨ W2 = ready ∨ W2 = crashed → notMember(lsf(tid1).t, gs.freaders), W2 = idle ∨ W2 = ready ∨ W2 = crashed → noPendingW(lsf(tid1).t, gs.bq, gs.pq), W2 = idle ∨ W2 = crashed → noPending(lsf(tid1).t, gs.bq, gs.pq), W2 = idle ∨ W2 = ready ∨ W2 = crashed → ¬ SF ∈ gs.bq(lsf(tid1).t), W2 = idle ∨ W2 = ready ∨ W2 = crashed → gs.rfo(lsf(tid1).t) = gs.bq(lsf(tid1).t), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ ¬ FO(tid1) ∈ gs.pq(l) ∧ ¬ FO(l) ∈ gs.rfo(tid1) |
gs.bq(tid1) = SF ', gs.rfo(tid1) = [], lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = W1, pcf(tid1) = W2, FLITInv(gs.bq:= gs.bq(tid1 := []), lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), noPendingW(tid1, gs.bq, gs.pq), notMember(tid1, gs.freaders), notMember(tid1, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), FO(tid1) ∈ gs.pq(l), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦
Used simplifier rules: ⊦ ¬ a ∈ []; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x = y + x ↔ y = []; (s) ⊦ readFOsOk(rfo, writers) → rfo(t) ≠ SF '; (as) ⊦ W1 ≠ W2; (s) ⊦ W2 ≠ W6; (s) ⊦ W2 ≠ W5; (s) ⊦ W2 ≠ W4; (s) ⊦ W2 ≠ W3; (s) ⊦ W2 ≠ W7; (s) ⊦ R4 ≠ W2; (s) ⊦ R3 ≠ W2; (s) ⊦ R2 ≠ W2; (s) ⊦ R1 ≠ W2; (s) ⊦ W2 ≠ crashed; (s) ⊦ W2 ≠ ready; (s) ⊦ W2 ≠ idle; (s)
| gs.bq(tid1) = SF ', gs.rfo(tid1) = [], lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = W1, pcf(tid1) = W2, FLITInv(gs.bq:= gs.bq(tid1 := []), lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), noPendingW(tid1, gs.bq, gs.pq), notMember(tid1, gs.freaders), notMember(tid1, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), FO(tid1) ∈ gs.pq(l), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ |
Used terms: l
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, l0, v), pcf(tid1) = W2, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), pcf(tid1)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ¬ labs (gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)), (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)), (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t))), pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).val = v, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).loc = l0, pcf(tid1) = W7 → apcf(tid1) = W7, pcf(tid1) = W3 → apcf(tid1) = W3, pcf(tid1) = W1 → apcf(tid1) = W1, pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).val = v, pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).loc = l0, pcf(tid1) = R4 → apcf(tid1) = R4, pcf(tid1) = R3 → apcf(tid1) = R3, pcf(tid1) = R2 → apcf(tid1) = R2, pcf(tid1) = R1 → apcf(tid1) = R1, pcf(tid1) = crashed → apcf(tid1) = crashed, pcf(tid1) = ready → apcf(tid1) = ready, pcf(tid1) = idle → apcf(tid1) = idle, pcf(tid1) = W6 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W5 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W4 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;W4), pcf(tid1) = W2 → apcf(tid1) = W1, ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = W1, pcf(tid1) = W2, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W2), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ lsf(t).t = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).t ∧ (pcf(t) = idle → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = idle) ∧ (pcf(t) = ready → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = ready) ∧ ( pcf(t) = crashed → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R1) ∧ (pcf(t) = R2 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R2) ∧ (pcf(t) = R3 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R3) ∧ (pcf(t) = R4 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).v) ∧ (pcf(t) = W1 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = W1) ∧ ( pcf(t) = W2 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W1;W2)) ∧ (pcf(t) = W3 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = W3) ∧ ( pcf(t) = W4 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;W4)) ∧ ( pcf(t) = W5 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;(SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W5;W6)) )) ∧ (pcf(t) = W7 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = W7) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).l) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));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); ⊦ W2 ≠ W4; (s) ⊦ W2 ≠ W5; (s) ⊦ W2 ≠ W6; (s) ⊦ W2 ≠ idle; (s) ⊦ W2 ≠ ready; (s) ⊦ W2 ≠ crashed; (s) ⊦ R1 ≠ W2; (s) ⊦ R2 ≠ W2; (s) ⊦ R3 ≠ W2; (s) ⊦ R4 ≠ W2; (s) ⊦ W2 ≠ W3; (s) ⊦ W2 ≠ W7; (s) ⊦ (gs.bq:= bq).bq = bq; (s)
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = W1, pcf(tid1) = W2, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W2), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ lsf(t).t = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).t ∧ (pcf(t) = idle → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = idle) ∧ (pcf(t) = ready → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = ready) ∧ ( pcf(t) = crashed → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R1) ∧ (pcf(t) = R2 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R2) ∧ (pcf(t) = R3 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R3) ∧ (pcf(t) = R4 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).v) ∧ (pcf(t) = W1 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = W1) ∧ ( pcf(t) = W2 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W1;W2)) ∧ (pcf(t) = W3 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = W3) ∧ ( pcf(t) = W4 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;W4)) ∧ ( pcf(t) = W5 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;(SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W5;W6)) )) ∧ (pcf(t) = W7 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = W7) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).l) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).v) |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = W1, pcf(tid1) = W2, tid1 = t, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W2), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ lsf(t).t = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).t ∧ (pcf(t) = idle → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = idle) ∧ (pcf(t) = ready → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = ready) ∧ ( pcf(t) = crashed → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R1) ∧ (pcf(t) = R2 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R2) ∧ (pcf(t) = R3 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R3) ∧ (pcf(t) = R4 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).v) ∧ (pcf(t) = W1 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = W1) ∧ ( pcf(t) = W2 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W1;W2)) ∧ (pcf(t) = W3 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = W3) ∧ ( pcf(t) = W4 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;W4)) ∧ ( pcf(t) = W5 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;(SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W5;W6)) )) ∧ (pcf(t) = W7 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = W7) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).l) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).v)
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = W1, pcf(tid1) = W2, tid1 ≠ t, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W2), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ lsf(t).t = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).t ∧ (pcf(t) = idle → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = idle) ∧ (pcf(t) = ready → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = ready) ∧ ( pcf(t) = crashed → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R1) ∧ (pcf(t) = R2 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R2) ∧ (pcf(t) = R3 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R3) ∧ (pcf(t) = R4 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).v) ∧ (pcf(t) = W1 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = W1) ∧ ( pcf(t) = W2 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W1;W2)) ∧ (pcf(t) = W3 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = W3) ∧ ( pcf(t) = W4 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;W4)) ∧ ( pcf(t) = W5 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;(SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W5;W6)) )) ∧ (pcf(t) = W7 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = W7) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).l) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).v)
Used formulas: tid1 = t
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = W1, pcf(tid1) = W2, tid1 = t, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W2), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ lsf(t).t = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).t ∧ (pcf(t) = idle → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = idle) ∧ (pcf(t) = ready → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = ready) ∧ ( pcf(t) = crashed → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R1) ∧ (pcf(t) = R2 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R2) ∧ (pcf(t) = R3 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R3) ∧ (pcf(t) = R4 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).v) ∧ (pcf(t) = W1 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = W1) ∧ ( pcf(t) = W2 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W1;W2)) ∧ (pcf(t) = W3 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = W3) ∧ ( pcf(t) = W4 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;W4)) ∧ ( pcf(t) = W5 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;(SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W5;W6)) )) ∧ (pcf(t) = W7 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = W7) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).l) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).v) |
gs.bq(t) = SF ' + bel, lsf(t).t = t, alsf(t) = mkFLITPSCls(t, lsf(t).loc, lsf(t).val), apcf(t) = W1, pcf(t) = W2, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(t := bel), lsf, pcf), FLITLInv(gs, lsf(t), W2), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), SF ∈ bel, ∀ l. ¬ FO(t) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a ∈ y → a ∈ x + y; (s) ⊦ mkFLITPSCls(t, l, v).v = v; (s) ⊦ lstepf(gs, ls, W1, a) = ls; (s) ⊦ mkFLITPSCls(t, l, v).l = l; (s) ⊦ W2 ≠ W7; (s) ⊦ W2 ≠ W6; (s) ⊦ W2 ≠ W5; (s) ⊦ W2 ≠ W4; (s) ⊦ W2 ≠ W3; (s) ⊦ W1 ≠ W2; (s) ⊦ pcstepf(gs, ls, W1, a) = W2; (s) ⊦ W1 ≠ W2; (s) ⊦ R4 ≠ W2; (s) ⊦ R3 ≠ W2; (s) ⊦ R2 ≠ W2; (s) ⊦ R1 ≠ W2; (s) ⊦ W2 ≠ crashed; (s) ⊦ W2 ≠ ready; (s) ⊦ W2 ≠ idle; (s) ⊦ mkFLITPSCls(t, l, v).t = t; (s) in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list
| gs.bq(t) = SF ' + bel, lsf(t).t = t, alsf(t) = mkFLITPSCls(t, lsf(t).loc, lsf(t).val), apcf(t) = W1, pcf(t) = W2, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(t := bel), lsf, pcf), FLITLInv(gs, lsf(t), W2), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), SF ∈ bel, ∀ l. ¬ FO(t) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ |
⊦ FLITGInv(gs) ↔ ctrok(gs.fctr, gs.fwriters) ∧ writersOk(gs.bq, gs.pq, gs.fwriters) ∧ pendingOk(gs.bq, gs.pq) ∧ SFTrailing(gs.bq) ∧ readFOsOk(gs.rfo, gs.fwriters)
Used simplifier rules: SFTrailing-leading-SF: ⊦ SFTrailing(bq) ∧ bq(t) = SF ' + bel → bel = []; (forward) from specification FLIT-preds ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ¬ a ∈ []; (s) Used terms: gs
| ⊦ FLITGInv(gs) ↔ ctrok(gs.fctr, gs.fwriters) ∧ writersOk(gs.bq, gs.pq, gs.fwriters) ∧ pendingOk(gs.bq, gs.pq) ∧ SFTrailing(gs.bq) ∧ readFOsOk(gs.rfo, gs.fwriters) |
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = W1, pcf(tid1) = W2, tid1 ≠ t, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W2), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ lsf(t).t = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).t ∧ (pcf(t) = idle → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = idle) ∧ (pcf(t) = ready → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = ready) ∧ ( pcf(t) = crashed → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R1) ∧ (pcf(t) = R2 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R2) ∧ (pcf(t) = R3 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R3) ∧ (pcf(t) = R4 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).v) ∧ (pcf(t) = W1 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = W1) ∧ ( pcf(t) = W2 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W1;W2)) ∧ (pcf(t) = W3 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = W3) ∧ ( pcf(t) = W4 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;W4)) ∧ ( pcf(t) = W5 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;(SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W5;W6)) )) ∧ (pcf(t) = W7 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = W7) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).l) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).v) |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = W1, pcf(tid1) = W2, tid1 ≠ t, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W2), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ lsf(t).t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = R1) ∧ (pcf(t) = R2 → apcf(t) = R2) ∧ (pcf(t) = R3 → apcf(t) = R3) ∧ (pcf(t) = R4 → apcf(t) = R4) ∧ (pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v) ∧ (pcf(t) = W1 → apcf(t) = W1) ∧ (pcf(t) = W2 → apcf(t) = (SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W1;W2)) ∧ (pcf(t) = W3 → apcf(t) = W3) ∧ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;W4)) ∧ ( pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;W5))) ∧ ( pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;(SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W5;W6)) )) ∧ (pcf(t) = W7 → apcf(t) = W7) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v)
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = W1, pcf(tid1) = W2, tid1 ≠ t, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W2), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ lsf(t).t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = R1) ∧ (pcf(t) = R2 → apcf(t) = R2) ∧ (pcf(t) = R3 → apcf(t) = R3) ∧ (pcf(t) = R4 → apcf(t) = R4) ∧ (pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v) ∧ (pcf(t) = W1 → apcf(t) = W1) ∧ (pcf(t) = W2 → apcf(t) = (SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W1;W2)) ∧ (pcf(t) = W3 → apcf(t) = W3) ∧ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;W4)) ∧ ( pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;W5))) ∧ ( pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;(SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W5;W6)) )) ∧ (pcf(t) = W7 → apcf(t) = W7) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v) |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, lsf(t).t = t, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = W1, pcf(tid1) = W2, tid1 ≠ t, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W2), FLITLInv(gs, lsf(t), pcf(t)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ lsf(t).t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = R1) ∧ (pcf(t) = R2 → apcf(t) = R2) ∧ (pcf(t) = R3 → apcf(t) = R3) ∧ (pcf(t) = R4 → apcf(t) = R4) ∧ (pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v) ∧ (pcf(t) = W1 → apcf(t) = W1) ∧ (pcf(t) = W2 → apcf(t) = (SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W1;W2)) ∧ (pcf(t) = W3 → apcf(t) = W3) ∧ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;W4)) ∧ ( pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;W5))) ∧ ( pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;(SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W5;W6)) )) ∧ (pcf(t) = W7 → apcf(t) = W7) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v)
Used terms: t
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, lsf(t).t = t, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = W1, pcf(tid1) = W2, tid1 ≠ t, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W2), FLITLInv(gs, lsf(t), pcf(t)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ lsf(t).t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = R1) ∧ (pcf(t) = R2 → apcf(t) = R2) ∧ (pcf(t) = R3 → apcf(t) = R3) ∧ (pcf(t) = R4 → apcf(t) = R4) ∧ (pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v) ∧ (pcf(t) = W1 → apcf(t) = W1) ∧ (pcf(t) = W2 → apcf(t) = (SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W1;W2)) ∧ (pcf(t) = W3 → apcf(t) = W3) ∧ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;W4)) ∧ ( pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;W5))) ∧ ( pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;(SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W5;W6)) )) ∧ (pcf(t) = W7 → apcf(t) = W7) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v) |
gs.bq(tid1) = SF ' + bel, lsf(t).t = t, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = W1, pcf(tid1) = W2, tid1 ≠ t, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(t), pcf(t)), FLITLInv(gs, lsf(tid1), W2), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = R1) ∧ (pcf(t) = R2 → apcf(t) = R2) ∧ (pcf(t) = R3 → apcf(t) = R3) ∧ (pcf(t) = R4 → apcf(t) = R4) ∧ (pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v) ∧ (pcf(t) = W1 → apcf(t) = W1) ∧ (pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(t) ⊃ W1;W2)) ∧ (pcf(t) = W3 → apcf(t) = W3) ∧ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;W4)) ∧ (pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;W5))) ∧ (pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;(SF ∈ gs.bq(t) ⊃ W5;W6)))) ∧ (pcf(t) = W7 → apcf(t) = W7) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v)
| gs.bq(tid1) = SF ' + bel, lsf(t).t = t, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = W1, pcf(tid1) = W2, tid1 ≠ t, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(t), pcf(t)), FLITLInv(gs, lsf(tid1), W2), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = R1) ∧ (pcf(t) = R2 → apcf(t) = R2) ∧ (pcf(t) = R3 → apcf(t) = R3) ∧ (pcf(t) = R4 → apcf(t) = R4) ∧ (pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v) ∧ (pcf(t) = W1 → apcf(t) = W1) ∧ (pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(t) ⊃ W1;W2)) ∧ (pcf(t) = W3 → apcf(t) = W3) ∧ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;W4)) ∧ (pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;W5))) ∧ (pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;(SF ∈ gs.bq(t) ⊃ W5;W6)))) ∧ (pcf(t) = W7 → apcf(t) = W7) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v) |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, lsf(t).t = t, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = W1, pcf(tid1) = W2, tid1 ≠ lsf(t).t, tid1 ≠ t, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W2), FLITLInv(gs, lsf(t), pcf(t)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = R1) ∧ (pcf(t) = R2 → apcf(t) = R2) ∧ (pcf(t) = R3 → apcf(t) = R3) ∧ (pcf(t) = R4 → apcf(t) = R4) ∧ (pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v) ∧ (pcf(t) = W1 → apcf(t) = W1) ∧ (pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(t) ⊃ W1;W2)) ∧ (pcf(t) = W3 → apcf(t) = W3) ∧ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;W4)) ∧ (pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;W5))) ∧ (pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;(SF ∈ gs.bq(t) ⊃ W5;W6)))) ∧ (pcf(t) = W7 → apcf(t) = W7) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v)
Used formulas: tid1 = lsf(t).t
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, lsf(t).t = t, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = W1, pcf(tid1) = W2, tid1 ≠ lsf(t).t, tid1 ≠ t, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W2), FLITLInv(gs, lsf(t), pcf(t)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = R1) ∧ (pcf(t) = R2 → apcf(t) = R2) ∧ (pcf(t) = R3 → apcf(t) = R3) ∧ (pcf(t) = R4 → apcf(t) = R4) ∧ (pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v) ∧ (pcf(t) = W1 → apcf(t) = W1) ∧ (pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(t) ⊃ W1;W2)) ∧ (pcf(t) = W3 → apcf(t) = W3) ∧ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;W4)) ∧ (pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;W5))) ∧ (pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;(SF ∈ gs.bq(t) ⊃ W5;W6)))) ∧ (pcf(t) = W7 → apcf(t) = W7) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v) |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, lsf(t).t = t, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = W1, pcf(tid1) = W2, tid1 ≠ t, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W2), FLITLInv(gs, lsf(t), pcf(t)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = R1) ∧ (pcf(t) = R2 → apcf(t) = R2) ∧ (pcf(t) = R3 → apcf(t) = R3) ∧ (pcf(t) = R4 → apcf(t) = R4) ∧ (pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v) ∧ (pcf(t) = W1 → apcf(t) = W1) ∧ (pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(t) ⊃ W1;W2)) ∧ (pcf(t) = W3 → apcf(t) = W3) ∧ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;W4)) ∧ (pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;W5))) ∧ (pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;(SF ∈ gs.bq(t) ⊃ W5;W6)))) ∧ (pcf(t) = W7 → apcf(t) = W7) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v)
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, lsf(t).t = t, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = W1, pcf(tid1) = W2, tid1 ≠ t, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W2), FLITLInv(gs, lsf(t), pcf(t)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = R1) ∧ (pcf(t) = R2 → apcf(t) = R2) ∧ (pcf(t) = R3 → apcf(t) = R3) ∧ (pcf(t) = R4 → apcf(t) = R4) ∧ (pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v) ∧ (pcf(t) = W1 → apcf(t) = W1) ∧ (pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(t) ⊃ W1;W2)) ∧ (pcf(t) = W3 → apcf(t) = W3) ∧ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;W4)) ∧ (pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;W5))) ∧ (pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;(SF ∈ gs.bq(t) ⊃ W5;W6)))) ∧ (pcf(t) = W7 → apcf(t) = W7) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v) |
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); Used terms: t
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, l0, v), pcf(tid1) = W6, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), pcf(tid1)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), pcf(tid1) = W2 → apcf(tid1) = W1, pcf(tid1) = W4 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;W4), pcf(tid1) = W5 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = idle → apcf(tid1) = idle, pcf(tid1) = ready → apcf(tid1) = ready, pcf(tid1) = crashed → apcf(tid1) = crashed, pcf(tid1) = R1 → apcf(tid1) = R1, pcf(tid1) = R2 → apcf(tid1) = R2, pcf(tid1) = R3 → apcf(tid1) = R3, pcf(tid1) = R4 → apcf(tid1) = R4, pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).loc = l0, pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).val = v, pcf(tid1) = W1 → apcf(tid1) = W1, pcf(tid1) = W3 → apcf(tid1) = W3, pcf(tid1) = W7 → apcf(tid1) = W7, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).loc = l0, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).val = v, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)) = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf(tid1 := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1))) = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf(tid1 := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1))) = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)).mem = gs.pmem ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)).ctr = gs.fctr ∧ reorder(gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)).p, gs.pq, gs.rfo) ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)).writers = gs.fwriters ∧ labs (gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)), (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)), (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t))) |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, l0, v), pcf(tid1) = W6, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), pcf(tid1)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).val = v, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).loc = l0, pcf(tid1) = W7 → apcf(tid1) = W7, pcf(tid1) = W3 → apcf(tid1) = W3, pcf(tid1) = W1 → apcf(tid1) = W1, pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).val = v, pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).loc = l0, pcf(tid1) = R4 → apcf(tid1) = R4, pcf(tid1) = R3 → apcf(tid1) = R3, pcf(tid1) = R2 → apcf(tid1) = R2, pcf(tid1) = R1 → apcf(tid1) = R1, pcf(tid1) = crashed → apcf(tid1) = crashed, pcf(tid1) = ready → apcf(tid1) = ready, pcf(tid1) = idle → apcf(tid1) = idle, pcf(tid1) = W6 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W5 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W4 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;W4), pcf(tid1) = W2 → apcf(tid1) = W1, ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ ∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)) = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf(tid1 := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1))) = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf(tid1 := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1))) = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, l0, v), pcf(tid1) = W6, gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)).mem ≠ gs.pmem, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), pcf(tid1)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).val = v, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).loc = l0, pcf(tid1) = W7 → apcf(tid1) = W7, pcf(tid1) = W3 → apcf(tid1) = W3, pcf(tid1) = W1 → apcf(tid1) = W1, pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).val = v, pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).loc = l0, pcf(tid1) = R4 → apcf(tid1) = R4, pcf(tid1) = R3 → apcf(tid1) = R3, pcf(tid1) = R2 → apcf(tid1) = R2, pcf(tid1) = R1 → apcf(tid1) = R1, pcf(tid1) = crashed → apcf(tid1) = crashed, pcf(tid1) = ready → apcf(tid1) = ready, pcf(tid1) = idle → apcf(tid1) = idle, pcf(tid1) = W6 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W5 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W4 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;W4), pcf(tid1) = W2 → apcf(tid1) = W1, ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, l0, v), pcf(tid1) = W6, gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)).ctr ≠ gs.fctr, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), pcf(tid1)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).val = v, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).loc = l0, pcf(tid1) = W7 → apcf(tid1) = W7, pcf(tid1) = W3 → apcf(tid1) = W3, pcf(tid1) = W1 → apcf(tid1) = W1, pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).val = v, pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).loc = l0, pcf(tid1) = R4 → apcf(tid1) = R4, pcf(tid1) = R3 → apcf(tid1) = R3, pcf(tid1) = R2 → apcf(tid1) = R2, pcf(tid1) = R1 → apcf(tid1) = R1, pcf(tid1) = crashed → apcf(tid1) = crashed, pcf(tid1) = ready → apcf(tid1) = ready, pcf(tid1) = idle → apcf(tid1) = idle, pcf(tid1) = W6 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W5 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W4 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;W4), pcf(tid1) = W2 → apcf(tid1) = W1, ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, l0, v), pcf(tid1) = W6, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), pcf(tid1)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ¬ reorder(gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)).p, gs.pq, gs.rfo), pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).val = v, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).loc = l0, pcf(tid1) = W7 → apcf(tid1) = W7, pcf(tid1) = W3 → apcf(tid1) = W3, pcf(tid1) = W1 → apcf(tid1) = W1, pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).val = v, pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).loc = l0, pcf(tid1) = R4 → apcf(tid1) = R4, pcf(tid1) = R3 → apcf(tid1) = R3, pcf(tid1) = R2 → apcf(tid1) = R2, pcf(tid1) = R1 → apcf(tid1) = R1, pcf(tid1) = crashed → apcf(tid1) = crashed, pcf(tid1) = ready → apcf(tid1) = ready, pcf(tid1) = idle → apcf(tid1) = idle, pcf(tid1) = W6 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W5 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W4 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;W4), pcf(tid1) = W2 → apcf(tid1) = W1, ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, l0, v), pcf(tid1) = W6, gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)).writers ≠ gs.fwriters, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), pcf(tid1)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).val = v, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).loc = l0, pcf(tid1) = W7 → apcf(tid1) = W7, pcf(tid1) = W3 → apcf(tid1) = W3, pcf(tid1) = W1 → apcf(tid1) = W1, pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).val = v, pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).loc = l0, pcf(tid1) = R4 → apcf(tid1) = R4, pcf(tid1) = R3 → apcf(tid1) = R3, pcf(tid1) = R2 → apcf(tid1) = R2, pcf(tid1) = R1 → apcf(tid1) = R1, pcf(tid1) = crashed → apcf(tid1) = crashed, pcf(tid1) = ready → apcf(tid1) = ready, pcf(tid1) = idle → apcf(tid1) = idle, pcf(tid1) = W6 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W5 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W4 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;W4), pcf(tid1) = W2 → apcf(tid1) = W1, ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, l0, v), pcf(tid1) = W6, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), pcf(tid1)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ¬ labs (gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)), (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)), (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t))), pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).val = v, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).loc = l0, pcf(tid1) = W7 → apcf(tid1) = W7, pcf(tid1) = W3 → apcf(tid1) = W3, pcf(tid1) = W1 → apcf(tid1) = W1, pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).val = v, pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).loc = l0, pcf(tid1) = R4 → apcf(tid1) = R4, pcf(tid1) = R3 → apcf(tid1) = R3, pcf(tid1) = R2 → apcf(tid1) = R2, pcf(tid1) = R1 → apcf(tid1) = R1, pcf(tid1) = crashed → apcf(tid1) = crashed, pcf(tid1) = ready → apcf(tid1) = ready, pcf(tid1) = idle → apcf(tid1) = idle, pcf(tid1) = W6 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W5 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W4 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;W4), pcf(tid1) = W2 → apcf(tid1) = W1, ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, l0, v), pcf(tid1) = W6, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), pcf(tid1)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).val = v, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).loc = l0, pcf(tid1) = W7 → apcf(tid1) = W7, pcf(tid1) = W3 → apcf(tid1) = W3, pcf(tid1) = W1 → apcf(tid1) = W1, pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).val = v, pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).loc = l0, pcf(tid1) = R4 → apcf(tid1) = R4, pcf(tid1) = R3 → apcf(tid1) = R3, pcf(tid1) = R2 → apcf(tid1) = R2, pcf(tid1) = R1 → apcf(tid1) = R1, pcf(tid1) = crashed → apcf(tid1) = crashed, pcf(tid1) = ready → apcf(tid1) = ready, pcf(tid1) = idle → apcf(tid1) = idle, pcf(tid1) = W6 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W5 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W4 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;W4), pcf(tid1) = W2 → apcf(tid1) = W1, ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ ∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)) = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf(tid1 := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1))) = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf(tid1 := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1))) = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ ∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1), sfencePSC(tid1)) = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf (tid1 := lstepf (mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1), sfencePSC(tid1)) ) = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf (tid1 := pcstepf (mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1), sfencePSC(tid1)) ) = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))
Used simplifier rules: ⊦ W2 ≠ W6; (s) ⊦ W4 ≠ W6; (s) ⊦ W6 ≠ idle; (s) ⊦ W6 ≠ ready; (s) ⊦ W6 ≠ crashed; (s) ⊦ R1 ≠ W6; (s) ⊦ R2 ≠ W6; (s) ⊦ R3 ≠ W6; (s) ⊦ R4 ≠ W6; (s) ⊦ W1 ≠ W6; (s) ⊦ W3 ≠ W6; (s) ⊦ W6 ≠ W7; (s)
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ ∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1), sfencePSC(tid1)) = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf (tid1 := lstepf (mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1), sfencePSC(tid1)) ) = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf (tid1 := pcstepf (mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1), sfencePSC(tid1)) ) = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1)) ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1), sfencePSC(tid1)) = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1)) ∧ alsf (tid1 := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1), sfencePSC(tid1)) ) = alsf(tid1 := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1))) ∧ apcf (tid1 := pcstepf (mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1), sfencePSC(tid1)) ) = apcf(tid1 := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1)))
Used terms: tid1
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1)) ∧ gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1), sfencePSC(tid1)) = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1)) ∧ alsf (tid1 := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1), sfencePSC(tid1)) ) = alsf(tid1 := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1))) ∧ apcf (tid1 := pcstepf (mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1), sfencePSC(tid1)) ) = apcf(tid1 := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(tid1), apcf(tid1), sfencePSC(tid1))) |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ¬ pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1), sfencePSC(tid1)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ¬ pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1), sfencePSC(tid1)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ |
⊦ FLITGInv(gs) ↔ ctrok(gs.fctr, gs.fwriters) ∧ writersOk(gs.bq, gs.pq, gs.fwriters) ∧ pendingOk(gs.bq, gs.pq) ∧ SFTrailing(gs.bq) ∧ readFOsOk(gs.rfo, gs.fwriters)
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1), sfencePSC(tid1)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦
Used terms: gs
| ⊦ FLITGInv(gs) ↔ ctrok(gs.fctr, gs.fwriters) ∧ writersOk(gs.bq, gs.pq, gs.fwriters) ∧ pendingOk(gs.bq, gs.pq) ∧ SFTrailing(gs.bq) ∧ readFOsOk(gs.rfo, gs.fwriters) |
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1), sfencePSC(tid1)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ |
gs.bq(tid1) = SF ', lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = W5, pcf(tid1) = W6, FLITInv(gs.bq:= gs.bq(tid1 := []), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ ¬ FO(tid1) ∈ gs.pq(l) ∧ ¬ FO(l) ∈ gs.rfo(tid1)
Used simplifier rules: ⊦ sfencePSC(t) = sfencePSC(t0) ↔ t = t0; (s) ⊦ mkFLITPSCls(t, l, v).t = t; (s) ⊦ reorder(p, pq, rfo) → (FO(t) ∈ p(l) ↔ FO(t) ∈ pq(l) ∨ FO(l) ∈ rfo(t)); (s) ⊦ mkFLITPSCgs(mem, p, ctr, writers, writers0).p = p; (s) ⊦ pre(gs, ls, W5, a) ↔ (∀ l. ¬ FO(ls.t) ∈ gs.p(l)) ∧ a = sfencePSC(ls.t); (s) ⊦ ¬ a ∈ []; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x + [] = x; (s) SFTrailing-leading-SF: ⊦ SFTrailing(bq) ∧ bq(t) = SF ' + bel → bel = []; (forward) from specification FLIT-preds
| gs.bq(tid1) = SF ', lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = W5, pcf(tid1) = W6, FLITInv(gs.bq:= gs.bq(tid1 := []), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ ¬ FO(tid1) ∈ gs.pq(l) ∧ ¬ FO(l) ∈ gs.rfo(tid1) |
⊦ FLITLInv(gs, ls, pc) ↔ (pc = W1 ∨ pc = W2 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → notMember(ls.t, gs.freaders)) ∧ (pc = W1 ∨ pc = W2 ∨ pc = W7 → notMember(ls.t, gs.fwriters)) ∧ (pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 → oneMember(ls.t, ls.loc, gs.fwriters)) ∧ (pc = W1 ∨ pc = W2 → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = W3 ∨ pc = W7 → noPending(ls.t, gs.bq, gs.pq)) ∧ (pc = W5 ∨ pc = W6 → FOFollowsW(ls.t, gs.bq(ls.t), gs.pq(ls.loc), ls.loc)) ∧ (pc = W1 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W7 → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → gs.rfo(ls.t) = []) ∧ (pc = W3 → gs.bq(ls.t) = []) ∧ (pc = W4 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ') ∧ (pc = W5 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = FO(ls.loc) ' ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' + FO(ls.loc) ') ∧ (pc = W6 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = SF ' ∨ gs.bq(ls.t) = FO(ls.loc) ' + SF ' ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' + FO(ls.loc) ' + SF ') ∧ (pc = W4 ∨ pc = W5 ∨ pc = W6 → gs.bq(ls.t) ≠ [] ∧ gs.bq(ls.t).head.W? → gs.bq(ls.t).head = W(ls.loc, ls.val)) ∧ (pc = W1 ∨ pc = W7 → gs.rfo(ls.t) = gs.bq(ls.t)) ∧ (pc = W2 → gs.rfo(ls.t) = gs.bq(ls.t) ∨ gs.rfo(ls.t) + SF ' = gs.bq(ls.t)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → notMember(ls.t, gs.fwriters)) ∧ (pc = R1 ∨ pc = R4 → notMember(ls.t, gs.freaders)) ∧ (pc = R2 ∨ pc = R3 → oneMember(ls.t, ls.loc, gs.freaders)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → gs.rfo(ls.t) = gs.bq(ls.t)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → notMember(ls.t, gs.fwriters)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → notMember(ls.t, gs.freaders)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = idle ∨ pc = crashed → noPending(ls.t, gs.bq, gs.pq)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → gs.rfo(ls.t) = gs.bq(ls.t))
gs.bq(tid1) = SF ', lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = W5, pcf(tid1) = W6, FLITInv(gs.bq:= gs.bq(tid1 := []), lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), W6 = W1 ∨ W6 = W2 ∨ W6 = W3 ∨ W6 = W4 ∨ W6 = W5 ∨ W6 = W6 ∨ W6 = W7 → notMember(lsf(tid1).t, gs.freaders), W6 = W1 ∨ W6 = W2 ∨ W6 = W7 → notMember(lsf(tid1).t, gs.fwriters), W6 = W3 ∨ W6 = W4 ∨ W6 = W5 ∨ W6 = W6 → oneMember(lsf(tid1).t, lsf(tid1).loc, gs.fwriters), W6 = W1 ∨ W6 = W2 → noPendingW(lsf(tid1).t, gs.bq, gs.pq), W6 = W3 ∨ W6 = W7 → noPending(lsf(tid1).t, gs.bq, gs.pq), W6 = W5 ∨ W6 = W6 → FOFollowsW(lsf(tid1).t, gs.bq(lsf(tid1).t), gs.pq(lsf(tid1).loc), lsf(tid1).loc), W6 = W1 ∨ W6 = W3 ∨ W6 = W4 ∨ W6 = W5 ∨ W6 = W7 → ¬ SF ∈ gs.bq(lsf(tid1).t), W6 = W3 ∨ W6 = W4 ∨ W6 = W5 ∨ W6 = W6 ∨ W6 = W7 → gs.rfo(lsf(tid1).t) = [], W6 = W3 → gs.bq(lsf(tid1).t) = [], W6 = W4 → gs.bq(lsf(tid1).t) = [] ∨ gs.bq(lsf(tid1).t) = W(lsf(tid1).loc, lsf(tid1).val) ', W6 = W5 → gs.bq(lsf(tid1).t) = [] ∨ gs.bq(lsf(tid1).t) = FO(lsf(tid1).loc) ' ∨ gs.bq(lsf(tid1).t) = W(lsf(tid1).loc, lsf(tid1).val) ' + FO(lsf(tid1).loc) ', W6 = W6 → gs.bq(lsf(tid1).t) = [] ∨ gs.bq(lsf(tid1).t) = SF ' ∨ gs.bq(lsf(tid1).t) = FO(lsf(tid1).loc) ' + SF ' ∨ gs.bq(lsf(tid1).t) = W(lsf(tid1).loc, lsf(tid1).val) ' + FO(lsf(tid1).loc) ' + SF ', W6 = W4 ∨ W6 = W5 ∨ W6 = W6 → gs.bq(lsf(tid1).t) ≠ [] ∧ gs.bq(lsf(tid1).t).head.W? → gs.bq(lsf(tid1).t).head = W(lsf(tid1).loc, lsf(tid1).val), W6 = W1 ∨ W6 = W7 → gs.rfo(lsf(tid1).t) = gs.bq(lsf(tid1).t), W6 = W2 → gs.rfo(lsf(tid1).t) = gs.bq(lsf(tid1).t) ∨ gs.rfo(lsf(tid1).t) + SF ' = gs.bq(lsf(tid1).t), W6 = R1 ∨ W6 = R2 ∨ W6 = R3 ∨ W6 = R4 → noPendingW(lsf(tid1).t, gs.bq, gs.pq), W6 = R1 ∨ W6 = R2 ∨ W6 = R3 ∨ W6 = R4 → notMember(lsf(tid1).t, gs.fwriters), W6 = R1 ∨ W6 = R4 → notMember(lsf(tid1).t, gs.freaders), W6 = R2 ∨ W6 = R3 → oneMember(lsf(tid1).t, lsf(tid1).loc, gs.freaders), W6 = R1 ∨ W6 = R2 ∨ W6 = R3 ∨ W6 = R4 → ¬ SF ∈ gs.bq(lsf(tid1).t), W6 = R1 ∨ W6 = R2 ∨ W6 = R3 ∨ W6 = R4 → gs.rfo(lsf(tid1).t) = gs.bq(lsf(tid1).t), W6 = idle ∨ W6 = ready ∨ W6 = crashed → notMember(lsf(tid1).t, gs.fwriters), W6 = idle ∨ W6 = ready ∨ W6 = crashed → notMember(lsf(tid1).t, gs.freaders), W6 = idle ∨ W6 = ready ∨ W6 = crashed → noPendingW(lsf(tid1).t, gs.bq, gs.pq), W6 = idle ∨ W6 = crashed → noPending(lsf(tid1).t, gs.bq, gs.pq), W6 = idle ∨ W6 = ready ∨ W6 = crashed → ¬ SF ∈ gs.bq(lsf(tid1).t), W6 = idle ∨ W6 = ready ∨ W6 = crashed → gs.rfo(lsf(tid1).t) = gs.bq(lsf(tid1).t), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ ¬ FO(tid1) ∈ gs.pq(l) ∧ ¬ FO(l) ∈ gs.rfo(tid1)
Used terms: gs, lsf(tid1), W6
| ⊦ FLITLInv(gs, ls, pc) ↔ (pc = W1 ∨ pc = W2 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → notMember(ls.t, gs.freaders)) ∧ (pc = W1 ∨ pc = W2 ∨ pc = W7 → notMember(ls.t, gs.fwriters)) ∧ (pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 → oneMember(ls.t, ls.loc, gs.fwriters)) ∧ (pc = W1 ∨ pc = W2 → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = W3 ∨ pc = W7 → noPending(ls.t, gs.bq, gs.pq)) ∧ (pc = W5 ∨ pc = W6 → FOFollowsW(ls.t, gs.bq(ls.t), gs.pq(ls.loc), ls.loc)) ∧ (pc = W1 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W7 → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → gs.rfo(ls.t) = []) ∧ (pc = W3 → gs.bq(ls.t) = []) ∧ (pc = W4 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ') ∧ (pc = W5 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = FO(ls.loc) ' ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' + FO(ls.loc) ') ∧ (pc = W6 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = SF ' ∨ gs.bq(ls.t) = FO(ls.loc) ' + SF ' ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' + FO(ls.loc) ' + SF ') ∧ (pc = W4 ∨ pc = W5 ∨ pc = W6 → gs.bq(ls.t) ≠ [] ∧ gs.bq(ls.t).head.W? → gs.bq(ls.t).head = W(ls.loc, ls.val)) ∧ (pc = W1 ∨ pc = W7 → gs.rfo(ls.t) = gs.bq(ls.t)) ∧ (pc = W2 → gs.rfo(ls.t) = gs.bq(ls.t) ∨ gs.rfo(ls.t) + SF ' = gs.bq(ls.t)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → notMember(ls.t, gs.fwriters)) ∧ (pc = R1 ∨ pc = R4 → notMember(ls.t, gs.freaders)) ∧ (pc = R2 ∨ pc = R3 → oneMember(ls.t, ls.loc, gs.freaders)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → gs.rfo(ls.t) = gs.bq(ls.t)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → notMember(ls.t, gs.fwriters)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → notMember(ls.t, gs.freaders)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = idle ∨ pc = crashed → noPending(ls.t, gs.bq, gs.pq)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → gs.rfo(ls.t) = gs.bq(ls.t)) |
| gs.bq(tid1) = SF ', lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = W5, pcf(tid1) = W6, FLITInv(gs.bq:= gs.bq(tid1 := []), lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), W6 = W1 ∨ W6 = W2 ∨ W6 = W3 ∨ W6 = W4 ∨ W6 = W5 ∨ W6 = W6 ∨ W6 = W7 → notMember(lsf(tid1).t, gs.freaders), W6 = W1 ∨ W6 = W2 ∨ W6 = W7 → notMember(lsf(tid1).t, gs.fwriters), W6 = W3 ∨ W6 = W4 ∨ W6 = W5 ∨ W6 = W6 → oneMember(lsf(tid1).t, lsf(tid1).loc, gs.fwriters), W6 = W1 ∨ W6 = W2 → noPendingW(lsf(tid1).t, gs.bq, gs.pq), W6 = W3 ∨ W6 = W7 → noPending(lsf(tid1).t, gs.bq, gs.pq), W6 = W5 ∨ W6 = W6 → FOFollowsW(lsf(tid1).t, gs.bq(lsf(tid1).t), gs.pq(lsf(tid1).loc), lsf(tid1).loc), W6 = W1 ∨ W6 = W3 ∨ W6 = W4 ∨ W6 = W5 ∨ W6 = W7 → ¬ SF ∈ gs.bq(lsf(tid1).t), W6 = W3 ∨ W6 = W4 ∨ W6 = W5 ∨ W6 = W6 ∨ W6 = W7 → gs.rfo(lsf(tid1).t) = [], W6 = W3 → gs.bq(lsf(tid1).t) = [], W6 = W4 → gs.bq(lsf(tid1).t) = [] ∨ gs.bq(lsf(tid1).t) = W(lsf(tid1).loc, lsf(tid1).val) ', W6 = W5 → gs.bq(lsf(tid1).t) = [] ∨ gs.bq(lsf(tid1).t) = FO(lsf(tid1).loc) ' ∨ gs.bq(lsf(tid1).t) = W(lsf(tid1).loc, lsf(tid1).val) ' + FO(lsf(tid1).loc) ', W6 = W6 → gs.bq(lsf(tid1).t) = [] ∨ gs.bq(lsf(tid1).t) = SF ' ∨ gs.bq(lsf(tid1).t) = FO(lsf(tid1).loc) ' + SF ' ∨ gs.bq(lsf(tid1).t) = W(lsf(tid1).loc, lsf(tid1).val) ' + FO(lsf(tid1).loc) ' + SF ', W6 = W4 ∨ W6 = W5 ∨ W6 = W6 → gs.bq(lsf(tid1).t) ≠ [] ∧ gs.bq(lsf(tid1).t).head.W? → gs.bq(lsf(tid1).t).head = W(lsf(tid1).loc, lsf(tid1).val), W6 = W1 ∨ W6 = W7 → gs.rfo(lsf(tid1).t) = gs.bq(lsf(tid1).t), W6 = W2 → gs.rfo(lsf(tid1).t) = gs.bq(lsf(tid1).t) ∨ gs.rfo(lsf(tid1).t) + SF ' = gs.bq(lsf(tid1).t), W6 = R1 ∨ W6 = R2 ∨ W6 = R3 ∨ W6 = R4 → noPendingW(lsf(tid1).t, gs.bq, gs.pq), W6 = R1 ∨ W6 = R2 ∨ W6 = R3 ∨ W6 = R4 → notMember(lsf(tid1).t, gs.fwriters), W6 = R1 ∨ W6 = R4 → notMember(lsf(tid1).t, gs.freaders), W6 = R2 ∨ W6 = R3 → oneMember(lsf(tid1).t, lsf(tid1).loc, gs.freaders), W6 = R1 ∨ W6 = R2 ∨ W6 = R3 ∨ W6 = R4 → ¬ SF ∈ gs.bq(lsf(tid1).t), W6 = R1 ∨ W6 = R2 ∨ W6 = R3 ∨ W6 = R4 → gs.rfo(lsf(tid1).t) = gs.bq(lsf(tid1).t), W6 = idle ∨ W6 = ready ∨ W6 = crashed → notMember(lsf(tid1).t, gs.fwriters), W6 = idle ∨ W6 = ready ∨ W6 = crashed → notMember(lsf(tid1).t, gs.freaders), W6 = idle ∨ W6 = ready ∨ W6 = crashed → noPendingW(lsf(tid1).t, gs.bq, gs.pq), W6 = idle ∨ W6 = crashed → noPending(lsf(tid1).t, gs.bq, gs.pq), W6 = idle ∨ W6 = ready ∨ W6 = crashed → ¬ SF ∈ gs.bq(lsf(tid1).t), W6 = idle ∨ W6 = ready ∨ W6 = crashed → gs.rfo(lsf(tid1).t) = gs.bq(lsf(tid1).t), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ ¬ FO(tid1) ∈ gs.pq(l) ∧ ¬ FO(l) ∈ gs.rfo(tid1) |
gs.bq(tid1) = SF ', gs.rfo(tid1) = [], lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = W5, pcf(tid1) = W6, FLITInv(gs.bq:= gs.bq(tid1 := []), lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), FOFollowsW(tid1, SF ', gs.pq(lsf(tid1).loc), lsf(tid1).loc), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), notMember(tid1, gs.freaders), oneMember(tid1, lsf(tid1).loc, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), FO(tid1) ∈ gs.pq(l), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦
Used simplifier rules: ⊦ ¬ a ∈ []; (s) ⊦ ¬ SF.W?; (s) ⊦ a '.head = a; (s) ⊦ a ' ≠ []; (s) ⊦ W5 ≠ W6; (s) ⊦ W4 ≠ W6; (s) ⊦ W3 ≠ W6; (s) ⊦ W2 ≠ W6; (s) ⊦ W1 ≠ W6; (s) ⊦ W6 ≠ W7; (s) ⊦ R4 ≠ W6; (s) ⊦ R3 ≠ W6; (s) ⊦ R2 ≠ W6; (s) ⊦ R1 ≠ W6; (s) ⊦ W6 ≠ crashed; (s) ⊦ W6 ≠ ready; (s) ⊦ W6 ≠ idle; (s)
| gs.bq(tid1) = SF ', gs.rfo(tid1) = [], lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = W5, pcf(tid1) = W6, FLITInv(gs.bq:= gs.bq(tid1 := []), lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), FOFollowsW(tid1, SF ', gs.pq(lsf(tid1).loc), lsf(tid1).loc), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), notMember(tid1, gs.freaders), oneMember(tid1, lsf(tid1).loc, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), FO(tid1) ∈ gs.pq(l), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ |
Used terms: l
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, l0, v), pcf(tid1) = W6, gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)).mem ≠ gs.pmem, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), pcf(tid1)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).val = v, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).loc = l0, pcf(tid1) = W7 → apcf(tid1) = W7, pcf(tid1) = W3 → apcf(tid1) = W3, pcf(tid1) = W1 → apcf(tid1) = W1, pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).val = v, pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).loc = l0, pcf(tid1) = R4 → apcf(tid1) = R4, pcf(tid1) = R3 → apcf(tid1) = R3, pcf(tid1) = R2 → apcf(tid1) = R2, pcf(tid1) = R1 → apcf(tid1) = R1, pcf(tid1) = crashed → apcf(tid1) = crashed, pcf(tid1) = ready → apcf(tid1) = ready, pcf(tid1) = idle → apcf(tid1) = idle, pcf(tid1) = W6 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W5 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W4 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;W4), pcf(tid1) = W2 → apcf(tid1) = W1, ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1), sfencePSC(tid1)).mem ≠ gs.pmem, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦
Used simplifier rules: ⊦ W2 ≠ W6; (s) ⊦ W4 ≠ W6; (s) ⊦ W6 ≠ idle; (s) ⊦ W6 ≠ ready; (s) ⊦ W6 ≠ crashed; (s) ⊦ R1 ≠ W6; (s) ⊦ R2 ≠ W6; (s) ⊦ R3 ≠ W6; (s) ⊦ R4 ≠ W6; (s) ⊦ W1 ≠ W6; (s) ⊦ W3 ≠ W6; (s) ⊦ W6 ≠ W7; (s)
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1), sfencePSC(tid1)).mem ≠ gs.pmem, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1), sfencePSC(tid1)).mem ≠ gs.pmem, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ¬ W(lsf(tid1).loc, lsf(tid1).val) ∈ bel, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦
Used simplifier rules: ⊦ gstepf(gs, ls, W3, a) = gs.p:= gs.p(ls.l := gs.p(ls.l) + W(ls.v, ls.t)); (s) ⊦ mkFLITPSCls(t, l, v).l = l; (s) ⊦ mkFLITPSCgs(mem, p, ctr, writers, writers0).p = p; (s) ⊦ mkFLITPSCls(t, l, v).v = v; (s) ⊦ mkFLITPSCls(t, l, v).t = t; (s) ⊦ x + a = x + a '; (s) ⊦ mkFLITPSCgs(mem, p, ctr, writers, writers0).p:= p0 = mkFLITPSCgs(mem, p0, ctr, writers, writers0); (s) ⊦ mkFLITPSCgs(mem, p, ctr, writers, writers0).mem = mem; (s) Used formulas: W(lsf(tid1).loc, lsf(tid1).val) ∈ bel
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1), sfencePSC(tid1)).mem ≠ gs.pmem, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ¬ W(lsf(tid1).loc, lsf(tid1).val) ∈ bel, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5), pcf(tid1) = W6, gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1), sfencePSC(tid1)).mem ≠ gs.pmem, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ¬ W(lsf(tid1).loc, lsf(tid1).val) ∈ bel, ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5), pcf(tid1) = W6, gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1), sfencePSC(tid1)).mem ≠ gs.pmem, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ¬ W(lsf(tid1).loc, lsf(tid1).val) ∈ bel, ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ |
Used simplifier rules: ⊦ gstepf(gs, ls, W5, a) = gs; (s) ⊦ mkFLITPSCgs(mem, p, ctr, writers, writers0).mem = mem; (s) ⊦ gstepf(gs, ls, W4, a) = gs.p:= gs.p(ls.l := gs.p(ls.l) + FO(ls.t)); (s) ⊦ mkFLITPSCls(t, l, v).l = l; (s) ⊦ mkFLITPSCgs(mem, p, ctr, writers, writers0).p = p; (s) ⊦ mkFLITPSCls(t, l, v).t = t; (s) ⊦ x + a = x + a '; (s) ⊦ mkFLITPSCgs(mem, p, ctr, writers, writers0).p:= p0 = mkFLITPSCgs(mem, p0, ctr, writers, writers0); (s) Used formulas: FO(lsf(tid1).loc) ∈ bel
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, l0, v), pcf(tid1) = W6, gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)).ctr ≠ gs.fctr, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), pcf(tid1)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).val = v, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).loc = l0, pcf(tid1) = W7 → apcf(tid1) = W7, pcf(tid1) = W3 → apcf(tid1) = W3, pcf(tid1) = W1 → apcf(tid1) = W1, pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).val = v, pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).loc = l0, pcf(tid1) = R4 → apcf(tid1) = R4, pcf(tid1) = R3 → apcf(tid1) = R3, pcf(tid1) = R2 → apcf(tid1) = R2, pcf(tid1) = R1 → apcf(tid1) = R1, pcf(tid1) = crashed → apcf(tid1) = crashed, pcf(tid1) = ready → apcf(tid1) = ready, pcf(tid1) = idle → apcf(tid1) = idle, pcf(tid1) = W6 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W5 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W4 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;W4), pcf(tid1) = W2 → apcf(tid1) = W1, ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1), sfencePSC(tid1)).ctr ≠ gs.fctr, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦
Used simplifier rules: ⊦ W2 ≠ W6; (s) ⊦ W4 ≠ W6; (s) ⊦ W6 ≠ idle; (s) ⊦ W6 ≠ ready; (s) ⊦ W6 ≠ crashed; (s) ⊦ R1 ≠ W6; (s) ⊦ R2 ≠ W6; (s) ⊦ R3 ≠ W6; (s) ⊦ R4 ≠ W6; (s) ⊦ W1 ≠ W6; (s) ⊦ W3 ≠ W6; (s) ⊦ W6 ≠ W7; (s)
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1), sfencePSC(tid1)).ctr ≠ gs.fctr, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1), sfencePSC(tid1)).ctr ≠ gs.fctr, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ¬ W(lsf(tid1).loc, lsf(tid1).val) ∈ bel, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦
Used simplifier rules: ⊦ gstepf(gs, ls, W3, a) = gs.p:= gs.p(ls.l := gs.p(ls.l) + W(ls.v, ls.t)); (s) ⊦ mkFLITPSCls(t, l, v).l = l; (s) ⊦ mkFLITPSCgs(mem, p, ctr, writers, writers0).p = p; (s) ⊦ mkFLITPSCls(t, l, v).v = v; (s) ⊦ mkFLITPSCls(t, l, v).t = t; (s) ⊦ x + a = x + a '; (s) ⊦ mkFLITPSCgs(mem, p, ctr, writers, writers0).p:= p0 = mkFLITPSCgs(mem, p0, ctr, writers, writers0); (s) ⊦ mkFLITPSCgs(mem, p, ctr, writers, writers0).ctr = ctr; (s) Used formulas: W(lsf(tid1).loc, lsf(tid1).val) ∈ bel
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1), sfencePSC(tid1)).ctr ≠ gs.fctr, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ¬ W(lsf(tid1).loc, lsf(tid1).val) ∈ bel, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5), pcf(tid1) = W6, gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1), sfencePSC(tid1)).ctr ≠ gs.fctr, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ¬ W(lsf(tid1).loc, lsf(tid1).val) ∈ bel, ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5), pcf(tid1) = W6, gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1), sfencePSC(tid1)).ctr ≠ gs.fctr, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ¬ W(lsf(tid1).loc, lsf(tid1).val) ∈ bel, ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ |
Used simplifier rules: ⊦ gstepf(gs, ls, W5, a) = gs; (s) ⊦ mkFLITPSCgs(mem, p, ctr, writers, writers0).ctr = ctr; (s) ⊦ gstepf(gs, ls, W4, a) = gs.p:= gs.p(ls.l := gs.p(ls.l) + FO(ls.t)); (s) ⊦ mkFLITPSCls(t, l, v).l = l; (s) ⊦ mkFLITPSCgs(mem, p, ctr, writers, writers0).p = p; (s) ⊦ mkFLITPSCls(t, l, v).t = t; (s) ⊦ x + a = x + a '; (s) ⊦ mkFLITPSCgs(mem, p, ctr, writers, writers0).p:= p0 = mkFLITPSCgs(mem, p0, ctr, writers, writers0); (s) Used formulas: FO(lsf(tid1).loc) ∈ bel
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, l0, v), pcf(tid1) = W6, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), pcf(tid1)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ¬ reorder(gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)).p, gs.pq, gs.rfo), pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).val = v, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).loc = l0, pcf(tid1) = W7 → apcf(tid1) = W7, pcf(tid1) = W3 → apcf(tid1) = W3, pcf(tid1) = W1 → apcf(tid1) = W1, pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).val = v, pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).loc = l0, pcf(tid1) = R4 → apcf(tid1) = R4, pcf(tid1) = R3 → apcf(tid1) = R3, pcf(tid1) = R2 → apcf(tid1) = R2, pcf(tid1) = R1 → apcf(tid1) = R1, pcf(tid1) = crashed → apcf(tid1) = crashed, pcf(tid1) = ready → apcf(tid1) = ready, pcf(tid1) = idle → apcf(tid1) = idle, pcf(tid1) = W6 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W5 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W4 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;W4), pcf(tid1) = W2 → apcf(tid1) = W1, ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ¬ reorder (gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1), sfencePSC(tid1)).p, gs.pq, gs.rfo), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦
Used simplifier rules: ⊦ W2 ≠ W6; (s) ⊦ W4 ≠ W6; (s) ⊦ W6 ≠ idle; (s) ⊦ W6 ≠ ready; (s) ⊦ W6 ≠ crashed; (s) ⊦ R1 ≠ W6; (s) ⊦ R2 ≠ W6; (s) ⊦ R3 ≠ W6; (s) ⊦ R4 ≠ W6; (s) ⊦ W1 ≠ W6; (s) ⊦ W3 ≠ W6; (s) ⊦ W6 ≠ W7; (s)
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ¬ reorder (gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1), sfencePSC(tid1)).p, gs.pq, gs.rfo), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ |
⊦ FLITLInv(gs, ls, pc) ↔ (pc = W1 ∨ pc = W2 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → notMember(ls.t, gs.freaders)) ∧ (pc = W1 ∨ pc = W2 ∨ pc = W7 → notMember(ls.t, gs.fwriters)) ∧ (pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 → oneMember(ls.t, ls.loc, gs.fwriters)) ∧ (pc = W1 ∨ pc = W2 → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = W3 ∨ pc = W7 → noPending(ls.t, gs.bq, gs.pq)) ∧ (pc = W5 ∨ pc = W6 → FOFollowsW(ls.t, gs.bq(ls.t), gs.pq(ls.loc), ls.loc)) ∧ (pc = W1 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W7 → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → gs.rfo(ls.t) = []) ∧ (pc = W3 → gs.bq(ls.t) = []) ∧ (pc = W4 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ') ∧ (pc = W5 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = FO(ls.loc) ' ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' + FO(ls.loc) ') ∧ (pc = W6 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = SF ' ∨ gs.bq(ls.t) = FO(ls.loc) ' + SF ' ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' + FO(ls.loc) ' + SF ') ∧ (pc = W4 ∨ pc = W5 ∨ pc = W6 → gs.bq(ls.t) ≠ [] ∧ gs.bq(ls.t).head.W? → gs.bq(ls.t).head = W(ls.loc, ls.val)) ∧ (pc = W1 ∨ pc = W7 → gs.rfo(ls.t) = gs.bq(ls.t)) ∧ (pc = W2 → gs.rfo(ls.t) = gs.bq(ls.t) ∨ gs.rfo(ls.t) + SF ' = gs.bq(ls.t)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → notMember(ls.t, gs.fwriters)) ∧ (pc = R1 ∨ pc = R4 → notMember(ls.t, gs.freaders)) ∧ (pc = R2 ∨ pc = R3 → oneMember(ls.t, ls.loc, gs.freaders)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → gs.rfo(ls.t) = gs.bq(ls.t)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → notMember(ls.t, gs.fwriters)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → notMember(ls.t, gs.freaders)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = idle ∨ pc = crashed → noPending(ls.t, gs.bq, gs.pq)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → gs.rfo(ls.t) = gs.bq(ls.t))
Used simplifier rules: ⊦ W6 ≠ idle; (s) ⊦ W6 ≠ ready; (s) ⊦ W6 ≠ crashed; (s) ⊦ R1 ≠ W6; (s) ⊦ R2 ≠ W6; (s) ⊦ R3 ≠ W6; (s) ⊦ R4 ≠ W6; (s) ⊦ W6 ≠ W7; (s) ⊦ W1 ≠ W6; (s) ⊦ W2 ≠ W6; (s) ⊦ W3 ≠ W6; (s) ⊦ W4 ≠ W6; (s) ⊦ W5 ≠ W6; (s) ⊦ FO(l) ≠ SF; (s) eq-05: ⊦ x = a ' + y ∧ x = a0 ' + z → a = a0 ∧ y = z; (forward) from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ W(l, v) ≠ SF; (s) ⊦ x = x + y ↔ y = []; (s) ⊦ (a ' + x).head = a; (s) ⊦ ¬ SF.W?; (s) ⊦ ¬ a ∈ []; (s) ⊦ a ' = x + a0 ' ↔ a = a0 ∧ x = []; (ws) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ a ' ≠ []; (s) ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ gstepf(gs, ls, W5, a) = gs; (s) ⊦ mkFLITPSCgs(mem, p, ctr, writers, writers0).p = p; (s) Used terms: gs, lsf(tid1), W6
| ⊦ FLITLInv(gs, ls, pc) ↔ (pc = W1 ∨ pc = W2 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → notMember(ls.t, gs.freaders)) ∧ (pc = W1 ∨ pc = W2 ∨ pc = W7 → notMember(ls.t, gs.fwriters)) ∧ (pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 → oneMember(ls.t, ls.loc, gs.fwriters)) ∧ (pc = W1 ∨ pc = W2 → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = W3 ∨ pc = W7 → noPending(ls.t, gs.bq, gs.pq)) ∧ (pc = W5 ∨ pc = W6 → FOFollowsW(ls.t, gs.bq(ls.t), gs.pq(ls.loc), ls.loc)) ∧ (pc = W1 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W7 → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → gs.rfo(ls.t) = []) ∧ (pc = W3 → gs.bq(ls.t) = []) ∧ (pc = W4 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ') ∧ (pc = W5 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = FO(ls.loc) ' ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' + FO(ls.loc) ') ∧ (pc = W6 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = SF ' ∨ gs.bq(ls.t) = FO(ls.loc) ' + SF ' ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' + FO(ls.loc) ' + SF ') ∧ (pc = W4 ∨ pc = W5 ∨ pc = W6 → gs.bq(ls.t) ≠ [] ∧ gs.bq(ls.t).head.W? → gs.bq(ls.t).head = W(ls.loc, ls.val)) ∧ (pc = W1 ∨ pc = W7 → gs.rfo(ls.t) = gs.bq(ls.t)) ∧ (pc = W2 → gs.rfo(ls.t) = gs.bq(ls.t) ∨ gs.rfo(ls.t) + SF ' = gs.bq(ls.t)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → notMember(ls.t, gs.fwriters)) ∧ (pc = R1 ∨ pc = R4 → notMember(ls.t, gs.freaders)) ∧ (pc = R2 ∨ pc = R3 → oneMember(ls.t, ls.loc, gs.freaders)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → gs.rfo(ls.t) = gs.bq(ls.t)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → notMember(ls.t, gs.fwriters)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → notMember(ls.t, gs.freaders)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = idle ∨ pc = crashed → noPending(ls.t, gs.bq, gs.pq)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → gs.rfo(ls.t) = gs.bq(ls.t)) |
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, l0, v), pcf(tid1) = W6, gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)).writers ≠ gs.fwriters, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), pcf(tid1)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).val = v, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).loc = l0, pcf(tid1) = W7 → apcf(tid1) = W7, pcf(tid1) = W3 → apcf(tid1) = W3, pcf(tid1) = W1 → apcf(tid1) = W1, pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).val = v, pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).loc = l0, pcf(tid1) = R4 → apcf(tid1) = R4, pcf(tid1) = R3 → apcf(tid1) = R3, pcf(tid1) = R2 → apcf(tid1) = R2, pcf(tid1) = R1 → apcf(tid1) = R1, pcf(tid1) = crashed → apcf(tid1) = crashed, pcf(tid1) = ready → apcf(tid1) = ready, pcf(tid1) = idle → apcf(tid1) = idle, pcf(tid1) = W6 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W5 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W4 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;W4), pcf(tid1) = W2 → apcf(tid1) = W1, ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1), sfencePSC(tid1)) .writers ≠ gs.fwriters, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦
Used simplifier rules: ⊦ W2 ≠ W6; (s) ⊦ W4 ≠ W6; (s) ⊦ W6 ≠ idle; (s) ⊦ W6 ≠ ready; (s) ⊦ W6 ≠ crashed; (s) ⊦ R1 ≠ W6; (s) ⊦ R2 ≠ W6; (s) ⊦ R3 ≠ W6; (s) ⊦ R4 ≠ W6; (s) ⊦ W1 ≠ W6; (s) ⊦ W3 ≠ W6; (s) ⊦ W6 ≠ W7; (s)
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1), sfencePSC(tid1)) .writers ≠ gs.fwriters, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1), sfencePSC(tid1)) .writers ≠ gs.fwriters, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ¬ W(lsf(tid1).loc, lsf(tid1).val) ∈ bel, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦
Used simplifier rules: ⊦ gstepf(gs, ls, W3, a) = gs.p:= gs.p(ls.l := gs.p(ls.l) + W(ls.v, ls.t)); (s) ⊦ mkFLITPSCls(t, l, v).l = l; (s) ⊦ mkFLITPSCgs(mem, p, ctr, writers, writers0).p = p; (s) ⊦ mkFLITPSCls(t, l, v).v = v; (s) ⊦ mkFLITPSCls(t, l, v).t = t; (s) ⊦ x + a = x + a '; (s) ⊦ mkFLITPSCgs(mem, p, ctr, writers, writers0).p:= p0 = mkFLITPSCgs(mem, p0, ctr, writers, writers0); (s) ⊦ mkFLITPSCgs(mem, p, ctr, writers, writers0).writers = writers; (s) Used formulas: W(lsf(tid1).loc, lsf(tid1).val) ∈ bel
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1), sfencePSC(tid1)) .writers ≠ gs.fwriters, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ¬ W(lsf(tid1).loc, lsf(tid1).val) ∈ bel, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5), pcf(tid1) = W6, gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1), sfencePSC(tid1)) .writers ≠ gs.fwriters, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ¬ W(lsf(tid1).loc, lsf(tid1).val) ∈ bel, ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5), pcf(tid1) = W6, gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1), sfencePSC(tid1)) .writers ≠ gs.fwriters, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ¬ W(lsf(tid1).loc, lsf(tid1).val) ∈ bel, ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ |
Used simplifier rules: ⊦ gstepf(gs, ls, W5, a) = gs; (s) ⊦ mkFLITPSCgs(mem, p, ctr, writers, writers0).writers = writers; (s) ⊦ gstepf(gs, ls, W4, a) = gs.p:= gs.p(ls.l := gs.p(ls.l) + FO(ls.t)); (s) ⊦ mkFLITPSCls(t, l, v).l = l; (s) ⊦ mkFLITPSCgs(mem, p, ctr, writers, writers0).p = p; (s) ⊦ mkFLITPSCls(t, l, v).t = t; (s) ⊦ x + a = x + a '; (s) ⊦ mkFLITPSCgs(mem, p, ctr, writers, writers0).p:= p0 = mkFLITPSCgs(mem, p0, ctr, writers, writers0); (s) Used formulas: FO(lsf(tid1).loc) ∈ bel
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, l0, v), pcf(tid1) = W6, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), pcf(tid1)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ¬ labs (gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(tid1, l0, v), apcf(tid1), sfencePSC(tid1)), (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)), (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t))), pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).val = v, pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → lsf(tid1).loc = l0, pcf(tid1) = W7 → apcf(tid1) = W7, pcf(tid1) = W3 → apcf(tid1) = W3, pcf(tid1) = W1 → apcf(tid1) = W1, pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).val = v, pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → lsf(tid1).loc = l0, pcf(tid1) = R4 → apcf(tid1) = R4, pcf(tid1) = R3 → apcf(tid1) = R3, pcf(tid1) = R2 → apcf(tid1) = R2, pcf(tid1) = R1 → apcf(tid1) = R1, pcf(tid1) = crashed → apcf(tid1) = crashed, pcf(tid1) = ready → apcf(tid1) = ready, pcf(tid1) = idle → apcf(tid1) = idle, pcf(tid1) = W6 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W5 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W4 → apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;W4), pcf(tid1) = W2 → apcf(tid1) = W1, ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ lsf(t).t = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).t ∧ (pcf(t) = idle → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = idle) ∧ (pcf(t) = ready → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = ready) ∧ ( pcf(t) = crashed → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R1) ∧ (pcf(t) = R2 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R2) ∧ (pcf(t) = R3 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R3) ∧ (pcf(t) = R4 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).v) ∧ (pcf(t) = W1 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = W1) ∧ ( pcf(t) = W2 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W1;W2)) ∧ (pcf(t) = W3 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = W3) ∧ ( pcf(t) = W4 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;W4)) ∧ ( pcf(t) = W5 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;(SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W5;W6)) )) ∧ (pcf(t) = W7 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = W7) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).l) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));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); ⊦ W2 ≠ W6; (s) ⊦ W4 ≠ W6; (s) ⊦ W6 ≠ idle; (s) ⊦ W6 ≠ ready; (s) ⊦ W6 ≠ crashed; (s) ⊦ R1 ≠ W6; (s) ⊦ R2 ≠ W6; (s) ⊦ R3 ≠ W6; (s) ⊦ R4 ≠ W6; (s) ⊦ W1 ≠ W6; (s) ⊦ W3 ≠ W6; (s) ⊦ W6 ≠ W7; (s) ⊦ (gs.bq:= bq).bq = bq; (s)
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ lsf(t).t = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).t ∧ (pcf(t) = idle → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = idle) ∧ (pcf(t) = ready → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = ready) ∧ ( pcf(t) = crashed → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R1) ∧ (pcf(t) = R2 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R2) ∧ (pcf(t) = R3 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R3) ∧ (pcf(t) = R4 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).v) ∧ (pcf(t) = W1 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = W1) ∧ ( pcf(t) = W2 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W1;W2)) ∧ (pcf(t) = W3 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = W3) ∧ ( pcf(t) = W4 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;W4)) ∧ ( pcf(t) = W5 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;(SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W5;W6)) )) ∧ (pcf(t) = W7 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = W7) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).l) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).v) |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, tid1 = t, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ lsf(t).t = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).t ∧ (pcf(t) = idle → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = idle) ∧ (pcf(t) = ready → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = ready) ∧ ( pcf(t) = crashed → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R1) ∧ (pcf(t) = R2 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R2) ∧ (pcf(t) = R3 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R3) ∧ (pcf(t) = R4 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).v) ∧ (pcf(t) = W1 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = W1) ∧ ( pcf(t) = W2 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W1;W2)) ∧ (pcf(t) = W3 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = W3) ∧ ( pcf(t) = W4 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;W4)) ∧ ( pcf(t) = W5 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;(SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W5;W6)) )) ∧ (pcf(t) = W7 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = W7) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).l) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).v)
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, tid1 ≠ t, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ lsf(t).t = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).t ∧ (pcf(t) = idle → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = idle) ∧ (pcf(t) = ready → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = ready) ∧ ( pcf(t) = crashed → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R1) ∧ (pcf(t) = R2 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R2) ∧ (pcf(t) = R3 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R3) ∧ (pcf(t) = R4 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).v) ∧ (pcf(t) = W1 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = W1) ∧ ( pcf(t) = W2 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W1;W2)) ∧ (pcf(t) = W3 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = W3) ∧ ( pcf(t) = W4 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;W4)) ∧ ( pcf(t) = W5 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;(SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W5;W6)) )) ∧ (pcf(t) = W7 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = W7) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).l) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).v)
Used formulas: tid1 = t
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, tid1 = t, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ lsf(t).t = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).t ∧ (pcf(t) = idle → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = idle) ∧ (pcf(t) = ready → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = ready) ∧ ( pcf(t) = crashed → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R1) ∧ (pcf(t) = R2 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R2) ∧ (pcf(t) = R3 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R3) ∧ (pcf(t) = R4 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).v) ∧ (pcf(t) = W1 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = W1) ∧ ( pcf(t) = W2 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W1;W2)) ∧ (pcf(t) = W3 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = W3) ∧ ( pcf(t) = W4 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;W4)) ∧ ( pcf(t) = W5 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;(SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W5;W6)) )) ∧ (pcf(t) = W7 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = W7) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).l) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).v) |
gs.bq(t) = SF ' + bel, lsf(t).t = t, alsf(t) = mkFLITPSCls(t, lsf(t).loc, lsf(t).val), apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5)), pcf(t) = W6, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(t := bel), lsf, pcf), FLITLInv(gs, lsf(t), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ l. ¬ FO(t) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ t = lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(t, lsf(t).loc, lsf(t).val), apcf(t), sfencePSC(t)).t ∧ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(t, lsf(t).loc, lsf(t).val), apcf(t), sfencePSC(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6))) ∧ lsf(t).loc = lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(t, lsf(t).loc, lsf(t).val), apcf(t), sfencePSC(t)).l ∧ lsf(t).val = lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(t, lsf(t).loc, lsf(t).val), apcf(t), sfencePSC(t)).v
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a ∈ a0 ' + x ↔ a = a0 ∨ a ∈ x; (s) ⊦ W6 ≠ W7; (s) ⊦ W5 ≠ W6; (s) ⊦ W4 ≠ W6; (s) ⊦ W3 ≠ W6; (s) ⊦ W2 ≠ W6; (s) ⊦ W1 ≠ W6; (s) ⊦ R4 ≠ W6; (s) ⊦ R3 ≠ W6; (s) ⊦ R2 ≠ W6; (s) ⊦ R1 ≠ W6; (s) ⊦ W6 ≠ crashed; (s) ⊦ W6 ≠ ready; (s) ⊦ W6 ≠ idle; (s) in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list
| gs.bq(t) = SF ' + bel, lsf(t).t = t, alsf(t) = mkFLITPSCls(t, lsf(t).loc, lsf(t).val), apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5)), pcf(t) = W6, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(t := bel), lsf, pcf), FLITLInv(gs, lsf(t), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ l. ¬ FO(t) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ t = lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(t, lsf(t).loc, lsf(t).val), apcf(t), sfencePSC(t)).t ∧ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(t, lsf(t).loc, lsf(t).val), apcf(t), sfencePSC(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6))) ∧ lsf(t).loc = lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(t, lsf(t).loc, lsf(t).val), apcf(t), sfencePSC(t)).l ∧ lsf(t).val = lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), mkFLITPSCls(t, lsf(t).loc, lsf(t).val), apcf(t), sfencePSC(t)).v |
⊦ FLITGInv(gs) ↔ ctrok(gs.fctr, gs.fwriters) ∧ writersOk(gs.bq, gs.pq, gs.fwriters) ∧ pendingOk(gs.bq, gs.pq) ∧ SFTrailing(gs.bq) ∧ readFOsOk(gs.rfo, gs.fwriters)
Used simplifier rules: SFTrailing-leading-SF: ⊦ SFTrailing(bq) ∧ bq(t) = SF ' + bel → bel = []; (forward) from specification FLIT-preds ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ¬ a ∈ []; (s) ⊦ mkFLITPSCls(t, l, v).t = t; (s) ⊦ pcstepf(gs, ls, W5, a) = W6; (s) ⊦ mkFLITPSCls(t, l, v).l = l; (s) ⊦ lstepf(gs, ls, W5, a) = ls; (s) ⊦ mkFLITPSCls(t, l, v).v = v; (s) Used terms: gs
| ⊦ FLITGInv(gs) ↔ ctrok(gs.fctr, gs.fwriters) ∧ writersOk(gs.bq, gs.pq, gs.fwriters) ∧ pendingOk(gs.bq, gs.pq) ∧ SFTrailing(gs.bq) ∧ readFOsOk(gs.rfo, gs.fwriters) |
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, tid1 ≠ t, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ lsf(t).t = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).t ∧ (pcf(t) = idle → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = idle) ∧ (pcf(t) = ready → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = ready) ∧ ( pcf(t) = crashed → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R1) ∧ (pcf(t) = R2 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R2) ∧ (pcf(t) = R3 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R3) ∧ (pcf(t) = R4 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).v) ∧ (pcf(t) = W1 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = W1) ∧ ( pcf(t) = W2 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W1;W2)) ∧ (pcf(t) = W3 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = W3) ∧ ( pcf(t) = W4 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;W4)) ∧ ( pcf(t) = W5 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;(SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W5;W6)) )) ∧ (pcf(t) = W7 → (tid1 = t ⊃ pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));apcf(t)) = W7) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).l) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = (tid1 = t ⊃ lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(t));alsf(t)).v) |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, tid1 ≠ t, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ lsf(t).t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = R1) ∧ (pcf(t) = R2 → apcf(t) = R2) ∧ (pcf(t) = R3 → apcf(t) = R3) ∧ (pcf(t) = R4 → apcf(t) = R4) ∧ (pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v) ∧ (pcf(t) = W1 → apcf(t) = W1) ∧ (pcf(t) = W2 → apcf(t) = (SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W1;W2)) ∧ (pcf(t) = W3 → apcf(t) = W3) ∧ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;W4)) ∧ ( pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;W5))) ∧ ( pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;(SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W5;W6)) )) ∧ (pcf(t) = W7 → apcf(t) = W7) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v)
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, tid1 ≠ t, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ lsf(t).t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = R1) ∧ (pcf(t) = R2 → apcf(t) = R2) ∧ (pcf(t) = R3 → apcf(t) = R3) ∧ (pcf(t) = R4 → apcf(t) = R4) ∧ (pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v) ∧ (pcf(t) = W1 → apcf(t) = W1) ∧ (pcf(t) = W2 → apcf(t) = (SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W1;W2)) ∧ (pcf(t) = W3 → apcf(t) = W3) ∧ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;W4)) ∧ ( pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;W5))) ∧ ( pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;(SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W5;W6)) )) ∧ (pcf(t) = W7 → apcf(t) = W7) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v) |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, lsf(t).t = t, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, tid1 ≠ t, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITLInv(gs, lsf(t), pcf(t)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ lsf(t).t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = R1) ∧ (pcf(t) = R2 → apcf(t) = R2) ∧ (pcf(t) = R3 → apcf(t) = R3) ∧ (pcf(t) = R4 → apcf(t) = R4) ∧ (pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v) ∧ (pcf(t) = W1 → apcf(t) = W1) ∧ (pcf(t) = W2 → apcf(t) = (SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W1;W2)) ∧ (pcf(t) = W3 → apcf(t) = W3) ∧ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;W4)) ∧ ( pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;W5))) ∧ ( pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;(SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W5;W6)) )) ∧ (pcf(t) = W7 → apcf(t) = W7) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v)
Used terms: t
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, lsf(t).t = t, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, tid1 ≠ t, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITLInv(gs, lsf(t), pcf(t)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ lsf(t).t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = R1) ∧ (pcf(t) = R2 → apcf(t) = R2) ∧ (pcf(t) = R3 → apcf(t) = R3) ∧ (pcf(t) = R4 → apcf(t) = R4) ∧ (pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v) ∧ (pcf(t) = W1 → apcf(t) = W1) ∧ (pcf(t) = W2 → apcf(t) = (SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W1;W2)) ∧ (pcf(t) = W3 → apcf(t) = W3) ∧ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;W4)) ∧ ( pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;W5))) ∧ ( pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;(SF ∈ (tid1 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W5;W6)) )) ∧ (pcf(t) = W7 → apcf(t) = W7) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v) |
gs.bq(tid1) = SF ' + bel, lsf(t).t = t, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, tid1 ≠ t, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(t), pcf(t)), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = R1) ∧ (pcf(t) = R2 → apcf(t) = R2) ∧ (pcf(t) = R3 → apcf(t) = R3) ∧ (pcf(t) = R4 → apcf(t) = R4) ∧ (pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v) ∧ (pcf(t) = W1 → apcf(t) = W1) ∧ (pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(t) ⊃ W1;W2)) ∧ (pcf(t) = W3 → apcf(t) = W3) ∧ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;W4)) ∧ (pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;W5))) ∧ (pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;(SF ∈ gs.bq(t) ⊃ W5;W6)))) ∧ (pcf(t) = W7 → apcf(t) = W7) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v)
| gs.bq(tid1) = SF ' + bel, lsf(t).t = t, lsf(tid1).t = tid1, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, tid1 ≠ t, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(t), pcf(t)), FLITLInv(gs, lsf(tid1), W6), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = R1) ∧ (pcf(t) = R2 → apcf(t) = R2) ∧ (pcf(t) = R3 → apcf(t) = R3) ∧ (pcf(t) = R4 → apcf(t) = R4) ∧ (pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v) ∧ (pcf(t) = W1 → apcf(t) = W1) ∧ (pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(t) ⊃ W1;W2)) ∧ (pcf(t) = W3 → apcf(t) = W3) ∧ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;W4)) ∧ (pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;W5))) ∧ (pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;(SF ∈ gs.bq(t) ⊃ W5;W6)))) ∧ (pcf(t) = W7 → apcf(t) = W7) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v) |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, lsf(t).t = t, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, tid1 ≠ lsf(t).t, tid1 ≠ t, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITLInv(gs, lsf(t), pcf(t)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = R1) ∧ (pcf(t) = R2 → apcf(t) = R2) ∧ (pcf(t) = R3 → apcf(t) = R3) ∧ (pcf(t) = R4 → apcf(t) = R4) ∧ (pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v) ∧ (pcf(t) = W1 → apcf(t) = W1) ∧ (pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(t) ⊃ W1;W2)) ∧ (pcf(t) = W3 → apcf(t) = W3) ∧ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;W4)) ∧ (pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;W5))) ∧ (pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;(SF ∈ gs.bq(t) ⊃ W5;W6)))) ∧ (pcf(t) = W7 → apcf(t) = W7) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v)
Used formulas: tid1 = lsf(t).t
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, lsf(t).t = t, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, tid1 ≠ lsf(t).t, tid1 ≠ t, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITLInv(gs, lsf(t), pcf(t)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = R1) ∧ (pcf(t) = R2 → apcf(t) = R2) ∧ (pcf(t) = R3 → apcf(t) = R3) ∧ (pcf(t) = R4 → apcf(t) = R4) ∧ (pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v) ∧ (pcf(t) = W1 → apcf(t) = W1) ∧ (pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(t) ⊃ W1;W2)) ∧ (pcf(t) = W3 → apcf(t) = W3) ∧ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;W4)) ∧ (pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;W5))) ∧ (pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;(SF ∈ gs.bq(t) ⊃ W5;W6)))) ∧ (pcf(t) = W7 → apcf(t) = W7) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v) |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, lsf(t).t = t, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, tid1 ≠ t, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITLInv(gs, lsf(t), pcf(t)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = R1) ∧ (pcf(t) = R2 → apcf(t) = R2) ∧ (pcf(t) = R3 → apcf(t) = R3) ∧ (pcf(t) = R4 → apcf(t) = R4) ∧ (pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v) ∧ (pcf(t) = W1 → apcf(t) = W1) ∧ (pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(t) ⊃ W1;W2)) ∧ (pcf(t) = W3 → apcf(t) = W3) ∧ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;W4)) ∧ (pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;W5))) ∧ (pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;(SF ∈ gs.bq(t) ⊃ W5;W6)))) ∧ (pcf(t) = W7 → apcf(t) = W7) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v)
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, lsf(t).t = t, alsf(tid1) = mkFLITPSCls(tid1, lsf(tid1).loc, lsf(tid1).val), apcf(tid1) = (W(lsf(tid1).loc, lsf(tid1).val) ∈ bel ⊃ W3;(FO(lsf(tid1).loc) ∈ bel ⊃ W4;W5)), pcf(tid1) = W6, tid1 ≠ t, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), W6), FLITLInv(gs, lsf(t), pcf(t)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ t = alsf(t).t ∧ (pcf(t) = idle → apcf(t) = idle) ∧ (pcf(t) = ready → apcf(t) = ready) ∧ (pcf(t) = crashed → apcf(t) = crashed) ∧ (pcf(t) = R1 → apcf(t) = R1) ∧ (pcf(t) = R2 → apcf(t) = R2) ∧ (pcf(t) = R3 → apcf(t) = R3) ∧ (pcf(t) = R4 → apcf(t) = R4) ∧ (pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v) ∧ (pcf(t) = W1 → apcf(t) = W1) ∧ (pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(t) ⊃ W1;W2)) ∧ (pcf(t) = W3 → apcf(t) = W3) ∧ (pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;W4)) ∧ (pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;W5))) ∧ (pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(t) ⊃ W4;(SF ∈ gs.bq(t) ⊃ W5;W6)))) ∧ (pcf(t) = W7 → apcf(t) = W7) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l) ∧ (pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v) |
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); Used terms: t
| gs.bq(tid1) = SF ' + bel, pcf(tid1) ≠ W2, pcf(tid1) ≠ W6, FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq, gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t))) |
⊦ FLITInv(gs, lsf, pcf) ↔ FLITGInv(gs) ∧ (∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)))
gs.bq(tid1) = SF ' + bel, pcf(tid1) ≠ W2, pcf(tid1) ≠ W6, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq, gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t)))
Used terms: gs, lsf, pcf
| ⊦ FLITInv(gs, lsf, pcf) ↔ FLITGInv(gs) ∧ (∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t))) |
| gs.bq(tid1) = SF ' + bel, pcf(tid1) ≠ W2, pcf(tid1) ≠ W6, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq, gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t))) |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, pcf(tid1) ≠ W2, pcf(tid1) ≠ W6, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), pcf(tid1)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq, gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t)))
Used terms: tid1
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, pcf(tid1) ≠ W2, pcf(tid1) ≠ W6, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITLInv(gs, lsf(tid1), pcf(tid1)), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq, gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t))) |
⊦ FLITLInv(gs, ls, pc) ↔ (pc = W1 ∨ pc = W2 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → notMember(ls.t, gs.freaders)) ∧ (pc = W1 ∨ pc = W2 ∨ pc = W7 → notMember(ls.t, gs.fwriters)) ∧ (pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 → oneMember(ls.t, ls.loc, gs.fwriters)) ∧ (pc = W1 ∨ pc = W2 → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = W3 ∨ pc = W7 → noPending(ls.t, gs.bq, gs.pq)) ∧ (pc = W5 ∨ pc = W6 → FOFollowsW(ls.t, gs.bq(ls.t), gs.pq(ls.loc), ls.loc)) ∧ (pc = W1 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W7 → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → gs.rfo(ls.t) = []) ∧ (pc = W3 → gs.bq(ls.t) = []) ∧ (pc = W4 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ') ∧ (pc = W5 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = FO(ls.loc) ' ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' + FO(ls.loc) ') ∧ (pc = W6 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = SF ' ∨ gs.bq(ls.t) = FO(ls.loc) ' + SF ' ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' + FO(ls.loc) ' + SF ') ∧ (pc = W4 ∨ pc = W5 ∨ pc = W6 → gs.bq(ls.t) ≠ [] ∧ gs.bq(ls.t).head.W? → gs.bq(ls.t).head = W(ls.loc, ls.val)) ∧ (pc = W1 ∨ pc = W7 → gs.rfo(ls.t) = gs.bq(ls.t)) ∧ (pc = W2 → gs.rfo(ls.t) = gs.bq(ls.t) ∨ gs.rfo(ls.t) + SF ' = gs.bq(ls.t)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → notMember(ls.t, gs.fwriters)) ∧ (pc = R1 ∨ pc = R4 → notMember(ls.t, gs.freaders)) ∧ (pc = R2 ∨ pc = R3 → oneMember(ls.t, ls.loc, gs.freaders)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → gs.rfo(ls.t) = gs.bq(ls.t)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → notMember(ls.t, gs.fwriters)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → notMember(ls.t, gs.freaders)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = idle ∨ pc = crashed → noPending(ls.t, gs.bq, gs.pq)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → gs.rfo(ls.t) = gs.bq(ls.t))
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, pcf(tid1) ≠ W2, pcf(tid1) ≠ W6, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → notMember(lsf(tid1).t, gs.freaders), pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W7 → notMember(lsf(tid1).t, gs.fwriters), pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 → oneMember(lsf(tid1).t, lsf(tid1).loc, gs.fwriters), pcf(tid1) = W1 ∨ pcf(tid1) = W2 → noPendingW(lsf(tid1).t, gs.bq, gs.pq), pcf(tid1) = W3 ∨ pcf(tid1) = W7 → noPending(lsf(tid1).t, gs.bq, gs.pq), pcf(tid1) = W5 ∨ pcf(tid1) = W6 → FOFollowsW(lsf(tid1).t, gs.bq(lsf(tid1).t), gs.pq(lsf(tid1).loc), lsf(tid1).loc), pcf(tid1) = W1 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W7 → ¬ SF ∈ gs.bq(lsf(tid1).t), pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → gs.rfo(lsf(tid1).t) = [], pcf(tid1) = W3 → gs.bq(lsf(tid1).t) = [], pcf(tid1) = W4 → gs.bq(lsf(tid1).t) = [] ∨ gs.bq(lsf(tid1).t) = W(lsf(tid1).loc, lsf(tid1).val) ', pcf(tid1) = W5 → gs.bq(lsf(tid1).t) = [] ∨ gs.bq(lsf(tid1).t) = FO(lsf(tid1).loc) ' ∨ gs.bq(lsf(tid1).t) = W(lsf(tid1).loc, lsf(tid1).val) ' + FO(lsf(tid1).loc) ', pcf(tid1) = W6 → gs.bq(lsf(tid1).t) = [] ∨ gs.bq(lsf(tid1).t) = SF ' ∨ gs.bq(lsf(tid1).t) = FO(lsf(tid1).loc) ' + SF ' ∨ gs.bq(lsf(tid1).t) = W(lsf(tid1).loc, lsf(tid1).val) ' + FO(lsf(tid1).loc) ' + SF ', pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 → gs.bq(lsf(tid1).t) ≠ [] ∧ gs.bq(lsf(tid1).t).head.W? → gs.bq(lsf(tid1).t).head = W(lsf(tid1).loc, lsf(tid1).val), pcf(tid1) = W1 ∨ pcf(tid1) = W7 → gs.rfo(lsf(tid1).t) = gs.bq(lsf(tid1).t), pcf(tid1) = W2 → gs.rfo(lsf(tid1).t) = gs.bq(lsf(tid1).t) ∨ gs.rfo(lsf(tid1).t) + SF ' = gs.bq(lsf(tid1).t), pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → noPendingW(lsf(tid1).t, gs.bq, gs.pq), pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → notMember(lsf(tid1).t, gs.fwriters), pcf(tid1) = R1 ∨ pcf(tid1) = R4 → notMember(lsf(tid1).t, gs.freaders), pcf(tid1) = R2 ∨ pcf(tid1) = R3 → oneMember(lsf(tid1).t, lsf(tid1).loc, gs.freaders), pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → ¬ SF ∈ gs.bq(lsf(tid1).t), pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → gs.rfo(lsf(tid1).t) = gs.bq(lsf(tid1).t), pcf(tid1) = idle ∨ pcf(tid1) = ready ∨ pcf(tid1) = crashed → notMember(lsf(tid1).t, gs.fwriters), pcf(tid1) = idle ∨ pcf(tid1) = ready ∨ pcf(tid1) = crashed → notMember(lsf(tid1).t, gs.freaders), pcf(tid1) = idle ∨ pcf(tid1) = ready ∨ pcf(tid1) = crashed → noPendingW(lsf(tid1).t, gs.bq, gs.pq), pcf(tid1) = idle ∨ pcf(tid1) = crashed → noPending(lsf(tid1).t, gs.bq, gs.pq), pcf(tid1) = idle ∨ pcf(tid1) = ready ∨ pcf(tid1) = crashed → ¬ SF ∈ gs.bq(lsf(tid1).t), pcf(tid1) = idle ∨ pcf(tid1) = ready ∨ pcf(tid1) = crashed → gs.rfo(lsf(tid1).t) = gs.bq(lsf(tid1).t), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq, gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t)))
Used terms: gs, lsf(tid1), pcf(tid1)
| ⊦ FLITLInv(gs, ls, pc) ↔ (pc = W1 ∨ pc = W2 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → notMember(ls.t, gs.freaders)) ∧ (pc = W1 ∨ pc = W2 ∨ pc = W7 → notMember(ls.t, gs.fwriters)) ∧ (pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 → oneMember(ls.t, ls.loc, gs.fwriters)) ∧ (pc = W1 ∨ pc = W2 → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = W3 ∨ pc = W7 → noPending(ls.t, gs.bq, gs.pq)) ∧ (pc = W5 ∨ pc = W6 → FOFollowsW(ls.t, gs.bq(ls.t), gs.pq(ls.loc), ls.loc)) ∧ (pc = W1 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W7 → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → gs.rfo(ls.t) = []) ∧ (pc = W3 → gs.bq(ls.t) = []) ∧ (pc = W4 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ') ∧ (pc = W5 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = FO(ls.loc) ' ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' + FO(ls.loc) ') ∧ (pc = W6 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = SF ' ∨ gs.bq(ls.t) = FO(ls.loc) ' + SF ' ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' + FO(ls.loc) ' + SF ') ∧ (pc = W4 ∨ pc = W5 ∨ pc = W6 → gs.bq(ls.t) ≠ [] ∧ gs.bq(ls.t).head.W? → gs.bq(ls.t).head = W(ls.loc, ls.val)) ∧ (pc = W1 ∨ pc = W7 → gs.rfo(ls.t) = gs.bq(ls.t)) ∧ (pc = W2 → gs.rfo(ls.t) = gs.bq(ls.t) ∨ gs.rfo(ls.t) + SF ' = gs.bq(ls.t)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → notMember(ls.t, gs.fwriters)) ∧ (pc = R1 ∨ pc = R4 → notMember(ls.t, gs.freaders)) ∧ (pc = R2 ∨ pc = R3 → oneMember(ls.t, ls.loc, gs.freaders)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → gs.rfo(ls.t) = gs.bq(ls.t)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → notMember(ls.t, gs.fwriters)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → notMember(ls.t, gs.freaders)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = idle ∨ pc = crashed → noPending(ls.t, gs.bq, gs.pq)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → gs.rfo(ls.t) = gs.bq(ls.t)) |
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, pcf(tid1) ≠ W2, pcf(tid1) ≠ W6, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → notMember(lsf(tid1).t, gs.freaders), pcf(tid1) = W1 ∨ pcf(tid1) = W2 ∨ pcf(tid1) = W7 → notMember(lsf(tid1).t, gs.fwriters), pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 → oneMember(lsf(tid1).t, lsf(tid1).loc, gs.fwriters), pcf(tid1) = W1 ∨ pcf(tid1) = W2 → noPendingW(lsf(tid1).t, gs.bq, gs.pq), pcf(tid1) = W3 ∨ pcf(tid1) = W7 → noPending(lsf(tid1).t, gs.bq, gs.pq), pcf(tid1) = W5 ∨ pcf(tid1) = W6 → FOFollowsW(lsf(tid1).t, gs.bq(lsf(tid1).t), gs.pq(lsf(tid1).loc), lsf(tid1).loc), pcf(tid1) = W1 ∨ pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W7 → ¬ SF ∈ gs.bq(lsf(tid1).t), pcf(tid1) = W3 ∨ pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 ∨ pcf(tid1) = W7 → gs.rfo(lsf(tid1).t) = [], pcf(tid1) = W3 → gs.bq(lsf(tid1).t) = [], pcf(tid1) = W4 → gs.bq(lsf(tid1).t) = [] ∨ gs.bq(lsf(tid1).t) = W(lsf(tid1).loc, lsf(tid1).val) ', pcf(tid1) = W5 → gs.bq(lsf(tid1).t) = [] ∨ gs.bq(lsf(tid1).t) = FO(lsf(tid1).loc) ' ∨ gs.bq(lsf(tid1).t) = W(lsf(tid1).loc, lsf(tid1).val) ' + FO(lsf(tid1).loc) ', pcf(tid1) = W6 → gs.bq(lsf(tid1).t) = [] ∨ gs.bq(lsf(tid1).t) = SF ' ∨ gs.bq(lsf(tid1).t) = FO(lsf(tid1).loc) ' + SF ' ∨ gs.bq(lsf(tid1).t) = W(lsf(tid1).loc, lsf(tid1).val) ' + FO(lsf(tid1).loc) ' + SF ', pcf(tid1) = W4 ∨ pcf(tid1) = W5 ∨ pcf(tid1) = W6 → gs.bq(lsf(tid1).t) ≠ [] ∧ gs.bq(lsf(tid1).t).head.W? → gs.bq(lsf(tid1).t).head = W(lsf(tid1).loc, lsf(tid1).val), pcf(tid1) = W1 ∨ pcf(tid1) = W7 → gs.rfo(lsf(tid1).t) = gs.bq(lsf(tid1).t), pcf(tid1) = W2 → gs.rfo(lsf(tid1).t) = gs.bq(lsf(tid1).t) ∨ gs.rfo(lsf(tid1).t) + SF ' = gs.bq(lsf(tid1).t), pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → noPendingW(lsf(tid1).t, gs.bq, gs.pq), pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → notMember(lsf(tid1).t, gs.fwriters), pcf(tid1) = R1 ∨ pcf(tid1) = R4 → notMember(lsf(tid1).t, gs.freaders), pcf(tid1) = R2 ∨ pcf(tid1) = R3 → oneMember(lsf(tid1).t, lsf(tid1).loc, gs.freaders), pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → ¬ SF ∈ gs.bq(lsf(tid1).t), pcf(tid1) = R1 ∨ pcf(tid1) = R2 ∨ pcf(tid1) = R3 ∨ pcf(tid1) = R4 → gs.rfo(lsf(tid1).t) = gs.bq(lsf(tid1).t), pcf(tid1) = idle ∨ pcf(tid1) = ready ∨ pcf(tid1) = crashed → notMember(lsf(tid1).t, gs.fwriters), pcf(tid1) = idle ∨ pcf(tid1) = ready ∨ pcf(tid1) = crashed → notMember(lsf(tid1).t, gs.freaders), pcf(tid1) = idle ∨ pcf(tid1) = ready ∨ pcf(tid1) = crashed → noPendingW(lsf(tid1).t, gs.bq, gs.pq), pcf(tid1) = idle ∨ pcf(tid1) = crashed → noPending(lsf(tid1).t, gs.bq, gs.pq), pcf(tid1) = idle ∨ pcf(tid1) = ready ∨ pcf(tid1) = crashed → ¬ SF ∈ gs.bq(lsf(tid1).t), pcf(tid1) = idle ∨ pcf(tid1) = ready ∨ pcf(tid1) = crashed → gs.rfo(lsf(tid1).t) = gs.bq(lsf(tid1).t), ∀ l. ¬ FO(tid1) ∈ gs.pq(l), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq, gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t))) |
gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, SF ' + bel ≠ W(lsf(tid1).loc, lsf(tid1).val) ', pcf(tid1) ≠ W2, pcf(tid1) ≠ W6, pcf(tid1) ≠ idle, pcf(tid1) ≠ ready, pcf(tid1) ≠ crashed, pcf(tid1) ≠ R1, pcf(tid1) ≠ R2, pcf(tid1) ≠ R3, pcf(tid1) ≠ R4, pcf(tid1) ≠ W4, pcf(tid1) ≠ W3, pcf(tid1) ≠ W1, pcf(tid1) ≠ W5, pcf(tid1) ≠ W7, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq, gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t)))
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a ∈ a0 ' + x ↔ a = a0 ∨ a ∈ x; (s) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ W(l, v) ≠ SF; (s) ⊦ a ' = a0 ' + x ↔ a = a0 ∧ x = []; (ws)
| gs.bq(tid1) = SF ' + bel, lsf(tid1).t = tid1, SF ' + bel ≠ W(lsf(tid1).loc, lsf(tid1).val) ', pcf(tid1) ≠ W2, pcf(tid1) ≠ W6, pcf(tid1) ≠ idle, pcf(tid1) ≠ ready, pcf(tid1) ≠ crashed, pcf(tid1) ≠ R1, pcf(tid1) ≠ R2, pcf(tid1) ≠ R3, pcf(tid1) ≠ R4, pcf(tid1) ≠ W4, pcf(tid1) ≠ W3, pcf(tid1) ≠ W1, pcf(tid1) ≠ W5, pcf(tid1) ≠ W7, FLITGInv(gs), FLITInv(gs.bq:= gs.bq(tid1 := bel), lsf, pcf), FLITPSCInv(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf, apcf), reorder(p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t)), ∀ l. ¬ FO(tid1) ∈ gs.pq(l) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ ags0 = gstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)) ∧ alsf0 = alsf(t := lstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1))) ∧ apcf0 = apcf(t := pcstepf(mkFLITPSCgs(gs.pmem, p, gs.fctr, gs.fwriters, writers0), alsf(t), apcf(t), sfencePSC(tid1)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq, gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(gs.bq:= gs.bq(tid1 := bel), lsf(t), pcf(t), ags0, alsf0(t), apcf0(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.