[Imprint][Data Privacy Statement][E-Mail]



View long theorem info. View the proof. Back to main index. View the specification. View theorem base summary, View theorem base listing, the used properties by spec, the dependency list, the symbol table,

Proof step 1 from proof step-absstep-PROP_W-doWrite (conclusion) (back to tree)

FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), flitStep(mkstate(gs, lsf, pcf), doWrite(tid, bq(tid).head.l, bq(tid).head.v), mkstate(gs0, lsf0, pcf0)), abs(mkstate(gs, lsf, pcf), mkstate(ags, alsf, apcf)) ⊦ ∃ ags0, alsf0, apcf0. flitpscStep(mkstate(ags, alsf, apcf), doWritePSC(tid, bq(tid).head.l, bq(tid).head.v), mkstate(ags0, alsf0, apcf0)) ∧ abs(mkstate(gs0, lsf0, pcf0), mkstate(ags0, alsf0, apcf0))

System applied rule normalize

And obtained the following new goals

Rule argument

Additional information

Proof step 2 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

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), doWrite(tid, bq(tid).head.l, bq(tid).head.v), mkstate(gs0, lsf0, pcf0)) ⊦ ∃ ags0, alsf0, apcf0. flitpscStep(mkstate(ags, alsf, apcf), doWritePSC(tid, bq(tid).head.l, bq(tid).head.v), mkstate(ags0, alsf0, apcf0)) ∧ abs(mkstate(gs0, lsf0, pcf0), mkstate(ags0, alsf0, apcf0))

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

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; ⊦ doWritePSC(t, l, v) ≠ globalPSCCRASH; (s) ⊦ doWritePSC(t, l, v) ≠ globalPSCPERSIST_FO(l0); (s) ⊦ doWritePSC(t, l, v) ≠ globalPSCPERSIST_W(l0); (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)

Proof step 3 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

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), doWrite(tid, bq(tid).head.l, bq(tid).head.v), 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), doWritePSC(tid, bq(tid).head.l, bq(tid).head.v)) ∧ ags0 = gstepf(ags, alsf(t), apcf(t), doWritePSC(tid, bq(tid).head.l, bq(tid).head.v)) ∧ alsf0 = alsf(t := lstepf(ags, alsf(t), apcf(t), doWritePSC(tid, bq(tid).head.l, bq(tid).head.v))) ∧ apcf0 = apcf(t := pcstepf(ags, alsf(t), apcf(t), doWritePSC(tid, bq(tid).head.l, bq(tid).head.v)))) ∧ 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)))

User applied rule apply rewrite lemma

And obtained the following new goals

Rule argument

spec: FLIT, name:flitStep, seq:⊦ 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), subst:[lsf, gs, lsf0, a, pcf, pcf0, gs0] → [lsf, gs, lsf0, doWrite(tid, bq(tid).head.l, bq(tid).head.v), pcf, pcf0, gs0], <all paths>

Additional information

Used terms: pcf0, doWrite(tid, bq(tid).head.l, bq(tid).head.v), lsf, gs0, pcf, lsf0, gs

Proof step 4 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

⊦ 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)

A spec-lemma

Proof step 5 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

(∃ t, ls, pc. lstep(gs, lsf(t), pcf(t), doWrite(tid, bq(tid).head.l, bq(tid).head.v), gs0, ls, pc) ∧ lsf0 = lsf(t := ls) ∧ pcf0 = pcf(t := pc)) ∨ (∃ tid0. doWrite(tid, bq(tid).head.l, bq(tid).head.v) = 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. doWrite(tid, bq(tid).head.l, bq(tid).head.v) = (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. doWrite(tid, bq(tid).head.l, bq(tid).head.v) = 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. doWrite(tid, bq(tid).head.l, bq(tid).head.v) = 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. doWrite(tid, bq(tid).head.l, bq(tid).head.v) = 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) ∨ doWrite(tid, bq(tid).head.l, bq(tid).head.v) = globalCRASH ∧ ⟨pq := gs.pq, fctr := gs.fctr, bq := gs.bq, fwriters := gs.fwriters, freaders := gs.freaders, rfo := gs.rfo; CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf); gs := (((((gs.pq:= pq).fctr:= fctr).bq:= bq).fwriters:= fwriters).freaders:= freaders).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(ags, alsf(t), apcf(t), doWritePSC(tid, bq(tid).head.l, bq(tid).head.v)) ∧ ags0 = gstepf(ags, alsf(t), apcf(t), doWritePSC(tid, bq(tid).head.l, bq(tid).head.v)) ∧ alsf0 = alsf(t := lstepf(ags, alsf(t), apcf(t), doWritePSC(tid, bq(tid).head.l, bq(tid).head.v))) ∧ apcf0 = apcf(t := pcstepf(ags, alsf(t), apcf(t), doWritePSC(tid, bq(tid).head.l, bq(tid).head.v)))) ∧ 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)))

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: ⊦ doWrite(t, loc, v) ≠ globalCRASH; (s) ⊦ doWrite(t, loc, v) ≠ globalPERSIST_FO(loc0); (s) ⊦ doWrite(t, loc, v) ≠ globalPERSIST_W(loc0); (s) ⊦ doWrite(t, loc, v) ≠ propSF(t0); (s) ⊦ x + a = x + a '; (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)

Proof step 6 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

pre(gs, lsf(t), pcf(t), doWrite(tid, bq(tid).head.l, bq(tid).head.v)) ∧ ls = lstepf(gs, lsf(t), pcf(t), doWrite(tid, bq(tid).head.l, bq(tid).head.v)) ∧ gs0 = gstepf(gs, lsf(t), pcf(t), doWrite(tid, bq(tid).head.l, bq(tid).head.v)) ∧ pc = pcstepf(gs, lsf(t), pcf(t), doWrite(tid, bq(tid).head.l, bq(tid).head.v)) ∧ lsf0 = lsf(t := lstepf(gs, lsf(t), pcf(t), doWrite(tid, bq(tid).head.l, bq(tid).head.v))) ∧ pcf0 = pcf(t := pcstepf(gs, lsf(t), pcf(t), doWrite(tid, bq(tid).head.l, bq(tid).head.v))) ∨ doWrite(tid, bq(tid).head.l, bq(tid).head.v) = 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 ∨ doWrite(tid, bq(tid).head.l, bq(tid).head.v) = (oneMember(tid1, l, gs.fwriters) ⊃ doWriteFO(tid1, l);propFO(tid1, l)) ∧ n < # gs.bq(tid1) ∧ isPropFO(n, l, gs.bq(tid1)) ∧ ⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(tid1, l, fwriters; pq, bq, rfo); gs := ((gs.pq:= pq).bq:= bq).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(ags, alsf(t), apcf(t), doWritePSC(tid, bq(tid).head.l, bq(tid).head.v)) ∧ ags0 = gstepf(ags, alsf(t), apcf(t), doWritePSC(tid, bq(tid).head.l, bq(tid).head.v)) ∧ alsf0 = alsf(t := lstepf(ags, alsf(t), apcf(t), doWritePSC(tid, bq(tid).head.l, bq(tid).head.v))) ∧ apcf0 = apcf(t := pcstepf(ags, alsf(t), apcf(t), doWritePSC(tid, bq(tid).head.l, bq(tid).head.v)))) ∧ 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)))

User applied rule case distinction

And obtained the following new goals

Rule argument

pos: left 1

Additional information

Proof step 7 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, gs0 = gstepf(gs, lsf(t), pcf(t), doWrite(tid, bq(tid).head.l, bq(tid).head.v)), ls = lstepf(gs, lsf(t), pcf(t), doWrite(tid, bq(tid).head.l, bq(tid).head.v)), lsf0 = lsf(t := lstepf(gs, lsf(t), pcf(t), doWrite(tid, bq(tid).head.l, bq(tid).head.v))), pc = pcstepf(gs, lsf(t), pcf(t), doWrite(tid, bq(tid).head.l, bq(tid).head.v)), pcf0 = pcf(t := pcstepf(gs, lsf(t), pcf(t), doWrite(tid, bq(tid).head.l, bq(tid).head.v))), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), pre(gs, lsf(t), pcf(t), doWrite(tid, bq(tid).head.l, bq(tid).head.v)), 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), doWritePSC(tid, bq(tid).head.l, bq(tid).head.v)) ∧ ags0 = gstepf(ags, alsf(t), apcf(t), doWritePSC(tid, bq(tid).head.l, bq(tid).head.v)) ∧ alsf0 = alsf(t := lstepf(ags, alsf(t), apcf(t), doWritePSC(tid, bq(tid).head.l, bq(tid).head.v))) ∧ apcf0 = apcf(t := pcstepf(ags, alsf(t), apcf(t), doWritePSC(tid, bq(tid).head.l, bq(tid).head.v)))) ∧ 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)))

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Proof step 8 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, FLITInv(gs, lsf, pcf), FLITInv (gstepf(gs, lsf(t), pcf(t), doWrite(tid, bq(tid).head.l, bq(tid).head.v)), lsf(t := lstepf(gs, lsf(t), pcf(t), doWrite(tid, bq(tid).head.l, bq(tid).head.v))), pcf(t := pcstepf(gs, lsf(t), pcf(t), doWrite(tid, bq(tid).head.l, bq(tid).head.v)))), FLITPSCInv(ags, alsf, apcf), pre(gs, lsf(t), pcf(t), doWrite(tid, bq(tid).head.l, bq(tid).head.v)), 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), doWritePSC(tid, bq(tid).head.l, bq(tid).head.v)) ∧ ags0 = gstepf(ags, alsf(t), apcf(t), doWritePSC(tid, bq(tid).head.l, bq(tid).head.v)) ∧ alsf0 = alsf(t := lstepf(ags, alsf(t), apcf(t), doWritePSC(tid, bq(tid).head.l, bq(tid).head.v))) ∧ apcf0 = apcf(t := pcstepf(ags, alsf(t), apcf(t), doWritePSC(tid, bq(tid).head.l, bq(tid).head.v)))) ∧ ags0.mem = gstepf(gs, lsf(t), pcf(t), doWrite(tid, bq(tid).head.l, bq(tid).head.v)).pmem ∧ ags0.ctr = gstepf(gs, lsf(t), pcf(t), doWrite(tid, bq(tid).head.l, bq(tid).head.v)).fctr ∧ reorder (ags0.p, gstepf(gs, lsf(t), pcf(t), doWrite(tid, bq(tid).head.l, bq(tid).head.v)).pq, gstepf(gs, lsf(t), pcf(t), doWrite(tid, bq(tid).head.l, bq(tid).head.v)).rfo) ∧ ags0.writers = gstepf(gs, lsf(t), pcf(t), doWrite(tid, bq(tid).head.l, bq(tid).head.v)).fwriters ∧ (∀ t0. labs (gstepf(gs, lsf(t), pcf(t), doWrite(tid, bq(tid).head.l, bq(tid).head.v)), (t = t0 ⊃ lstepf(gs, lsf(t0), pcf(t0), doWrite(tid, bq(tid).head.l, bq(tid).head.v));lsf(t0)), (t = t0 ⊃ pcstepf(gs, lsf(t0), pcf(t0), doWrite(tid, bq(tid).head.l, bq(tid).head.v));pcf(t0)), ags0, alsf0(t0), apcf0(t0)))

User applied rule constructor cut

And closed the goal!

Rule argument

term: pcf(t)

Additional information

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) ⊦ doWrite(t, loc, v) ≠ invFLITWRITE(t0, loc0, v0); (s) ⊦ doWrite(t, loc, v) ≠ invFLITREAD(t0, loc0); (s) ⊦ callFLITCOMPLETE(t) ≠ doWrite(t0, loc, v); (s) ⊦ pre(gs, ls, idle, a) ↔ a = callRUN(ls.t); (s) ⊦ callRUN(t) ≠ doWrite(t0, loc, v); (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) ⊦ doWrite(t, loc, v) ≠ 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) ≠ doWrite(t0, loc0, v); (s) ⊦ pcstepf(gs, ls, W5, a) = W6; (s) ⊦ pre(gs, ls, W5, a) ↔ a = τ; (s) ⊦ doWrite(t, loc, v) ≠ τ; (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) ≠ doWrite(t0, loc0, v); (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) ⊦ doWrite(t, loc, v) ≠ sfence(t0); (s) ⊦ pcstepf(gs, ls, R4, a) = ready; (s) ⊦ pre(gs, ls, R4, a) ↔ a = retFLITREAD(ls.t, ls.val); (s) ⊦ doWrite(t, loc, v) ≠ retFLITREAD(t0, v0); (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) ⊦ doWrite(t, loc, v) ≠ pwb(t0, loc0); (s) ⊦ gstepf(gs, ls, R2, a) = (gs.fctr(ls.loc) ≠ 0 ⊃ gs ;gs.freaders:= gs.freaders(ls.loc := gs.freaders(ls.loc) -- ls.t) ); (s) ⊦ lstepf(gs, ls, R2, a) = ls; (s) ⊦ pcstepf(gs, ls, R2, a) = (gs.fctr(ls.loc) ≠ 0 ⊃ R3;R4); (s) ⊦ pre(gs, ls, R2, a) ↔ a = ctrRead(ls.t, ls.loc, gs.fctr(ls.loc)); (s) ⊦ ctrRead(t, loc, n) ≠ doWrite(t0, loc0, v); (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) ≠ doWrite(t0, loc0, v0); (s)

Proof step 9 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, doWrite(tid, bq(tid).head.l, bq(tid).head.v) = doWrite(tid0, gs.bq(tid0).head.l, gs.bq(tid0).head.v), 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, gs.bq(tid0) ≠ [], gs.bq(tid0).head.W?, FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(ags, alsf(t), apcf(t), doWritePSC(tid, bq(tid).head.l, bq(tid).head.v)) ∧ ags0 = gstepf(ags, alsf(t), apcf(t), doWritePSC(tid, bq(tid).head.l, bq(tid).head.v)) ∧ alsf0 = alsf(t := lstepf(ags, alsf(t), apcf(t), doWritePSC(tid, bq(tid).head.l, bq(tid).head.v))) ∧ apcf0 = apcf(t := pcstepf(ags, alsf(t), apcf(t), doWritePSC(tid, bq(tid).head.l, bq(tid).head.v)))) ∧ 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)))

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: ⊦ (gs.pq:= pq).fwriters = gs.fwriters; (s) ⊦ (gs.bq:= bq).fwriters = gs.fwriters; (s) ⊦ (gs.pq:= pq).rfo = gs.rfo; (s) ⊦ (gs.bq:= bq).rfo = gs.rfo; (s) ⊦ (gs.pq:= pq).pq = pq; (s) ⊦ (gs.bq:= bq).pq = gs.pq; (s) ⊦ (gs.pq:= pq).fctr = gs.fctr; (s) ⊦ (gs.bq:= bq).fctr = gs.fctr; (s) ⊦ (gs.pq:= pq).pmem = gs.pmem; (s) ⊦ (gs.bq:= bq).pmem = gs.pmem; (s) ⊦ doWrite(t, loc, v) = doWrite(t0, loc0, v0) ↔ t = t0 ∧ loc = loc0 ∧ v = v0; (ws)

Proof step 10 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

ags.ctr = gs.fctr, bq(tid0).head.l = gs.bq(tid0).head.l, ags.mem = gs.pmem, bq(tid0).head.v = gs.bq(tid0).head.v, ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], gs.bq(tid0).head.W?, FLITInv((gs.pq:= gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0).tail), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)) ∧ ags0 = gstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)) ∧ alsf0 = alsf(t := lstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v))) ∧ apcf0 = apcf(t := pcstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) '), gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs ((gs.pq:= gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0).tail), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t)))

Heuristic elimination applied rule apply elim lemma

And obtained the following new goals

Rule argument

spec: Bevent, name:elim-W, seq: ⊦ be.W? → (l = be.l ∧ v = be.v ↔ be = W(l, v)), subst:[be, l, v] → [gs.bq(tid0).head, l, v]

Additional information

Used simplifier rules: ⊦ be.W? → (l = be.l ∧ v = be.v ↔ be = W(l, v)); (elim) Used terms: gs.bq(tid0).head, l, v

Proof step 11 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

ags.ctr = gs.fctr, gs.bq(tid0).head = W(l, v), bq(tid0).head.l = l, ags.mem = gs.pmem, bq(tid0).head.v = v, ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], gs.bq(tid0).head.W?, FLITInv(gs, lsf, pcf), FLITInv((gs.pq:= gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0).tail), lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)) ∧ ags0 = gstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)) ∧ alsf0 = alsf(t := lstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v))) ∧ apcf0 = apcf(t := pcstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) '), gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs ((gs.pq:= gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0).tail), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t)))

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: ⊦ W(l, v).W?; (s)

Proof step 12 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

ags.ctr = gs.fctr, gs.bq(tid0).head = W(bq(tid0).head.l, bq(tid0).head.v), ags.mem = gs.pmem, ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], FLITInv(gs, lsf, pcf), FLITInv((gs.pq:= gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0).tail), lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)) ∧ ags0 = gstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)) ∧ alsf0 = alsf(t := lstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v))) ∧ apcf0 = apcf(t := pcstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) '), gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs ((gs.pq:= gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) ')).bq:= gs.bq(tid0 := gs.bq(tid0).tail), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t)))

Heuristic elimination applied rule apply elim lemma

And obtained the following new goals

Rule argument

spec: list-data, name:elim-add, seq: ⊦ x ≠ [] → (head = x.head ∧ tail = x.tail ↔ x = head + tail), subst:[x, head, tail] → [gs.bq(tid0), head, bel]; ['a] → [Bevent]

Additional information

Used simplifier rules: ⊦ x ≠ [] → (head = x.head ∧ tail = x.tail ↔ x = head + tail); (elim) Used terms: gs.bq(tid0), head, bel

Proof step 13 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(tid0) = head + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, head = W(bq(tid0).head.l, bq(tid0).head.v), gs.bq(tid0) ≠ [], FLITInv((gs.pq:= gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)) ∧ ags0 = gstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)) ∧ alsf0 = alsf(t := lstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v))) ∧ apcf0 = apcf(t := pcstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) '), gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs ((gs.pq:= gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t)))

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ a + x = a ' + x; (s)

Proof step 14 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(tid0) = W(bq(tid0).head.l, bq(tid0).head.v) ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], FLITInv(gs, lsf, pcf), FLITInv((gs.pq:= gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), W(bq(tid0).head.l, bq(tid0).head.v) ∈ gs.bq(tid0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)) ∧ ags0 = gstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)) ∧ alsf0 = alsf(t := lstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v))) ∧ apcf0 = apcf(t := pcstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) '), gs.rfo) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs ((gs.pq:= gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t)))

User applied rule exists right

And obtained the following new goals

Rule argument

pos: right 1 terms: gstepf (ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)), alsf (tid0 := lstepf (ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)) ), apcf (tid0 := pcstepf (ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)) ) abort: F discard: T computed: F

Additional information

Used terms: gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)), alsf (tid0 := lstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)) ), apcf (tid0 := pcstepf (ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)) )

Proof step 15 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(tid0) = W(bq(tid0).head.l, bq(tid0).head.v) ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], FLITInv((gs.pq:= gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), W(bq(tid0).head.l, bq(tid0).head.v) ∈ gs.bq(tid0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ (∃ t. pre(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)) ∧ gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)) = gstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)) ∧ alsf(tid0 := lstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v))) = alsf(t := lstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v))) ∧ apcf(tid0 := pcstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v))) = apcf(t := pcstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)))) ∧ gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)).mem = gs.pmem ∧ gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)).ctr = gs.fctr ∧ reorder (gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)).p, gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) '), gs.rfo) ∧ gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)).writers = gs.fwriters ∧ (∀ t. labs ((gs.pq:= gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf(t), pcf(t), gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)), alsf(tid0 := lstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)))(t), apcf(tid0 := pcstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)))(t)))

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Proof step 16 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(tid0) = W(bq(tid0).head.l, bq(tid0).head.v) ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], FLITInv(gs, lsf, pcf), FLITInv((gs.pq:= gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), W(bq(tid0).head.l, bq(tid0).head.v) ∈ gs.bq(tid0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ (∃ t. pre(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)) ∧ gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)) = gstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)) ∧ alsf(tid0 := lstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v))) = alsf(t := lstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v))) ∧ apcf(tid0 := pcstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v))) = apcf(t := pcstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)))) ∧ gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)).mem = gs.pmem ∧ gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)).ctr = gs.fctr ∧ reorder (gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)).p, gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) '), gs.rfo) ∧ gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)).writers = gs.fwriters ∧ labs ((gs.pq:= gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf(t), pcf(t), gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)), (tid0 = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)), (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)))

User applied rule cut formula

And obtained the following new goals

Rule argument

fma: pre(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v))

Additional information

Used formulas: pre(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v))

Proof step 17 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(tid0) = W(bq(tid0).head.l, bq(tid0).head.v) ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], FLITInv((gs.pq:= gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), pre(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)), reorder(ags.p, gs.pq, gs.rfo), W(bq(tid0).head.l, bq(tid0).head.v) ∈ gs.bq(tid0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ (∃ t. pre(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)) ∧ gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)) = gstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)) ∧ alsf(tid0 := lstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v))) = alsf(t := lstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v))) ∧ apcf(tid0 := pcstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v))) = apcf(t := pcstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)))) ∧ gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)).mem = gs.pmem ∧ gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)).ctr = gs.fctr ∧ reorder (gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)).p, gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) '), gs.rfo) ∧ gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)).writers = gs.fwriters ∧ labs ((gs.pq:= gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf(t), pcf(t), gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)), (tid0 = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)), (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)))

User applied rule cut formula

And obtained the following new goals

Rule argument

fma: apcf(tid0) = W3

Additional information

Used formulas: apcf(tid0) = W3

Proof step 18 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(tid0) = W(bq(tid0).head.l, bq(tid0).head.v) ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, apcf(tid0) = W3, gs.bq(tid0) ≠ [], FLITInv(gs, lsf, pcf), FLITInv((gs.pq:= gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf, pcf), FLITPSCInv(ags, alsf, apcf), pre(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)), reorder(ags.p, gs.pq, gs.rfo), W(bq(tid0).head.l, bq(tid0).head.v) ∈ gs.bq(tid0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ (∃ t. pre(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)) ∧ gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)) = gstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)) ∧ alsf(tid0 := lstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v))) = alsf(t := lstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v))) ∧ apcf(tid0 := pcstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v))) = apcf(t := pcstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)))) ∧ gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)).mem = gs.pmem ∧ gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)).ctr = gs.fctr ∧ reorder (gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)).p, gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) '), gs.rfo) ∧ gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)).writers = gs.fwriters ∧ labs ((gs.pq:= gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf(t), pcf(t), gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)), (tid0 = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)), (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)))

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ x + a = x + a '; (s) ⊦ gstepf(gs, ls, W3, a) = gs.p:= gs.p(ls.l := gs.p(ls.l) + W(ls.v, ls.t)); (s) ⊦ (gs.p:= p).writers = gs.writers; (s) ⊦ (gs.p:= p).p = p; (s) ⊦ (gs.p:= p).ctr = gs.ctr; (s) ⊦ (gs.p:= p).mem = gs.mem; (s) ⊦ pcstepf(gs, ls, W3, a) = W4; (s) ⊦ lstepf(gs, ls, W3, a) = ls; (s) ⊦ doWritePSC(t, l, v) = doWritePSC(t0, l0, v0) ↔ t = t0 ∧ l = l0 ∧ v = v0; (ws) ⊦ pre(gs, ls, W3, a) ↔ a = doWritePSC(ls.t, ls.l, ls.v); (s)

