| ⊦ ( ( 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)) ∧ notMember(ls.t, gs.freaders) ∧ notMember(ls.t, gs.fwriters) ∧ noPendingW(ls.t, gs.bq, gs.pq) ∧ (gs.rfo(ls.t) = gs.bq(ls.t) ∨ gs.rfo(ls.t) + SF ' = gs.bq(ls.t))) ∧ pre(gs, ls, W2, a) ∧ pcstepf(gs, ls, W2, a) = W3 → ( ctrok(gstepf(gs, ls, W2, a).fctr, gstepf(gs, ls, W2, a).fwriters) ∧ writersOk(gstepf(gs, ls, W2, a).bq, gstepf(gs, ls, W2, a).pq, gstepf(gs, ls, W2, a).fwriters) ∧ pendingOk(gstepf(gs, ls, W2, a).bq, gstepf(gs, ls, W2, a).pq) ∧ SFTrailing(gstepf(gs, ls, W2, a).bq) ∧ readFOsOk(gstepf(gs, ls, W2, a).rfo, gstepf(gs, ls, W2, a).fwriters)) ∧ notMember(lstepf(gs, ls, W2, a).t, gstepf(gs, ls, W2, a).freaders) ∧ oneMember(lstepf(gs, ls, W2, a).t, lstepf(gs, ls, W2, a).loc, gstepf(gs, ls, W2, a).fwriters) ∧ noPending(lstepf(gs, ls, W2, a).t, gstepf(gs, ls, W2, a).bq, gstepf(gs, ls, W2, a).pq) ∧ ¬ SF ∈ gstepf(gs, ls, W2, a).bq(lstepf(gs, ls, W2, a).t) ∧ gstepf(gs, ls, W2, a).rfo(lstepf(gs, ls, W2, a).t) = [] ∧ gstepf(gs, ls, W2, a).bq(lstepf(gs, ls, W2, a).t) = [] |
pcstepf(gs, ls, W2, a) = W3, SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), noPendingW(ls.t, gs.bq, gs.pq), notMember(ls.t, gs.freaders), notMember(ls.t, gs.fwriters), pendingOk(gs.bq, gs.pq), pre(gs, ls, W2, a), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), gs.rfo(ls.t) = gs.bq(ls.t) ∨ gs.rfo(ls.t) + SF ' = gs.bq(ls.t) ⊦ ( ctrok(gstepf(gs, ls, W2, a).fctr, gstepf(gs, ls, W2, a).fwriters) ∧ writersOk(gstepf(gs, ls, W2, a).bq, gstepf(gs, ls, W2, a).pq, gstepf(gs, ls, W2, a).fwriters) ∧ pendingOk(gstepf(gs, ls, W2, a).bq, gstepf(gs, ls, W2, a).pq) ∧ SFTrailing(gstepf(gs, ls, W2, a).bq) ∧ readFOsOk(gstepf(gs, ls, W2, a).rfo, gstepf(gs, ls, W2, a).fwriters)) ∧ notMember(lstepf(gs, ls, W2, a).t, gstepf(gs, ls, W2, a).freaders) ∧ oneMember(lstepf(gs, ls, W2, a).t, lstepf(gs, ls, W2, a).loc, gstepf(gs, ls, W2, a).fwriters) ∧ noPending(lstepf(gs, ls, W2, a).t, gstepf(gs, ls, W2, a).bq, gstepf(gs, ls, W2, a).pq) ∧ ¬ SF ∈ gstepf(gs, ls, W2, a).bq(lstepf(gs, ls, W2, a).t) ∧ gstepf(gs, ls, W2, a).rfo(lstepf(gs, ls, W2, a).t) = [] ∧ gstepf(gs, ls, W2, a).bq(lstepf(gs, ls, W2, a).t) = []
| pcstepf(gs, ls, W2, a) = W3, SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), noPendingW(ls.t, gs.bq, gs.pq), notMember(ls.t, gs.freaders), notMember(ls.t, gs.fwriters), pendingOk(gs.bq, gs.pq), pre(gs, ls, W2, a), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), gs.rfo(ls.t) = gs.bq(ls.t) ∨ gs.rfo(ls.t) + SF ' = gs.bq(ls.t) ⊦ ( ctrok(gstepf(gs, ls, W2, a).fctr, gstepf(gs, ls, W2, a).fwriters) ∧ writersOk(gstepf(gs, ls, W2, a).bq, gstepf(gs, ls, W2, a).pq, gstepf(gs, ls, W2, a).fwriters) ∧ pendingOk(gstepf(gs, ls, W2, a).bq, gstepf(gs, ls, W2, a).pq) ∧ SFTrailing(gstepf(gs, ls, W2, a).bq) ∧ readFOsOk(gstepf(gs, ls, W2, a).rfo, gstepf(gs, ls, W2, a).fwriters)) ∧ notMember(lstepf(gs, ls, W2, a).t, gstepf(gs, ls, W2, a).freaders) ∧ oneMember(lstepf(gs, ls, W2, a).t, lstepf(gs, ls, W2, a).loc, gstepf(gs, ls, W2, a).fwriters) ∧ noPending(lstepf(gs, ls, W2, a).t, gstepf(gs, ls, W2, a).bq, gstepf(gs, ls, W2, a).pq) ∧ ¬ SF ∈ gstepf(gs, ls, W2, a).bq(lstepf(gs, ls, W2, a).t) ∧ gstepf(gs, ls, W2, a).rfo(lstepf(gs, ls, W2, a).t) = [] ∧ gstepf(gs, ls, W2, a).bq(lstepf(gs, ls, W2, a).t) = [] |
gs.bq(ls.t) = [], gs.rfo(ls.t) = [], SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), noPendingW(ls.t, gs.bq, gs.pq), notMember(ls.t, gs.freaders), notMember(ls.t, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ noPending(ls.t, gs.bq, gs.pq), ∀ l. ¬ FO(ls.t) ∈ gs.pq(l) ⊦
Used simplifier rules: ⊦ ¬ a ∈ []; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ readFOsOk(rfo, writers) ∧ rfo(t) = [] → readFOsOk(rfo, writers(l := writers(l) ++ t)); (ss) ⊦ (gs.fctr:= fctr).bq = gs.bq; (s) ⊦ (gs.fwriters:= fwriters).bq = gs.bq; (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) ⊦ (gs.fctr:= fctr).rfo = gs.rfo; (s) ⊦ (gs.fwriters:= fwriters).rfo = gs.rfo; (s) ⊦ (gs.fctr:= fctr).pq = gs.pq; (s) ⊦ (gs.fwriters:= fwriters).pq = gs.pq; (s) ⊦ notMember(t, tsf) → oneMember(t, l, tsf(l := tsf(l) ++ t)); (ss) ⊦ (gs.fwriters:= fwriters).fwriters = fwriters; (s) ⊦ (gs.fctr:= fctr).freaders = gs.freaders; (s) ⊦ (gs.fwriters:= fwriters).freaders = gs.freaders; (s) ⊦ writersOk(bq, pq, writers) ∧ notMember(t, writers) → writersOk(bq, pq, writers(l := writers(l) ++ t)); (ss) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ ctrok(ctr, writers) ∧ notMember(t, writers) → ctrok(ctr(l := ctr(l) + 1), writers(l := writers(l) ++ t)); (ss) ⊦ (gs.fctr:= fctr).fctr = fctr; (s) ⊦ (gs.fwriters:= fwriters).fctr = gs.fctr; (s) ⊦ pre(gs, ls, W2, a) ↔ (gs.bq(ls.t) = [] ∧ (∀ l. ¬ FO(ls.t) ∈ gs.pq(l))) ∧ a = ctrInc(ls.t, ls.loc); (s) ⊦ pcstepf(gs, ls, W2, a) = W3; (s)
| gs.bq(ls.t) = [], gs.rfo(ls.t) = [], SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), noPendingW(ls.t, gs.bq, gs.pq), notMember(ls.t, gs.freaders), notMember(ls.t, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ noPending(ls.t, gs.bq, gs.pq), ∀ l. ¬ FO(ls.t) ∈ gs.pq(l) ⊦ |
⊦ noPending(t, bq, p) ↔ (∀ l. p(l) | t = [] ∧ bq(t) = [])
gs.bq(ls.t) = [], gs.rfo(ls.t) = [], SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), noPendingW(ls.t, gs.bq, gs.pq), notMember(ls.t, gs.fwriters), notMember(ls.t, gs.freaders), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ∀ l. ¬ FO(ls.t) ∈ gs.pq(l), ∃ l. ¬(gs.pq(l) | ls.t = [] ∧ gs.bq(ls.t) = []) ⊦
Used terms: ls.t, gs.bq, gs.pq
| ⊦ noPending(t, bq, p) ↔ (∀ l. p(l) | t = [] ∧ bq(t) = []) |
| gs.bq(ls.t) = [], gs.rfo(ls.t) = [], SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), noPendingW(ls.t, gs.bq, gs.pq), notMember(ls.t, gs.fwriters), notMember(ls.t, gs.freaders), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ∀ l. ¬ FO(ls.t) ∈ gs.pq(l), ∃ l. ¬(gs.pq(l) | ls.t = [] ∧ gs.bq(ls.t) = []) ⊦ |
gs.bq(ls.t) = [], gs.rfo(ls.t) = [], gs.pq(l) | ls.t ≠ [], SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), noPendingW(ls.t, gs.bq, gs.pq), notMember(ls.t, gs.freaders), notMember(ls.t, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ∀ l. ¬ FO(ls.t) ∈ gs.pq(l) ⊦
| gs.bq(ls.t) = [], gs.rfo(ls.t) = [], gs.pq(l) | ls.t ≠ [], SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), noPendingW(ls.t, gs.bq, gs.pq), notMember(ls.t, gs.freaders), notMember(ls.t, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ∀ l. ¬ FO(ls.t) ∈ gs.pq(l) ⊦ |
⊦ x = [] ↔ ¬(∃ a. a ∈ x)
gs.bq(ls.t) = [], gs.rfo(ls.t) = [], SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), noPendingW(ls.t, gs.bq, gs.pq), notMember(ls.t, gs.fwriters), notMember(ls.t, gs.freaders), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ∀ l. ¬ FO(ls.t) ∈ gs.pq(l), ∃ fow. fow ∈ gs.pq(l) | ls.t ⊦
Used terms: gs.pq(l) | ls.t
| ⊦ x = [] ↔ ¬(∃ a. a ∈ x) |
| gs.bq(ls.t) = [], gs.rfo(ls.t) = [], SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), noPendingW(ls.t, gs.bq, gs.pq), notMember(ls.t, gs.fwriters), notMember(ls.t, gs.freaders), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ∀ l. ¬ FO(ls.t) ∈ gs.pq(l), ∃ fow. fow ∈ gs.pq(l) | ls.t ⊦ |
gs.bq(ls.t) = [], gs.rfo(ls.t) = [], fow.tid = ls.t, SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), noPendingW(ls.t, gs.bq, gs.pq), notMember(ls.t, gs.freaders), notMember(ls.t, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), fow ∈ gs.pq(l), ∀ l. ¬ FO(ls.t) ∈ gs.pq(l) ⊦
Used simplifier rules: ⊦ fow ∈ fowl | t ↔ fow ∈ fowl ∧ fow.tid = t; (s)
| gs.bq(ls.t) = [], gs.rfo(ls.t) = [], fow.tid = ls.t, SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), noPendingW(ls.t, gs.bq, gs.pq), notMember(ls.t, gs.freaders), notMember(ls.t, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), fow ∈ gs.pq(l), ∀ l. ¬ FO(ls.t) ∈ gs.pq(l) ⊦ |
gs.bq(ls.t) = [], gs.rfo(ls.t) = [], fow.tid = ls.t, fow = FO(t), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), noPendingW(ls.t, gs.bq, gs.pq), notMember(ls.t, gs.fwriters), notMember(ls.t, gs.freaders), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), fow ∈ gs.pq(l), ∀ l. ¬ FO(ls.t) ∈ gs.pq(l) ⊦
gs.bq(ls.t) = [], gs.rfo(ls.t) = [], fow.tid = ls.t, fow = W(fv, t), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), noPendingW(ls.t, gs.bq, gs.pq), notMember(ls.t, gs.fwriters), notMember(ls.t, gs.freaders), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), fow ∈ gs.pq(l), ∀ l. ¬ FO(ls.t) ∈ gs.pq(l) ⊦
Used simplifier rules: FOW freely generated by FO, W;;
| gs.bq(ls.t) = [], gs.rfo(ls.t) = [], fow.tid = ls.t, fow = FO(t), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), noPendingW(ls.t, gs.bq, gs.pq), notMember(ls.t, gs.fwriters), notMember(ls.t, gs.freaders), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), fow ∈ gs.pq(l), ∀ l. ¬ FO(ls.t) ∈ gs.pq(l) ⊦ |
gs.bq(ls.t) = [], gs.rfo(ls.t) = [], SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), noPendingW(ls.t, gs.bq, gs.pq), notMember(ls.t, gs.fwriters), notMember(ls.t, gs.freaders), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), FO(ls.t) ∈ gs.pq(l), ∀ l. ¬ FO(ls.t) ∈ gs.pq(l) ⊦
Used simplifier rules: ⊦ FO(tid).tid = tid; (s)
| gs.bq(ls.t) = [], gs.rfo(ls.t) = [], SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), noPendingW(ls.t, gs.bq, gs.pq), notMember(ls.t, gs.fwriters), notMember(ls.t, gs.freaders), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), FO(ls.t) ∈ gs.pq(l), ∀ l. ¬ FO(ls.t) ∈ gs.pq(l) ⊦ |
Used terms: l
| gs.bq(ls.t) = [], gs.rfo(ls.t) = [], fow.tid = ls.t, fow = W(fv, t), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), noPendingW(ls.t, gs.bq, gs.pq), notMember(ls.t, gs.fwriters), notMember(ls.t, gs.freaders), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), fow ∈ gs.pq(l), ∀ l. ¬ FO(ls.t) ∈ gs.pq(l) ⊦ |
gs.bq(ls.t) = [], gs.rfo(ls.t) = [], SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), noPendingW(ls.t, gs.bq, gs.pq), notMember(ls.t, gs.fwriters), notMember(ls.t, gs.freaders), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), W(fv, ls.t) ∈ gs.pq(l), ∀ l. ¬ FO(ls.t) ∈ gs.pq(l) ⊦
Used simplifier rules: ⊦ W(v, tid).tid = tid; (s)
| gs.bq(ls.t) = [], gs.rfo(ls.t) = [], SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), noPendingW(ls.t, gs.bq, gs.pq), notMember(ls.t, gs.fwriters), notMember(ls.t, gs.freaders), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), W(fv, ls.t) ∈ gs.pq(l), ∀ l. ¬ FO(ls.t) ∈ gs.pq(l) ⊦ |
⊦ noPendingW(t, bq, p) ↔ (∀ l. p(l) |W | t = [] ∧ bq(t) |WL l = [])
gs.bq(ls.t) = [], gs.rfo(ls.t) = [], SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), notMember(ls.t, gs.freaders), notMember(ls.t, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), W(fv, ls.t) ∈ gs.pq(l), ∀ l. ¬ FO(ls.t) ∈ gs.pq(l), ∀ l. gs.pq(l) |W | ls.t = [] ∧ gs.bq(ls.t) |WL l = [] ⊦
Used terms: ls.t, gs.bq, gs.pq
| ⊦ noPendingW(t, bq, p) ↔ (∀ l. p(l) |W | t = [] ∧ bq(t) |WL l = []) |
| gs.bq(ls.t) = [], gs.rfo(ls.t) = [], SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), notMember(ls.t, gs.freaders), notMember(ls.t, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), W(fv, ls.t) ∈ gs.pq(l), ∀ l. ¬ FO(ls.t) ∈ gs.pq(l), ∀ l. gs.pq(l) |W | ls.t = [] ∧ gs.bq(ls.t) |WL l = [] ⊦ |
gs.bq(ls.t) = [], gs.rfo(ls.t) = [], SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), notMember(ls.t, gs.freaders), notMember(ls.t, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), W(fv, ls.t) ∈ gs.pq(l), ∀ l. ¬ FO(ls.t) ∈ gs.pq(l), ∀ l0. gs.pq(l0) |W | ls.t = [] ⊦
Used simplifier rules: ⊦ [] |WL l = []; (s)
| gs.bq(ls.t) = [], gs.rfo(ls.t) = [], SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), notMember(ls.t, gs.freaders), notMember(ls.t, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), W(fv, ls.t) ∈ gs.pq(l), ∀ l. ¬ FO(ls.t) ∈ gs.pq(l), ∀ l0. gs.pq(l0) |W | ls.t = [] ⊦ |
gs.bq(ls.t) = [], gs.rfo(ls.t) = [], gs.pq(l) |W | ls.t = [], SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), notMember(ls.t, gs.fwriters), notMember(ls.t, gs.freaders), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), W(fv, ls.t) ∈ gs.pq(l), ∀ l0. gs.pq(l0) |W | ls.t = [], ∀ l. ¬ FO(ls.t) ∈ gs.pq(l) ⊦
Used terms: l
| gs.bq(ls.t) = [], gs.rfo(ls.t) = [], gs.pq(l) |W | ls.t = [], SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), notMember(ls.t, gs.fwriters), notMember(ls.t, gs.freaders), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), W(fv, ls.t) ∈ gs.pq(l), ∀ l0. gs.pq(l0) |W | ls.t = [], ∀ l. ¬ FO(ls.t) ∈ gs.pq(l) ⊦ |
⊦ fowl | t = fowl.filter(λ fow. fow.tid = t)
gs.bq(ls.t) = [], gs.pq(l) |W.filter(λ fow. fow.tid = ls.t) = [], gs.rfo(ls.t) = [], SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), notMember(ls.t, gs.freaders), notMember(ls.t, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), W(fv, ls.t) ∈ gs.pq(l), ∀ l. ¬ FO(ls.t) ∈ gs.pq(l), ∀ l0. gs.pq(l0) |W | ls.t = [] ⊦
Used terms: gs.pq(l) |W, ls.t
| ⊦ fowl | t = fowl.filter(λ fow. fow.tid = t) |
| gs.bq(ls.t) = [], gs.pq(l) |W.filter(λ fow. fow.tid = ls.t) = [], gs.rfo(ls.t) = [], SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), notMember(ls.t, gs.freaders), notMember(ls.t, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), W(fv, ls.t) ∈ gs.pq(l), ∀ l. ¬ FO(ls.t) ∈ gs.pq(l), ∀ l0. gs.pq(l0) |W | ls.t = [] ⊦ |
⊦ fowl |W = fowl.filter(λ fow. fow.W?)
gs.bq(ls.t) = [], gs.pq(l).filter(λ fow. fow.W?).filter(λ fow. fow.tid = ls.t) = [], gs.rfo(ls.t) = [], SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), notMember(ls.t, gs.fwriters), notMember(ls.t, gs.freaders), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), W(fv, ls.t) ∈ gs.pq(l), ∀ l0. gs.pq(l0) |W | ls.t = [], ∀ l. ¬ FO(ls.t) ∈ gs.pq(l) ⊦
Used terms: gs.pq(l)
| ⊦ fowl |W = fowl.filter(λ fow. fow.W?) |
| gs.bq(ls.t) = [], gs.pq(l).filter(λ fow. fow.W?).filter(λ fow. fow.tid = ls.t) = [], gs.rfo(ls.t) = [], SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), notMember(ls.t, gs.fwriters), notMember(ls.t, gs.freaders), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), W(fv, ls.t) ∈ gs.pq(l), ∀ l0. gs.pq(l0) |W | ls.t = [], ∀ l. ¬ FO(ls.t) ∈ gs.pq(l) ⊦ |
gs.bq(ls.t) = [], gs.pq(l).filter(.W?).filter(λ fow. fow.tid = ls.t) = [], gs.rfo(ls.t) = [], SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), notMember(ls.t, gs.freaders), notMember(ls.t, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), W(fv, ls.t) ∈ gs.pq(l), ∀ l. ¬ FO(ls.t) ∈ gs.pq(l), ∀ l0. gs.pq(l0) |W | ls.t = [] ⊦
| gs.bq(ls.t) = [], gs.pq(l).filter(.W?).filter(λ fow. fow.tid = ls.t) = [], gs.rfo(ls.t) = [], SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), notMember(ls.t, gs.freaders), notMember(ls.t, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), W(fv, ls.t) ∈ gs.pq(l), ∀ l. ¬ FO(ls.t) ∈ gs.pq(l), ∀ l0. gs.pq(l0) |W | ls.t = [] ⊦ |
⊦ x = [] ↔ ¬(∃ a. a ∈ x)
gs.bq(ls.t) = [], gs.rfo(ls.t) = [], SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), notMember(ls.t, gs.fwriters), notMember(ls.t, gs.freaders), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), W(fv, ls.t) ∈ gs.pq(l), ∀ l0. gs.pq(l0) |W | ls.t = [], ∀ l. ¬ FO(ls.t) ∈ gs.pq(l), ∀ fow. ¬ fow ∈ gs.pq(l).filter(.W?).filter(λ fow. fow.tid = ls.t) ⊦
Used terms: gs.pq(l).filter(.W?).filter(λ fow. fow.tid = ls.t)
| ⊦ x = [] ↔ ¬(∃ a. a ∈ x) |
| gs.bq(ls.t) = [], gs.rfo(ls.t) = [], SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), notMember(ls.t, gs.fwriters), notMember(ls.t, gs.freaders), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), W(fv, ls.t) ∈ gs.pq(l), ∀ l0. gs.pq(l0) |W | ls.t = [], ∀ l. ¬ FO(ls.t) ∈ gs.pq(l), ∀ fow. ¬ fow ∈ gs.pq(l).filter(.W?).filter(λ fow. fow.tid = ls.t) ⊦ |
gs.bq(ls.t) = [], gs.rfo(ls.t) = [], SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), notMember(ls.t, gs.freaders), notMember(ls.t, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), W(fv, ls.t) ∈ gs.pq(l), ∀ l. ¬ FO(ls.t) ∈ gs.pq(l), ∀ l0. gs.pq(l0) |W | ls.t = [], ∀ fow. ¬ fow ∈ gs.pq(l) ∨ ¬ fow.W? ∨ fow.tid ≠ ls.t ⊦
Used simplifier rules: ⊦ a ∈ x.filter(p) ↔ a ∈ x ∧ p(a); (s)
| gs.bq(ls.t) = [], gs.rfo(ls.t) = [], SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), notMember(ls.t, gs.freaders), notMember(ls.t, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), W(fv, ls.t) ∈ gs.pq(l), ∀ l. ¬ FO(ls.t) ∈ gs.pq(l), ∀ l0. gs.pq(l0) |W | ls.t = [], ∀ fow. ¬ fow ∈ gs.pq(l) ∨ ¬ fow.W? ∨ fow.tid ≠ ls.t ⊦ |
Used simplifier rules: ⊦ W(v, tid).W?; (s) ⊦ W(v, tid).tid = tid; (s) Used terms: W(fv, ls.t)
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.