Proof step 19 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(tid0) = W(alsf(tid0).l, alsf(tid0).v) ' + bel, ags.ctr = gs.fctr, bq(tid0).head.l = alsf(tid0).l, ags.mem = gs.pmem, bq(tid0).head.v = alsf(tid0).v, ags.writers = gs.fwriters, apcf(tid0) = W3, tid0 = alsf(tid0).t, gs.bq(tid0) ≠ [], FLITInv(gs, lsf, pcf), FLITInv((gs.pq:= gs.pq(alsf(tid0).l := gs.pq(alsf(tid0).l) + W(alsf(tid0).v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), W(alsf(tid0).l, alsf(tid0).v) ∈ gs.bq(tid0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ (∃ t0. pre(ags, alsf(t0), apcf(t0), doWritePSC(tid0, alsf(tid0).l, alsf(tid0).v)) ∧ ags.p:= ags.p(alsf(tid0).l := ags.p(alsf(tid0).l) + W(alsf(tid0).v, tid0) ') = gstepf(ags, alsf(t0), apcf(t0), doWritePSC(tid0, alsf(tid0).l, alsf(tid0).v)) ∧ alsf(tid0 := alsf(tid0)) = alsf(t0 := lstepf(ags, alsf(t0), apcf(t0), doWritePSC(tid0, alsf(tid0).l, alsf(tid0).v))) ∧ apcf(tid0 := W4) = apcf(t0 := pcstepf(ags, alsf(t0), apcf(t0), doWritePSC(tid0, alsf(tid0).l, alsf(tid0).v)))) ∧ reorder (ags.p(alsf(tid0).l := ags.p(alsf(tid0).l) + W(alsf(tid0).v, tid0) '), gs.pq(alsf(tid0).l := gs.pq(alsf(tid0).l) + W(alsf(tid0).v, tid0) '), gs.rfo) ∧ labs ((gs.pq:= gs.pq(alsf(tid0).l := gs.pq(alsf(tid0).l) + W(alsf(tid0).v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf(t), pcf(t), ags.p:= ags.p(alsf(tid0).l := ags.p(alsf(tid0).l) + W(alsf(tid0).v, tid0) '), (tid0 = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)), (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)))

User applied rule constructor cut

And obtained the following new goals

Rule argument

term: apcf(tid0)

Additional information

Used simplifier rules: FLITPSCPC freely generated by R1, R2, R3, R4, W1, W2, W3, W4, W5, W6, W7, crashed, idle, ready ;; ⊦ W3 ≠ ready; (s) ⊦ W3 ≠ idle; (s) ⊦ W3 ≠ crashed; (s) ⊦ W3 ≠ W7; (s) ⊦ W3 ≠ W6; (s) ⊦ W3 ≠ W5; (s) ⊦ W3 ≠ W4; (s) ⊦ W2 ≠ W3; (s) ⊦ W1 ≠ W3; (s) ⊦ R4 ≠ W3; (s) ⊦ R3 ≠ W3; (s) ⊦ R2 ≠ W3; (s) ⊦ R1 ≠ W3; (s)

Proof step 20 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(tid0) = W(alsf(tid0).l, alsf(tid0).v) ' + bel, ags.ctr = gs.fctr, bq(tid0).head.l = alsf(tid0).l, ags.mem = gs.pmem, bq(tid0).head.v = alsf(tid0).v, ags.writers = gs.fwriters, apcf(tid0) = W3, tid0 = alsf(tid0).t, gs.bq(tid0) ≠ [], FLITInv((gs.pq:= gs.pq(alsf(tid0).l := gs.pq(alsf(tid0).l) + W(alsf(tid0).v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), W(alsf(tid0).l, alsf(tid0).v) ∈ gs.bq(tid0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ (∃ t0. pre(ags, alsf(t0), apcf(t0), doWritePSC(tid0, alsf(tid0).l, alsf(tid0).v)) ∧ ags.p:= ags.p(alsf(tid0).l := ags.p(alsf(tid0).l) + W(alsf(tid0).v, tid0) ') = gstepf(ags, alsf(t0), apcf(t0), doWritePSC(tid0, alsf(tid0).l, alsf(tid0).v)) ∧ alsf(tid0 := alsf(tid0)) = alsf(t0 := lstepf(ags, alsf(t0), apcf(t0), doWritePSC(tid0, alsf(tid0).l, alsf(tid0).v))) ∧ apcf(tid0 := W4) = apcf(t0 := pcstepf(ags, alsf(t0), apcf(t0), doWritePSC(tid0, alsf(tid0).l, alsf(tid0).v)))) ∧ reorder (ags.p(alsf(tid0).l := ags.p(alsf(tid0).l) + W(alsf(tid0).v, tid0) '), gs.pq(alsf(tid0).l := gs.pq(alsf(tid0).l) + W(alsf(tid0).v, tid0) '), gs.rfo) ∧ labs ((gs.pq:= gs.pq(alsf(tid0).l := gs.pq(alsf(tid0).l) + W(alsf(tid0).v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf(t), pcf(t), ags.p:= ags.p(alsf(tid0).l := ags.p(alsf(tid0).l) + W(alsf(tid0).v, tid0) '), (tid0 = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)), (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)))

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Proof step 21 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(tid0) = W(alsf(tid0).l, alsf(tid0).v) ' + bel, ags.ctr = gs.fctr, bq(tid0).head.l = alsf(tid0).l, ags.mem = gs.pmem, bq(tid0).head.v = alsf(tid0).v, ags.writers = gs.fwriters, apcf(tid0) = W3, tid0 = alsf(tid0).t, gs.bq(tid0) ≠ [], FLITInv(gs, lsf, pcf), FLITInv((gs.pq:= gs.pq(alsf(tid0).l := gs.pq(alsf(tid0).l) + W(alsf(tid0).v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), W(alsf(tid0).l, alsf(tid0).v) ∈ gs.bq(tid0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ (∃ t0. pre(ags, alsf(t0), apcf(t0), doWritePSC(tid0, alsf(tid0).l, alsf(tid0).v)) ∧ ags.p:= ags.p(alsf(tid0).l := ags.p(alsf(tid0).l) + W(alsf(tid0).v, tid0) ') = gstepf(ags, alsf(t0), apcf(t0), doWritePSC(tid0, alsf(tid0).l, alsf(tid0).v)) ∧ alsf(tid0 := alsf(tid0)) = alsf(t0 := lstepf(ags, alsf(t0), apcf(t0), doWritePSC(tid0, alsf(tid0).l, alsf(tid0).v))) ∧ apcf(tid0 := W4) = apcf(t0 := pcstepf(ags, alsf(t0), apcf(t0), doWritePSC(tid0, alsf(tid0).l, alsf(tid0).v)))) ∧ reorder (ags.p(alsf(tid0).l := ags.p(alsf(tid0).l) + W(alsf(tid0).v, tid0) '), gs.pq(alsf(tid0).l := gs.pq(alsf(tid0).l) + W(alsf(tid0).v, tid0) '), gs.rfo) ∧ labs ((gs.pq:= gs.pq(alsf(tid0).l := gs.pq(alsf(tid0).l) + W(alsf(tid0).v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf(t), pcf(t), ags.p:= ags.p(alsf(tid0).l := ags.p(alsf(tid0).l) + W(alsf(tid0).v, tid0) '), (tid0 = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)), (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)))

User applied rule case distinction

And obtained the following new goals

Rule argument

pos: right 1

Additional information

Proof step 22 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(tid0) = W(alsf(tid0).l, alsf(tid0).v) ' + bel, ags.ctr = gs.fctr, bq(tid0).head.l = alsf(tid0).l, ags.mem = gs.pmem, bq(tid0).head.v = alsf(tid0).v, ags.writers = gs.fwriters, apcf(tid0) = W3, tid0 = alsf(tid0).t, gs.bq(tid0) ≠ [], FLITInv((gs.pq:= gs.pq(alsf(tid0).l := gs.pq(alsf(tid0).l) + W(alsf(tid0).v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), W(alsf(tid0).l, alsf(tid0).v) ∈ gs.bq(tid0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ ∃ t0. pre(ags, alsf(t0), apcf(t0), doWritePSC(tid0, alsf(tid0).l, alsf(tid0).v)) ∧ ags.p:= ags.p(alsf(tid0).l := ags.p(alsf(tid0).l) + W(alsf(tid0).v, tid0) ') = gstepf(ags, alsf(t0), apcf(t0), doWritePSC(tid0, alsf(tid0).l, alsf(tid0).v)) ∧ alsf(tid0 := alsf(tid0)) = alsf(t0 := lstepf(ags, alsf(t0), apcf(t0), doWritePSC(tid0, alsf(tid0).l, alsf(tid0).v))) ∧ apcf(tid0 := W4) = apcf(t0 := pcstepf(ags, alsf(t0), apcf(t0), doWritePSC(tid0, alsf(tid0).l, alsf(tid0).v)))

User applied rule exists right

And closed the goal!

Rule argument

pos: right 1 terms: tid0 abort: F discard: T computed: F

Additional information

Used simplifier rules: ⊦ pre(gs, ls, W3, a) ↔ a = doWritePSC(ls.t, ls.l, ls.v); (s) ⊦ doWritePSC(t, l, v) = doWritePSC(t0, l0, v0) ↔ t = t0 ∧ l = l0 ∧ v = v0; (ws) ⊦ gstepf(gs, ls, W3, a) = gs.p:= gs.p(ls.l := gs.p(ls.l) + W(ls.v, ls.t)); (s) ⊦ x + a = x + a '; (s) ⊦ lstepf(gs, ls, W3, a) = ls; (s) ⊦ pcstepf(gs, ls, W3, a) = W4; (s) Used terms: tid0

Proof step 23 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(tid0) = W(alsf(tid0).l, alsf(tid0).v) ' + bel, ags.ctr = gs.fctr, bq(tid0).head.l = alsf(tid0).l, ags.mem = gs.pmem, bq(tid0).head.v = alsf(tid0).v, ags.writers = gs.fwriters, apcf(tid0) = W3, tid0 = alsf(tid0).t, gs.bq(tid0) ≠ [], FLITInv((gs.pq:= gs.pq(alsf(tid0).l := gs.pq(alsf(tid0).l) + W(alsf(tid0).v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), W(alsf(tid0).l, alsf(tid0).v) ∈ gs.bq(tid0), ¬ reorder (ags.p(alsf(tid0).l := ags.p(alsf(tid0).l) + W(alsf(tid0).v, tid0) '), gs.pq(alsf(tid0).l := gs.pq(alsf(tid0).l) + W(alsf(tid0).v, tid0) '), gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦

User applied rule apply rewrite lemma

And obtained the following new goals

Rule argument

spec: abs-FLIT-FLITPSCweak, name:reorder-step-propW-lifted, seq:⊦ reorder(p, pq, rfo) ∧ noPending(t, p) → reorder(p(l := p(l) + W(v, t) '), pq(l := pq(l) + W(v, t) '), rfo), subst:[t, l, v, p, pq, rfo] → [tid0, alsf(tid0).l, alsf(tid0).v, ags.p, gs.pq, gs.rfo], <all paths>

Additional information

Used terms: alsf(tid0).v, alsf(tid0).l, gs.rfo, tid0, gs.pq, ags.p

Proof step 24 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

⊦ reorder(p, pq, rfo) ∧ noPending(t, p) → reorder(p(l := p(l) + W(v, t) '), pq(l := pq(l) + W(v, t) '), rfo)

A spec-lemma

Proof step 25 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(tid0) = W(alsf(tid0).l, alsf(tid0).v) ' + bel, ags.ctr = gs.fctr, bq(tid0).head.l = alsf(tid0).l, ags.mem = gs.pmem, bq(tid0).head.v = alsf(tid0).v, ags.writers = gs.fwriters, apcf(tid0) = W3, tid0 = alsf(tid0).t, gs.bq(tid0) ≠ [], FLITInv(gs, lsf, pcf), FLITInv((gs.pq:= gs.pq(alsf(tid0).l := gs.pq(alsf(tid0).l) + W(alsf(tid0).v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), W(alsf(tid0).l, alsf(tid0).v) ∈ gs.bq(tid0), ¬ reorder (ags.p(alsf(tid0).l := ags.p(alsf(tid0).l) + W(alsf(tid0).v, tid0) '), gs.pq(alsf(tid0).l := gs.pq(alsf(tid0).l) + W(alsf(tid0).v, tid0) '), gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ reorder(ags.p, gs.pq, gs.rfo) ∧ noPending(tid0, ags.p)

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Proof step 26 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(tid0) = W(alsf(tid0).l, alsf(tid0).v) ' + bel, ags.ctr = gs.fctr, bq(tid0).head.l = alsf(tid0).l, ags.mem = gs.pmem, bq(tid0).head.v = alsf(tid0).v, ags.writers = gs.fwriters, apcf(tid0) = W3, tid0 = alsf(tid0).t, gs.bq(tid0) ≠ [], FLITInv((gs.pq:= gs.pq(alsf(tid0).l := gs.pq(alsf(tid0).l) + W(alsf(tid0).v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), W(alsf(tid0).l, alsf(tid0).v) ∈ gs.bq(tid0), ¬ noPending(tid0, ags.p), ¬ reorder (ags.p(alsf(tid0).l := ags.p(alsf(tid0).l) + W(alsf(tid0).v, tid0) '), gs.pq(alsf(tid0).l := gs.pq(alsf(tid0).l) + W(alsf(tid0).v, tid0) '), gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦

User applied rule apply rewrite lemma

And obtained the following new goals

Rule argument

spec: FLITPSCweak, name:FLITPSCInv, seq:⊦ FLITPSCInv(gs, lsf, pcf) ↔ FLITPSCGInv(gs) ∧ (∀ t. lsf(t).t = t ∧ FLITPSCLInv(gs, lsf(t), pcf(t))), subst:[gs, lsf, pcf] → [ags, alsf, apcf], <all paths>

Additional information

Used terms: ags, alsf, apcf

Proof step 27 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

⊦ FLITPSCInv(gs, lsf, pcf) ↔ FLITPSCGInv(gs) ∧ (∀ t. lsf(t).t = t ∧ FLITPSCLInv(gs, lsf(t), pcf(t)))

A spec-lemma

Proof step 28 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(tid0) = W(alsf(tid0).l, alsf(tid0).v) ' + bel, ags.ctr = gs.fctr, bq(tid0).head.l = alsf(tid0).l, ags.mem = gs.pmem, bq(tid0).head.v = alsf(tid0).v, ags.writers = gs.fwriters, apcf(tid0) = W3, tid0 = alsf(tid0).t, gs.bq(tid0) ≠ [], FLITInv(gs, lsf, pcf), FLITInv((gs.pq:= gs.pq(alsf(tid0).l := gs.pq(alsf(tid0).l) + W(alsf(tid0).v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf, pcf), FLITPSCGInv(ags), reorder(ags.p, gs.pq, gs.rfo), W(alsf(tid0).l, alsf(tid0).v) ∈ gs.bq(tid0), ¬ noPending(tid0, ags.p), ¬ reorder (ags.p(alsf(tid0).l := ags.p(alsf(tid0).l) + W(alsf(tid0).v, tid0) '), gs.pq(alsf(tid0).l := gs.pq(alsf(tid0).l) + W(alsf(tid0).v, tid0) '), gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)) ⊦

User applied rule all left

And obtained the following new goals

Rule argument

pos: left 18 terms: tid0 abort: F discard: T computed: F

Additional information

Used terms: tid0

Proof step 29 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(tid0) = W(alsf(tid0).l, alsf(tid0).v) ' + bel, ags.ctr = gs.fctr, bq(tid0).head.l = alsf(tid0).l, ags.mem = gs.pmem, alsf(tid0).t = tid0, bq(tid0).head.v = alsf(tid0).v, ags.writers = gs.fwriters, apcf(tid0) = W3, gs.bq(tid0) ≠ [], FLITInv((gs.pq:= gs.pq(alsf(tid0).l := gs.pq(alsf(tid0).l) + W(alsf(tid0).v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCGInv(ags), FLITPSCLInv(ags, alsf(tid0), apcf(tid0)), reorder(ags.p, gs.pq, gs.rfo), W(alsf(tid0).l, alsf(tid0).v) ∈ gs.bq(tid0), ¬ noPending(tid0, ags.p), ¬ reorder (ags.p(alsf(tid0).l := ags.p(alsf(tid0).l) + W(alsf(tid0).v, tid0) '), gs.pq(alsf(tid0).l := gs.pq(alsf(tid0).l) + W(alsf(tid0).v, tid0) '), gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Proof step 30 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(tid0) = W(alsf(tid0).l, alsf(tid0).v) ' + bel, ags.ctr = gs.fctr, bq(tid0).head.l = alsf(tid0).l, ags.mem = gs.pmem, alsf(tid0).t = tid0, bq(tid0).head.v = alsf(tid0).v, ags.writers = gs.fwriters, apcf(tid0) = W3, gs.bq(tid0) ≠ [], FLITInv(gs, lsf, pcf), FLITInv((gs.pq:= gs.pq(alsf(tid0).l := gs.pq(alsf(tid0).l) + W(alsf(tid0).v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf, pcf), FLITPSCGInv(ags), FLITPSCLInv(ags, alsf(tid0), W3), reorder(ags.p, gs.pq, gs.rfo), W(alsf(tid0).l, alsf(tid0).v) ∈ gs.bq(tid0), ¬ noPending(tid0, ags.p), ¬ reorder (ags.p(alsf(tid0).l := ags.p(alsf(tid0).l) + W(alsf(tid0).v, tid0) '), gs.pq(alsf(tid0).l := gs.pq(alsf(tid0).l) + W(alsf(tid0).v, tid0) '), gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦

User applied rule apply rewrite lemma

And obtained the following new goals

Rule argument

spec: FLITPSCweak, name:FLITPSCLInv, seq:⊦ FLITPSCLInv(gs, ls, pc) ↔ ( pc = W1 ∨ pc = W2 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → notMember(ls.t, gs.readers)) ∧ (pc = W1 ∨ pc = W2 ∨ pc = W7 → notMember(ls.t, gs.writers)) ∧ (pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 → oneMember(ls.t, ls.l, gs.writers)) ∧ (pc = W1 ∨ pc = W2 → noPendingW(ls.t, gs.p)) ∧ (pc = W2 ∨ pc = W3 ∨ pc = W6 ∨ pc = W7 → noPending(ls.t, gs.p)) ∧ (pc = W4 ∨ pc = W5 → onePendingW(ls.t, ls.l, gs.p)) ∧ (pc = W5 → FOFollowsW(ls.t, gs.p(ls.l))) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → notMember(ls.t, gs.writers)) ∧ (pc = R1 ∨ pc = R4 → notMember(ls.t, gs.readers)) ∧ (pc = R2 ∨ pc = R3 → oneMember(ls.t, ls.l, gs.readers)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → noPendingW(ls.t, gs.p)) ∧ (pc = idle ∨ pc = ready → notMember(ls.t, gs.writers)) ∧ (pc = idle ∨ pc = ready → notMember(ls.t, gs.readers)) ∧ (pc = idle ∨ pc = ready → noPendingW(ls.t, gs.p)) ∧ (pc = idle → noPending(ls.t, gs.p)), subst:[gs, ls, pc] → [ags, alsf(tid0), W3], <all paths>

Additional information

Used simplifier rules: ⊦ W3 ≠ idle; (s) ⊦ W3 ≠ ready; (s) ⊦ R1 ≠ W3; (s) ⊦ R2 ≠ W3; (s) ⊦ R3 ≠ W3; (s) ⊦ R4 ≠ W3; (s) ⊦ W3 ≠ W4; (s) ⊦ W3 ≠ W5; (s) ⊦ W3 ≠ W7; (s) ⊦ W1 ≠ W3; (s) ⊦ W2 ≠ W3; (s) Used terms: ags, alsf(tid0), W3

Proof step 31 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

⊦ FLITPSCLInv(gs, ls, pc) ↔ (pc = W1 ∨ pc = W2 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → notMember(ls.t, gs.readers)) ∧ (pc = W1 ∨ pc = W2 ∨ pc = W7 → notMember(ls.t, gs.writers)) ∧ (pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 → oneMember(ls.t, ls.l, gs.writers)) ∧ (pc = W1 ∨ pc = W2 → noPendingW(ls.t, gs.p)) ∧ (pc = W2 ∨ pc = W3 ∨ pc = W6 ∨ pc = W7 → noPending(ls.t, gs.p)) ∧ (pc = W4 ∨ pc = W5 → onePendingW(ls.t, ls.l, gs.p)) ∧ (pc = W5 → FOFollowsW(ls.t, gs.p(ls.l))) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → notMember(ls.t, gs.writers)) ∧ (pc = R1 ∨ pc = R4 → notMember(ls.t, gs.readers)) ∧ (pc = R2 ∨ pc = R3 → oneMember(ls.t, ls.l, gs.readers)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → noPendingW(ls.t, gs.p)) ∧ (pc = idle ∨ pc = ready → notMember(ls.t, gs.writers)) ∧ (pc = idle ∨ pc = ready → notMember(ls.t, gs.readers)) ∧ (pc = idle ∨ pc = ready → noPendingW(ls.t, gs.p)) ∧ (pc = idle → noPending(ls.t, gs.p))

A spec-lemma

Proof step 32 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(tid0) = W(alsf(tid0).l, alsf(tid0).v) ' + bel, ags.ctr = gs.fctr, bq(tid0).head.l = alsf(tid0).l, ags.mem = gs.pmem, bq(tid0).head.v = alsf(tid0).v, ags.writers = gs.fwriters, apcf(tid0) = W3, tid0 = alsf(tid0).t, gs.bq(tid0) ≠ [], FLITInv((gs.pq:= gs.pq(alsf(tid0).l := gs.pq(alsf(tid0).l) + W(alsf(tid0).v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), W(alsf(tid0).l, alsf(tid0).v) ∈ gs.bq(tid0), ¬ labs ((gs.pq:= gs.pq(alsf(tid0).l := gs.pq(alsf(tid0).l) + W(alsf(tid0).v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf(t), pcf(t), ags.p:= ags.p(alsf(tid0).l := ags.p(alsf(tid0).l) + W(alsf(tid0).v, tid0) '), (tid0 = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)), (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t))), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: labs-def: ⊦ labs(gs, ls, pc, ags, als, apc) ↔ ls.t = als.t ∧ (pc = idle → apc = idle) ∧ (pc = ready → apc = ready) ∧ (pc = crashed → apc = crashed) ∧ (pc = R1 → apc = R1) ∧ (pc = R2 → apc = R2) ∧ (pc = R3 → apc = R3) ∧ (pc = R4 → apc = R4) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → ls.loc = als.l) ∧ (pc = R2 ∨ pc = R3 ∨ pc = R4 → ls.val = als.v) ∧ (pc = W1 → apc = W1) ∧ (pc = W2 → apc = (SF ∈ gs.bq(ls.t) ⊃ W1;W2)) ∧ (pc = W3 → apc = W3) ∧ (pc = W4 → apc = (W(ls.loc, ls.val) ∈ gs.bq(ls.t) ⊃ W3;W4)) ∧ ( pc = W5 → apc = (W(ls.loc, ls.val) ∈ gs.bq(ls.t) ⊃ W3;(FO(ls.loc) ∈ gs.bq(ls.t) ⊃ W4;W5))) ∧ ( pc = W6 → apc = (W(ls.loc, ls.val) ∈ gs.bq(ls.t) ⊃ W3 ;(FO(ls.loc) ∈ gs.bq(ls.t) ⊃ W4;(SF ∈ gs.bq(ls.t) ⊃ W5;W6)) )) ∧ (pc = W7 → apc = W7) ∧ ( pc = W1 ∨ pc = W2 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → ls.loc = als.l) ∧ ( pc = W1 ∨ pc = W2 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → ls.val = als.v); ⊦ (gs.bq:= bq).bq = bq; (s)

Proof step 33 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(tid0) = W(alsf(tid0).l, alsf(tid0).v) ' + bel, ags.ctr = gs.fctr, bq(tid0).head.l = alsf(tid0).l, ags.mem = gs.pmem, bq(tid0).head.v = alsf(tid0).v, ags.writers = gs.fwriters, apcf(tid0) = W3, tid0 = alsf(tid0).t, gs.bq(tid0) ≠ [], FLITInv(gs, lsf, pcf), FLITInv((gs.pq:= gs.pq(alsf(tid0).l := gs.pq(alsf(tid0).l) + W(alsf(tid0).v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), W(alsf(tid0).l, alsf(tid0).v) ∈ gs.bq(tid0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf(t).t = (tid0 = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).t ∧ (pcf(t) = idle → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = idle) ∧ (pcf(t) = ready → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = ready) ∧ (pcf(t) = crashed → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R1) ∧ (pcf(t) = R2 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R2) ∧ (pcf(t) = R3 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R3) ∧ (pcf(t) = R4 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (tid0 = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (tid0 = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v) ∧ (pcf(t) = W1 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W1) ∧ ( pcf(t) = W2 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (SF ∈ (tid0 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W1;W2)) ∧ (pcf(t) = W3 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W3) ∧ ( pcf(t) = W4 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid0 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;W4)) ∧ ( pcf(t) = W5 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid0 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;(FO(lsf(t).loc) ∈ (tid0 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid0 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid0 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;(SF ∈ (tid0 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W5;W6)) )) ∧ (pcf(t) = W7 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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 = (tid0 = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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 = (tid0 = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v)

User applied rule all left

And obtained the following new goals

Rule argument

pos: left 15 terms: t abort: F discard: F computed: F

Additional information

Used terms: t

Proof step 34 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(tid0) = W(alsf(tid0).l, alsf(tid0).v) ' + bel, ags.ctr = gs.fctr, bq(tid0).head.l = alsf(tid0).l, ags.mem = gs.pmem, bq(tid0).head.v = alsf(tid0).v, ags.writers = gs.fwriters, apcf(tid0) = W3, tid0 = alsf(tid0).t, gs.bq(tid0) ≠ [], FLITInv((gs.pq:= gs.pq(alsf(tid0).l := gs.pq(alsf(tid0).l) + W(alsf(tid0).v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), reorder(ags.p, gs.pq, gs.rfo), W(alsf(tid0).l, alsf(tid0).v) ∈ gs.bq(tid0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ lsf(t).t = (tid0 = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).t ∧ (pcf(t) = idle → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = idle) ∧ (pcf(t) = ready → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = ready) ∧ (pcf(t) = crashed → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R1) ∧ (pcf(t) = R2 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R2) ∧ (pcf(t) = R3 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R3) ∧ (pcf(t) = R4 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (tid0 = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (tid0 = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v) ∧ (pcf(t) = W1 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W1) ∧ ( pcf(t) = W2 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (SF ∈ (tid0 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W1;W2)) ∧ (pcf(t) = W3 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W3) ∧ ( pcf(t) = W4 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid0 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;W4)) ∧ ( pcf(t) = W5 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid0 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3;(FO(lsf(t).loc) ∈ (tid0 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid0 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid0 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W4;(SF ∈ (tid0 = lsf(t).t ⊃ bel;gs.bq(lsf(t).t)) ⊃ W5;W6)) )) ∧ (pcf(t) = W7 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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 = (tid0 = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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 = (tid0 = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v)

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

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);

Proof step 35 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(tid0) = W(alsf(tid0).l, alsf(tid0).v) ' + bel, ags.ctr = gs.fctr, bq(tid0).head.l = alsf(tid0).l, ags.mem = gs.pmem, lsf(t).t = alsf(t).t, bq(tid0).head.v = alsf(tid0).v, ags.writers = gs.fwriters, apcf(tid0) = W3, tid0 = alsf(tid0).t, gs.bq(tid0) ≠ [], FLITInv(gs, lsf, pcf), FLITInv((gs.pq:= gs.pq(alsf(tid0).l := gs.pq(alsf(tid0).l) + W(alsf(tid0).v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), W(alsf(tid0).l, alsf(tid0).v) ∈ gs.bq(tid0), pcf(t) = idle → apcf(t) = idle, pcf(t) = ready → apcf(t) = ready, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = R1 → apcf(t) = R1, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = W1 → apcf(t) = W1, pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(alsf(t).t) ⊃ W1;W2), pcf(t) = W3 → apcf(t) = W3, pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;W4), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) ⊃ W4;W5)), pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) ⊃ W4;(SF ∈ gs.bq(alsf(t).t) ⊃ W5;W6))), pcf(t) = W7 → apcf(t) = W7, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ alsf(t).t = (tid0 = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).t ∧ (pcf(t) = idle → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = idle) ∧ (pcf(t) = ready → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = ready) ∧ (pcf(t) = crashed → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R1) ∧ (pcf(t) = R2 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R2) ∧ (pcf(t) = R3 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R3) ∧ (pcf(t) = R4 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (tid0 = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (tid0 = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v) ∧ (pcf(t) = W1 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W1) ∧ ( pcf(t) = W2 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (SF ∈ (tid0 = alsf(t).t ⊃ bel;gs.bq(alsf(t).t)) ⊃ W1;W2)) ∧ (pcf(t) = W3 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W3) ∧ ( pcf(t) = W4 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid0 = alsf(t).t ⊃ bel;gs.bq(alsf(t).t)) ⊃ W3;W4)) ∧ ( pcf(t) = W5 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid0 = alsf(t).t ⊃ bel;gs.bq(alsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid0 = alsf(t).t ⊃ bel;gs.bq(alsf(t).t)) ⊃ W4;W5) )) ∧ ( pcf(t) = W6 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid0 = alsf(t).t ⊃ bel;gs.bq(alsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid0 = alsf(t).t ⊃ bel;gs.bq(alsf(t).t)) ⊃ W4;(SF ∈ (tid0 = alsf(t).t ⊃ bel;gs.bq(alsf(t).t)) ⊃ W5;W6)) )) ∧ (pcf(t) = W7 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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 = (tid0 = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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 = (tid0 = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v)

Heuristic nonsplitting cut applied rule cut formula

And obtained the following new goals

Rule argument

fma: tid0 = alsf(t).t

Additional information

Used formulas: tid0 = alsf(t).t

Proof step 36 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(tid0) = W(alsf(tid0).l, alsf(tid0).v) ' + bel, ags.ctr = gs.fctr, bq(tid0).head.l = alsf(tid0).l, ags.mem = gs.pmem, lsf(t).t = alsf(t).t, bq(tid0).head.v = alsf(tid0).v, ags.writers = gs.fwriters, apcf(tid0) = W3, tid0 = alsf(tid0).t, tid0 = alsf(t).t, gs.bq(tid0) ≠ [], FLITInv((gs.pq:= gs.pq(alsf(tid0).l := gs.pq(alsf(tid0).l) + W(alsf(tid0).v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), W(alsf(tid0).l, alsf(tid0).v) ∈ gs.bq(tid0), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W7 → apcf(t) = W7, pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) ⊃ W4;(SF ∈ gs.bq(alsf(t).t) ⊃ W5;W6))), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) ⊃ W4;W5)), pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;W4), pcf(t) = W3 → apcf(t) = W3, pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(alsf(t).t) ⊃ W1;W2), pcf(t) = W1 → apcf(t) = W1, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R1 → apcf(t) = R1, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = ready → apcf(t) = ready, pcf(t) = idle → apcf(t) = idle, ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ alsf(t).t = (tid0 = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).t ∧ (pcf(t) = idle → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = idle) ∧ (pcf(t) = ready → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = ready) ∧ (pcf(t) = crashed → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R1) ∧ (pcf(t) = R2 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R2) ∧ (pcf(t) = R3 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R3) ∧ (pcf(t) = R4 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (tid0 = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (tid0 = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v) ∧ (pcf(t) = W1 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W1) ∧ ( pcf(t) = W2 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (SF ∈ (tid0 = alsf(t).t ⊃ bel;gs.bq(alsf(t).t)) ⊃ W1;W2)) ∧ (pcf(t) = W3 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W3) ∧ ( pcf(t) = W4 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid0 = alsf(t).t ⊃ bel;gs.bq(alsf(t).t)) ⊃ W3;W4)) ∧ ( pcf(t) = W5 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid0 = alsf(t).t ⊃ bel;gs.bq(alsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid0 = alsf(t).t ⊃ bel;gs.bq(alsf(t).t)) ⊃ W4;W5) )) ∧ ( pcf(t) = W6 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ (tid0 = alsf(t).t ⊃ bel;gs.bq(alsf(t).t)) ⊃ W3 ;(FO(lsf(t).loc) ∈ (tid0 = alsf(t).t ⊃ bel;gs.bq(alsf(t).t)) ⊃ W4;(SF ∈ (tid0 = alsf(t).t ⊃ bel;gs.bq(alsf(t).t)) ⊃ W5;W6)) )) ∧ (pcf(t) = W7 → (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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 = (tid0 = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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 = (tid0 = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v)

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list

Proof step 37 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, ags.mem = gs.pmem, alsf(t).t = alsf(alsf(t).t).t, lsf(t).t = alsf(t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, gs.bq(alsf(t).t) ≠ [], FLITInv(gs, lsf, pcf), FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∈ gs.bq(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(alsf(t).t) ⊃ W1;W2), pcf(t) = W3 → apcf(t) = W3, pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;W4), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) ⊃ W4;W5)), pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) ⊃ W4;(SF ∈ gs.bq(alsf(t).t) ⊃ W5;W6))), pcf(t) = W7 → apcf(t) = W7, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ alsf(t).t = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).t ∧ (pcf(t) = idle → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = idle) ∧ (pcf(t) = ready → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = ready) ∧ (pcf(t) = crashed → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R1) ∧ (pcf(t) = R2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R2) ∧ (pcf(t) = R3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R3) ∧ (pcf(t) = R4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v) ∧ (pcf(t) = W1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W1) ∧ (pcf(t) = W2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (SF ∈ bel ⊃ W1;W2)) ∧ (pcf(t) = W3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W3) ∧ ( pcf(t) = W4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;W4)) ∧ ( pcf(t) = W5 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)))) ∧ (pcf(t) = W7 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v)

User applied rule apply rewrite lemma

And obtained the following new goals

Rule argument

spec: FLIT, name:FLITInv, seq:⊦ FLITInv(gs, lsf, pcf) ↔ FLITGInv(gs) ∧ (∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t))), subst:[gs, lsf, pcf] → [gs, lsf, pcf], <all paths>

Additional information

Used terms: gs, lsf, pcf

Proof step 38 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

⊦ FLITInv(gs, lsf, pcf) ↔ FLITGInv(gs) ∧ (∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)))

A spec-lemma

Proof step 39 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, ags.mem = gs.pmem, lsf(t).t = alsf(t).t, alsf(t).t = alsf(alsf(t).t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, gs.bq(alsf(t).t) ≠ [], FLITGInv(gs), FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∈ gs.bq(alsf(t).t), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W7 → apcf(t) = W7, pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) ⊃ W4;(SF ∈ gs.bq(alsf(t).t) ⊃ W5;W6))), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) ⊃ W4;W5)), pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;W4), pcf(t) = W3 → apcf(t) = W3, pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(alsf(t).t) ⊃ W1;W2), pcf(t) = W1 → apcf(t) = W1, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R1 → apcf(t) = R1, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = ready → apcf(t) = ready, pcf(t) = idle → apcf(t) = idle, ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ alsf(t).t = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).t ∧ (pcf(t) = idle → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = idle) ∧ (pcf(t) = ready → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = ready) ∧ (pcf(t) = crashed → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R1) ∧ (pcf(t) = R2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R2) ∧ (pcf(t) = R3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R3) ∧ (pcf(t) = R4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v) ∧ (pcf(t) = W1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W1) ∧ (pcf(t) = W2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (SF ∈ bel ⊃ W1;W2)) ∧ (pcf(t) = W3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W3) ∧ ( pcf(t) = W4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;W4)) ∧ ( pcf(t) = W5 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)))) ∧ (pcf(t) = W7 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v)

User applied rule all left

And obtained the following new goals

Rule argument

pos: left 35 terms: alsf(t).t abort: F discard: F computed: T

Additional information

Used terms: alsf(t).t

Proof step 40 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, ags.mem = gs.pmem, alsf(t).t = alsf(alsf(t).t).t, lsf(t).t = alsf(t).t, lsf(alsf(t).t).t = alsf(t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, gs.bq(alsf(t).t) ≠ [], FLITGInv(gs), FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), FLITLInv(gs, lsf(alsf(t).t), pcf(alsf(t).t)), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∈ gs.bq(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(alsf(t).t) ⊃ W1;W2), pcf(t) = W3 → apcf(t) = W3, pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;W4), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) ⊃ W4;W5)), pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) ⊃ W4;(SF ∈ gs.bq(alsf(t).t) ⊃ W5;W6))), pcf(t) = W7 → apcf(t) = W7, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ alsf(t).t = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).t ∧ (pcf(t) = idle → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = idle) ∧ (pcf(t) = ready → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = ready) ∧ (pcf(t) = crashed → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R1) ∧ (pcf(t) = R2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R2) ∧ (pcf(t) = R3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R3) ∧ (pcf(t) = R4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v) ∧ (pcf(t) = W1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W1) ∧ (pcf(t) = W2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (SF ∈ bel ⊃ W1;W2)) ∧ (pcf(t) = W3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W3) ∧ ( pcf(t) = W4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;W4)) ∧ ( pcf(t) = W5 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)))) ∧ (pcf(t) = W7 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v)

User applied rule apply rewrite lemma

And obtained the following new goals

Rule argument

spec: FLIT, name:FLITLInv, seq:⊦ 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)), subst:[gs, ls, pc] → [gs, lsf(alsf(t).t), pcf(alsf(t).t)], <all paths>

Additional information

Used terms: gs, lsf(alsf(t).t), pcf(alsf(t).t)

Proof step 41 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

⊦ 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))

A spec-lemma

Proof step 42 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, ags.mem = gs.pmem, lsf(alsf(t).t).t = alsf(t).t, lsf(t).t = alsf(t).t, alsf(t).t = alsf(alsf(t).t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, gs.bq(alsf(t).t) ≠ [], FLITGInv(gs), FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∈ gs.bq(alsf(t).t), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W7 → apcf(t) = W7, pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) ⊃ W4;(SF ∈ gs.bq(alsf(t).t) ⊃ W5;W6))), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) ⊃ W4;W5)), pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;W4), pcf(t) = W3 → apcf(t) = W3, pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(alsf(t).t) ⊃ W1;W2), pcf(t) = W1 → apcf(t) = W1, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R1 → apcf(t) = R1, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = ready → apcf(t) = ready, pcf(t) = idle → apcf(t) = idle, pcf(alsf(t).t) = W1 ∨ pcf(alsf(t).t) = W2 ∨ pcf(alsf(t).t) = W3 ∨ pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 ∨ pcf(alsf(t).t) = W7 → notMember(lsf(alsf(t).t).t, gs.freaders), pcf(alsf(t).t) = W1 ∨ pcf(alsf(t).t) = W2 ∨ pcf(alsf(t).t) = W7 → notMember(lsf(alsf(t).t).t, gs.fwriters), pcf(alsf(t).t) = W3 ∨ pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(lsf(alsf(t).t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(alsf(t).t) = W1 ∨ pcf(alsf(t).t) = W2 → noPendingW(lsf(alsf(t).t).t, gs.bq, gs.pq), pcf(alsf(t).t) = W3 ∨ pcf(alsf(t).t) = W7 → noPending(lsf(alsf(t).t).t, gs.bq, gs.pq), pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(lsf(alsf(t).t).t, gs.bq(lsf(alsf(t).t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W1 ∨ pcf(alsf(t).t) = W3 ∨ pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W7 → ¬ SF ∈ gs.bq(lsf(alsf(t).t).t), pcf(alsf(t).t) = W3 ∨ pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 ∨ pcf(alsf(t).t) = W7 → gs.rfo(lsf(alsf(t).t).t) = [], pcf(alsf(t).t) = W3 → gs.bq(lsf(alsf(t).t).t) = [], pcf(alsf(t).t) = W4 → gs.bq(lsf(alsf(t).t).t) = [] ∨ gs.bq(lsf(alsf(t).t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W5 → gs.bq(lsf(alsf(t).t).t) = [] ∨ gs.bq(lsf(alsf(t).t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(lsf(alsf(t).t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W6 → gs.bq(lsf(alsf(t).t).t) = [] ∨ gs.bq(lsf(alsf(t).t).t) = SF ' ∨ gs.bq(lsf(alsf(t).t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(lsf(alsf(t).t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.bq(lsf(alsf(t).t).t) ≠ [] ∧ gs.bq(lsf(alsf(t).t).t).head.W? → gs.bq(lsf(alsf(t).t).t).head = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W1 ∨ pcf(alsf(t).t) = W7 → gs.rfo(lsf(alsf(t).t).t) = gs.bq(lsf(alsf(t).t).t), pcf(alsf(t).t) = W2 → gs.rfo(lsf(alsf(t).t).t) = gs.bq(lsf(alsf(t).t).t) ∨ gs.rfo(lsf(alsf(t).t).t) + SF ' = gs.bq(lsf(alsf(t).t).t), pcf(alsf(t).t) = R1 ∨ pcf(alsf(t).t) = R2 ∨ pcf(alsf(t).t) = R3 ∨ pcf(alsf(t).t) = R4 → noPendingW(lsf(alsf(t).t).t, gs.bq, gs.pq), pcf(alsf(t).t) = R1 ∨ pcf(alsf(t).t) = R2 ∨ pcf(alsf(t).t) = R3 ∨ pcf(alsf(t).t) = R4 → notMember(lsf(alsf(t).t).t, gs.fwriters), pcf(alsf(t).t) = R1 ∨ pcf(alsf(t).t) = R4 → notMember(lsf(alsf(t).t).t, gs.freaders), pcf(alsf(t).t) = R2 ∨ pcf(alsf(t).t) = R3 → oneMember(lsf(alsf(t).t).t, lsf(alsf(t).t).loc, gs.freaders), pcf(alsf(t).t) = R1 ∨ pcf(alsf(t).t) = R2 ∨ pcf(alsf(t).t) = R3 ∨ pcf(alsf(t).t) = R4 → ¬ SF ∈ gs.bq(lsf(alsf(t).t).t), pcf(alsf(t).t) = R1 ∨ pcf(alsf(t).t) = R2 ∨ pcf(alsf(t).t) = R3 ∨ pcf(alsf(t).t) = R4 → gs.rfo(lsf(alsf(t).t).t) = gs.bq(lsf(alsf(t).t).t), pcf(alsf(t).t) = idle ∨ pcf(alsf(t).t) = ready ∨ pcf(alsf(t).t) = crashed → notMember(lsf(alsf(t).t).t, gs.fwriters), pcf(alsf(t).t) = idle ∨ pcf(alsf(t).t) = ready ∨ pcf(alsf(t).t) = crashed → notMember(lsf(alsf(t).t).t, gs.freaders), pcf(alsf(t).t) = idle ∨ pcf(alsf(t).t) = ready ∨ pcf(alsf(t).t) = crashed → noPendingW(lsf(alsf(t).t).t, gs.bq, gs.pq), pcf(alsf(t).t) = idle ∨ pcf(alsf(t).t) = crashed → noPending(lsf(alsf(t).t).t, gs.bq, gs.pq), pcf(alsf(t).t) = idle ∨ pcf(alsf(t).t) = ready ∨ pcf(alsf(t).t) = crashed → ¬ SF ∈ gs.bq(lsf(alsf(t).t).t), pcf(alsf(t).t) = idle ∨ pcf(alsf(t).t) = ready ∨ pcf(alsf(t).t) = crashed → gs.rfo(lsf(alsf(t).t).t) = gs.bq(lsf(alsf(t).t).t), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ alsf(t).t = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).t ∧ (pcf(t) = idle → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = idle) ∧ (pcf(t) = ready → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = ready) ∧ (pcf(t) = crashed → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R1) ∧ (pcf(t) = R2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R2) ∧ (pcf(t) = R3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R3) ∧ (pcf(t) = R4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v) ∧ (pcf(t) = W1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W1) ∧ (pcf(t) = W2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (SF ∈ bel ⊃ W1;W2)) ∧ (pcf(t) = W3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W3) ∧ ( pcf(t) = W4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;W4)) ∧ ( pcf(t) = W5 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)))) ∧ (pcf(t) = W7 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v)

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ noPending(t, bq, pq) → bq(t) ≠ W(l, v) ' + bel; (as) ⊦ noPendingW(t, bq, pq) → bq(t) ≠ W(l, v) ' + bel; (as)

Proof step 43 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, ags.mem = gs.pmem, lsf(alsf(t).t).t = alsf(t).t, lsf(t).t = alsf(t).t, alsf(t).t = alsf(alsf(t).t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, gs.bq(alsf(t).t) ≠ [], pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITGInv(gs), FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∈ gs.bq(alsf(t).t), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W7 → apcf(t) = W7, pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) ⊃ W4;(SF ∈ gs.bq(alsf(t).t) ⊃ W5;W6))), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) ⊃ W4;W5)), pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;W4), pcf(t) = W3 → apcf(t) = W3, pcf(t) = W2 → apcf(t) = (SF ∈ gs.bq(alsf(t).t) ⊃ W1;W2), pcf(t) = W1 → apcf(t) = W1, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R1 → apcf(t) = R1, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = ready → apcf(t) = ready, pcf(t) = idle → apcf(t) = idle, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ gs.bq(alsf(t).t), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t).head.W? → gs.bq(alsf(t).t).head = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ alsf(t).t = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).t ∧ (pcf(t) = idle → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = idle) ∧ (pcf(t) = ready → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = ready) ∧ (pcf(t) = crashed → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R1) ∧ (pcf(t) = R2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R2) ∧ (pcf(t) = R3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R3) ∧ (pcf(t) = R4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v) ∧ (pcf(t) = W1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W1) ∧ (pcf(t) = W2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (SF ∈ bel ⊃ W1;W2)) ∧ (pcf(t) = W3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W3) ∧ ( pcf(t) = W4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;W4)) ∧ ( pcf(t) = W5 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)))) ∧ (pcf(t) = W7 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v)

Heuristic elimination applied rule apply elim lemma

And obtained the following new goals

Rule argument

spec: list-data, name:elim-add, seq: ⊦ x ≠ [] → (head = x.head ∧ tail = x.tail ↔ x = head + tail), subst:[x, head, tail] → [gs.bq(alsf(t).t), head, bel0]; ['a] → [Bevent]

Additional information

Used simplifier rules: ⊦ x ≠ [] → (head = x.head ∧ tail = x.tail ↔ x = head + tail); (elim) Used terms: gs.bq(alsf(t).t), head, bel0

Proof step 44 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, gs.bq(alsf(t).t) = head + bel0, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, ags.mem = gs.pmem, alsf(t).t = alsf(alsf(t).t).t, lsf(t).t = alsf(t).t, lsf(alsf(t).t).t = alsf(t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, gs.bq(alsf(t).t) ≠ [], pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITGInv(gs), FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∈ gs.bq(alsf(t).t), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → head.W? → head = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ gs.bq(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(alsf(t).t) ⊃ W1;W2), pcf(t) = W3 → apcf(t) = W3, pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;W4), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) ⊃ W4;W5)), pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) ∈ gs.bq(alsf(t).t) ⊃ W3;(FO(lsf(t).loc) ∈ gs.bq(alsf(t).t) ⊃ W4;(SF ∈ gs.bq(alsf(t).t) ⊃ W5;W6))), pcf(t) = W7 → apcf(t) = W7, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ alsf(t).t = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).t ∧ (pcf(t) = idle → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = idle) ∧ (pcf(t) = ready → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = ready) ∧ (pcf(t) = crashed → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R1) ∧ (pcf(t) = R2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R2) ∧ (pcf(t) = R3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R3) ∧ (pcf(t) = R4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v) ∧ (pcf(t) = W1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W1) ∧ (pcf(t) = W2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (SF ∈ bel ⊃ W1;W2)) ∧ (pcf(t) = W3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W3) ∧ ( pcf(t) = W4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;W4)) ∧ ( pcf(t) = W5 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)))) ∧ (pcf(t) = W7 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v)

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: ⊦ W(l, v).W?; (s) ⊦ W(l, v) ≠ SF; (s) ⊦ W(l, v) ≠ FO(l0); (s) 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) ⊦ a ' + x = a0 ' + y ↔ a = a0 ∧ x = y; (ws) in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ a + x = a ' + x; (s)

Proof step 45 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, ags.mem = gs.pmem, lsf(alsf(t).t).t = alsf(t).t, lsf(t).t = alsf(t).t, alsf(t).t = alsf(alsf(t).t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITGInv(gs), FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;W4), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W7 → apcf(t) = W7, pcf(t) = W3 → apcf(t) = W3, pcf(t) = W1 → apcf(t) = W1, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R1 → apcf(t) = R1, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = ready → apcf(t) = ready, pcf(t) = idle → apcf(t) = idle, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3 ;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)) ), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5)), pcf(t) = W2 → apcf(t) = (SF ∈ bel ⊃ W1;W2), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ alsf(t).t = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).t ∧ (pcf(t) = idle → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = idle) ∧ (pcf(t) = ready → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = ready) ∧ (pcf(t) = crashed → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R1) ∧ (pcf(t) = R2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R2) ∧ (pcf(t) = R3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R3) ∧ (pcf(t) = R4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v) ∧ (pcf(t) = W1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W1) ∧ (pcf(t) = W2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (SF ∈ bel ⊃ W1;W2)) ∧ (pcf(t) = W3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W3) ∧ ( pcf(t) = W4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;W4)) ∧ ( pcf(t) = W5 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)))) ∧ (pcf(t) = W7 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v)

User applied rule apply rewrite lemma

And obtained the following new goals

Rule argument

spec: FLITPSCweak, name:FLITPSCInv, seq:⊦ FLITPSCInv(gs, lsf, pcf) ↔ FLITPSCGInv(gs) ∧ (∀ t. lsf(t).t = t ∧ FLITPSCLInv(gs, lsf(t), pcf(t))), subst:[gs, lsf, pcf] → [ags, alsf, apcf], <all paths>

Additional information

Used terms: ags, alsf, apcf

Proof step 46 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

⊦ FLITPSCInv(gs, lsf, pcf) ↔ FLITPSCGInv(gs) ∧ (∀ t. lsf(t).t = t ∧ FLITPSCLInv(gs, lsf(t), pcf(t)))

A spec-lemma

Proof step 47 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, ags.mem = gs.pmem, alsf(t).t = alsf(alsf(t).t).t, lsf(t).t = alsf(t).t, lsf(alsf(t).t).t = alsf(t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITGInv(gs), FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), FLITPSCGInv(ags), reorder(ags.p, gs.pq, gs.rfo), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(t) = W2 → apcf(t) = (SF ∈ bel ⊃ W1;W2), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5)), pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3 ;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)) ), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(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) = W3 → apcf(t) = W3, pcf(t) = W7 → apcf(t) = W7, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;W4), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)) ⊦ alsf(t).t = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).t ∧ (pcf(t) = idle → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = idle) ∧ (pcf(t) = ready → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = ready) ∧ (pcf(t) = crashed → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R1) ∧ (pcf(t) = R2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R2) ∧ (pcf(t) = R3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R3) ∧ (pcf(t) = R4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v) ∧ (pcf(t) = W1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W1) ∧ (pcf(t) = W2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (SF ∈ bel ⊃ W1;W2)) ∧ (pcf(t) = W3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W3) ∧ ( pcf(t) = W4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;W4)) ∧ ( pcf(t) = W5 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)))) ∧ (pcf(t) = W7 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v)

User applied rule apply rewrite lemma

And obtained the following new goals

Rule argument

spec: FLITPSCweak, name:FLITPSCGInv, seq:⊦ FLITPSCGInv(gs) ↔ ctrok(gs.ctr, gs.writers) ∧ writersOk(gs.p, gs.writers) ∧ pendingOk(gs.p), subst:[gs] → [ags], <all paths>

Additional information

Used terms: ags

Proof step 48 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

⊦ FLITPSCGInv(gs) ↔ ctrok(gs.ctr, gs.writers) ∧ writersOk(gs.p, gs.writers) ∧ pendingOk(gs.p)

A spec-lemma

Proof step 49 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, ags.mem = gs.pmem, lsf(alsf(t).t).t = alsf(t).t, lsf(t).t = alsf(t).t, alsf(t).t = alsf(alsf(t).t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITGInv(gs), FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), ctrok(ags.ctr, ags.writers), pendingOk(ags.p), reorder(ags.p, gs.pq, gs.rfo), writersOk(ags.p, ags.writers), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;W4), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W7 → apcf(t) = W7, pcf(t) = W3 → apcf(t) = W3, pcf(t) = W1 → apcf(t) = W1, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R1 → apcf(t) = R1, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = ready → apcf(t) = ready, pcf(t) = idle → apcf(t) = idle, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3 ;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)) ), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5)), pcf(t) = W2 → apcf(t) = (SF ∈ bel ⊃ W1;W2), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ alsf(t).t = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).t ∧ (pcf(t) = idle → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = idle) ∧ (pcf(t) = ready → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = ready) ∧ (pcf(t) = crashed → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R1) ∧ (pcf(t) = R2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R2) ∧ (pcf(t) = R3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R3) ∧ (pcf(t) = R4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v) ∧ (pcf(t) = W1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W1) ∧ (pcf(t) = W2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (SF ∈ bel ⊃ W1;W2)) ∧ (pcf(t) = W3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W3) ∧ ( pcf(t) = W4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;W4)) ∧ ( pcf(t) = W5 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)))) ∧ (pcf(t) = W7 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v)

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Proof step 50 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, ags.mem = gs.pmem, alsf(t).t = alsf(alsf(t).t).t, lsf(t).t = alsf(t).t, lsf(alsf(t).t).t = alsf(t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITGInv(gs), FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), ctrok(gs.fctr, gs.fwriters), pendingOk(ags.p), reorder(ags.p, gs.pq, gs.rfo), writersOk(ags.p, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(t) = W2 → apcf(t) = (SF ∈ bel ⊃ W1;W2), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5)), pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3 ;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)) ), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(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) = W3 → apcf(t) = W3, pcf(t) = W7 → apcf(t) = W7, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;W4), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)) ⊦ alsf(t).t = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).t ∧ (pcf(t) = idle → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = idle) ∧ (pcf(t) = ready → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = ready) ∧ (pcf(t) = crashed → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R1) ∧ (pcf(t) = R2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R2) ∧ (pcf(t) = R3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R3) ∧ (pcf(t) = R4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v) ∧ (pcf(t) = W1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W1) ∧ (pcf(t) = W2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (SF ∈ bel ⊃ W1;W2)) ∧ (pcf(t) = W3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W3) ∧ ( pcf(t) = W4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;W4)) ∧ ( pcf(t) = W5 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)))) ∧ (pcf(t) = W7 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v)

User applied rule apply rewrite lemma

And obtained the following new goals

Rule argument

spec: FLIT, name:FLITGInv, seq:⊦ 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), subst:[gs] → [gs], <all paths>

Additional information

Used terms: gs

Proof step 51 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

⊦ 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)

A spec-lemma

Proof step 52 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, ags.mem = gs.pmem, lsf(alsf(t).t).t = alsf(t).t, lsf(t).t = alsf(t).t, alsf(t).t = alsf(alsf(t).t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(ags.p), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(ags.p, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), pcf(t) = W4 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;W4), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W7 → apcf(t) = W7, pcf(t) = W3 → apcf(t) = W3, pcf(t) = W1 → apcf(t) = W1, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R1 → apcf(t) = R1, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = ready → apcf(t) = ready, pcf(t) = idle → apcf(t) = idle, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3 ;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)) ), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5)), pcf(t) = W2 → apcf(t) = (SF ∈ bel ⊃ W1;W2), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ alsf(t).t = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).t ∧ (pcf(t) = idle → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = idle) ∧ (pcf(t) = ready → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = ready) ∧ (pcf(t) = crashed → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R1) ∧ (pcf(t) = R2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R2) ∧ (pcf(t) = R3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R3) ∧ (pcf(t) = R4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v) ∧ (pcf(t) = W1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W1) ∧ (pcf(t) = W2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (SF ∈ bel ⊃ W1;W2)) ∧ (pcf(t) = W3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W3) ∧ ( pcf(t) = W4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;W4)) ∧ ( pcf(t) = W5 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)))) ∧ (pcf(t) = W7 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v)

Heuristic if-then-else split applied rule case distinction

And obtained the following new goals

Rule argument

pos: left 33

Additional information

Proof step 53 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, ags.mem = gs.pmem, alsf(t).t = alsf(alsf(t).t).t, lsf(t).t = alsf(t).t, lsf(alsf(t).t).t = alsf(t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, pcf(t) ≠ W4, pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(ags.p), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(ags.p, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(t) = W2 → apcf(t) = (SF ∈ bel ⊃ W1;W2), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5)), pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3 ;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)) ), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(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) = W3 → apcf(t) = W3, pcf(t) = W7 → apcf(t) = W7, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)) ⊦ alsf(t).t = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).t ∧ (pcf(t) = idle → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = idle) ∧ (pcf(t) = ready → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = ready) ∧ (pcf(t) = crashed → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R1) ∧ (pcf(t) = R2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R2) ∧ (pcf(t) = R3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R3) ∧ (pcf(t) = R4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v) ∧ (pcf(t) = W1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W1) ∧ (pcf(t) = W2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (SF ∈ bel ⊃ W1;W2)) ∧ (pcf(t) = W3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W3) ∧ ( pcf(t) = W4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;W4)) ∧ ( pcf(t) = W5 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)))) ∧ (pcf(t) = W7 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v)

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Proof step 54 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, ags.mem = gs.pmem, lsf(alsf(t).t).t = alsf(t).t, lsf(t).t = alsf(t).t, alsf(t).t = alsf(alsf(t).t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, pcf(t) ≠ W4, pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(ags.p), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(ags.p, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), pcf(t) = W7 → apcf(t) = W7, pcf(t) = W3 → apcf(t) = W3, pcf(t) = W1 → apcf(t) = W1, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R1 → apcf(t) = R1, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = ready → apcf(t) = ready, pcf(t) = idle → apcf(t) = idle, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3 ;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)) ), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5)), pcf(t) = W2 → apcf(t) = (SF ∈ bel ⊃ W1;W2), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ alsf(t).t = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).t ∧ (pcf(t) = idle → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = idle) ∧ (pcf(t) = ready → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = ready) ∧ (pcf(t) = crashed → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R1) ∧ (pcf(t) = R2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R2) ∧ (pcf(t) = R3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R3) ∧ (pcf(t) = R4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v) ∧ (pcf(t) = W1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W1) ∧ (pcf(t) = W2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (SF ∈ bel ⊃ W1;W2)) ∧ (pcf(t) = W3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W3) ∧ ( pcf(t) = W5 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)))) ∧ (pcf(t) = W7 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W7) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v)

Heuristic if-then-else split applied rule case distinction

And obtained the following new goals

Rule argument

pos: left 53

Additional information

Proof step 55 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, ags.mem = gs.pmem, alsf(t).t = alsf(alsf(t).t).t, lsf(t).t = alsf(t).t, lsf(alsf(t).t).t = alsf(t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, pcf(t) ≠ W6, pcf(t) ≠ W4, pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(ags.p), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(ags.p, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ 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) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(t) = W2 → apcf(t) = (SF ∈ bel ⊃ W1;W2), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5)), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(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) = W3 → apcf(t) = W3, pcf(t) = W7 → apcf(t) = W7, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)) ⊦ alsf(t).t = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).t ∧ (pcf(t) = idle → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = idle) ∧ (pcf(t) = ready → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = ready) ∧ (pcf(t) = crashed → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R1) ∧ (pcf(t) = R2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R2) ∧ (pcf(t) = R3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R3) ∧ (pcf(t) = R4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v) ∧ (pcf(t) = W1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W1) ∧ (pcf(t) = W2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (SF ∈ bel ⊃ W1;W2)) ∧ (pcf(t) = W3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W3) ∧ ( pcf(t) = W5 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)))) ∧ (pcf(t) = W7 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W7) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v)

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Proof step 56 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, ags.mem = gs.pmem, lsf(alsf(t).t).t = alsf(t).t, lsf(t).t = alsf(t).t, alsf(t).t = alsf(alsf(t).t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, pcf(t) ≠ W6, pcf(t) ≠ W4, pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(ags.p), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(ags.p, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), pcf(t) = W7 → apcf(t) = W7, pcf(t) = W3 → apcf(t) = W3, pcf(t) = W1 → apcf(t) = W1, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R1 → apcf(t) = R1, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = ready → apcf(t) = ready, pcf(t) = idle → apcf(t) = idle, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5)), pcf(t) = W2 → apcf(t) = (SF ∈ bel ⊃ W1;W2), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W5 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W5 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ alsf(t).t = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).t ∧ (pcf(t) = idle → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = idle) ∧ (pcf(t) = ready → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = ready) ∧ (pcf(t) = crashed → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R1) ∧ (pcf(t) = R2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R2) ∧ (pcf(t) = R3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R3) ∧ (pcf(t) = R4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v) ∧ (pcf(t) = W1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W1) ∧ (pcf(t) = W2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (SF ∈ bel ⊃ W1;W2)) ∧ (pcf(t) = W3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W3) ∧ ( pcf(t) = W5 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5))) ∧ (pcf(t) = W7 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W7) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W5 ∨ pcf(t) = W7 → lsf(t).loc = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W5 ∨ pcf(t) = W7 → lsf(t).val = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v)

Heuristic nonsplitting cut applied rule cut formula

And obtained the following new goals

Rule argument

fma: alsf(t).t = t

Additional information

Used formulas: alsf(t).t = t

Proof step 57 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, ags.mem = gs.pmem, alsf(t).t = alsf(alsf(t).t).t, lsf(t).t = alsf(t).t, lsf(alsf(t).t).t = alsf(t).t, alsf(t).t = t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, pcf(t) ≠ W6, pcf(t) ≠ W4, pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(ags.p), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(ags.p, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W5 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W5 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(t) = W2 → apcf(t) = (SF ∈ bel ⊃ W1;W2), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5)), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(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) = W3 → apcf(t) = W3, pcf(t) = W7 → apcf(t) = W7, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)) ⊦ alsf(t).t = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).t ∧ (pcf(t) = idle → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = idle) ∧ (pcf(t) = ready → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = ready) ∧ (pcf(t) = crashed → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R1) ∧ (pcf(t) = R2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R2) ∧ (pcf(t) = R3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R3) ∧ (pcf(t) = R4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v) ∧ (pcf(t) = W1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W1) ∧ (pcf(t) = W2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (SF ∈ bel ⊃ W1;W2)) ∧ (pcf(t) = W3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W3) ∧ ( pcf(t) = W5 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5))) ∧ (pcf(t) = W7 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W7) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W5 ∨ pcf(t) = W7 → lsf(t).loc = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W5 ∨ pcf(t) = W7 → lsf(t).val = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v)

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: ⊦ pendingOk(bq, pq) ∧ bq(t) = W(l, v) ' + bel0 → ¬ W(l, v0) ∈ bel0; (as) ⊦ W5 ≠ crashed; (s) ⊦ W5 ≠ ready; (s) ⊦ W5 ≠ idle; (s) ⊦ R4 ≠ W5; (s) ⊦ R3 ≠ W5; (s) ⊦ R2 ≠ W5; (s) ⊦ R1 ≠ W5; (s) ⊦ W5 ≠ W7; (s) ⊦ W3 ≠ W5; (s) ⊦ W2 ≠ W5; (s) ⊦ W1 ≠ W5; (s) ⊦ W4 ≠ W5; (s) ⊦ W5 ≠ W6; (s) ⊦ W(l, v) = W(l0, v0) ↔ l = l0 ∧ v = v0; (ws) ⊦ lstepf(gs, ls, W3, a) = ls; (s) ⊦ W4 ≠ W5; (s) ⊦ W3 ≠ W4; (s) ⊦ pcstepf(gs, ls, W3, a) = W4; (s) ⊦ W3 ≠ W5; (s) a: ⊦ (x + y) + z = x + y + z; from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list

Proof step 58 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(t) = W(alsf(t).l, alsf(t).v) ' + bel, ags.ctr = gs.fctr, bq(t).head.l = alsf(t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], alsf(t).t = t, lsf(t).t = t, bq(t).head.v = alsf(t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, pcf(t) = W5, FLITInv((gs.pq:= gs.pq(alsf(t).l := gs.pq(alsf(t).l) + W(alsf(t).v, t) ')).bq:= gs.bq(t := bel), lsf, pcf), FOFollowsW(t, gs.bq(t), gs.pq(alsf(t).l), alsf(t).l), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), pendingOk(ags.p), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(ags.p, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), W(alsf(t).l, alsf(t).v) ∈ gs.bq(t), ¬ noPending(t, gs.bq, gs.pq), ¬ noPendingW(t, gs.bq, gs.pq), ¬ SF ∈ bel, ¬ FO(alsf(t).l) ∈ bel, ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), gs.bq(t) = FO(alsf(t).l) ' ∨ gs.bq(t) = W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' ⊦

User applied rule case distinction

And obtained the following new goals

Rule argument

pos: left 34

Additional information

Used simplifier rules: eq-05: ⊦ x = a ' + y ∧ x = a0 ' + z → a = a0 ∧ y = z; (forward) from specification list in-15: ⊦ x + a ' = y → a ∈ y; (forward) from specification list a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a ∈ a0 ' ↔ a = a0; (s)

Proof step 59 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(t) = W(alsf(t).l, alsf(t).v) ' + bel, gs.bq(t) = FO(alsf(t).l) ', ags.ctr = gs.fctr, bq(t).head.l = alsf(t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], lsf(t).t = t, alsf(t).t = t, bq(t).head.v = alsf(t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, pcf(t) = W5, FLITInv((gs.pq:= gs.pq(alsf(t).l := gs.pq(alsf(t).l) + W(alsf(t).v, t) ')).bq:= gs.bq(t := bel), lsf, pcf), FOFollowsW(t, gs.bq(t), gs.pq(alsf(t).l), alsf(t).l), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(ags.p), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(ags.p, gs.fwriters), W(alsf(t).l, alsf(t).v) ∈ gs.bq(t), ¬ noPending(t, gs.bq, gs.pq), ¬ noPendingW(t, gs.bq, gs.pq), ¬ SF ∈ bel, ¬ FO(alsf(t).l) ∈ bel, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)) ⊦

User applied rule subst equation

And obtained the following new goals

Rule argument

pos: left 2, flags:

Additional information

Proof step 60 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

FO(alsf(t).l) ' = W(alsf(t).l, alsf(t).v) ' + bel, gs.bq(t) = FO(alsf(t).l) ', ags.ctr = gs.fctr, bq(t).head.l = alsf(t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], alsf(t).t = t, lsf(t).t = t, bq(t).head.v = alsf(t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, pcf(t) = W5, FLITInv((gs.pq:= gs.pq(alsf(t).l := gs.pq(alsf(t).l) + W(alsf(t).v, t) ')).bq:= gs.bq(t := bel), lsf, pcf), FOFollowsW(t, FO(alsf(t).l) ', gs.pq(alsf(t).l), alsf(t).l), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), pendingOk(ags.p), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(ags.p, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), W(alsf(t).l, alsf(t).v) ∈ FO(alsf(t).l) ', ¬ noPending(t, gs.bq, gs.pq), ¬ noPendingW(t, gs.bq, gs.pq), ¬ SF ∈ bel, ¬ FO(alsf(t).l) ∈ bel, ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦

Heuristic simplifier applied rule simplifier

And closed the goal!

Rule argument

Additional information

Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ W(l, v) ≠ FO(l0); (s) ⊦ a ' = a0 ' + x ↔ a = a0 ∧ x = []; (ws)

Proof step 61 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, ags.mem = gs.pmem, alsf(t).t = alsf(alsf(t).t).t, lsf(t).t = alsf(t).t, lsf(alsf(t).t).t = alsf(t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, alsf(t).t ≠ t, pcf(t) ≠ W6, pcf(t) ≠ W4, pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(ags.p), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(ags.p, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W5 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W5 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(t) = W2 → apcf(t) = (SF ∈ bel ⊃ W1;W2), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5)), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(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) = W3 → apcf(t) = W3, pcf(t) = W7 → apcf(t) = W7, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)) ⊦ alsf(t).t = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).t ∧ (pcf(t) = idle → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = idle) ∧ (pcf(t) = ready → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = ready) ∧ (pcf(t) = crashed → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R1) ∧ (pcf(t) = R2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R2) ∧ (pcf(t) = R3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R3) ∧ (pcf(t) = R4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v) ∧ (pcf(t) = W1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W1) ∧ (pcf(t) = W2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (SF ∈ bel ⊃ W1;W2)) ∧ (pcf(t) = W3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W3) ∧ ( pcf(t) = W5 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5))) ∧ (pcf(t) = W7 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W7) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W5 ∨ pcf(t) = W7 → lsf(t).loc = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W5 ∨ pcf(t) = W7 → lsf(t).val = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v)

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: ⊦ W5 ≠ W7; (s) ⊦ W3 ≠ W5; (s) ⊦ W1 ≠ W5; (s) ⊦ R4 ≠ W5; (s) ⊦ R3 ≠ W5; (s) ⊦ R2 ≠ W5; (s) ⊦ R1 ≠ W5; (s) ⊦ W5 ≠ crashed; (s) ⊦ W5 ≠ ready; (s) ⊦ W5 ≠ idle; (s) ⊦ W2 ≠ W5; (s) ⊦ W5 ≠ W6; (s) ⊦ W4 ≠ W5; (s)

Proof step 62 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, alsf(t).t = alsf(alsf(t).t).t, lsf(t).t = alsf(t).t, lsf(alsf(t).t).t = alsf(t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = (W(alsf(t).l, alsf(t).v) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(alsf(t).l, alsf(t).v) ∈ bel ⊃ W3;(FO(alsf(t).l) ∈ bel ⊃ W4;W5)), apcf(alsf(t).t) = W3, pcf(t) = W5, alsf(t).t ≠ t, apcf(t) ≠ (W(alsf(t).l, alsf(t).v) ∈ bel ⊃ W3;(FO(alsf(t).l) ∈ bel ⊃ W4;W5)), pcf(alsf(t).t) ≠ crashed, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W1, FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(ags.p), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(ags.p, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)) ⊦

Heuristic nonsplitting cut applied rule cut formula

And obtained the following new goals

Rule argument

fma: W(alsf(t).l, alsf(t).v) ∈ bel

Additional information

Used formulas: W(alsf(t).l, alsf(t).v) ∈ bel

Proof step 63 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, lsf(alsf(t).t).t = alsf(t).t, lsf(t).t = alsf(t).t, alsf(t).t = alsf(alsf(t).t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, apcf(t) = (W(alsf(t).l, alsf(t).v) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(alsf(t).l, alsf(t).v) ∈ bel ⊃ W3;(FO(alsf(t).l) ∈ bel ⊃ W4;W5)), pcf(t) = W5, alsf(t).t ≠ t, apcf(t) ≠ (W(alsf(t).l, alsf(t).v) ∈ bel ⊃ W3;(FO(alsf(t).l) ∈ bel ⊃ W4;W5)), pcf(alsf(t).t) ≠ crashed, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W1, FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(ags.p), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(ags.p, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), ¬ W(alsf(t).l, alsf(t).v) ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Proof step 64 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, alsf(t).t = alsf(alsf(t).t).t, lsf(t).t = alsf(t).t, lsf(alsf(t).t).t = alsf(t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, apcf(t) = (W(alsf(t).l, alsf(t).v) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ⊃ W3;(FO(alsf(t).l) ∈ bel ⊃ W4;W5)), pcf(t) = W5, alsf(t).t ≠ t, apcf(t) ≠ (FO(alsf(t).l) ∈ bel ⊃ W4;W5), pcf(alsf(t).t) ≠ crashed, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W1, FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(ags.p), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(ags.p, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), ¬ W(alsf(t).l, alsf(t).v) ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)) ⊦

Heuristic nonsplitting cut applied rule cut formula

And obtained the following new goals

Rule argument

fma: W(alsf(t).l, alsf(t).v) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v)

Additional information

Used formulas: W(alsf(t).l, alsf(t).v) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v)

Proof step 65 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, lsf(alsf(t).t).t = alsf(t).t, lsf(t).t = alsf(t).t, alsf(t).t = alsf(alsf(t).t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, W(alsf(t).l, alsf(t).v) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v), apcf(t) = (W(alsf(t).l, alsf(t).v) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ⊃ W3;(FO(alsf(t).l) ∈ bel ⊃ W4;W5)), apcf(alsf(t).t) = W3, pcf(t) = W5, alsf(t).t ≠ t, apcf(t) ≠ (FO(alsf(t).l) ∈ bel ⊃ W4;W5), pcf(alsf(t).t) ≠ crashed, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W1, FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(ags.p), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(ags.p, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), ¬ W(alsf(t).l, alsf(t).v) ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: ⊦ W3 ≠ W5; (s) ⊦ W3 ≠ W4; (s) a: ⊦ (x + y) + z = x + y + z; from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ W(l, v) = W(l0, v0) ↔ l = l0 ∧ v = v0; (ws)

Proof step 66 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(t).l, alsf(t).v) ' + bel, ags.ctr = gs.fctr, alsf(t).l = alsf(alsf(t).t).l, bq(alsf(t).t).head.l = alsf(t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, lsf(alsf(t).t).t = alsf(t).t, lsf(t).t = alsf(t).t, alsf(t).t = alsf(alsf(t).t).t, alsf(t).v = alsf(alsf(t).t).v, bq(alsf(t).t).head.v = alsf(t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, apcf(alsf(t).t) = W3, pcf(t) = W5, alsf(t).t ≠ t, pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(t).l := gs.pq(alsf(t).l) + W(alsf(t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(ags.p), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(ags.p, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), W(alsf(t).l, alsf(t).v) ∈ gs.bq(alsf(t).t), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), ¬ W(alsf(t).l, alsf(t).v) ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(t).l, alsf(t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦

Heuristic quantifier closing applied rule all left

And closed the goal!

Rule argument

pos: left 51 terms: t

Additional information

Used terms: t

Proof step 67 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, ags.mem = gs.pmem, alsf(t).t = alsf(alsf(t).t).t, lsf(t).t = alsf(t).t, lsf(alsf(t).t).t = alsf(t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, apcf(t) = (W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3 ;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)) ), pcf(t) ≠ W4, pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(ags.p), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(ags.p, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ 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) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(t) = W2 → apcf(t) = (SF ∈ bel ⊃ W1;W2), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5)), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(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) = W3 → apcf(t) = W3, pcf(t) = W7 → apcf(t) = W7, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)) ⊦ alsf(t).t = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).t ∧ (pcf(t) = idle → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = idle) ∧ (pcf(t) = ready → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = ready) ∧ (pcf(t) = crashed → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R1) ∧ (pcf(t) = R2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R2) ∧ (pcf(t) = R3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R3) ∧ (pcf(t) = R4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v) ∧ (pcf(t) = W1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W1) ∧ (pcf(t) = W2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (SF ∈ bel ⊃ W1;W2)) ∧ (pcf(t) = W3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W3) ∧ ( pcf(t) = W5 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)))) ∧ (pcf(t) = W7 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W7) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v)

Heuristic if-then-else split applied rule case distinction

And obtained the following new goals

Rule argument

pos: left 11

Additional information

Proof step 68 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, ags.mem = gs.pmem, lsf(alsf(t).t).t = alsf(t).t, lsf(t).t = alsf(t).t, alsf(t).t = alsf(alsf(t).t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, apcf(t) = W3, pcf(t) ≠ W4, pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(ags.p), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(ags.p, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), pcf(t) = W7 → apcf(t) = W7, pcf(t) = W3 → apcf(t) = W3, pcf(t) = W1 → apcf(t) = W1, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R1 → apcf(t) = R1, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = ready → apcf(t) = ready, pcf(t) = idle → apcf(t) = idle, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5)), pcf(t) = W2 → apcf(t) = (SF ∈ bel ⊃ W1;W2), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊦ alsf(t).t = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).t ∧ (pcf(t) = idle → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = idle) ∧ (pcf(t) = ready → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = ready) ∧ (pcf(t) = crashed → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R1) ∧ (pcf(t) = R2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R2) ∧ (pcf(t) = R3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R3) ∧ (pcf(t) = R4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v) ∧ (pcf(t) = W1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W1) ∧ (pcf(t) = W2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (SF ∈ bel ⊃ W1;W2)) ∧ (pcf(t) = W3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W3) ∧ ( pcf(t) = W5 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)))) ∧ (pcf(t) = W7 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W7) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v)

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: ⊦ lstepf(gs, ls, W3, a) = ls; (s) ⊦ pcstepf(gs, ls, W3, a) = W4; (s) ⊦ W3 ≠ W4; (s) ⊦ W2 ≠ W3; (s) ⊦ W1 ≠ W3; (s) ⊦ W3 ≠ idle; (s) ⊦ W3 ≠ ready; (s) ⊦ W3 ≠ crashed; (s) ⊦ R1 ≠ W3; (s) ⊦ R2 ≠ W3; (s) ⊦ R3 ≠ W3; (s) ⊦ R4 ≠ W3; (s) ⊦ W3 ≠ W7; (s)

Proof step 69 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, ags.mem = gs.pmem, lsf(alsf(t).t).t = alsf(t).t, lsf(t).t = alsf(t).t, alsf(t).t = alsf(alsf(t).t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, apcf(t) = W3, pcf(alsf(t).t) ≠ crashed, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W1, pcf(t) ≠ W4, pcf(t) ≠ W7, pcf(t) ≠ W1, pcf(t) ≠ R4, pcf(t) ≠ R3, pcf(t) ≠ R2, pcf(t) ≠ R1, pcf(t) ≠ crashed, pcf(t) ≠ ready, pcf(t) ≠ idle, pcf(t) ≠ W2, FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(ags.p), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(ags.p, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(t) = W3 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).val = alsf(t).v, pcf(t) = W3 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).loc = alsf(t).l, ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊦ (pcf(t) = W3 → alsf(t).t ≠ t) ∧ (pcf(t) = W5 → (alsf(t).t = t ⊃ W4;W3) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5))) ∧ (pcf(t) = W6 → (alsf(t).t = t ⊃ W4;W3) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6))))

Heuristic if-then-else split applied rule case distinction

And obtained the following new goals

Rule argument

pos: right 1

Additional information

Used simplifier rules: in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list a: ⊦ (x + y) + z = x + y + z; from specification list

Proof step 70 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, ags.mem = gs.pmem, alsf(t).t = alsf(alsf(t).t).t, lsf(t).t = alsf(t).t, lsf(alsf(t).t).t = alsf(t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, ags.writers = gs.fwriters, apcf(t) = W3, apcf(alsf(t).t) = W3, pcf(t) = W5, (alsf(t).t = t ⊃ W4;W3) ≠ (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5)), pcf(alsf(t).t) ≠ crashed, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W1, pcf(t) ≠ W4, pcf(t) ≠ W7, pcf(t) ≠ W1, pcf(t) ≠ R4, pcf(t) ≠ R3, pcf(t) ≠ R2, pcf(t) ≠ R1, pcf(t) ≠ crashed, pcf(t) ≠ ready, pcf(t) ≠ idle, pcf(t) ≠ W2, FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(ags.p), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(ags.p, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), pcf(t) = W3 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).loc = alsf(t).l, pcf(t) = W3 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).val = alsf(t).v, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊦

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: ⊦ W4 ≠ W5; (s) ⊦ W5 ≠ W7; (s) ⊦ W1 ≠ W5; (s) ⊦ R4 ≠ W5; (s) ⊦ R3 ≠ W5; (s) ⊦ R2 ≠ W5; (s) ⊦ R1 ≠ W5; (s) ⊦ W5 ≠ crashed; (s) ⊦ W5 ≠ ready; (s) ⊦ W5 ≠ idle; (s) ⊦ W2 ≠ W5; (s)

Proof step 71 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, alsf(t).t = alsf(alsf(t).t).t, lsf(t).t = alsf(t).t, lsf(alsf(t).t).t = alsf(t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, apcf(alsf(t).t) = W3, pcf(t) = W5, (alsf(t).t = t ⊃ W4;W3) ≠ (W(alsf(t).l, alsf(t).v) ∈ bel ⊃ W3;(FO(alsf(t).l) ∈ bel ⊃ W4;W5)), pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(ags.p), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(ags.p, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), W(alsf(t).l, alsf(t).v) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(alsf(t).l, alsf(t).v) ∈ bel ⊦

Heuristic nonsplitting cut applied rule cut formula

And obtained the following new goals

Rule argument

fma: W(alsf(t).l, alsf(t).v) ∈ bel

Additional information

Used simplifier rules: ⊦ W3 ≠ W4; (s) in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ W5 ≠ crashed; (s) ⊦ W5 ≠ ready; (s) ⊦ W5 ≠ idle; (s) ⊦ R4 ≠ W5; (s) ⊦ R3 ≠ W5; (s) ⊦ R2 ≠ W5; (s) ⊦ R1 ≠ W5; (s) ⊦ W5 ≠ W7; (s) ⊦ W3 ≠ W5; (s) ⊦ W2 ≠ W5; (s) ⊦ W1 ≠ W5; (s) ⊦ pendingOk(bq, pq) ∧ bq(t) = W(l, v) ' + bel0 → ¬ W(l, v0) ∈ bel0; (as) Used formulas: W(alsf(t).l, alsf(t).v) ∈ bel

Proof step 72 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, lsf(alsf(t).t).t = alsf(t).t, lsf(t).t = alsf(t).t, alsf(t).t = alsf(alsf(t).t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, apcf(t) = W3, pcf(t) = W5, (alsf(t).t = t ⊃ W4;W3) ≠ (W(alsf(t).l, alsf(t).v) ∈ bel ⊃ W3;(FO(alsf(t).l) ∈ bel ⊃ W4;W5)), pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(ags.p), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(ags.p, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), ¬ W(alsf(t).l, alsf(t).v) ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), W(alsf(t).l, alsf(t).v) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(alsf(t).l, alsf(t).v) ∈ bel ⊦

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ W(l, v) = W(l0, v0) ↔ l = l0 ∧ v = v0; (ws)

Proof step 73 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(t).l, alsf(t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(t).l, alsf(t).l = alsf(alsf(t).t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, alsf(t).t = alsf(alsf(t).t).t, lsf(t).t = alsf(t).t, lsf(alsf(t).t).t = alsf(t).t, bq(alsf(t).t).head.v = alsf(t).v, alsf(t).v = alsf(alsf(t).t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, apcf(alsf(t).t) = W3, pcf(t) = W5, (alsf(t).t = t ⊃ W4;W3) ≠ (FO(alsf(t).l) ∈ bel ⊃ W4;W5), pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(t).l := gs.pq(alsf(t).l) + W(alsf(t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(ags.p), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(ags.p, gs.fwriters), W(alsf(t).l, alsf(t).v) ∈ gs.bq(alsf(t).t), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), ¬ W(alsf(t).l, alsf(t).v) ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(t).l, alsf(t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)) ⊦

Heuristic nonsplitting cut applied rule cut formula

And obtained the following new goals

Rule argument

fma: alsf(t).t = t

Additional information

Used formulas: alsf(t).t = t

Proof step 74 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(t).l, alsf(t).v) ' + bel, ags.ctr = gs.fctr, alsf(t).l = alsf(alsf(t).t).l, bq(alsf(t).t).head.l = alsf(t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, lsf(alsf(t).t).t = alsf(t).t, lsf(t).t = alsf(t).t, alsf(t).t = alsf(alsf(t).t).t, alsf(t).t = t, alsf(t).v = alsf(alsf(t).t).v, bq(alsf(t).t).head.v = alsf(t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, apcf(t) = W3, pcf(t) = W5, (alsf(t).t = t ⊃ W4;W3) ≠ (FO(alsf(t).l) ∈ bel ⊃ W4;W5), pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(t).l := gs.pq(alsf(t).l) + W(alsf(t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(ags.p), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(ags.p, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), W(alsf(t).l, alsf(t).v) ∈ gs.bq(alsf(t).t), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), ¬ W(alsf(t).l, alsf(t).v) ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(t).l, alsf(t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: ⊦ W4 ≠ W5; (s) ⊦ W5 ≠ W6; (s) ⊦ W(l, v) = W(l0, v0) ↔ l = l0 ∧ v = v0; (ws) ⊦ W1 ≠ W5; (s) ⊦ W2 ≠ W5; (s) ⊦ W3 ≠ W5; (s) ⊦ W5 ≠ W7; (s) ⊦ R1 ≠ W5; (s) ⊦ R2 ≠ W5; (s) ⊦ R3 ≠ W5; (s) ⊦ R4 ≠ W5; (s) ⊦ W5 ≠ idle; (s) ⊦ W5 ≠ ready; (s) ⊦ W5 ≠ crashed; (s) a: ⊦ (x + y) + z = x + y + z; from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ W4 ≠ W5; (s)

Proof step 75 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(t) = W(alsf(t).l, alsf(t).v) ' + bel, ags.ctr = gs.fctr, bq(t).head.l = alsf(t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], lsf(t).t = t, alsf(t).t = t, bq(t).head.v = alsf(t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, pcf(t) = W5, FLITInv((gs.pq:= gs.pq(alsf(t).l := gs.pq(alsf(t).l) + W(alsf(t).v, t) ')).bq:= gs.bq(t := bel), lsf, pcf), FOFollowsW(t, gs.bq(t), gs.pq(alsf(t).l), alsf(t).l), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), pendingOk(ags.p), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(ags.p, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), W(alsf(t).l, alsf(t).v) ∈ gs.bq(t), ¬ noPending(t, gs.bq, gs.pq), ¬ noPendingW(t, gs.bq, gs.pq), ¬ FO(alsf(t).l) ∈ bel, ¬ W(alsf(t).l, alsf(t).v) ∈ bel, ¬ SF ∈ bel, ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), gs.bq(t) = FO(alsf(t).l) ' ∨ gs.bq(t) = W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' ⊦

User applied rule case distinction

And obtained the following new goals

Rule argument

pos: left 35

Additional information

Used simplifier rules: eq-05: ⊦ x = a ' + y ∧ x = a0 ' + z → a = a0 ∧ y = z; (forward) from specification list in-15: ⊦ x + a ' = y → a ∈ y; (forward) from specification list a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ FO(l) ≠ SF; (s) ⊦ W(l, v) ≠ FO(l0); (s) ⊦ a ∈ a0 ' ↔ a = a0; (s)

Proof step 76 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(t) = W(alsf(t).l, alsf(t).v) ' + bel, gs.bq(t) = FO(alsf(t).l) ', ags.ctr = gs.fctr, bq(t).head.l = alsf(t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], alsf(t).t = t, lsf(t).t = t, bq(t).head.v = alsf(t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, pcf(t) = W5, FLITInv((gs.pq:= gs.pq(alsf(t).l := gs.pq(alsf(t).l) + W(alsf(t).v, t) ')).bq:= gs.bq(t := bel), lsf, pcf), FOFollowsW(t, gs.bq(t), gs.pq(alsf(t).l), alsf(t).l), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(ags.p), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(ags.p, gs.fwriters), W(alsf(t).l, alsf(t).v) ∈ gs.bq(t), ¬ noPending(t, gs.bq, gs.pq), ¬ noPendingW(t, gs.bq, gs.pq), ¬ FO(alsf(t).l) ∈ bel, ¬ W(alsf(t).l, alsf(t).v) ∈ bel, ¬ SF ∈ bel, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)) ⊦

User applied rule subst equation

And closed the goal!

Rule argument

pos: left 2, flags: discard

Additional information

Used simplifier rules: ⊦ a ' = a0 ' + x ↔ a = a0 ∧ x = []; (ws) ⊦ W(l, v) ≠ FO(l0); (s) a: ⊦ (x + y) + z = x + y + z; from specification list

Proof step 77 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(t).l, alsf(t).v) ' + bel, ags.ctr = gs.fctr, alsf(t).l = alsf(alsf(t).t).l, bq(alsf(t).t).head.l = alsf(t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, lsf(alsf(t).t).t = alsf(t).t, lsf(t).t = alsf(t).t, alsf(t).t = alsf(alsf(t).t).t, alsf(t).v = alsf(alsf(t).t).v, bq(alsf(t).t).head.v = alsf(t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, apcf(t) = W3, pcf(t) = W5, alsf(t).t ≠ t, (alsf(t).t = t ⊃ W4;W3) ≠ (FO(alsf(t).l) ∈ bel ⊃ W4;W5), pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(t).l := gs.pq(alsf(t).l) + W(alsf(t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(ags.p), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(ags.p, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), W(alsf(t).l, alsf(t).v) ∈ gs.bq(alsf(t).t), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), ¬ W(alsf(t).l, alsf(t).v) ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(t).l, alsf(t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: ⊦ W3 ≠ W5; (s) ⊦ W3 ≠ W4; (s)

Proof step 78 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(t).l, alsf(t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(t).l, alsf(t).l = alsf(alsf(t).t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, alsf(t).t = alsf(alsf(t).t).t, lsf(t).t = alsf(t).t, lsf(alsf(t).t).t = alsf(t).t, bq(alsf(t).t).head.v = alsf(t).v, alsf(t).v = alsf(alsf(t).t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, apcf(alsf(t).t) = W3, pcf(t) = W5, alsf(t).t ≠ t, pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(t).l := gs.pq(alsf(t).l) + W(alsf(t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(ags.p), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(ags.p, gs.fwriters), W(alsf(t).l, alsf(t).v) ∈ gs.bq(alsf(t).t), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), ¬ W(alsf(t).l, alsf(t).v) ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(t).l, alsf(t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)) ⊦

Heuristic quantifier closing applied rule all left

And closed the goal!

Rule argument

pos: left 53 terms: t

Additional information

Used terms: t

Proof step 79 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, ags.mem = gs.pmem, alsf(t).t = alsf(alsf(t).t).t, lsf(t).t = alsf(t).t, lsf(alsf(t).t).t = alsf(t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, ags.writers = gs.fwriters, apcf(t) = W3, apcf(alsf(t).t) = W3, pcf(t) = W6, (alsf(t).t = t ⊃ W4;W3) ≠ (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6))), pcf(alsf(t).t) ≠ crashed, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W1, pcf(t) ≠ W4, pcf(t) ≠ W7, pcf(t) ≠ W1, pcf(t) ≠ R4, pcf(t) ≠ R3, pcf(t) ≠ R2, pcf(t) ≠ R1, pcf(t) ≠ crashed, pcf(t) ≠ ready, pcf(t) ≠ idle, pcf(t) ≠ W2, FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(ags.p), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(ags.p, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), pcf(t) = W3 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).loc = alsf(t).l, pcf(t) = W3 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).val = alsf(t).v, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊦

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: ⊦ W4 ≠ W6; (s) ⊦ W6 ≠ W7; (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) ⊦ W2 ≠ W6; (s)

Proof step 80 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, alsf(t).t = alsf(alsf(t).t).t, lsf(t).t = alsf(t).t, lsf(alsf(t).t).t = alsf(t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, apcf(alsf(t).t) = W3, pcf(t) = W6, (alsf(t).t = t ⊃ W4;W3) ≠ (W(alsf(t).l, alsf(t).v) ∈ bel ⊃ W3;(FO(alsf(t).l) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6))), pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(ags.p), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(ags.p, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), W(alsf(t).l, alsf(t).v) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(alsf(t).l, alsf(t).v) ∈ bel ⊦

Heuristic nonsplitting cut applied rule cut formula

And obtained the following new goals

Rule argument

fma: W(alsf(t).l, alsf(t).v) ∈ bel

Additional information

Used simplifier rules: ⊦ W3 ≠ W4; (s) in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ W6 ≠ crashed; (s) ⊦ W6 ≠ ready; (s) ⊦ W6 ≠ idle; (s) ⊦ R4 ≠ W6; (s) ⊦ R3 ≠ W6; (s) ⊦ R2 ≠ W6; (s) ⊦ R1 ≠ W6; (s) ⊦ W6 ≠ W7; (s) ⊦ W3 ≠ W6; (s) ⊦ W2 ≠ W6; (s) ⊦ W1 ≠ W6; (s) ⊦ pendingOk(bq, pq) ∧ bq(t) = W(l, v) ' + bel0 → ¬ W(l, v0) ∈ bel0; (as) Used formulas: W(alsf(t).l, alsf(t).v) ∈ bel

Proof step 81 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, lsf(alsf(t).t).t = alsf(t).t, lsf(t).t = alsf(t).t, alsf(t).t = alsf(alsf(t).t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, apcf(t) = W3, pcf(t) = W6, (alsf(t).t = t ⊃ W4;W3) ≠ (W(alsf(t).l, alsf(t).v) ∈ bel ⊃ W3;(FO(alsf(t).l) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6))), pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(ags.p), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(ags.p, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), ¬ W(alsf(t).l, alsf(t).v) ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), W(alsf(t).l, alsf(t).v) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(alsf(t).l, alsf(t).v) ∈ bel ⊦

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ W(l, v) = W(l0, v0) ↔ l = l0 ∧ v = v0; (ws)

Proof step 82 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(t).l, alsf(t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(t).l, alsf(t).l = alsf(alsf(t).t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, alsf(t).t = alsf(alsf(t).t).t, lsf(t).t = alsf(t).t, lsf(alsf(t).t).t = alsf(t).t, bq(alsf(t).t).head.v = alsf(t).v, alsf(t).v = alsf(alsf(t).t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, apcf(alsf(t).t) = W3, pcf(t) = W6, (alsf(t).t = t ⊃ W4;W3) ≠ (FO(alsf(t).l) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)), pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(t).l := gs.pq(alsf(t).l) + W(alsf(t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(ags.p), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(ags.p, gs.fwriters), W(alsf(t).l, alsf(t).v) ∈ gs.bq(alsf(t).t), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), ¬ W(alsf(t).l, alsf(t).v) ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(t).l, alsf(t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)) ⊦

Heuristic nonsplitting cut applied rule cut formula

And obtained the following new goals

Rule argument

fma: alsf(t).t = t

Additional information

Used formulas: alsf(t).t = t

Proof step 83 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(t).l, alsf(t).v) ' + bel, ags.ctr = gs.fctr, alsf(t).l = alsf(alsf(t).t).l, bq(alsf(t).t).head.l = alsf(t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, lsf(alsf(t).t).t = alsf(t).t, lsf(t).t = alsf(t).t, alsf(t).t = alsf(alsf(t).t).t, alsf(t).t = t, alsf(t).v = alsf(alsf(t).t).v, bq(alsf(t).t).head.v = alsf(t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, apcf(t) = W3, pcf(t) = W6, (alsf(t).t = t ⊃ W4;W3) ≠ (FO(alsf(t).l) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)), pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(t).l := gs.pq(alsf(t).l) + W(alsf(t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(ags.p), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(ags.p, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), W(alsf(t).l, alsf(t).v) ∈ gs.bq(alsf(t).t), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), ¬ W(alsf(t).l, alsf(t).v) ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(t).l, alsf(t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: ⊦ W5 ≠ W6; (s) ⊦ W4 ≠ W6; (s) ⊦ W(l, v) ≠ FO(l0); (s) a: ⊦ (x + y) + z = x + y + z; from specification list in-15: ⊦ x + a ' = y → a ∈ y; (forward) from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list eq-05: ⊦ x = a ' + y ∧ x = a0 ' + z → a = a0 ∧ y = z; (forward) from specification list ⊦ W(l, v) = W(l0, v0) ↔ l = l0 ∧ v = v0; (ws) ⊦ W1 ≠ W6; (s) ⊦ W2 ≠ W6; (s) ⊦ W3 ≠ W6; (s) ⊦ W6 ≠ W7; (s) ⊦ R1 ≠ W6; (s) ⊦ R2 ≠ W6; (s) ⊦ R3 ≠ W6; (s) ⊦ R4 ≠ W6; (s) ⊦ W6 ≠ idle; (s) ⊦ W6 ≠ ready; (s) ⊦ W6 ≠ crashed; (s) ⊦ W4 ≠ W6; (s) ⊦ W4 ≠ W5; (s)

Proof step 84 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(t) = W(alsf(t).l, alsf(t).v) ' + bel, ags.ctr = gs.fctr, bq(t).head.l = alsf(t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], lsf(t).t = t, alsf(t).t = t, bq(t).head.v = alsf(t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, pcf(t) = W6, gs.bq(t) ≠ FO(alsf(t).l) ' + SF ', FLITInv((gs.pq:= gs.pq(alsf(t).l := gs.pq(alsf(t).l) + W(alsf(t).v, t) ')).bq:= gs.bq(t := bel), lsf, pcf), FOFollowsW(t, gs.bq(t), gs.pq(alsf(t).l), alsf(t).l), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), pendingOk(ags.p), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(ags.p, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), W(alsf(t).l, alsf(t).v) ∈ gs.bq(t), ¬ noPending(t, gs.bq, gs.pq), ¬ noPendingW(t, gs.bq, gs.pq), ¬ FO(alsf(t).l) ∈ bel, ¬ W(alsf(t).l, alsf(t).v) ∈ bel, ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), gs.bq(t) = W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ' ∨ gs.bq(t) = SF ' ⊦

User applied rule case distinction

And closed the goal!

Rule argument

pos: left 35

Additional information

Used simplifier rules: in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ a ' = a0 ' + x ↔ a = a0 ∧ x = []; (ws) ⊦ W(l, v) ≠ SF; (s) a: ⊦ (x + y) + z = x + y + z; from specification list eq-05: ⊦ x = a ' + y ∧ x = a0 ' + z → a = a0 ∧ y = z; (forward) from specification list in-15: ⊦ x + a ' = y → a ∈ y; (forward) from specification list ⊦ W(l, v) ≠ FO(l0); (s) ⊦ a ∈ a0 ' ↔ a = a0; (s) ⊦ a ∈ a0 ' + x ↔ ¬(a ≠ a0 ∧ ¬ a ∈ x); (ss)

Proof step 85 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(t).l, alsf(t).v) ' + bel, ags.ctr = gs.fctr, alsf(t).l = alsf(alsf(t).t).l, bq(alsf(t).t).head.l = alsf(t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, lsf(alsf(t).t).t = alsf(t).t, lsf(t).t = alsf(t).t, alsf(t).t = alsf(alsf(t).t).t, alsf(t).v = alsf(alsf(t).t).v, bq(alsf(t).t).head.v = alsf(t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, apcf(t) = W3, pcf(t) = W6, alsf(t).t ≠ t, (alsf(t).t = t ⊃ W4;W3) ≠ (FO(alsf(t).l) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)), pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(t).l := gs.pq(alsf(t).l) + W(alsf(t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(ags.p), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(ags.p, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), W(alsf(t).l, alsf(t).v) ∈ gs.bq(alsf(t).t), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), ¬ W(alsf(t).l, alsf(t).v) ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(t).l, alsf(t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: ⊦ W3 ≠ W6; (s) ⊦ W3 ≠ W5; (s) ⊦ W3 ≠ W4; (s)

Proof step 86 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(t).l, alsf(t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(t).l, alsf(t).l = alsf(alsf(t).t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, alsf(t).t = alsf(alsf(t).t).t, lsf(t).t = alsf(t).t, lsf(alsf(t).t).t = alsf(t).t, bq(alsf(t).t).head.v = alsf(t).v, alsf(t).v = alsf(alsf(t).t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, apcf(alsf(t).t) = W3, pcf(t) = W6, alsf(t).t ≠ t, pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(t).l := gs.pq(alsf(t).l) + W(alsf(t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(ags.p), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(ags.p, gs.fwriters), W(alsf(t).l, alsf(t).v) ∈ gs.bq(alsf(t).t), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), ¬ W(alsf(t).l, alsf(t).v) ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(t).l, alsf(t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)) ⊦

Heuristic quantifier closing applied rule all left

And closed the goal!

Rule argument

pos: left 53 terms: t

Additional information

Used terms: t

Proof step 87 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, ags.mem = gs.pmem, lsf(alsf(t).t).t = alsf(t).t, lsf(t).t = alsf(t).t, alsf(t).t = alsf(alsf(t).t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, apcf(t) = (FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)), W(lsf(t).loc, lsf(t).val) ≠ W(alsf(alsf(t).t).l, alsf(alsf(t).t).v), pcf(t) ≠ W4, pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(ags.p), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(ags.p, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), ¬ W(lsf(t).loc, lsf(t).val) ∈ bel, pcf(t) = W7 → apcf(t) = W7, pcf(t) = W3 → apcf(t) = W3, pcf(t) = W1 → apcf(t) = W1, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R1 → apcf(t) = R1, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = ready → apcf(t) = ready, pcf(t) = idle → apcf(t) = idle, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5)), pcf(t) = W2 → apcf(t) = (SF ∈ bel ⊃ W1;W2), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ alsf(t).t = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).t ∧ (pcf(t) = idle → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = idle) ∧ (pcf(t) = ready → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = ready) ∧ (pcf(t) = crashed → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R1) ∧ (pcf(t) = R2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R2) ∧ (pcf(t) = R3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R3) ∧ (pcf(t) = R4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v) ∧ (pcf(t) = W1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W1) ∧ (pcf(t) = W2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (SF ∈ bel ⊃ W1;W2)) ∧ (pcf(t) = W3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W3) ∧ ( pcf(t) = W5 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)))) ∧ (pcf(t) = W7 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W7) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v)

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Proof step 88 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, ags.mem = gs.pmem, alsf(t).t = alsf(alsf(t).t).t, lsf(t).t = alsf(t).t, lsf(alsf(t).t).t = alsf(t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, ags.writers = gs.fwriters, apcf(t) = (FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)), apcf(alsf(t).t) = W3, W(lsf(t).loc, lsf(t).val) ≠ W(alsf(alsf(t).t).l, alsf(alsf(t).t).v), pcf(t) ≠ W4, pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(ags.p), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(ags.p, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), ¬ W(lsf(t).loc, lsf(t).val) ∈ bel, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ 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) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(t) = W2 → apcf(t) = (SF ∈ bel ⊃ W1;W2), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(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) = W3 → apcf(t) = W3, pcf(t) = W7 → apcf(t) = W7, pcf(t) = W5 → apcf(t) = (FO(lsf(t).loc) ∈ bel ⊃ W4;W5), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)) ⊦ alsf(t).t = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).t ∧ (pcf(t) = idle → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = idle) ∧ (pcf(t) = ready → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = ready) ∧ (pcf(t) = crashed → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R1) ∧ (pcf(t) = R2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R2) ∧ (pcf(t) = R3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R3) ∧ (pcf(t) = R4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v) ∧ (pcf(t) = W1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W1) ∧ (pcf(t) = W2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (SF ∈ bel ⊃ W1;W2)) ∧ (pcf(t) = W3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W3) ∧ ( pcf(t) = W5 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (FO(lsf(t).loc) ∈ bel ⊃ W4;W5)) ∧ (pcf(t) = W6 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = apcf(t)) ∧ (pcf(t) = W7 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W7) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v)

Heuristic nonsplitting cut applied rule cut formula

And closed the goal!

Rule argument

fma: alsf(t).t = t

Additional information

Used simplifier rules: in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ W3 ≠ W4; (s) ⊦ W3 ≠ W5; (s) ⊦ W3 ≠ W6; (s) Used formulas: alsf(t).t = t

Proof step 89 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, ags.mem = gs.pmem, alsf(t).t = alsf(alsf(t).t).t, lsf(t).t = alsf(t).t, lsf(alsf(t).t).t = alsf(t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, apcf(t) = (W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;W4), pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(ags.p), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(ags.p, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(t) = W2 → apcf(t) = (SF ∈ bel ⊃ W1;W2), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5)), pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3 ;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)) ), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(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) = W3 → apcf(t) = W3, pcf(t) = W7 → apcf(t) = W7, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)) ⊦ alsf(t).t = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).t ∧ (pcf(t) = idle → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = idle) ∧ (pcf(t) = ready → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = ready) ∧ (pcf(t) = crashed → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R1) ∧ (pcf(t) = R2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R2) ∧ (pcf(t) = R3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R3) ∧ (pcf(t) = R4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v) ∧ (pcf(t) = W1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W1) ∧ (pcf(t) = W2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (SF ∈ bel ⊃ W1;W2)) ∧ (pcf(t) = W3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W3) ∧ ( pcf(t) = W4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;W4)) ∧ ( pcf(t) = W5 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)))) ∧ (pcf(t) = W7 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v)

Heuristic if-then-else split applied rule case distinction

And obtained the following new goals

Rule argument

pos: left 11

Additional information

Proof step 90 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, ags.mem = gs.pmem, lsf(alsf(t).t).t = alsf(t).t, lsf(t).t = alsf(t).t, alsf(t).t = alsf(alsf(t).t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, apcf(t) = W3, pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(ags.p), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(ags.p, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W7 → apcf(t) = W7, pcf(t) = W3 → apcf(t) = W3, pcf(t) = W1 → apcf(t) = W1, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R1 → apcf(t) = R1, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = ready → apcf(t) = ready, pcf(t) = idle → apcf(t) = idle, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3 ;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)) ), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5)), pcf(t) = W2 → apcf(t) = (SF ∈ bel ⊃ W1;W2), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊦ alsf(t).t = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).t ∧ (pcf(t) = idle → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = idle) ∧ (pcf(t) = ready → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = ready) ∧ (pcf(t) = crashed → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R1) ∧ (pcf(t) = R2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R2) ∧ (pcf(t) = R3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R3) ∧ (pcf(t) = R4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v) ∧ (pcf(t) = W1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W1) ∧ (pcf(t) = W2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (SF ∈ bel ⊃ W1;W2)) ∧ (pcf(t) = W3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W3) ∧ ( pcf(t) = W4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;W4)) ∧ ( pcf(t) = W5 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)))) ∧ (pcf(t) = W7 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v)

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: ⊦ lstepf(gs, ls, W3, a) = ls; (s) ⊦ pcstepf(gs, ls, W3, a) = W4; (s) ⊦ W3 ≠ W4; (s) ⊦ W2 ≠ W3; (s) ⊦ W1 ≠ W3; (s) ⊦ W3 ≠ idle; (s) ⊦ W3 ≠ ready; (s) ⊦ W3 ≠ crashed; (s) ⊦ R1 ≠ W3; (s) ⊦ R2 ≠ W3; (s) ⊦ R3 ≠ W3; (s) ⊦ R4 ≠ W3; (s) ⊦ W3 ≠ W7; (s)

Proof step 91 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, ags.mem = gs.pmem, lsf(alsf(t).t).t = alsf(t).t, lsf(t).t = alsf(t).t, alsf(t).t = alsf(alsf(t).t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, apcf(t) = W3, pcf(alsf(t).t) ≠ crashed, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W1, pcf(t) ≠ W7, pcf(t) ≠ W1, pcf(t) ≠ R4, pcf(t) ≠ R3, pcf(t) ≠ R2, pcf(t) ≠ R1, pcf(t) ≠ crashed, pcf(t) ≠ ready, pcf(t) ≠ idle, pcf(t) ≠ W2, FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(ags.p), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(ags.p, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).val = alsf(t).v, pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).loc = alsf(t).l, ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊦ (pcf(t) = W3 → alsf(t).t ≠ t) ∧ (pcf(t) = W4 → (alsf(t).t = t ⊃ W4;W3) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;W4)) ∧ (pcf(t) = W5 → (alsf(t).t = t ⊃ W4;W3) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5))) ∧ (pcf(t) = W6 → (alsf(t).t = t ⊃ W4;W3) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6))))

Heuristic if-then-else split applied rule case distinction

And obtained the following new goals

Rule argument

pos: right 1

Additional information

Used simplifier rules: in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list a: ⊦ (x + y) + z = x + y + z; from specification list

Proof step 92 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, ags.mem = gs.pmem, alsf(t).t = alsf(alsf(t).t).t, lsf(t).t = alsf(t).t, lsf(alsf(t).t).t = alsf(t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, ags.writers = gs.fwriters, apcf(t) = W3, apcf(alsf(t).t) = W3, pcf(t) = W4, (alsf(t).t = t ⊃ W4;W3) ≠ (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;W4), pcf(alsf(t).t) ≠ crashed, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W1, pcf(t) ≠ W7, pcf(t) ≠ W1, pcf(t) ≠ R4, pcf(t) ≠ R3, pcf(t) ≠ R2, pcf(t) ≠ R1, pcf(t) ≠ crashed, pcf(t) ≠ ready, pcf(t) ≠ idle, pcf(t) ≠ W2, FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(ags.p), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(ags.p, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).loc = alsf(t).l, pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).val = alsf(t).v, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊦

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: ⊦ W4 ≠ W7; (s) ⊦ W1 ≠ W4; (s) ⊦ R4 ≠ W4; (s) ⊦ R3 ≠ W4; (s) ⊦ R2 ≠ W4; (s) ⊦ R1 ≠ W4; (s) ⊦ W4 ≠ crashed; (s) ⊦ W4 ≠ ready; (s) ⊦ W4 ≠ idle; (s) ⊦ W2 ≠ W4; (s)

Proof step 93 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, alsf(t).t = alsf(alsf(t).t).t, lsf(t).t = alsf(t).t, lsf(alsf(t).t).t = alsf(t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, apcf(alsf(t).t) = W3, pcf(t) = W4, (alsf(t).t = t ⊃ W4;W3) ≠ (W(alsf(t).l, alsf(t).v) ∈ bel ⊃ W3;W4), pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(ags.p), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(ags.p, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), W(alsf(t).l, alsf(t).v) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(alsf(t).l, alsf(t).v) ∈ bel ⊦

Heuristic nonsplitting cut applied rule cut formula

And obtained the following new goals

Rule argument

fma: W(alsf(t).l, alsf(t).v) ∈ bel

Additional information

Used simplifier rules: ⊦ W3 ≠ W4; (s) in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ W4 ≠ crashed; (s) ⊦ W4 ≠ ready; (s) ⊦ W4 ≠ idle; (s) ⊦ R4 ≠ W4; (s) ⊦ R3 ≠ W4; (s) ⊦ R2 ≠ W4; (s) ⊦ R1 ≠ W4; (s) ⊦ W4 ≠ W7; (s) ⊦ W3 ≠ W4; (s) ⊦ W2 ≠ W4; (s) ⊦ W1 ≠ W4; (s) ⊦ pendingOk(bq, pq) ∧ bq(t) = W(l, v) ' + bel0 → ¬ W(l, v0) ∈ bel0; (as) Used formulas: W(alsf(t).l, alsf(t).v) ∈ bel

Proof step 94 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, lsf(alsf(t).t).t = alsf(t).t, lsf(t).t = alsf(t).t, alsf(t).t = alsf(alsf(t).t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, apcf(t) = W3, pcf(t) = W4, (alsf(t).t = t ⊃ W4;W3) ≠ (W(alsf(t).l, alsf(t).v) ∈ bel ⊃ W3;W4), pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(ags.p), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(ags.p, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), ¬ W(alsf(t).l, alsf(t).v) ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), W(alsf(t).l, alsf(t).v) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(alsf(t).l, alsf(t).v) ∈ bel ⊦

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ W(l, v) = W(l0, v0) ↔ l = l0 ∧ v = v0; (ws) ⊦ W3 ≠ W4; (s)

Proof step 95 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(t).l, alsf(t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(t).l, alsf(t).l = alsf(alsf(t).t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, alsf(t).t = alsf(alsf(t).t).t, lsf(t).t = alsf(t).t, lsf(alsf(t).t).t = alsf(t).t, bq(alsf(t).t).head.v = alsf(t).v, alsf(t).v = alsf(alsf(t).t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, apcf(alsf(t).t) = W3, pcf(t) = W4, alsf(t).t ≠ t, pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(t).l := gs.pq(alsf(t).l) + W(alsf(t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(ags.p), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(ags.p, gs.fwriters), W(alsf(t).l, alsf(t).v) ∈ gs.bq(alsf(t).t), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), ¬ W(alsf(t).l, alsf(t).v) ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(t).l, alsf(t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)) ⊦

Heuristic quantifier closing applied rule all left

And closed the goal!

Rule argument

pos: left 53 terms: t

Additional information

Used terms: t

Proof step 96 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, ags.mem = gs.pmem, alsf(t).t = alsf(alsf(t).t).t, lsf(t).t = alsf(t).t, lsf(alsf(t).t).t = alsf(t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, ags.writers = gs.fwriters, apcf(t) = W3, apcf(alsf(t).t) = W3, pcf(t) = W5, (alsf(t).t = t ⊃ W4;W3) ≠ (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5)), pcf(alsf(t).t) ≠ crashed, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W1, pcf(t) ≠ W7, pcf(t) ≠ W1, pcf(t) ≠ R4, pcf(t) ≠ R3, pcf(t) ≠ R2, pcf(t) ≠ R1, pcf(t) ≠ crashed, pcf(t) ≠ ready, pcf(t) ≠ idle, pcf(t) ≠ W2, FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(ags.p), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(ags.p, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).loc = alsf(t).l, pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).val = alsf(t).v, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊦

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: ⊦ W5 ≠ W7; (s) ⊦ W1 ≠ W5; (s) ⊦ R4 ≠ W5; (s) ⊦ R3 ≠ W5; (s) ⊦ R2 ≠ W5; (s) ⊦ R1 ≠ W5; (s) ⊦ W5 ≠ crashed; (s) ⊦ W5 ≠ ready; (s) ⊦ W5 ≠ idle; (s) ⊦ W2 ≠ W5; (s)

Proof step 97 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, alsf(t).t = alsf(alsf(t).t).t, lsf(t).t = alsf(t).t, lsf(alsf(t).t).t = alsf(t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, apcf(alsf(t).t) = W3, pcf(t) = W5, (alsf(t).t = t ⊃ W4;W3) ≠ (W(alsf(t).l, alsf(t).v) ∈ bel ⊃ W3;(FO(alsf(t).l) ∈ bel ⊃ W4;W5)), pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(ags.p), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(ags.p, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), W(alsf(t).l, alsf(t).v) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(alsf(t).l, alsf(t).v) ∈ bel ⊦

Heuristic nonsplitting cut applied rule cut formula

And obtained the following new goals

Rule argument

fma: W(alsf(t).l, alsf(t).v) ∈ bel

Additional information

Used simplifier rules: ⊦ W3 ≠ W4; (s) in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ W5 ≠ crashed; (s) ⊦ W5 ≠ ready; (s) ⊦ W5 ≠ idle; (s) ⊦ R4 ≠ W5; (s) ⊦ R3 ≠ W5; (s) ⊦ R2 ≠ W5; (s) ⊦ R1 ≠ W5; (s) ⊦ W5 ≠ W7; (s) ⊦ W3 ≠ W5; (s) ⊦ W2 ≠ W5; (s) ⊦ W1 ≠ W5; (s) ⊦ pendingOk(bq, pq) ∧ bq(t) = W(l, v) ' + bel0 → ¬ W(l, v0) ∈ bel0; (as) Used formulas: W(alsf(t).l, alsf(t).v) ∈ bel

Proof step 98 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, lsf(alsf(t).t).t = alsf(t).t, lsf(t).t = alsf(t).t, alsf(t).t = alsf(alsf(t).t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, apcf(t) = W3, pcf(t) = W5, (alsf(t).t = t ⊃ W4;W3) ≠ (W(alsf(t).l, alsf(t).v) ∈ bel ⊃ W3;(FO(alsf(t).l) ∈ bel ⊃ W4;W5)), pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(ags.p), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(ags.p, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), ¬ W(alsf(t).l, alsf(t).v) ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), W(alsf(t).l, alsf(t).v) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(alsf(t).l, alsf(t).v) ∈ bel ⊦

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ W(l, v) = W(l0, v0) ↔ l = l0 ∧ v = v0; (ws)

Proof step 99 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(t).l, alsf(t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(t).l, alsf(t).l = alsf(alsf(t).t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, alsf(t).t = alsf(alsf(t).t).t, lsf(t).t = alsf(t).t, lsf(alsf(t).t).t = alsf(t).t, bq(alsf(t).t).head.v = alsf(t).v, alsf(t).v = alsf(alsf(t).t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, apcf(alsf(t).t) = W3, pcf(t) = W5, (alsf(t).t = t ⊃ W4;W3) ≠ (FO(alsf(t).l) ∈ bel ⊃ W4;W5), pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(t).l := gs.pq(alsf(t).l) + W(alsf(t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(ags.p), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(ags.p, gs.fwriters), W(alsf(t).l, alsf(t).v) ∈ gs.bq(alsf(t).t), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), ¬ W(alsf(t).l, alsf(t).v) ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(t).l, alsf(t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)) ⊦

Heuristic nonsplitting cut applied rule cut formula

And obtained the following new goals

Rule argument

fma: alsf(t).t = t

Additional information

Used formulas: alsf(t).t = t

Proof step 100 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(t).l, alsf(t).v) ' + bel, ags.ctr = gs.fctr, alsf(t).l = alsf(alsf(t).t).l, bq(alsf(t).t).head.l = alsf(t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, lsf(alsf(t).t).t = alsf(t).t, lsf(t).t = alsf(t).t, alsf(t).t = alsf(alsf(t).t).t, alsf(t).t = t, alsf(t).v = alsf(alsf(t).t).v, bq(alsf(t).t).head.v = alsf(t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, apcf(t) = W3, pcf(t) = W5, (alsf(t).t = t ⊃ W4;W3) ≠ (FO(alsf(t).l) ∈ bel ⊃ W4;W5), pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(t).l := gs.pq(alsf(t).l) + W(alsf(t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(ags.p), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(ags.p, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), W(alsf(t).l, alsf(t).v) ∈ gs.bq(alsf(t).t), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), ¬ W(alsf(t).l, alsf(t).v) ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(t).l, alsf(t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: ⊦ W4 ≠ W5; (s) ⊦ W5 ≠ W6; (s) ⊦ W(l, v) = W(l0, v0) ↔ l = l0 ∧ v = v0; (ws) ⊦ W1 ≠ W5; (s) ⊦ W2 ≠ W5; (s) ⊦ W3 ≠ W5; (s) ⊦ W5 ≠ W7; (s) ⊦ R1 ≠ W5; (s) ⊦ R2 ≠ W5; (s) ⊦ R3 ≠ W5; (s) ⊦ R4 ≠ W5; (s) ⊦ W5 ≠ idle; (s) ⊦ W5 ≠ ready; (s) ⊦ W5 ≠ crashed; (s) a: ⊦ (x + y) + z = x + y + z; from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ W4 ≠ W5; (s)

Proof step 101 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(t) = W(alsf(t).l, alsf(t).v) ' + bel, ags.ctr = gs.fctr, bq(t).head.l = alsf(t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], lsf(t).t = t, alsf(t).t = t, bq(t).head.v = alsf(t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, pcf(t) = W5, FLITInv((gs.pq:= gs.pq(alsf(t).l := gs.pq(alsf(t).l) + W(alsf(t).v, t) ')).bq:= gs.bq(t := bel), lsf, pcf), FOFollowsW(t, gs.bq(t), gs.pq(alsf(t).l), alsf(t).l), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), pendingOk(ags.p), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(ags.p, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), W(alsf(t).l, alsf(t).v) ∈ gs.bq(t), ¬ noPending(t, gs.bq, gs.pq), ¬ noPendingW(t, gs.bq, gs.pq), ¬ FO(alsf(t).l) ∈ bel, ¬ W(alsf(t).l, alsf(t).v) ∈ bel, ¬ SF ∈ bel, ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), gs.bq(t) = FO(alsf(t).l) ' ∨ gs.bq(t) = W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' ⊦

User applied rule case distinction

And obtained the following new goals

Rule argument

pos: left 35

Additional information

Used simplifier rules: eq-05: ⊦ x = a ' + y ∧ x = a0 ' + z → a = a0 ∧ y = z; (forward) from specification list in-15: ⊦ x + a ' = y → a ∈ y; (forward) from specification list a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ FO(l) ≠ SF; (s) ⊦ W(l, v) ≠ FO(l0); (s) ⊦ a ∈ a0 ' ↔ a = a0; (s)

Proof step 102 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(t) = W(alsf(t).l, alsf(t).v) ' + bel, gs.bq(t) = FO(alsf(t).l) ', ags.ctr = gs.fctr, bq(t).head.l = alsf(t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], alsf(t).t = t, lsf(t).t = t, bq(t).head.v = alsf(t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, pcf(t) = W5, FLITInv((gs.pq:= gs.pq(alsf(t).l := gs.pq(alsf(t).l) + W(alsf(t).v, t) ')).bq:= gs.bq(t := bel), lsf, pcf), FOFollowsW(t, gs.bq(t), gs.pq(alsf(t).l), alsf(t).l), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(ags.p), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(ags.p, gs.fwriters), W(alsf(t).l, alsf(t).v) ∈ gs.bq(t), ¬ noPending(t, gs.bq, gs.pq), ¬ noPendingW(t, gs.bq, gs.pq), ¬ FO(alsf(t).l) ∈ bel, ¬ W(alsf(t).l, alsf(t).v) ∈ bel, ¬ SF ∈ bel, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)) ⊦

User applied rule subst equation

And closed the goal!

Rule argument

pos: left 2, flags: discard

Additional information

Used simplifier rules: ⊦ a ' = a0 ' + x ↔ a = a0 ∧ x = []; (ws) ⊦ W(l, v) ≠ FO(l0); (s) a: ⊦ (x + y) + z = x + y + z; from specification list

Proof step 103 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(t).l, alsf(t).v) ' + bel, ags.ctr = gs.fctr, alsf(t).l = alsf(alsf(t).t).l, bq(alsf(t).t).head.l = alsf(t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, lsf(alsf(t).t).t = alsf(t).t, lsf(t).t = alsf(t).t, alsf(t).t = alsf(alsf(t).t).t, alsf(t).v = alsf(alsf(t).t).v, bq(alsf(t).t).head.v = alsf(t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, apcf(t) = W3, pcf(t) = W5, alsf(t).t ≠ t, (alsf(t).t = t ⊃ W4;W3) ≠ (FO(alsf(t).l) ∈ bel ⊃ W4;W5), pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(t).l := gs.pq(alsf(t).l) + W(alsf(t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(ags.p), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(ags.p, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), W(alsf(t).l, alsf(t).v) ∈ gs.bq(alsf(t).t), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), ¬ W(alsf(t).l, alsf(t).v) ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(t).l, alsf(t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: ⊦ W3 ≠ W5; (s) ⊦ W3 ≠ W4; (s)

Proof step 104 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(t).l, alsf(t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(t).l, alsf(t).l = alsf(alsf(t).t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, alsf(t).t = alsf(alsf(t).t).t, lsf(t).t = alsf(t).t, lsf(alsf(t).t).t = alsf(t).t, bq(alsf(t).t).head.v = alsf(t).v, alsf(t).v = alsf(alsf(t).t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, apcf(alsf(t).t) = W3, pcf(t) = W5, alsf(t).t ≠ t, pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(t).l := gs.pq(alsf(t).l) + W(alsf(t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(ags.p), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(ags.p, gs.fwriters), W(alsf(t).l, alsf(t).v) ∈ gs.bq(alsf(t).t), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), ¬ W(alsf(t).l, alsf(t).v) ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(t).l, alsf(t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)) ⊦

Heuristic quantifier closing applied rule all left

And closed the goal!

Rule argument

pos: left 53 terms: t

Additional information

Used terms: t

Proof step 105 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, ags.mem = gs.pmem, alsf(t).t = alsf(alsf(t).t).t, lsf(t).t = alsf(t).t, lsf(alsf(t).t).t = alsf(t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, ags.writers = gs.fwriters, apcf(t) = W3, apcf(alsf(t).t) = W3, pcf(t) = W6, (alsf(t).t = t ⊃ W4;W3) ≠ (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6))), pcf(alsf(t).t) ≠ crashed, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W1, pcf(t) ≠ W7, pcf(t) ≠ W1, pcf(t) ≠ R4, pcf(t) ≠ R3, pcf(t) ≠ R2, pcf(t) ≠ R1, pcf(t) ≠ crashed, pcf(t) ≠ ready, pcf(t) ≠ idle, pcf(t) ≠ W2, FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(ags.p), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(ags.p, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).loc = alsf(t).l, pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).val = alsf(t).v, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊦

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: ⊦ W6 ≠ W7; (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) ⊦ W2 ≠ W6; (s)

Proof step 106 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, alsf(t).t = alsf(alsf(t).t).t, lsf(t).t = alsf(t).t, lsf(alsf(t).t).t = alsf(t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, apcf(alsf(t).t) = W3, pcf(t) = W6, (alsf(t).t = t ⊃ W4;W3) ≠ (W(alsf(t).l, alsf(t).v) ∈ bel ⊃ W3;(FO(alsf(t).l) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6))), pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(ags.p), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(ags.p, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), W(alsf(t).l, alsf(t).v) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(alsf(t).l, alsf(t).v) ∈ bel ⊦

Heuristic nonsplitting cut applied rule cut formula

And obtained the following new goals

Rule argument

fma: W(alsf(t).l, alsf(t).v) ∈ bel

Additional information

Used simplifier rules: ⊦ W3 ≠ W4; (s) in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ W6 ≠ crashed; (s) ⊦ W6 ≠ ready; (s) ⊦ W6 ≠ idle; (s) ⊦ R4 ≠ W6; (s) ⊦ R3 ≠ W6; (s) ⊦ R2 ≠ W6; (s) ⊦ R1 ≠ W6; (s) ⊦ W6 ≠ W7; (s) ⊦ W3 ≠ W6; (s) ⊦ W2 ≠ W6; (s) ⊦ W1 ≠ W6; (s) ⊦ pendingOk(bq, pq) ∧ bq(t) = W(l, v) ' + bel0 → ¬ W(l, v0) ∈ bel0; (as) Used formulas: W(alsf(t).l, alsf(t).v) ∈ bel

Proof step 107 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, lsf(alsf(t).t).t = alsf(t).t, lsf(t).t = alsf(t).t, alsf(t).t = alsf(alsf(t).t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, apcf(t) = W3, pcf(t) = W6, (alsf(t).t = t ⊃ W4;W3) ≠ (W(alsf(t).l, alsf(t).v) ∈ bel ⊃ W3;(FO(alsf(t).l) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6))), pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(ags.p), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(ags.p, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), ¬ W(alsf(t).l, alsf(t).v) ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), W(alsf(t).l, alsf(t).v) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(alsf(t).l, alsf(t).v) ∈ bel ⊦

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ W(l, v) = W(l0, v0) ↔ l = l0 ∧ v = v0; (ws)

Proof step 108 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(t).l, alsf(t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(t).l, alsf(t).l = alsf(alsf(t).t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, alsf(t).t = alsf(alsf(t).t).t, lsf(t).t = alsf(t).t, lsf(alsf(t).t).t = alsf(t).t, bq(alsf(t).t).head.v = alsf(t).v, alsf(t).v = alsf(alsf(t).t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, apcf(alsf(t).t) = W3, pcf(t) = W6, (alsf(t).t = t ⊃ W4;W3) ≠ (FO(alsf(t).l) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)), pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(t).l := gs.pq(alsf(t).l) + W(alsf(t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(ags.p), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(ags.p, gs.fwriters), W(alsf(t).l, alsf(t).v) ∈ gs.bq(alsf(t).t), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), ¬ W(alsf(t).l, alsf(t).v) ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(t).l, alsf(t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)) ⊦

Heuristic nonsplitting cut applied rule cut formula

And obtained the following new goals

Rule argument

fma: alsf(t).t = t

Additional information

Used formulas: alsf(t).t = t

Proof step 109 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(t).l, alsf(t).v) ' + bel, ags.ctr = gs.fctr, alsf(t).l = alsf(alsf(t).t).l, bq(alsf(t).t).head.l = alsf(t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, lsf(alsf(t).t).t = alsf(t).t, lsf(t).t = alsf(t).t, alsf(t).t = alsf(alsf(t).t).t, alsf(t).t = t, alsf(t).v = alsf(alsf(t).t).v, bq(alsf(t).t).head.v = alsf(t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, apcf(t) = W3, pcf(t) = W6, (alsf(t).t = t ⊃ W4;W3) ≠ (FO(alsf(t).l) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)), pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(t).l := gs.pq(alsf(t).l) + W(alsf(t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(ags.p), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(ags.p, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), W(alsf(t).l, alsf(t).v) ∈ gs.bq(alsf(t).t), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), ¬ W(alsf(t).l, alsf(t).v) ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(t).l, alsf(t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: ⊦ W5 ≠ W6; (s) ⊦ W4 ≠ W6; (s) ⊦ W(l, v) ≠ FO(l0); (s) a: ⊦ (x + y) + z = x + y + z; from specification list in-15: ⊦ x + a ' = y → a ∈ y; (forward) from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list eq-05: ⊦ x = a ' + y ∧ x = a0 ' + z → a = a0 ∧ y = z; (forward) from specification list ⊦ W(l, v) = W(l0, v0) ↔ l = l0 ∧ v = v0; (ws) ⊦ W1 ≠ W6; (s) ⊦ W2 ≠ W6; (s) ⊦ W3 ≠ W6; (s) ⊦ W6 ≠ W7; (s) ⊦ R1 ≠ W6; (s) ⊦ R2 ≠ W6; (s) ⊦ R3 ≠ W6; (s) ⊦ R4 ≠ W6; (s) ⊦ W6 ≠ idle; (s) ⊦ W6 ≠ ready; (s) ⊦ W6 ≠ crashed; (s) ⊦ W4 ≠ W6; (s) ⊦ W4 ≠ W5; (s)

Proof step 110 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(t) = W(alsf(t).l, alsf(t).v) ' + bel, ags.ctr = gs.fctr, bq(t).head.l = alsf(t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, gs.rfo(t) = [], lsf(t).t = t, alsf(t).t = t, bq(t).head.v = alsf(t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, pcf(t) = W6, gs.bq(t) ≠ FO(alsf(t).l) ' + SF ', FLITInv((gs.pq:= gs.pq(alsf(t).l := gs.pq(alsf(t).l) + W(alsf(t).v, t) ')).bq:= gs.bq(t := bel), lsf, pcf), FOFollowsW(t, gs.bq(t), gs.pq(alsf(t).l), alsf(t).l), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), notMember(t, gs.freaders), oneMember(t, alsf(t).l, gs.fwriters), pendingOk(ags.p), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(ags.p, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), W(alsf(t).l, alsf(t).v) ∈ gs.bq(t), ¬ noPending(t, gs.bq, gs.pq), ¬ noPendingW(t, gs.bq, gs.pq), ¬ FO(alsf(t).l) ∈ bel, ¬ W(alsf(t).l, alsf(t).v) ∈ bel, ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), gs.bq(t) = W(alsf(t).l, alsf(t).v) ' + FO(alsf(t).l) ' + SF ' ∨ gs.bq(t) = SF ' ⊦

User applied rule case distinction

And closed the goal!

Rule argument

pos: left 35

Additional information

Used simplifier rules: in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ a ' = a0 ' + x ↔ a = a0 ∧ x = []; (ws) ⊦ W(l, v) ≠ SF; (s) a: ⊦ (x + y) + z = x + y + z; from specification list eq-05: ⊦ x = a ' + y ∧ x = a0 ' + z → a = a0 ∧ y = z; (forward) from specification list in-15: ⊦ x + a ' = y → a ∈ y; (forward) from specification list ⊦ W(l, v) ≠ FO(l0); (s) ⊦ a ∈ a0 ' ↔ a = a0; (s) ⊦ a ∈ a0 ' + x ↔ ¬(a ≠ a0 ∧ ¬ a ∈ x); (ss)

Proof step 111 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(t).l, alsf(t).v) ' + bel, ags.ctr = gs.fctr, alsf(t).l = alsf(alsf(t).t).l, bq(alsf(t).t).head.l = alsf(t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, lsf(alsf(t).t).t = alsf(t).t, lsf(t).t = alsf(t).t, alsf(t).t = alsf(alsf(t).t).t, alsf(t).v = alsf(alsf(t).t).v, bq(alsf(t).t).head.v = alsf(t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, apcf(t) = W3, pcf(t) = W6, alsf(t).t ≠ t, (alsf(t).t = t ⊃ W4;W3) ≠ (FO(alsf(t).l) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)), pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(t).l := gs.pq(alsf(t).l) + W(alsf(t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(ags.p), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(ags.p, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), W(alsf(t).l, alsf(t).v) ∈ gs.bq(alsf(t).t), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), ¬ W(alsf(t).l, alsf(t).v) ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(t).l, alsf(t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: ⊦ W3 ≠ W6; (s) ⊦ W3 ≠ W5; (s) ⊦ W3 ≠ W4; (s)

Proof step 112 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(t).l, alsf(t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(t).l, alsf(t).l = alsf(alsf(t).t).l, lsf(t).loc = alsf(t).l, ags.mem = gs.pmem, alsf(t).t = alsf(alsf(t).t).t, lsf(t).t = alsf(t).t, lsf(alsf(t).t).t = alsf(t).t, bq(alsf(t).t).head.v = alsf(t).v, alsf(t).v = alsf(alsf(t).t).v, lsf(t).val = alsf(t).v, ags.writers = gs.fwriters, apcf(t) = W3, apcf(alsf(t).t) = W3, pcf(t) = W6, alsf(t).t ≠ t, pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(t).l := gs.pq(alsf(t).l) + W(alsf(t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(ags.p), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(ags.p, gs.fwriters), W(alsf(t).l, alsf(t).v) ∈ gs.bq(alsf(t).t), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), ¬ W(alsf(t).l, alsf(t).v) ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(t).l, alsf(t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)) ⊦

Heuristic quantifier closing applied rule all left

And closed the goal!

Rule argument

pos: left 53 terms: t

Additional information

Used terms: t

Proof step 113 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, ags.mem = gs.pmem, lsf(alsf(t).t).t = alsf(t).t, lsf(t).t = alsf(t).t, alsf(t).t = alsf(alsf(t).t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, apcf(t) = W4, W(lsf(t).loc, lsf(t).val) ≠ W(alsf(alsf(t).t).l, alsf(alsf(t).t).v), pcf(alsf(t).t) ≠ W1, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ crashed, FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(ags.p), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(ags.p, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), ¬ W(lsf(t).loc, lsf(t).val) ∈ bel, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).val = alsf(t).v, pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → lsf(t).loc = alsf(t).l, pcf(t) = W7 → apcf(t) = W7, pcf(t) = W3 → apcf(t) = W3, pcf(t) = W1 → apcf(t) = W1, pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = alsf(t).v, pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = alsf(t).l, pcf(t) = R4 → apcf(t) = R4, pcf(t) = R3 → apcf(t) = R3, pcf(t) = R2 → apcf(t) = R2, pcf(t) = R1 → apcf(t) = R1, pcf(t) = crashed → apcf(t) = crashed, pcf(t) = ready → apcf(t) = ready, pcf(t) = idle → apcf(t) = idle, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(t) = W6 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3 ;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)) ), pcf(t) = W5 → apcf(t) = (W(lsf(t).loc, lsf(t).val) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ∨ W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5)), pcf(t) = W2 → apcf(t) = (SF ∈ bel ⊃ W1;W2), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ alsf(t).t = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).t ∧ (pcf(t) = idle → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = idle) ∧ (pcf(t) = ready → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = ready) ∧ (pcf(t) = crashed → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = crashed) ∧ (pcf(t) = R1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R1) ∧ (pcf(t) = R2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R2) ∧ (pcf(t) = R3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R3) ∧ (pcf(t) = R4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = R4) ∧ ( pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).loc = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).l) ∧ ( pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → lsf(t).val = (alsf(t).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v) ∧ (pcf(t) = W1 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W1) ∧ (pcf(t) = W2 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (SF ∈ bel ⊃ W1;W2)) ∧ (pcf(t) = W3 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = W3) ∧ ( pcf(t) = W4 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;W4)) ∧ ( pcf(t) = W5 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;W5))) ∧ ( pcf(t) = W6 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)) = (W(lsf(t).loc, lsf(t).val) ∈ bel ⊃ W3;(FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)))) ∧ (pcf(t) = W7 → (alsf(t).t = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));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).t = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)).v)

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: ⊦ lstepf(gs, ls, W4, a) = ls; (s) ⊦ pcstepf(gs, ls, W4, a) = W5; (s) ⊦ W4 ≠ W5; (s) ⊦ W2 ≠ W4; (s) ⊦ W1 ≠ W4; (s) ⊦ W4 ≠ idle; (s) ⊦ W4 ≠ ready; (s) ⊦ W4 ≠ crashed; (s) ⊦ R1 ≠ W4; (s) ⊦ R2 ≠ W4; (s) ⊦ R3 ≠ W4; (s) ⊦ R4 ≠ W4; (s) ⊦ W3 ≠ W4; (s) ⊦ W4 ≠ W7; (s) ⊦ W4 ≠ W6; (s)

Proof step 114 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(alsf(t).t) = W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) ' + bel, ags.ctr = gs.fctr, bq(alsf(t).t).head.l = alsf(alsf(t).t).l, ags.mem = gs.pmem, lsf(alsf(t).t).t = alsf(t).t, lsf(t).t = alsf(t).t, alsf(t).t = alsf(alsf(t).t).t, bq(alsf(t).t).head.v = alsf(alsf(t).t).v, ags.writers = gs.fwriters, apcf(alsf(t).t) = W3, apcf(t) = W4, W(lsf(t).loc, lsf(t).val) ≠ W(alsf(alsf(t).t).l, alsf(alsf(t).t).v), pcf(alsf(t).t) ≠ crashed, pcf(alsf(t).t) ≠ ready, pcf(alsf(t).t) ≠ idle, pcf(alsf(t).t) ≠ R4, pcf(alsf(t).t) ≠ R3, pcf(alsf(t).t) ≠ R2, pcf(alsf(t).t) ≠ R1, pcf(alsf(t).t) ≠ W7, pcf(alsf(t).t) ≠ W3, pcf(alsf(t).t) ≠ W2, pcf(alsf(t).t) ≠ W1, pcf(t) ≠ W7, pcf(t) ≠ W3, pcf(t) ≠ W1, pcf(t) ≠ R4, pcf(t) ≠ R3, pcf(t) ≠ R2, pcf(t) ≠ R1, pcf(t) ≠ crashed, pcf(t) ≠ ready, pcf(t) ≠ idle, pcf(t) ≠ W2, FLITInv((gs.pq:= gs.pq(alsf(alsf(t).t).l := gs.pq(alsf(alsf(t).t).l) + W(alsf(alsf(t).t).v, alsf(t).t) ')).bq:= gs.bq(alsf(t).t := bel), lsf, pcf), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(ags.p), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), reorder(ags.p, gs.pq, gs.rfo), writersOk(ags.p, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ noPending(alsf(t).t, gs.bq, gs.pq), ¬ noPendingW(alsf(t).t, gs.bq, gs.pq), ¬ W(lsf(t).loc, lsf(t).val) ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 → ¬ SF ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → W(alsf(alsf(t).t).l, alsf(alsf(t).t).v) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val), pcf(t) = W6 → FO(lsf(t).loc) ∈ bel, pcf(t) = W5 → FO(lsf(t).loc) ∈ bel, pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → gs.rfo(alsf(t).t) = [], pcf(alsf(t).t) = W4 → gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ', pcf(alsf(t).t) = W5 → gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ', pcf(alsf(t).t) = W6 → gs.bq(alsf(t).t) = SF ' ∨ gs.bq(alsf(t).t) = FO(lsf(alsf(t).t).loc) ' + SF ' ∨ gs.bq(alsf(t).t) = W(lsf(alsf(t).t).loc, lsf(alsf(t).t).val) ' + FO(lsf(alsf(t).t).loc) ' + SF ', pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → FOFollowsW(alsf(t).t, gs.bq(alsf(t).t), gs.pq(lsf(alsf(t).t).loc), lsf(alsf(t).t).loc), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → notMember(alsf(t).t, gs.freaders), pcf(alsf(t).t) = W4 ∨ pcf(alsf(t).t) = W5 ∨ pcf(alsf(t).t) = W6 → oneMember(alsf(t).t, lsf(alsf(t).t).loc, gs.fwriters), pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).val = alsf(t).v, pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → lsf(t).loc = alsf(t).l, ∀ t. alsf(t).t = t ∧ FLITPSCLInv(ags, alsf(t), apcf(t)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦ (pcf(t) = W4 → alsf(t).t ≠ t) ∧ (pcf(t) = W5 → (alsf(t).t = t ⊃ W5;W4) = (FO(lsf(t).loc) ∈ bel ⊃ W4;W5)) ∧ (pcf(t) = W6 → (alsf(t).t = t ⊃ W5;W4) = (FO(lsf(t).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)))

Heuristic nonsplitting cut applied rule cut formula

And closed the goal!

Rule argument

fma: alsf(t).t = t

Additional information

Used simplifier rules: ⊦ W4 ≠ W5; (s) ⊦ W4 ≠ W6; (s) ⊦ W5 ≠ W6; (s) in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ W3 ≠ W4; (s) Used formulas: alsf(t).t = t

Proof step 115 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(tid0) = W(bq(tid0).head.l, bq(tid0).head.v) ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], apcf(tid0) ≠ W3, FLITInv(gs, lsf, pcf), FLITInv((gs.pq:= gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf, pcf), FLITPSCInv(ags, alsf, apcf), pre(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)), reorder(ags.p, gs.pq, gs.rfo), W(bq(tid0).head.l, bq(tid0).head.v) ∈ gs.bq(tid0), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ (∃ t. pre(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)) ∧ gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)) = gstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)) ∧ alsf(tid0 := lstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v))) = alsf(t := lstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v))) ∧ apcf(tid0 := pcstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v))) = apcf(t := pcstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)))) ∧ gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)).mem = gs.pmem ∧ gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)).ctr = gs.fctr ∧ reorder (gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)).p, gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) '), gs.rfo) ∧ gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)).writers = gs.fwriters ∧ labs ((gs.pq:= gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf(t), pcf(t), gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)), (tid0 = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)), (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)))

User applied rule constructor cut

And closed the goal!

Rule argument

term: apcf(tid0)

Additional information

Used simplifier rules: FLITPSCPC freely generated by R1, R2, R3, R4, W1, W2, W3, W4, W5, W6, W7, crashed, idle, ready ;; ⊦ W3 ≠ ready; (s) ⊦ pre(gs, ls, ready, a) ↔ (∃ l0, v0. a = invFLITPSCWRITE(ls.t, l0, v0)) ∨ (∃ l0. a = invFLITPSCREAD(ls.t, l0)) ∨ a = callPSCCOMPLETE(ls.t) ∧ (∀ l. ¬ FO(ls.t) ∈ gs.p(l)); (s) ⊦ doWritePSC(t, l, v) ≠ invFLITPSCWRITE(t0, l0, v0); (s) ⊦ doWritePSC(t, l, v) ≠ invFLITPSCREAD(t0, l0); (s) ⊦ callPSCCOMPLETE(t) ≠ doWritePSC(t0, l, v); (s) ⊦ W3 ≠ idle; (s) ⊦ pre(gs, ls, idle, a) ↔ a = callPSCRUN(ls.t); (s) ⊦ callPSCRUN(t) ≠ doWritePSC(t0, l, v); (s) ⊦ W3 ≠ crashed; (s) ⊦ pre(gs, ls, crashed, a) ↔ false; (s) ⊦ W3 ≠ W7; (s) ⊦ pre(gs, ls, W7, a) ↔ a = retFLITPSCWRITE(ls.t); (s) ⊦ doWritePSC(t, l, v) ≠ retFLITPSCWRITE(t0); (s) ⊦ W3 ≠ W6; (s) ⊦ pre(gs, ls, W6, a) ↔ a = ctrDecPSC(ls.t, ls.l); (s) ⊦ ctrDecPSC(t, l) ≠ doWritePSC(t0, l0, v); (s) ⊦ W3 ≠ W5; (s) ⊦ pre(gs, ls, W5, a) ↔ (∀ l. ¬ FO(ls.t) ∈ gs.p(l)) ∧ a = sfencePSC(ls.t); (s) ⊦ reorder(p, pq, rfo) → (FO(t) ∈ p(l) ↔ FO(t) ∈ pq(l) ∨ FO(l) ∈ rfo(t)); (s) ⊦ doWritePSC(t, l, v) ≠ sfencePSC(t0); (s) ⊦ W3 ≠ W4; (s) ⊦ pre(gs, ls, W4, a) ↔ a = pwbPSC(ls.t, ls.l); (s) ⊦ doWritePSC(t, l, v) ≠ pwbPSC(t0, l0); (s) ⊦ W2 ≠ W3; (s) ⊦ pre(gs, ls, W2, a) ↔ a = ctrIncPSC(ls.t, ls.l); (s) ⊦ ctrIncPSC(t, l) ≠ doWritePSC(t0, l0, v); (s) ⊦ W1 ≠ W3; (s) ⊦ pre(gs, ls, W1, a) ↔ (∀ l. ¬ FO(ls.t) ∈ gs.p(l)) ∧ a = sfencePSC(ls.t); (s) ⊦ R4 ≠ W3; (s) ⊦ pre(gs, ls, R4, a) ↔ a = retFLITPSCREAD(ls.t, ls.v); (s) ⊦ doWritePSC(t, l, v) ≠ retFLITPSCREAD(t0, v0); (s) ⊦ R3 ≠ W3; (s) ⊦ pre(gs, ls, R3, a) ↔ a = pwbPSC(ls.t, ls.l); (s) ⊦ R2 ≠ W3; (s) ⊦ pre(gs, ls, R2, a) ↔ a = ctrReadPSC(ls.t, ls.l, gs.ctr(ls.l)); (s) ⊦ ctrReadPSC(t, l, n) ≠ doWritePSC(t0, l0, v); (s) ⊦ R1 ≠ W3; (s) ⊦ pre(gs, ls, R1, a) ↔ a = doReadPSC(ls.t, ls.l, ((gs.mem ⊕ gs.p))(ls.l)); (s) ⊦ ((mem ⊕ p))(l) = mem(l) ⊕ p(l); (s) ⊦ doReadPSC(t, l, v) ≠ doWritePSC(t0, l0, v0); (s)

Proof step 116 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(tid0) = W(bq(tid0).head.l, bq(tid0).head.v) ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, gs.bq(tid0) ≠ [], FLITInv((gs.pq:= gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), W(bq(tid0).head.l, bq(tid0).head.v) ∈ gs.bq(tid0), ¬ pre(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ (∃ t. pre(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)) ∧ gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)) = gstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)) ∧ alsf(tid0 := lstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v))) = alsf(t := lstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v))) ∧ apcf(tid0 := pcstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v))) = apcf(t := pcstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)))) ∧ gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)).mem = gs.pmem ∧ gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)).ctr = gs.fctr ∧ reorder (gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)).p, gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) '), gs.rfo) ∧ gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)).writers = gs.fwriters ∧ labs ((gs.pq:= gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf(t), pcf(t), gstepf(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)), (tid0 = t ⊃ lstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));alsf(t)), (tid0 = t ⊃ pcstepf(ags, alsf(t), apcf(t), doWritePSC(t, bq(t).head.l, bq(t).head.v));apcf(t)))

User applied rule weakening

And obtained the following new goals

Rule argument

poslist: left 4, right 1

Additional information

Proof step 117 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(tid0) = W(bq(tid0).head.l, bq(tid0).head.v) ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.bq(tid0) ≠ [], FLITInv(gs, lsf, pcf), FLITInv((gs.pq:= gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), W(bq(tid0).head.l, bq(tid0).head.v) ∈ gs.bq(tid0), ¬ pre(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦

User applied rule all left

And obtained the following new goals

Rule argument

pos: left 11 terms: tid0 abort: F discard: T computed: T

Additional information

Used terms: tid0

Proof step 118 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(tid0) = W(bq(tid0).head.l, bq(tid0).head.v) ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, gs.bq(tid0) ≠ [], FLITInv((gs.pq:= gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), labs(gs, lsf(tid0), pcf(tid0), ags, alsf(tid0), apcf(tid0)), reorder(ags.p, gs.pq, gs.rfo), W(bq(tid0).head.l, bq(tid0).head.v) ∈ gs.bq(tid0), ¬ pre(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)) ⊦

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

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);

Proof step 119 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(tid0) = W(bq(tid0).head.l, bq(tid0).head.v) ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(tid0).t = alsf(tid0).t, gs.bq(tid0) ≠ [], FLITInv(gs, lsf, pcf), FLITInv((gs.pq:= gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), W(bq(tid0).head.l, bq(tid0).head.v) ∈ gs.bq(tid0), ¬ pre(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)), pcf(tid0) = idle → apcf(tid0) = idle, pcf(tid0) = ready → apcf(tid0) = ready, pcf(tid0) = crashed → apcf(tid0) = crashed, pcf(tid0) = R1 → apcf(tid0) = R1, pcf(tid0) = R2 → apcf(tid0) = R2, pcf(tid0) = R3 → apcf(tid0) = R3, pcf(tid0) = R4 → apcf(tid0) = R4, pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → lsf(tid0).loc = alsf(tid0).l, pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → lsf(tid0).val = alsf(tid0).v, pcf(tid0) = W1 → apcf(tid0) = W1, pcf(tid0) = W2 → apcf(tid0) = (SF ∈ gs.bq(alsf(tid0).t) ⊃ W1;W2), pcf(tid0) = W3 → apcf(tid0) = W3, pcf(tid0) = W4 → apcf(tid0) = (W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(alsf(tid0).t) ⊃ W3;W4), pcf(tid0) = W5 → apcf(tid0) = (W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(alsf(tid0).t) ⊃ W3;(FO(lsf(tid0).loc) ∈ gs.bq(alsf(tid0).t) ⊃ W4;W5)), pcf(tid0) = W6 → apcf(tid0) = (W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(alsf(tid0).t) ⊃ W3;(FO(lsf(tid0).loc) ∈ gs.bq(alsf(tid0).t) ⊃ W4;(SF ∈ gs.bq(alsf(tid0).t) ⊃ W5;W6))), pcf(tid0) = W7 → apcf(tid0) = W7, pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W3 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → lsf(tid0).loc = alsf(tid0).l, pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W3 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → lsf(tid0).val = alsf(tid0).v ⊦

User applied rule apply rewrite lemma

And obtained the following new goals

Rule argument

spec: FLIT, name:FLITInv, seq:⊦ FLITInv(gs, lsf, pcf) ↔ FLITGInv(gs) ∧ (∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t))), subst:[gs, lsf, pcf] → [gs, lsf, pcf], <all paths>

Additional information

Used terms: gs, lsf, pcf

Proof step 120 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

⊦ FLITInv(gs, lsf, pcf) ↔ FLITGInv(gs) ∧ (∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)))

A spec-lemma

Proof step 121 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(tid0) = W(bq(tid0).head.l, bq(tid0).head.v) ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(tid0).t = alsf(tid0).t, gs.bq(tid0) ≠ [], FLITGInv(gs), FLITInv((gs.pq:= gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), W(bq(tid0).head.l, bq(tid0).head.v) ∈ gs.bq(tid0), ¬ pre(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)), pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W3 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → lsf(tid0).val = alsf(tid0).v, pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W3 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → lsf(tid0).loc = alsf(tid0).l, pcf(tid0) = W7 → apcf(tid0) = W7, pcf(tid0) = W6 → apcf(tid0) = (W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(alsf(tid0).t) ⊃ W3;(FO(lsf(tid0).loc) ∈ gs.bq(alsf(tid0).t) ⊃ W4;(SF ∈ gs.bq(alsf(tid0).t) ⊃ W5;W6))), pcf(tid0) = W5 → apcf(tid0) = (W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(alsf(tid0).t) ⊃ W3;(FO(lsf(tid0).loc) ∈ gs.bq(alsf(tid0).t) ⊃ W4;W5)), pcf(tid0) = W4 → apcf(tid0) = (W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(alsf(tid0).t) ⊃ W3;W4), pcf(tid0) = W3 → apcf(tid0) = W3, pcf(tid0) = W2 → apcf(tid0) = (SF ∈ gs.bq(alsf(tid0).t) ⊃ W1;W2), pcf(tid0) = W1 → apcf(tid0) = W1, pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → lsf(tid0).val = alsf(tid0).v, pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → lsf(tid0).loc = alsf(tid0).l, pcf(tid0) = R4 → apcf(tid0) = R4, pcf(tid0) = R3 → apcf(tid0) = R3, pcf(tid0) = R2 → apcf(tid0) = R2, pcf(tid0) = R1 → apcf(tid0) = R1, pcf(tid0) = crashed → apcf(tid0) = crashed, pcf(tid0) = ready → apcf(tid0) = ready, pcf(tid0) = idle → apcf(tid0) = idle, ∀ t. lsf(t).t = t ∧ FLITLInv(gs, lsf(t), pcf(t)) ⊦

User applied rule all left

And obtained the following new goals

Rule argument

pos: left 30 terms: tid0 abort: F discard: T computed: F

Additional information

Used terms: tid0

Proof step 122 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(tid0) = W(bq(tid0).head.l, bq(tid0).head.v) ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(tid0).t = alsf(tid0).t, lsf(tid0).t = tid0, gs.bq(tid0) ≠ [], FLITGInv(gs), FLITInv((gs.pq:= gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf, pcf), FLITLInv(gs, lsf(tid0), pcf(tid0)), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), W(bq(tid0).head.l, bq(tid0).head.v) ∈ gs.bq(tid0), ¬ pre(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)), pcf(tid0) = idle → apcf(tid0) = idle, pcf(tid0) = ready → apcf(tid0) = ready, pcf(tid0) = crashed → apcf(tid0) = crashed, pcf(tid0) = R1 → apcf(tid0) = R1, pcf(tid0) = R2 → apcf(tid0) = R2, pcf(tid0) = R3 → apcf(tid0) = R3, pcf(tid0) = R4 → apcf(tid0) = R4, pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → lsf(tid0).loc = alsf(tid0).l, pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → lsf(tid0).val = alsf(tid0).v, pcf(tid0) = W1 → apcf(tid0) = W1, pcf(tid0) = W2 → apcf(tid0) = (SF ∈ gs.bq(alsf(tid0).t) ⊃ W1;W2), pcf(tid0) = W3 → apcf(tid0) = W3, pcf(tid0) = W4 → apcf(tid0) = (W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(alsf(tid0).t) ⊃ W3;W4), pcf(tid0) = W5 → apcf(tid0) = (W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(alsf(tid0).t) ⊃ W3;(FO(lsf(tid0).loc) ∈ gs.bq(alsf(tid0).t) ⊃ W4;W5)), pcf(tid0) = W6 → apcf(tid0) = (W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(alsf(tid0).t) ⊃ W3;(FO(lsf(tid0).loc) ∈ gs.bq(alsf(tid0).t) ⊃ W4;(SF ∈ gs.bq(alsf(tid0).t) ⊃ W5;W6))), pcf(tid0) = W7 → apcf(tid0) = W7, pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W3 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → lsf(tid0).loc = alsf(tid0).l, pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W3 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → lsf(tid0).val = alsf(tid0).v ⊦

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Proof step 123 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(tid0) = W(bq(tid0).head.l, bq(tid0).head.v) ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, alsf(tid0).t = tid0, lsf(tid0).t = tid0, gs.bq(tid0) ≠ [], FLITGInv(gs), FLITInv((gs.pq:= gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf, pcf), FLITLInv(gs, lsf(tid0), pcf(tid0)), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), W(bq(tid0).head.l, bq(tid0).head.v) ∈ gs.bq(tid0), ¬ pre(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)), pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W3 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → lsf(tid0).val = alsf(tid0).v, pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W3 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → lsf(tid0).loc = alsf(tid0).l, pcf(tid0) = W7 → apcf(tid0) = W7, pcf(tid0) = W6 → apcf(tid0) = (W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(tid0) ⊃ W3;(FO(lsf(tid0).loc) ∈ gs.bq(tid0) ⊃ W4;(SF ∈ gs.bq(tid0) ⊃ W5;W6))), pcf(tid0) = W5 → apcf(tid0) = (W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(tid0) ⊃ W3;(FO(lsf(tid0).loc) ∈ gs.bq(tid0) ⊃ W4;W5)), pcf(tid0) = W4 → apcf(tid0) = (W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(tid0) ⊃ W3;W4), pcf(tid0) = W3 → apcf(tid0) = W3, pcf(tid0) = W2 → apcf(tid0) = (SF ∈ gs.bq(tid0) ⊃ W1;W2), pcf(tid0) = W1 → apcf(tid0) = W1, pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → lsf(tid0).val = alsf(tid0).v, pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → lsf(tid0).loc = alsf(tid0).l, pcf(tid0) = R4 → apcf(tid0) = R4, pcf(tid0) = R3 → apcf(tid0) = R3, pcf(tid0) = R2 → apcf(tid0) = R2, pcf(tid0) = R1 → apcf(tid0) = R1, pcf(tid0) = crashed → apcf(tid0) = crashed, pcf(tid0) = ready → apcf(tid0) = ready, pcf(tid0) = idle → apcf(tid0) = idle ⊦

User applied rule apply rewrite lemma

And obtained the following new goals

Rule argument

spec: FLIT, name:FLITLInv, seq:⊦ 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)), subst:[gs, ls, pc] → [gs, lsf(tid0), pcf(tid0)], <all paths>

Additional information

Used terms: gs, lsf(tid0), pcf(tid0)

Proof step 124 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

⊦ 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))

A spec-lemma

Proof step 125 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(tid0) = W(bq(tid0).head.l, bq(tid0).head.v) ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(tid0).t = tid0, alsf(tid0).t = tid0, gs.bq(tid0) ≠ [], FLITGInv(gs), FLITInv((gs.pq:= gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), W(bq(tid0).head.l, bq(tid0).head.v) ∈ gs.bq(tid0), ¬ pre(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)), pcf(tid0) = idle → apcf(tid0) = idle, pcf(tid0) = ready → apcf(tid0) = ready, pcf(tid0) = crashed → apcf(tid0) = crashed, pcf(tid0) = R1 → apcf(tid0) = R1, pcf(tid0) = R2 → apcf(tid0) = R2, pcf(tid0) = R3 → apcf(tid0) = R3, pcf(tid0) = R4 → apcf(tid0) = R4, pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → lsf(tid0).loc = alsf(tid0).l, pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → lsf(tid0).val = alsf(tid0).v, pcf(tid0) = W1 → apcf(tid0) = W1, pcf(tid0) = W2 → apcf(tid0) = (SF ∈ gs.bq(tid0) ⊃ W1;W2), pcf(tid0) = W3 → apcf(tid0) = W3, pcf(tid0) = W4 → apcf(tid0) = (W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(tid0) ⊃ W3;W4), pcf(tid0) = W5 → apcf(tid0) = (W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(tid0) ⊃ W3;(FO(lsf(tid0).loc) ∈ gs.bq(tid0) ⊃ W4;W5)), pcf(tid0) = W6 → apcf(tid0) = (W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(tid0) ⊃ W3;(FO(lsf(tid0).loc) ∈ gs.bq(tid0) ⊃ W4;(SF ∈ gs.bq(tid0) ⊃ W5;W6))), pcf(tid0) = W7 → apcf(tid0) = W7, pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W3 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → lsf(tid0).loc = alsf(tid0).l, pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W3 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → lsf(tid0).val = alsf(tid0).v, pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W3 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → notMember(lsf(tid0).t, gs.freaders), pcf(tid0) = W1 ∨ pcf(tid0) = W2 ∨ pcf(tid0) = W7 → notMember(lsf(tid0).t, gs.fwriters), pcf(tid0) = W3 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → oneMember(lsf(tid0).t, lsf(tid0).loc, gs.fwriters), pcf(tid0) = W1 ∨ pcf(tid0) = W2 → noPendingW(lsf(tid0).t, gs.bq, gs.pq), pcf(tid0) = W3 ∨ pcf(tid0) = W7 → noPending(lsf(tid0).t, gs.bq, gs.pq), pcf(tid0) = W5 ∨ pcf(tid0) = W6 → FOFollowsW(lsf(tid0).t, gs.bq(lsf(tid0).t), gs.pq(lsf(tid0).loc), lsf(tid0).loc), pcf(tid0) = W1 ∨ pcf(tid0) = W3 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W7 → ¬ SF ∈ gs.bq(lsf(tid0).t), pcf(tid0) = W3 ∨ pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 ∨ pcf(tid0) = W7 → gs.rfo(lsf(tid0).t) = [], pcf(tid0) = W3 → gs.bq(lsf(tid0).t) = [], pcf(tid0) = W4 → gs.bq(lsf(tid0).t) = [] ∨ gs.bq(lsf(tid0).t) = W(lsf(tid0).loc, lsf(tid0).val) ', pcf(tid0) = W5 → gs.bq(lsf(tid0).t) = [] ∨ gs.bq(lsf(tid0).t) = FO(lsf(tid0).loc) ' ∨ gs.bq(lsf(tid0).t) = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ', pcf(tid0) = W6 → gs.bq(lsf(tid0).t) = [] ∨ gs.bq(lsf(tid0).t) = SF ' ∨ gs.bq(lsf(tid0).t) = FO(lsf(tid0).loc) ' + SF ' ∨ gs.bq(lsf(tid0).t) = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ', pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → gs.bq(lsf(tid0).t) ≠ [] ∧ gs.bq(lsf(tid0).t).head.W? → gs.bq(lsf(tid0).t).head = W(lsf(tid0).loc, lsf(tid0).val), pcf(tid0) = W1 ∨ pcf(tid0) = W7 → gs.rfo(lsf(tid0).t) = gs.bq(lsf(tid0).t), pcf(tid0) = W2 → gs.rfo(lsf(tid0).t) = gs.bq(lsf(tid0).t) ∨ gs.rfo(lsf(tid0).t) + SF ' = gs.bq(lsf(tid0).t), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → noPendingW(lsf(tid0).t, gs.bq, gs.pq), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → notMember(lsf(tid0).t, gs.fwriters), pcf(tid0) = R1 ∨ pcf(tid0) = R4 → notMember(lsf(tid0).t, gs.freaders), pcf(tid0) = R2 ∨ pcf(tid0) = R3 → oneMember(lsf(tid0).t, lsf(tid0).loc, gs.freaders), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → ¬ SF ∈ gs.bq(lsf(tid0).t), pcf(tid0) = R1 ∨ pcf(tid0) = R2 ∨ pcf(tid0) = R3 ∨ pcf(tid0) = R4 → gs.rfo(lsf(tid0).t) = gs.bq(lsf(tid0).t), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → notMember(lsf(tid0).t, gs.fwriters), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → notMember(lsf(tid0).t, gs.freaders), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → noPendingW(lsf(tid0).t, gs.bq, gs.pq), pcf(tid0) = idle ∨ pcf(tid0) = crashed → noPending(lsf(tid0).t, gs.bq, gs.pq), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → ¬ SF ∈ gs.bq(lsf(tid0).t), pcf(tid0) = idle ∨ pcf(tid0) = ready ∨ pcf(tid0) = crashed → gs.rfo(lsf(tid0).t) = gs.bq(lsf(tid0).t) ⊦

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ noPending(t, bq, pq) → bq(t) ≠ W(l, v) ' + bel; (as) ⊦ noPendingW(t, bq, pq) → bq(t) ≠ W(l, v) ' + bel; (as)

Proof step 126 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(tid0) = W(bq(tid0).head.l, bq(tid0).head.v) ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(tid0).t = tid0, alsf(tid0).t = tid0, gs.bq(tid0) ≠ [], pcf(tid0) ≠ W1, pcf(tid0) ≠ W2, pcf(tid0) ≠ W3, pcf(tid0) ≠ W7, pcf(tid0) ≠ R1, pcf(tid0) ≠ R2, pcf(tid0) ≠ R3, pcf(tid0) ≠ R4, pcf(tid0) ≠ idle, pcf(tid0) ≠ ready, pcf(tid0) ≠ crashed, FLITGInv(gs), FLITInv((gs.pq:= gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), W(bq(tid0).head.l, bq(tid0).head.v) ∈ gs.bq(tid0), ¬ noPending(tid0, gs.bq, gs.pq), ¬ noPendingW(tid0, gs.bq, gs.pq), ¬ pre(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)), pcf(tid0) = W4 → apcf(tid0) = (W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(tid0) ⊃ W3;W4), pcf(tid0) = W5 → apcf(tid0) = (W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(tid0) ⊃ W3;(FO(lsf(tid0).loc) ∈ gs.bq(tid0) ⊃ W4;W5)), pcf(tid0) = W6 → apcf(tid0) = (W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(tid0) ⊃ W3;(FO(lsf(tid0).loc) ∈ gs.bq(tid0) ⊃ W4;(SF ∈ gs.bq(tid0) ⊃ W5;W6))), pcf(tid0) = W4 ∨ pcf(tid0) = W5 → ¬ SF ∈ gs.bq(tid0), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → gs.rfo(tid0) = [], pcf(tid0) = W4 → gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ', pcf(tid0) = W5 → gs.bq(tid0) = FO(lsf(tid0).loc) ' ∨ gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ', pcf(tid0) = W6 → gs.bq(tid0) = SF ' ∨ gs.bq(tid0) = FO(lsf(tid0).loc) ' + SF ' ∨ gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ', pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → gs.bq(tid0).head.W? → gs.bq(tid0).head = W(lsf(tid0).loc, lsf(tid0).val), pcf(tid0) = W5 ∨ pcf(tid0) = W6 → FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → lsf(tid0).loc = alsf(tid0).l, pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → lsf(tid0).val = alsf(tid0).v, pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → notMember(tid0, gs.freaders), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → oneMember(tid0, lsf(tid0).loc, gs.fwriters) ⊦

Heuristic elimination applied rule apply elim lemma

And obtained the following new goals

Rule argument

spec: list-data, name:elim-add, seq: ⊦ x ≠ [] → (head = x.head ∧ tail = x.tail ↔ x = head + tail), subst:[x, head, tail] → [gs.bq(tid0), head, bel0]; ['a] → [Bevent]

Additional information

Used simplifier rules: ⊦ x ≠ [] → (head = x.head ∧ tail = x.tail ↔ x = head + tail); (elim) Used terms: gs.bq(tid0), head, bel0

Proof step 127 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(tid0) = W(bq(tid0).head.l, bq(tid0).head.v) ' + bel, gs.bq(tid0) = head + bel0, ags.ctr = gs.fctr, ags.mem = gs.pmem, alsf(tid0).t = tid0, lsf(tid0).t = tid0, gs.bq(tid0) ≠ [], pcf(tid0) ≠ W1, pcf(tid0) ≠ W2, pcf(tid0) ≠ W3, pcf(tid0) ≠ W7, pcf(tid0) ≠ R1, pcf(tid0) ≠ R2, pcf(tid0) ≠ R3, pcf(tid0) ≠ R4, pcf(tid0) ≠ idle, pcf(tid0) ≠ ready, pcf(tid0) ≠ crashed, FLITGInv(gs), FLITInv((gs.pq:= gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), W(bq(tid0).head.l, bq(tid0).head.v) ∈ gs.bq(tid0), ¬ noPending(tid0, gs.bq, gs.pq), ¬ noPendingW(tid0, gs.bq, gs.pq), ¬ pre(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → oneMember(tid0, lsf(tid0).loc, gs.fwriters), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → notMember(tid0, gs.freaders), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → lsf(tid0).val = alsf(tid0).v, pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → lsf(tid0).loc = alsf(tid0).l, pcf(tid0) = W5 ∨ pcf(tid0) = W6 → FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → head.W? → head = W(lsf(tid0).loc, lsf(tid0).val), pcf(tid0) = W6 → gs.bq(tid0) = SF ' ∨ gs.bq(tid0) = FO(lsf(tid0).loc) ' + SF ' ∨ gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ', pcf(tid0) = W5 → gs.bq(tid0) = FO(lsf(tid0).loc) ' ∨ gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ', pcf(tid0) = W4 → gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ', pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → gs.rfo(tid0) = [], pcf(tid0) = W4 ∨ pcf(tid0) = W5 → ¬ SF ∈ gs.bq(tid0), pcf(tid0) = W6 → apcf(tid0) = (W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(tid0) ⊃ W3;(FO(lsf(tid0).loc) ∈ gs.bq(tid0) ⊃ W4;(SF ∈ gs.bq(tid0) ⊃ W5;W6))), pcf(tid0) = W5 → apcf(tid0) = (W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(tid0) ⊃ W3;(FO(lsf(tid0).loc) ∈ gs.bq(tid0) ⊃ W4;W5)), pcf(tid0) = W4 → apcf(tid0) = (W(lsf(tid0).loc, lsf(tid0).val) ∈ gs.bq(tid0) ⊃ W3;W4) ⊦

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: ⊦ W(l, v).W?; (s) ⊦ W(l, v) ≠ SF; (s) ⊦ W(l, v) ≠ FO(l0); (s) 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) ⊦ a ' + x = a0 ' + y ↔ a = a0 ∧ x = y; (ws) in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ a + x = a ' + x; (s)

Proof step 128 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

gs.bq(tid0) = W(bq(tid0).head.l, bq(tid0).head.v) ' + bel, ags.ctr = gs.fctr, ags.mem = gs.pmem, lsf(tid0).t = tid0, alsf(tid0).t = tid0, pcf(tid0) ≠ W1, pcf(tid0) ≠ W2, pcf(tid0) ≠ W3, pcf(tid0) ≠ W7, pcf(tid0) ≠ R1, pcf(tid0) ≠ R2, pcf(tid0) ≠ R3, pcf(tid0) ≠ R4, pcf(tid0) ≠ idle, pcf(tid0) ≠ ready, pcf(tid0) ≠ crashed, FLITGInv(gs), FLITInv((gs.pq:= gs.pq(bq(tid0).head.l := gs.pq(bq(tid0).head.l) + W(bq(tid0).head.v, tid0) ')).bq:= gs.bq(tid0 := bel), lsf, pcf), FLITPSCInv(ags, alsf, apcf), reorder(ags.p, gs.pq, gs.rfo), ¬ noPending(tid0, gs.bq, gs.pq), ¬ noPendingW(tid0, gs.bq, gs.pq), ¬ pre(ags, alsf(tid0), apcf(tid0), doWritePSC(tid0, bq(tid0).head.l, bq(tid0).head.v)), pcf(tid0) = W4 → apcf(tid0) = (W(lsf(tid0).loc, lsf(tid0).val) = W(bq(tid0).head.l, bq(tid0).head.v) ∨ W(lsf(tid0).loc, lsf(tid0).val) ∈ bel ⊃ W3;W4), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → gs.rfo(tid0) = [], pcf(tid0) = W4 → gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ', pcf(tid0) = W5 → gs.bq(tid0) = FO(lsf(tid0).loc) ' ∨ gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ', pcf(tid0) = W6 → gs.bq(tid0) = SF ' ∨ gs.bq(tid0) = FO(lsf(tid0).loc) ' + SF ' ∨ gs.bq(tid0) = W(lsf(tid0).loc, lsf(tid0).val) ' + FO(lsf(tid0).loc) ' + SF ', pcf(tid0) = W5 ∨ pcf(tid0) = W6 → FOFollowsW(tid0, gs.bq(tid0), gs.pq(lsf(tid0).loc), lsf(tid0).loc), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → lsf(tid0).loc = alsf(tid0).l, pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → lsf(tid0).val = alsf(tid0).v, pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → notMember(tid0, gs.freaders), pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → oneMember(tid0, lsf(tid0).loc, gs.fwriters), pcf(tid0) = W5 → apcf(tid0) = (W(lsf(tid0).loc, lsf(tid0).val) = W(bq(tid0).head.l, bq(tid0).head.v) ∨ W(lsf(tid0).loc, lsf(tid0).val) ∈ bel ⊃ W3 ;(FO(lsf(tid0).loc) ∈ bel ⊃ W4;W5) ), pcf(tid0) = W6 → apcf(tid0) = (W(lsf(tid0).loc, lsf(tid0).val) = W(bq(tid0).head.l, bq(tid0).head.v) ∨ W(lsf(tid0).loc, lsf(tid0).val) ∈ bel ⊃ W3 ;(FO(lsf(tid0).loc) ∈ bel ⊃ W4;(SF ∈ bel ⊃ W5;W6)) ), pcf(tid0) = W4 ∨ pcf(tid0) = W5 → ¬ SF ∈ bel, pcf(tid0) = W4 ∨ pcf(tid0) = W5 ∨ pcf(tid0) = W6 → W(bq(tid0).head.l, bq(tid0).head.v) = W(lsf(tid0).loc, lsf(tid0).val) ⊦

User applied rule constructor cut

And closed the goal!

Rule argument

term: pcf(tid0)

Additional information

Used simplifier rules: FLITPC freely generated by R1, R2, R3, R4, W1, W2, W3, W4, W5, W6, W7, crashed, idle, ready ;; ⊦ W(l, v) = W(l0, v0) ↔ l = l0 ∧ v = v0; (ws) in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ W6 ≠ crashed; (s) ⊦ W6 ≠ ready; (s) ⊦ W6 ≠ idle; (s) ⊦ R4 ≠ W6; (s) ⊦ R3 ≠ W6; (s) ⊦ R2 ≠ W6; (s) ⊦ R1 ≠ W6; (s) ⊦ W6 ≠ W7; (s) ⊦ W3 ≠ W6; (s) ⊦ W2 ≠ W6; (s) ⊦ W1 ≠ W6; (s) ⊦ pre(gs, ls, W3, a) ↔ a = doWritePSC(ls.t, ls.l, ls.v); (s) ⊦ doWritePSC(t, l, v) = doWritePSC(t0, l0, v0) ↔ t = t0 ∧ l = l0 ∧ v = v0; (ws) ⊦ W5 ≠ crashed; (s) ⊦ W5 ≠ ready; (s) ⊦ W5 ≠ idle; (s) ⊦ R4 ≠ W5; (s) ⊦ R3 ≠ W5; (s) ⊦ R2 ≠ W5; (s) ⊦ R1 ≠ W5; (s) ⊦ W5 ≠ W7; (s) ⊦ W3 ≠ W5; (s) ⊦ W2 ≠ W5; (s) ⊦ W1 ≠ W5; (s) ⊦ x = x + y ↔ y = []; (s) ⊦ W4 ≠ crashed; (s) ⊦ W4 ≠ ready; (s) ⊦ W4 ≠ idle; (s) ⊦ R4 ≠ W4; (s) ⊦ R3 ≠ W4; (s) ⊦ R2 ≠ W4; (s) ⊦ R1 ≠ W4; (s) ⊦ W4 ≠ W7; (s) ⊦ W3 ≠ W4; (s) ⊦ W2 ≠ W4; (s) ⊦ W1 ≠ W4; (s)

Proof step 129 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

⟨fwriters := gs.fwriters, pq := gs.pq, bq := gs.bq, rfo := gs.rfo; PROP_FO(tid1, l, fwriters; pq, bq, rfo); gs := ((gs.pq:= pq).bq:= bq).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, doWrite(tid, bq(tid).head.l, bq(tid).head.v) = (oneMember(tid1, l, gs.fwriters) ⊃ doWriteFO(tid1, l);propFO(tid1, l)), n < # gs.bq(tid1), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(tid1)), 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), doWritePSC(tid, bq(tid).head.l, bq(tid).head.v)) ∧ ags0 = gstepf(ags, alsf(t), apcf(t), doWritePSC(tid, bq(tid).head.l, bq(tid).head.v)) ∧ alsf0 = alsf(t := lstepf(ags, alsf(t), apcf(t), doWritePSC(tid, bq(tid).head.l, bq(tid).head.v))) ∧ apcf0 = apcf(t := pcstepf(ags, alsf(t), apcf(t), doWritePSC(tid, bq(tid).head.l, bq(tid).head.v)))) ∧ 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)))

Heuristic symbolic execution applied rule assign left

And obtained the following new goals

Rule argument

Additional information

Proof step 130 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

⟨PROP_FO(tid1, l, fwriters; pq, bq, rfo); gs := ((gs.pq:= pq).bq:= bq).rfo:= rfo⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, doWrite(tid, bq0(tid).head.l, bq0(tid).head.v) = (oneMember(tid1, l, gs.fwriters) ⊃ doWriteFO(tid1, l);propFO(tid1, l)), fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, n < # gs.bq(tid1), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(tid1)), 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), doWritePSC(tid, bq0(tid).head.l, bq0(tid).head.v)) ∧ ags0 = gstepf(ags, alsf(t), apcf(t), doWritePSC(tid, bq0(tid).head.l, bq0(tid).head.v)) ∧ alsf0 = alsf(t := lstepf(ags, alsf(t), apcf(t), doWritePSC(tid, bq0(tid).head.l, bq0(tid).head.v))) ∧ apcf0 = apcf(t := pcstepf(ags, alsf(t), apcf(t), doWritePSC(tid, bq0(tid).head.l, bq0(tid).head.v)))) ∧ 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)))

Heuristic split applied rule split left

And obtained the following new goals

Rule argument

pos: left 1

Additional information

Proof step 131 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

⟨gs := ((gs.pq:= pq0).bq:= bq1).rfo:= rfo0⟩ (gs0 = gs ∧ lsf0 = lsf ∧ pcf0 = pcf), ⟨PROP_FO(tid1, l, fwriters; pq, bq, rfo)⟩ (pq = pq0 ∧ bq = bq1 ∧ rfo = rfo0), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, doWrite(tid, bq0(tid).head.l, bq0(tid).head.v) = (oneMember(tid1, l, gs.fwriters) ⊃ doWriteFO(tid1, l);propFO(tid1, l)), fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, n < # gs.bq(tid1), FLITInv(gs0, lsf0, pcf0), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(tid1)), 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), doWritePSC(tid, bq0(tid).head.l, bq0(tid).head.v)) ∧ ags0 = gstepf(ags, alsf(t), apcf(t), doWritePSC(tid, bq0(tid).head.l, bq0(tid).head.v)) ∧ alsf0 = alsf(t := lstepf(ags, alsf(t), apcf(t), doWritePSC(tid, bq0(tid).head.l, bq0(tid).head.v))) ∧ apcf0 = apcf(t := pcstepf(ags, alsf(t), apcf(t), doWritePSC(tid, bq0(tid).head.l, bq0(tid).head.v)))) ∧ 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)))

Heuristic symbolic execution applied rule assign left

And obtained the following new goals

Rule argument

Additional information

Proof step 132 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

⟨PROP_FO(tid1, l, fwriters; pq, bq, rfo)⟩ (pq = pq0 ∧ bq = bq1 ∧ rfo = rfo0), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, doWrite(tid, bq0(tid).head.l, bq0(tid).head.v) = (oneMember(tid1, l, gs.fwriters) ⊃ doWriteFO(tid1, l);propFO(tid1, l)), fwriters = gs.fwriters, gs0 = ((gs.pq:= pq0).bq:= bq1).rfo:= rfo0, lsf0 = lsf, pcf0 = pcf, pq = gs.pq, rfo = gs.rfo, n < # gs.bq(tid1), FLITInv(gs, lsf, pcf), FLITInv(gs0, lsf0, pcf0), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(tid1)), 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), doWritePSC(tid, bq0(tid).head.l, bq0(tid).head.v)) ∧ ags0 = gstepf(ags, alsf(t), apcf(t), doWritePSC(tid, bq0(tid).head.l, bq0(tid).head.v)) ∧ alsf0 = alsf(t := lstepf(ags, alsf(t), apcf(t), doWritePSC(tid, bq0(tid).head.l, bq0(tid).head.v))) ∧ apcf0 = apcf(t := pcstepf(ags, alsf(t), apcf(t), doWritePSC(tid, bq0(tid).head.l, bq0(tid).head.v)))) ∧ 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)))

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

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)

Proof step 133 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

⟨PROP_FO(tid1, l, gs.fwriters; pq, bq, rfo)⟩ (pq = pq0 ∧ bq = bq1 ∧ rfo = rfo0), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, doWrite(tid, bq0(tid).head.l, bq0(tid).head.v) = (oneMember(tid1, l, gs.fwriters) ⊃ doWriteFO(tid1, l);propFO(tid1, l)), pq = gs.pq, rfo = gs.rfo, gs.bq(tid1) ≠ [], n < # gs.bq(tid1), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq1).rfo:= rfo0, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(tid1)), 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), doWritePSC(tid, bq0(tid).head.l, bq0(tid).head.v)) ∧ ags0 = gstepf(ags, alsf(t), apcf(t), doWritePSC(tid, bq0(tid).head.l, bq0(tid).head.v)) ∧ alsf0 = alsf(t := lstepf(ags, alsf(t), apcf(t), doWritePSC(tid, bq0(tid).head.l, bq0(tid).head.v))) ∧ apcf0 = apcf(t := pcstepf(ags, alsf(t), apcf(t), doWritePSC(tid, bq0(tid).head.l, bq0(tid).head.v)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, pq0, rfo0) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(((gs.pq:= pq0).bq:= bq1).rfo:= rfo0, lsf(t), pcf(t), ags0, alsf0(t), apcf0(t)))

Heuristic unfold applied rule call left

And obtained the following new goals

Rule argument

pos: left 1

Additional information

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 };

Proof step 134 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

⟨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 = bq1 ∧ rfo = rfo0), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, doWrite(tid0, bq0(tid0).head.l, bq0(tid0).head.v) = (oneMember(tid1, l, gs.fwriters) ⊃ doWriteFO(tid1, l);propFO(tid1, l)), fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, tid = tid1, gs.bq(tid1) ≠ [], n < # gs.bq(tid1), FLITInv(((gs.pq:= pq0).bq:= bq1).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(tid1)), 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), doWritePSC(tid0, bq0(tid0).head.l, bq0(tid0).head.v)) ∧ ags0 = gstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq0(tid0).head.l, bq0(tid0).head.v)) ∧ alsf0 = alsf(t := lstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq0(tid0).head.l, bq0(tid0).head.v))) ∧ apcf0 = apcf(t := pcstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq0(tid0).head.l, bq0(tid0).head.v)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, pq0, rfo0) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(((gs.pq:= pq0).bq:= bq1).rfo:= rfo0, lsf(t), pcf(t), ags0, alsf0(t), apcf0(t)))

Heuristic symbolic execution applied rule choose left

And obtained the following new goals

Rule argument

Additional information

Proof step 135 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

⟨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 = bq1 ∧ rfo = rfo0), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, doWrite(tid0, bq0(tid0).head.l, bq0(tid0).head.v) = (oneMember(tid1, l, gs.fwriters) ⊃ doWriteFO(tid1, l);propFO(tid1, l)), fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, tid = tid1, gs.bq(tid1) ≠ [], n0 < # gs.bq(tid1), n < # bq(tid), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq1).rfo:= rfo0, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(tid1)), isPropFO(n, l, bq(tid)), 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), doWritePSC(tid0, bq0(tid0).head.l, bq0(tid0).head.v)) ∧ ags0 = gstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq0(tid0).head.l, bq0(tid0).head.v)) ∧ alsf0 = alsf(t := lstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq0(tid0).head.l, bq0(tid0).head.v))) ∧ apcf0 = apcf(t := pcstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq0(tid0).head.l, bq0(tid0).head.v)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, pq0, rfo0) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(((gs.pq:= pq0).bq:= bq1).rfo:= rfo0, lsf(t), pcf(t), ags0, alsf0(t), apcf0(t)))

Heuristic symbolic execution applied rule assign left

And obtained the following new goals

Rule argument

Additional information

Proof step 136 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

pq(l := pq(l) + FO(tid)) = pq0, bq(tid := bq(tid) -p n) = bq1, rfo(tid := (tid ∈ fwriters(l) ⊃ rfo(tid);rfo(tid) -p n)) = rfo0, ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, doWrite(tid0, bq0(tid0).head.l, bq0(tid0).head.v) = (oneMember(tid1, l, gs.fwriters) ⊃ doWriteFO(tid1, l);propFO(tid1, l)), fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, tid = tid1, gs.bq(tid1) ≠ [], n < # bq(tid), n0 < # gs.bq(tid1), FLITInv(((gs.pq:= pq0).bq:= bq1).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, bq(tid)), isPropFO(n0, l, gs.bq(tid1)), 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), doWritePSC(tid0, bq0(tid0).head.l, bq0(tid0).head.v)) ∧ ags0 = gstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq0(tid0).head.l, bq0(tid0).head.v)) ∧ alsf0 = alsf(t := lstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq0(tid0).head.l, bq0(tid0).head.v))) ∧ apcf0 = apcf(t := pcstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq0(tid0).head.l, bq0(tid0).head.v)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, pq0, rfo0) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(((gs.pq:= pq0).bq:= bq1).rfo:= rfo0, lsf(t), pcf(t), ags0, alsf0(t), apcf0(t)))

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: ⊦ x + a = x + a '; (s)

Proof step 137 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, doWrite(tid0, bq0(tid0).head.l, bq0(tid0).head.v) = (oneMember(tid1, l, gs.fwriters) ⊃ doWriteFO(tid1, l);propFO(tid1, l)), gs.bq(tid1) ≠ [], n0 < # gs.bq(tid1), n < # gs.bq(tid1), FLITInv(gs, lsf, pcf), FLITInv ( ((gs.pq:= gs.pq(l := gs.pq(l) + FO(tid1) ')).bq:= gs.bq(tid1 := gs.bq(tid1) -p n)) .rfo:= gs.rfo(tid1 := (tid1 ∈ gs.fwriters(l) ⊃ gs.rfo(tid1);gs.rfo(tid1) -p n)), lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n0, l, gs.bq(tid1)), isPropFO(n, l, gs.bq(tid1)), 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), doWritePSC(tid0, bq0(tid0).head.l, bq0(tid0).head.v)) ∧ ags0 = gstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq0(tid0).head.l, bq0(tid0).head.v)) ∧ alsf0 = alsf(t := lstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq0(tid0).head.l, bq0(tid0).head.v))) ∧ apcf0 = apcf(t := pcstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq0(tid0).head.l, bq0(tid0).head.v)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq(l := gs.pq(l) + FO(tid1) '), gs.rfo(tid1 := (tid1 ∈ gs.fwriters(l) ⊃ gs.rfo(tid1);gs.rfo(tid1) -p n))) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs ( ((gs.pq:= gs.pq(l := gs.pq(l) + FO(tid1) ')).bq:= gs.bq(tid1 := gs.bq(tid1) -p n)) .rfo:= gs.rfo(tid1 := (tid1 ∈ gs.fwriters(l) ⊃ gs.rfo(tid1);gs.rfo(tid1) -p n)), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t)))

Heuristic nonsplitting cut applied rule cut formula

And obtained the following new goals

Rule argument

fma: tid1 ∈ gs.fwriters(l)

Additional information

Used simplifier rules: ⊦ oneMember(t, l, tsf) → (t ∈ tsf(l0) ↔ l = l0); (s) ⊦ doWrite(t, loc, v) ≠ propFO(t0, loc0); (s) Used formulas: tid1 ∈ gs.fwriters(l)

Proof step 138 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, doWrite(tid0, bq0(tid0).head.l, bq0(tid0).head.v) = (oneMember(tid1, l, gs.fwriters) ⊃ doWriteFO(tid1, l);propFO(tid1, l)), gs.bq(tid1) ≠ [], n < # gs.bq(tid1), n0 < # gs.bq(tid1), FLITInv ( ((gs.pq:= gs.pq(l := gs.pq(l) + FO(tid1) ')).bq:= gs.bq(tid1 := gs.bq(tid1) -p n)) .rfo:= gs.rfo(tid1 := (tid1 ∈ gs.fwriters(l) ⊃ gs.rfo(tid1);gs.rfo(tid1) -p n)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(tid1)), isPropFO(n0, l, gs.bq(tid1)), reorder(ags.p, gs.pq, gs.rfo), tid1 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(ags, alsf(t), apcf(t), doWritePSC(tid0, bq0(tid0).head.l, bq0(tid0).head.v)) ∧ ags0 = gstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq0(tid0).head.l, bq0(tid0).head.v)) ∧ alsf0 = alsf(t := lstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq0(tid0).head.l, bq0(tid0).head.v))) ∧ apcf0 = apcf(t := pcstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq0(tid0).head.l, bq0(tid0).head.v)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq(l := gs.pq(l) + FO(tid1) '), gs.rfo(tid1 := (tid1 ∈ gs.fwriters(l) ⊃ gs.rfo(tid1);gs.rfo(tid1) -p n))) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs ( ((gs.pq:= gs.pq(l := gs.pq(l) + FO(tid1) ')).bq:= gs.bq(tid1 := gs.bq(tid1) -p n)) .rfo:= gs.rfo(tid1 := (tid1 ∈ gs.fwriters(l) ⊃ gs.rfo(tid1);gs.rfo(tid1) -p n)), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t)))

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic

Proof step 139 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, doWrite(tid0, bq0(tid0).head.l, bq0(tid0).head.v) = (oneMember(tid1, l, gs.fwriters) ⊃ doWriteFO(tid1, l);propFO(tid1, l)), # gs.fwriters(l) ≠ 0, gs.bq(tid1) ≠ [], gs.fwriters(l) ≠ ∅, n < # gs.bq(tid1), n0 < # gs.bq(tid1), FLITInv(((gs.pq:= gs.pq(l := gs.pq(l) + FO(tid1) ')).bq:= gs.bq(tid1 := gs.bq(tid1) -p n)).rfo:= gs.rfo(tid1 := gs.rfo(tid1)), lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(tid1)), isPropFO(n0, l, gs.bq(tid1)), reorder(ags.p, gs.pq, gs.rfo), tid1 ∈ gs.fwriters(l), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(ags, alsf(t), apcf(t), doWritePSC(tid0, bq0(tid0).head.l, bq0(tid0).head.v)) ∧ ags0 = gstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq0(tid0).head.l, bq0(tid0).head.v)) ∧ alsf0 = alsf(t := lstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq0(tid0).head.l, bq0(tid0).head.v))) ∧ apcf0 = apcf(t := pcstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq0(tid0).head.l, bq0(tid0).head.v)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, gs.pq(l := gs.pq(l) + FO(tid1) '), gs.rfo(tid1 := gs.rfo(tid1))) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs (((gs.pq:= gs.pq(l := gs.pq(l) + FO(tid1) ')).bq:= gs.bq(tid1 := gs.bq(tid1) -p n)).rfo:= gs.rfo(tid1 := gs.rfo(tid1)), lsf(t), pcf(t), ags0, alsf0(t), apcf0(t)))

Heuristic nonsplitting cut applied rule cut formula

And closed the goal!

Rule argument

fma: oneMember(tid1, l, gs.fwriters)

Additional information

Used simplifier rules: ⊦ doWrite(t, loc, v) ≠ propFO(t0, loc0); (s) ⊦ doWrite(t, loc, v) ≠ doWriteFO(t0, loc0); (s) Used formulas: oneMember(tid1, l, gs.fwriters)

Proof step 140 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

⟨skip⟩ (pq = pq0 ∧ bq = bq1 ∧ rfo = rfo0), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, doWrite(tid0, bq0(tid0).head.l, bq0(tid0).head.v) = (oneMember(tid1, l, gs.fwriters) ⊃ doWriteFO(tid1, l);propFO(tid1, l)), fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, tid = tid1, gs.bq(tid1) ≠ [], n < # gs.bq(tid1), FLITInv(gs, lsf, pcf), FLITInv(((gs.pq:= pq0).bq:= bq1).rfo:= rfo0, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(tid1)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ n. ¬(n < # bq(tid) ∧ isPropFO(n, l, bq(tid))) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(ags, alsf(t), apcf(t), doWritePSC(tid0, bq0(tid0).head.l, bq0(tid0).head.v)) ∧ ags0 = gstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq0(tid0).head.l, bq0(tid0).head.v)) ∧ alsf0 = alsf(t := lstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq0(tid0).head.l, bq0(tid0).head.v))) ∧ apcf0 = apcf(t := pcstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq0(tid0).head.l, bq0(tid0).head.v)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, pq0, rfo0) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(((gs.pq:= pq0).bq:= bq1).rfo:= rfo0, lsf(t), pcf(t), ags0, alsf0(t), apcf0(t)))

Heuristic simplifier applied rule simplifier

And obtained the following new goals

Rule argument

Additional information

Proof step 141 from proof step-absstep-PROP_W-doWrite (previous step) (back to tree)

⟨skip⟩ (pq = pq0 ∧ bq = bq1 ∧ rfo = rfo0), ags.ctr = gs.fctr, ags.mem = gs.pmem, ags.writers = gs.fwriters, bq = gs.bq, doWrite(tid0, bq0(tid0).head.l, bq0(tid0).head.v) = (oneMember(tid1, l, gs.fwriters) ⊃ doWriteFO(tid1, l);propFO(tid1, l)), pq = gs.pq, rfo = gs.rfo, gs.bq(tid1) ≠ [], n < # gs.bq(tid1), FLITInv(((gs.pq:= pq0).bq:= bq1).rfo:= rfo0, lsf, pcf), FLITInv(gs, lsf, pcf), FLITPSCInv(ags, alsf, apcf), isPropFO(n, l, gs.bq(tid1)), reorder(ags.p, gs.pq, gs.rfo), ∀ t. labs(gs, lsf(t), pcf(t), ags, alsf(t), apcf(t)), ∀ n0. ¬ n0 < # gs.bq(tid1) ∨ ¬ isPropFO(n0, l, gs.bq(tid1)) ⊦ ∃ ags0, alsf0, apcf0. (∃ t. pre(ags, alsf(t), apcf(t), doWritePSC(tid0, bq0(tid0).head.l, bq0(tid0).head.v)) ∧ ags0 = gstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq0(tid0).head.l, bq0(tid0).head.v)) ∧ alsf0 = alsf(t := lstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq0(tid0).head.l, bq0(tid0).head.v))) ∧ apcf0 = apcf(t := pcstepf(ags, alsf(t), apcf(t), doWritePSC(tid0, bq0(tid0).head.l, bq0(tid0).head.v)))) ∧ ags0.mem = gs.pmem ∧ ags0.ctr = gs.fctr ∧ reorder(ags0.p, pq0, rfo0) ∧ ags0.writers = gs.fwriters ∧ (∀ t. labs(((gs.pq:= pq0).bq:= bq1).rfo:= rfo0, lsf(t), pcf(t), ags0, alsf0(t), apcf0(t)))

Heuristic nonsplitting cut applied rule cut formula

And closed the goal!

Rule argument

fma: oneMember(tid1, l, gs.fwriters)

Additional information

Used simplifier rules: ⊦ doWrite(t, loc, v) ≠ propFO(t0, loc0); (s) ⊦ doWrite(t, loc, v) ≠ doWriteFO(t0, loc0); (s) Used formulas: oneMember(tid1, l, gs.fwriters)

Proof Tree for step-absstep-PROP_W-doWrite (View conclusion)

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.

the proof tree