| ⊦ ( (ctrok(gs.ctr, gs.writers) ∧ writersOk(gs.p, gs.writers) ∧ pendingOk(gs.p)) ∧ notMember(ls.t, gs.readers) ∧ oneMember(ls.t, ls.l, gs.writers) ∧ onePendingW(ls.t, ls.l, gs.p) ∧ FOFollowsW(ls.t, gs.p(ls.l))) ∧ pre(gs, ls, W5, a) ∧ pcstepf(gs, ls, W5, a) = W6 → ( ctrok(gstepf(gs, ls, W5, a).ctr, gstepf(gs, ls, W5, a).writers) ∧ writersOk(gstepf(gs, ls, W5, a).p, gstepf(gs, ls, W5, a).writers) ∧ pendingOk(gstepf(gs, ls, W5, a).p)) ∧ notMember(lstepf(gs, ls, W5, a).t, gstepf(gs, ls, W5, a).readers) ∧ oneMember(lstepf(gs, ls, W5, a).t, lstepf(gs, ls, W5, a).l, gstepf(gs, ls, W5, a).writers) ∧ noPending(lstepf(gs, ls, W5, a).t, gstepf(gs, ls, W5, a).p) |
pcstepf(gs, ls, W5, a) = W6, FOFollowsW(ls.t, gs.p(ls.l)), ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), onePendingW(ls.t, ls.l, gs.p), pendingOk(gs.p), pre(gs, ls, W5, a), writersOk(gs.p, gs.writers) ⊦ ( ctrok(gstepf(gs, ls, W5, a).ctr, gstepf(gs, ls, W5, a).writers) ∧ writersOk(gstepf(gs, ls, W5, a).p, gstepf(gs, ls, W5, a).writers) ∧ pendingOk(gstepf(gs, ls, W5, a).p)) ∧ notMember(lstepf(gs, ls, W5, a).t, gstepf(gs, ls, W5, a).readers) ∧ oneMember(lstepf(gs, ls, W5, a).t, lstepf(gs, ls, W5, a).l, gstepf(gs, ls, W5, a).writers) ∧ noPending(lstepf(gs, ls, W5, a).t, gstepf(gs, ls, W5, a).p)
| pcstepf(gs, ls, W5, a) = W6, FOFollowsW(ls.t, gs.p(ls.l)), ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), onePendingW(ls.t, ls.l, gs.p), pendingOk(gs.p), pre(gs, ls, W5, a), writersOk(gs.p, gs.writers) ⊦ ( ctrok(gstepf(gs, ls, W5, a).ctr, gstepf(gs, ls, W5, a).writers) ∧ writersOk(gstepf(gs, ls, W5, a).p, gstepf(gs, ls, W5, a).writers) ∧ pendingOk(gstepf(gs, ls, W5, a).p)) ∧ notMember(lstepf(gs, ls, W5, a).t, gstepf(gs, ls, W5, a).readers) ∧ oneMember(lstepf(gs, ls, W5, a).t, lstepf(gs, ls, W5, a).l, gstepf(gs, ls, W5, a).writers) ∧ noPending(lstepf(gs, ls, W5, a).t, gstepf(gs, ls, W5, a).p) |
FOFollowsW(ls.t, gs.p(ls.l)), ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), onePendingW(ls.t, ls.l, gs.p), pendingOk(gs.p), writersOk(gs.p, gs.writers), ¬ noPending(ls.t, gs.p), ∀ l. ¬ FO(ls.t) ∈ gs.p(l) ⊦
Used simplifier rules: ⊦ gstepf(gs, ls, W5, a) = gs; (s) ⊦ lstepf(gs, ls, W5, a) = ls; (s) ⊦ pre(gs, ls, W5, a) ↔ (∀ l. ¬ FO(ls.t) ∈ gs.p(l)) ∧ a = sfencePSC(ls.t); (s) ⊦ pcstepf(gs, ls, W5, a) = W6; (s)
| FOFollowsW(ls.t, gs.p(ls.l)), ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), onePendingW(ls.t, ls.l, gs.p), pendingOk(gs.p), writersOk(gs.p, gs.writers), ¬ noPending(ls.t, gs.p), ∀ l. ¬ FO(ls.t) ∈ gs.p(l) ⊦ |
⊦ FOFollowsW(t, fowl) ↔ (∀ n. n < # fowl ∧ fowl[n].W? ∧ fowl[n].tid = t → (∃ n0. n < n0 ∧ n0 < # fowl ∧ fowl[n0] = FO(t)))
ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), onePendingW(ls.t, ls.l, gs.p), pendingOk(gs.p), writersOk(gs.p, gs.writers), ¬ noPending(ls.t, gs.p), ∀ l. ¬ FO(ls.t) ∈ gs.p(l), ∀ n. n < # gs.p(ls.l) ∧ gs.p(ls.l)[n].W? ∧ gs.p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # gs.p(ls.l) ∧ gs.p(ls.l)[n0] = FO(ls.t)) ⊦
Used terms: ls.t, gs.p(ls.l)
| ⊦ FOFollowsW(t, fowl) ↔ (∀ n. n < # fowl ∧ fowl[n].W? ∧ fowl[n].tid = t → (∃ n0. n < n0 ∧ n0 < # fowl ∧ fowl[n0] = FO(t))) |
| ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), onePendingW(ls.t, ls.l, gs.p), pendingOk(gs.p), writersOk(gs.p, gs.writers), ¬ noPending(ls.t, gs.p), ∀ l. ¬ FO(ls.t) ∈ gs.p(l), ∀ n. n < # gs.p(ls.l) ∧ gs.p(ls.l)[n].W? ∧ gs.p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # gs.p(ls.l) ∧ gs.p(ls.l)[n0] = FO(ls.t)) ⊦ |
⊦ noPending(t, p) ↔ (∀ l. p(l) | t = [])
ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), onePendingW(ls.t, ls.l, gs.p), pendingOk(gs.p), writersOk(gs.p, gs.writers), ∀ n. n < # gs.p(ls.l) ∧ gs.p(ls.l)[n].W? ∧ gs.p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # gs.p(ls.l) ∧ gs.p(ls.l)[n0] = FO(ls.t)), ∀ l. ¬ FO(ls.t) ∈ gs.p(l), ∃ l. gs.p(l) | ls.t ≠ [] ⊦
Used terms: ls.t, gs.p
| ⊦ noPending(t, p) ↔ (∀ l. p(l) | t = []) |
| ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), onePendingW(ls.t, ls.l, gs.p), pendingOk(gs.p), writersOk(gs.p, gs.writers), ∀ n. n < # gs.p(ls.l) ∧ gs.p(ls.l)[n].W? ∧ gs.p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # gs.p(ls.l) ∧ gs.p(ls.l)[n0] = FO(ls.t)), ∀ l. ¬ FO(ls.t) ∈ gs.p(l), ∃ l. gs.p(l) | ls.t ≠ [] ⊦ |
gs.p(l) | ls.t ≠ [], ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), onePendingW(ls.t, ls.l, gs.p), pendingOk(gs.p), writersOk(gs.p, gs.writers), ∀ l. ¬ FO(ls.t) ∈ gs.p(l), ∀ n. n < # gs.p(ls.l) ∧ gs.p(ls.l)[n].W? ∧ gs.p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # gs.p(ls.l) ∧ gs.p(ls.l)[n0] = FO(ls.t)) ⊦
| gs.p(l) | ls.t ≠ [], ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), onePendingW(ls.t, ls.l, gs.p), pendingOk(gs.p), writersOk(gs.p, gs.writers), ∀ l. ¬ FO(ls.t) ∈ gs.p(l), ∀ n. n < # gs.p(ls.l) ∧ gs.p(ls.l)[n].W? ∧ gs.p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # gs.p(ls.l) ∧ gs.p(ls.l)[n0] = FO(ls.t)) ⊦ |
⊦ x = [] ↔ ¬(∃ a. a ∈ x)
ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), onePendingW(ls.t, ls.l, gs.p), pendingOk(gs.p), writersOk(gs.p, gs.writers), ∀ n. n < # gs.p(ls.l) ∧ gs.p(ls.l)[n].W? ∧ gs.p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # gs.p(ls.l) ∧ gs.p(ls.l)[n0] = FO(ls.t)), ∀ l. ¬ FO(ls.t) ∈ gs.p(l), ∃ fow. fow ∈ gs.p(l) | ls.t ⊦
Used terms: gs.p(l) | ls.t
| ⊦ x = [] ↔ ¬(∃ a. a ∈ x) |
| ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), onePendingW(ls.t, ls.l, gs.p), pendingOk(gs.p), writersOk(gs.p, gs.writers), ∀ n. n < # gs.p(ls.l) ∧ gs.p(ls.l)[n].W? ∧ gs.p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # gs.p(ls.l) ∧ gs.p(ls.l)[n0] = FO(ls.t)), ∀ l. ¬ FO(ls.t) ∈ gs.p(l), ∃ fow. fow ∈ gs.p(l) | ls.t ⊦ |
fow.tid = ls.t, ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), onePendingW(ls.t, ls.l, gs.p), pendingOk(gs.p), writersOk(gs.p, gs.writers), fow ∈ gs.p(l), ∀ l. ¬ FO(ls.t) ∈ gs.p(l), ∀ n. n < # gs.p(ls.l) ∧ gs.p(ls.l)[n].W? ∧ gs.p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # gs.p(ls.l) ∧ gs.p(ls.l)[n0] = FO(ls.t)) ⊦
Used simplifier rules: ⊦ fow ∈ fowl | t ↔ fow ∈ fowl ∧ fow.tid = t; (s)
| fow.tid = ls.t, ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), onePendingW(ls.t, ls.l, gs.p), pendingOk(gs.p), writersOk(gs.p, gs.writers), fow ∈ gs.p(l), ∀ l. ¬ FO(ls.t) ∈ gs.p(l), ∀ n. n < # gs.p(ls.l) ∧ gs.p(ls.l)[n].W? ∧ gs.p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # gs.p(ls.l) ∧ gs.p(ls.l)[n0] = FO(ls.t)) ⊦ |
fow.tid = ls.t, fow = FO(t), ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), onePendingW(ls.t, ls.l, gs.p), pendingOk(gs.p), writersOk(gs.p, gs.writers), fow ∈ gs.p(l), ∀ n. n < # gs.p(ls.l) ∧ gs.p(ls.l)[n].W? ∧ gs.p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # gs.p(ls.l) ∧ gs.p(ls.l)[n0] = FO(ls.t)), ∀ l. ¬ FO(ls.t) ∈ gs.p(l) ⊦
fow.tid = ls.t, fow = W(v, t), ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), onePendingW(ls.t, ls.l, gs.p), pendingOk(gs.p), writersOk(gs.p, gs.writers), fow ∈ gs.p(l), ∀ n. n < # gs.p(ls.l) ∧ gs.p(ls.l)[n].W? ∧ gs.p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # gs.p(ls.l) ∧ gs.p(ls.l)[n0] = FO(ls.t)), ∀ l. ¬ FO(ls.t) ∈ gs.p(l) ⊦
Used simplifier rules: FOW freely generated by FO, W;;
| fow.tid = ls.t, fow = FO(t), ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), onePendingW(ls.t, ls.l, gs.p), pendingOk(gs.p), writersOk(gs.p, gs.writers), fow ∈ gs.p(l), ∀ n. n < # gs.p(ls.l) ∧ gs.p(ls.l)[n].W? ∧ gs.p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # gs.p(ls.l) ∧ gs.p(ls.l)[n0] = FO(ls.t)), ∀ l. ¬ FO(ls.t) ∈ gs.p(l) ⊦ |
ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), onePendingW(ls.t, ls.l, gs.p), pendingOk(gs.p), writersOk(gs.p, gs.writers), FO(ls.t) ∈ gs.p(l), ∀ n. n < # gs.p(ls.l) ∧ gs.p(ls.l)[n].W? ∧ gs.p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # gs.p(ls.l) ∧ gs.p(ls.l)[n0] = FO(ls.t)), ∀ l. ¬ FO(ls.t) ∈ gs.p(l) ⊦
Used simplifier rules: ⊦ FO(tid).tid = tid; (s)
| ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), onePendingW(ls.t, ls.l, gs.p), pendingOk(gs.p), writersOk(gs.p, gs.writers), FO(ls.t) ∈ gs.p(l), ∀ n. n < # gs.p(ls.l) ∧ gs.p(ls.l)[n].W? ∧ gs.p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # gs.p(ls.l) ∧ gs.p(ls.l)[n0] = FO(ls.t)), ∀ l. ¬ FO(ls.t) ∈ gs.p(l) ⊦ |
gs = mkFLITPSCgs(mem, p, ctr, writers, readers), ctrok(ctr, writers), notMember(ls.t, readers), oneMember(ls.t, ls.l, writers), onePendingW(ls.t, ls.l, p), pendingOk(p), writersOk(p, writers), FO(ls.t) ∈ p(l), ∀ l. ¬ FO(ls.t) ∈ p(l), ∀ n. n < # p(ls.l) ∧ p(ls.l)[n].W? ∧ p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # p(ls.l) ∧ p(ls.l)[n0] = FO(ls.t)) ⊦
Used simplifier rules: ⊦ (((mem = gs.mem ∧ p = gs.p) ∧ ctr = gs.ctr) ∧ writers = gs.writers) ∧ readers = gs.readers ↔ gs = mkFLITPSCgs(mem, p, ctr, writers, readers); (elim) Used terms: gs, mem, ctr, writers, readers, p
| gs = mkFLITPSCgs(mem, p, ctr, writers, readers), ctrok(ctr, writers), notMember(ls.t, readers), oneMember(ls.t, ls.l, writers), onePendingW(ls.t, ls.l, p), pendingOk(p), writersOk(p, writers), FO(ls.t) ∈ p(l), ∀ l. ¬ FO(ls.t) ∈ p(l), ∀ n. n < # p(ls.l) ∧ p(ls.l)[n].W? ∧ p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # p(ls.l) ∧ p(ls.l)[n0] = FO(ls.t)) ⊦ |
ctrok(ctr, writers), notMember(ls.t, readers), oneMember(ls.t, ls.l, writers), onePendingW(ls.t, ls.l, p), pendingOk(p), writersOk(p, writers), FO(ls.t) ∈ p(l), ∀ n. n < # p(ls.l) ∧ p(ls.l)[n].W? ∧ p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # p(ls.l) ∧ p(ls.l)[n0] = FO(ls.t)), ∀ l. ¬ FO(ls.t) ∈ p(l) ⊦
| ctrok(ctr, writers), notMember(ls.t, readers), oneMember(ls.t, ls.l, writers), onePendingW(ls.t, ls.l, p), pendingOk(p), writersOk(p, writers), FO(ls.t) ∈ p(l), ∀ n. n < # p(ls.l) ∧ p(ls.l)[n].W? ∧ p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # p(ls.l) ∧ p(ls.l)[n0] = FO(ls.t)), ∀ l. ¬ FO(ls.t) ∈ p(l) ⊦ |
ls = mkFLITPSCls(t, l0, v), ctrok(ctr, writers), notMember(t, readers), oneMember(t, l0, writers), onePendingW(t, l0, p), pendingOk(p), writersOk(p, writers), FO(t) ∈ p(l), ∀ l. ¬ FO(t) ∈ p(l), ∀ n. n < # p(l0) ∧ p(l0)[n].W? ∧ p(l0)[n].tid = t → (∃ n0. n < n0 ∧ n0 < # p(l0) ∧ p(l0)[n0] = FO(t)) ⊦
Used simplifier rules: ⊦ (t = ls.t ∧ l = ls.l) ∧ v = ls.v ↔ ls = mkFLITPSCls(t, l, v); (elim) Used terms: ls, t, l0, v
| ls = mkFLITPSCls(t, l0, v), ctrok(ctr, writers), notMember(t, readers), oneMember(t, l0, writers), onePendingW(t, l0, p), pendingOk(p), writersOk(p, writers), FO(t) ∈ p(l), ∀ l. ¬ FO(t) ∈ p(l), ∀ n. n < # p(l0) ∧ p(l0)[n].W? ∧ p(l0)[n].tid = t → (∃ n0. n < n0 ∧ n0 < # p(l0) ∧ p(l0)[n0] = FO(t)) ⊦ |
ctrok(ctr, writers), notMember(t, readers), oneMember(t, l0, writers), onePendingW(t, l0, p), pendingOk(p), writersOk(p, writers), FO(t) ∈ p(l), ∀ l. ¬ FO(t) ∈ p(l), ∀ n. n < # p(l0) ∧ p(l0)[n].W? ∧ p(l0)[n].tid = t → (∃ n0. n < n0 ∧ n0 < # p(l0) ∧ p(l0)[n0] = FO(p(l0)[n].tid)) ⊦
| ctrok(ctr, writers), notMember(t, readers), oneMember(t, l0, writers), onePendingW(t, l0, p), pendingOk(p), writersOk(p, writers), FO(t) ∈ p(l), ∀ l. ¬ FO(t) ∈ p(l), ∀ n. n < # p(l0) ∧ p(l0)[n].W? ∧ p(l0)[n].tid = t → (∃ n0. n < n0 ∧ n0 < # p(l0) ∧ p(l0)[n0] = FO(p(l0)[n].tid)) ⊦ |
Used terms: l
| fow.tid = ls.t, fow = W(v, t), ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), onePendingW(ls.t, ls.l, gs.p), pendingOk(gs.p), writersOk(gs.p, gs.writers), fow ∈ gs.p(l), ∀ n. n < # gs.p(ls.l) ∧ gs.p(ls.l)[n].W? ∧ gs.p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # gs.p(ls.l) ∧ gs.p(ls.l)[n0] = FO(ls.t)), ∀ l. ¬ FO(ls.t) ∈ gs.p(l) ⊦ |
ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), onePendingW(ls.t, ls.l, gs.p), pendingOk(gs.p), writersOk(gs.p, gs.writers), W(v, ls.t) ∈ gs.p(l), ∀ n. n < # gs.p(ls.l) ∧ gs.p(ls.l)[n].W? ∧ gs.p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # gs.p(ls.l) ∧ gs.p(ls.l)[n0] = FO(ls.t)), ∀ l. ¬ FO(ls.t) ∈ gs.p(l) ⊦
Used simplifier rules: ⊦ W(v, tid).tid = tid; (s)
| ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), onePendingW(ls.t, ls.l, gs.p), pendingOk(gs.p), writersOk(gs.p, gs.writers), W(v, ls.t) ∈ gs.p(l), ∀ n. n < # gs.p(ls.l) ∧ gs.p(ls.l)[n].W? ∧ gs.p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # gs.p(ls.l) ∧ gs.p(ls.l)[n0] = FO(ls.t)), ∀ l. ¬ FO(ls.t) ∈ gs.p(l) ⊦ |
l = ls.l, ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), onePendingW(ls.t, ls.l, gs.p), pendingOk(gs.p), writersOk(gs.p, gs.writers), W(v, ls.t) ∈ gs.p(l), ∀ l. ¬ FO(ls.t) ∈ gs.p(l), ∀ n. n < # gs.p(ls.l) ∧ gs.p(ls.l)[n].W? ∧ gs.p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # gs.p(ls.l) ∧ gs.p(ls.l)[n0] = FO(ls.t)) ⊦
l ≠ ls.l, ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), onePendingW(ls.t, ls.l, gs.p), pendingOk(gs.p), writersOk(gs.p, gs.writers), W(v, ls.t) ∈ gs.p(l), ∀ l. ¬ FO(ls.t) ∈ gs.p(l), ∀ n. n < # gs.p(ls.l) ∧ gs.p(ls.l)[n].W? ∧ gs.p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # gs.p(ls.l) ∧ gs.p(ls.l)[n0] = FO(ls.t)) ⊦
Used formulas: l = ls.l
| l = ls.l, ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), onePendingW(ls.t, ls.l, gs.p), pendingOk(gs.p), writersOk(gs.p, gs.writers), W(v, ls.t) ∈ gs.p(l), ∀ l. ¬ FO(ls.t) ∈ gs.p(l), ∀ n. n < # gs.p(ls.l) ∧ gs.p(ls.l)[n].W? ∧ gs.p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # gs.p(ls.l) ∧ gs.p(ls.l)[n0] = FO(ls.t)) ⊦ |
ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), onePendingW(ls.t, ls.l, gs.p), pendingOk(gs.p), writersOk(gs.p, gs.writers), W(v, ls.t) ∈ gs.p(ls.l), ∀ n. n < # gs.p(ls.l) ∧ gs.p(ls.l)[n].W? ∧ gs.p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # gs.p(ls.l) ∧ gs.p(ls.l)[n0] = FO(ls.t)), ∀ l. ¬ FO(ls.t) ∈ gs.p(l) ⊦
| ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), onePendingW(ls.t, ls.l, gs.p), pendingOk(gs.p), writersOk(gs.p, gs.writers), W(v, ls.t) ∈ gs.p(ls.l), ∀ n. n < # gs.p(ls.l) ∧ gs.p(ls.l)[n].W? ∧ gs.p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # gs.p(ls.l) ∧ gs.p(ls.l)[n0] = FO(ls.t)), ∀ l. ¬ FO(ls.t) ∈ gs.p(l) ⊦ |
gs = mkFLITPSCgs(mem, p, ctr, writers, readers), ctrok(ctr, writers), notMember(ls.t, readers), oneMember(ls.t, ls.l, writers), onePendingW(ls.t, ls.l, p), pendingOk(p), writersOk(p, writers), W(v, ls.t) ∈ p(ls.l), ∀ l. ¬ FO(ls.t) ∈ p(l), ∀ n. n < # p(ls.l) ∧ p(ls.l)[n].W? ∧ p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # p(ls.l) ∧ p(ls.l)[n0] = FO(ls.t)) ⊦
Used simplifier rules: ⊦ (((mem = gs.mem ∧ p = gs.p) ∧ ctr = gs.ctr) ∧ writers = gs.writers) ∧ readers = gs.readers ↔ gs = mkFLITPSCgs(mem, p, ctr, writers, readers); (elim) Used terms: gs, mem, ctr, writers, readers, p
| gs = mkFLITPSCgs(mem, p, ctr, writers, readers), ctrok(ctr, writers), notMember(ls.t, readers), oneMember(ls.t, ls.l, writers), onePendingW(ls.t, ls.l, p), pendingOk(p), writersOk(p, writers), W(v, ls.t) ∈ p(ls.l), ∀ l. ¬ FO(ls.t) ∈ p(l), ∀ n. n < # p(ls.l) ∧ p(ls.l)[n].W? ∧ p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # p(ls.l) ∧ p(ls.l)[n0] = FO(ls.t)) ⊦ |
ctrok(ctr, writers), notMember(ls.t, readers), oneMember(ls.t, ls.l, writers), onePendingW(ls.t, ls.l, p), pendingOk(p), writersOk(p, writers), W(v, ls.t) ∈ p(ls.l), ∀ n. n < # p(ls.l) ∧ p(ls.l)[n].W? ∧ p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # p(ls.l) ∧ p(ls.l)[n0] = FO(ls.t)), ∀ l. ¬ FO(ls.t) ∈ p(l) ⊦
| ctrok(ctr, writers), notMember(ls.t, readers), oneMember(ls.t, ls.l, writers), onePendingW(ls.t, ls.l, p), pendingOk(p), writersOk(p, writers), W(v, ls.t) ∈ p(ls.l), ∀ n. n < # p(ls.l) ∧ p(ls.l)[n].W? ∧ p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # p(ls.l) ∧ p(ls.l)[n0] = FO(ls.t)), ∀ l. ¬ FO(ls.t) ∈ p(l) ⊦ |
ls = mkFLITPSCls(t, l0, v0), ctrok(ctr, writers), notMember(t, readers), oneMember(t, l0, writers), onePendingW(t, l0, p), pendingOk(p), writersOk(p, writers), W(v, t) ∈ p(l0), ∀ l. ¬ FO(t) ∈ p(l), ∀ n. n < # p(l0) ∧ p(l0)[n].W? ∧ p(l0)[n].tid = t → (∃ n0. n < n0 ∧ n0 < # p(l0) ∧ p(l0)[n0] = FO(t)) ⊦
Used simplifier rules: ⊦ (t = ls.t ∧ l = ls.l) ∧ v = ls.v ↔ ls = mkFLITPSCls(t, l, v); (elim) Used terms: ls, t, l0, v0
| ls = mkFLITPSCls(t, l0, v0), ctrok(ctr, writers), notMember(t, readers), oneMember(t, l0, writers), onePendingW(t, l0, p), pendingOk(p), writersOk(p, writers), W(v, t) ∈ p(l0), ∀ l. ¬ FO(t) ∈ p(l), ∀ n. n < # p(l0) ∧ p(l0)[n].W? ∧ p(l0)[n].tid = t → (∃ n0. n < n0 ∧ n0 < # p(l0) ∧ p(l0)[n0] = FO(t)) ⊦ |
ctrok(ctr, writers), notMember(t, readers), oneMember(t, l0, writers), onePendingW(t, l0, p), pendingOk(p), writersOk(p, writers), W(v, t) ∈ p(l0), ∀ l. ¬ FO(t) ∈ p(l), ∀ n. n < # p(l0) ∧ p(l0)[n].W? ∧ p(l0)[n].tid = t → (∃ n0. n < n0 ∧ n0 < # p(l0) ∧ p(l0)[n0] = FO(p(l0)[n].tid)) ⊦
| ctrok(ctr, writers), notMember(t, readers), oneMember(t, l0, writers), onePendingW(t, l0, p), pendingOk(p), writersOk(p, writers), W(v, t) ∈ p(l0), ∀ l. ¬ FO(t) ∈ p(l), ∀ n. n < # p(l0) ∧ p(l0)[n].W? ∧ p(l0)[n].tid = t → (∃ n0. n < n0 ∧ n0 < # p(l0) ∧ p(l0)[n0] = FO(p(l0)[n].tid)) ⊦ |
⊦ a ∈ x ↔ (∃ n. n < # x ∧ x[n] = a)
ctrok(ctr, writers), notMember(t, readers), oneMember(t, l0, writers), onePendingW(t, l0, p), pendingOk(p), writersOk(p, writers), ∀ n. n < # p(l0) ∧ p(l0)[n].W? ∧ p(l0)[n].tid = t → (∃ n0. n < n0 ∧ n0 < # p(l0) ∧ p(l0)[n0] = FO(p(l0)[n].tid)), ∀ l. ¬ FO(t) ∈ p(l), ∃ n. n < # p(l0) ∧ p(l0)[n] = W(v, t) ⊦
Used terms: W(v, t), p(l0)
| ⊦ a ∈ x ↔ (∃ n. n < # x ∧ x[n] = a) |
| ctrok(ctr, writers), notMember(t, readers), oneMember(t, l0, writers), onePendingW(t, l0, p), pendingOk(p), writersOk(p, writers), ∀ n. n < # p(l0) ∧ p(l0)[n].W? ∧ p(l0)[n].tid = t → (∃ n0. n < n0 ∧ n0 < # p(l0) ∧ p(l0)[n0] = FO(p(l0)[n].tid)), ∀ l. ¬ FO(t) ∈ p(l), ∃ n. n < # p(l0) ∧ p(l0)[n] = W(v, t) ⊦ |
p(l0)[n] = W(v, t), p(l0) ≠ [], n < # p(l0), ctrok(ctr, writers), notMember(t, readers), oneMember(t, l0, writers), onePendingW(t, l0, p), pendingOk(p), writersOk(p, writers), ∀ n. n < # p(l0) ∧ p(l0)[n].W? ∧ p(l0)[n].tid = t → (∃ n0. n < n0 ∧ n0 < # p(l0) ∧ p(l0)[n0] = FO(p(l0)[n].tid)), ∀ l. ¬ FO(t) ∈ p(l) ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| p(l0)[n] = W(v, t), p(l0) ≠ [], n < # p(l0), ctrok(ctr, writers), notMember(t, readers), oneMember(t, l0, writers), onePendingW(t, l0, p), pendingOk(p), writersOk(p, writers), ∀ n. n < # p(l0) ∧ p(l0)[n].W? ∧ p(l0)[n].tid = t → (∃ n0. n < n0 ∧ n0 < # p(l0) ∧ p(l0)[n0] = FO(p(l0)[n].tid)), ∀ l. ¬ FO(t) ∈ p(l) ⊦ |
p(l0)[n] = W(v, t), p(l0) ≠ [], n < # p(l0), ctrok(ctr, writers), notMember(t, readers), oneMember(t, l0, writers), onePendingW(t, l0, p), pendingOk(p), writersOk(p, writers), n < # p(l0) ∧ p(l0)[n].W? ∧ p(l0)[n].tid = t → (∃ n0. n < n0 ∧ n0 < # p(l0) ∧ p(l0)[n0] = FO(p(l0)[n].tid)), ∀ l. ¬ FO(t) ∈ p(l) ⊦
Used terms: n
| p(l0)[n] = W(v, t), p(l0) ≠ [], n < # p(l0), ctrok(ctr, writers), notMember(t, readers), oneMember(t, l0, writers), onePendingW(t, l0, p), pendingOk(p), writersOk(p, writers), n < # p(l0) ∧ p(l0)[n].W? ∧ p(l0)[n].tid = t → (∃ n0. n < n0 ∧ n0 < # p(l0) ∧ p(l0)[n0] = FO(p(l0)[n].tid)), ∀ l. ¬ FO(t) ∈ p(l) ⊦ |
p(l0)[n0] = FO(t), p(l0)[n] = W(v, t), p(l0) ≠ [], n0 < # p(l0), n < n0, n < # p(l0), n + 1 < # p(l0), ctrok(ctr, writers), notMember(t, readers), oneMember(t, l0, writers), onePendingW(t, l0, p), pendingOk(p), writersOk(p, writers), ∀ l. ¬ FO(t) ∈ p(l) ⊦
Used simplifier rules: ⊦ m +1 = m + 1; (s) ⊦ m < n → n ≠ 0; (s) trans-Nat: ⊦ n < n0 ∧ n0 < n1 → n < n1; (forward) from specification nat-basic lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ W(v, tid).tid = tid; (s) ⊦ W(v, tid).W?; (s)
| p(l0)[n0] = FO(t), p(l0)[n] = W(v, t), p(l0) ≠ [], n0 < # p(l0), n < n0, n < # p(l0), n + 1 < # p(l0), ctrok(ctr, writers), notMember(t, readers), oneMember(t, l0, writers), onePendingW(t, l0, p), pendingOk(p), writersOk(p, writers), ∀ l. ¬ FO(t) ∈ p(l) ⊦ |
p(l0)[n] = W(v, t), p(l0)[n0] = FO(t), p(l0) ≠ [], n + 1 < # p(l0), n < # p(l0), n < n0, n0 < # p(l0), ctrok(ctr, writers), notMember(t, readers), oneMember(t, l0, writers), onePendingW(t, l0, p), pendingOk(p), writersOk(p, writers), ¬ FO(t) ∈ p(l0), ∀ l. ¬ FO(t) ∈ p(l) ⊦
Used terms: l0
| p(l0)[n] = W(v, t), p(l0)[n0] = FO(t), p(l0) ≠ [], n + 1 < # p(l0), n < # p(l0), n < n0, n0 < # p(l0), ctrok(ctr, writers), notMember(t, readers), oneMember(t, l0, writers), onePendingW(t, l0, p), pendingOk(p), writersOk(p, writers), ¬ FO(t) ∈ p(l0), ∀ l. ¬ FO(t) ∈ p(l) ⊦ |
⊦ a ∈ x ↔ (∃ n. n < # x ∧ x[n] = a)
p(l0)[n0] = FO(t), p(l0)[n] = W(v, t), p(l0) ≠ [], n0 < # p(l0), n < n0, n < # p(l0), n + 1 < # p(l0), ctrok(ctr, writers), notMember(t, readers), oneMember(t, l0, writers), onePendingW(t, l0, p), pendingOk(p), writersOk(p, writers), ∀ l. ¬ FO(t) ∈ p(l), ∀ n. ¬(n < # p(l0) ∧ p(l0)[n] = FO(t)) ⊦
Used terms: FO(t), p(l0)
| ⊦ a ∈ x ↔ (∃ n. n < # x ∧ x[n] = a) |
| p(l0)[n0] = FO(t), p(l0)[n] = W(v, t), p(l0) ≠ [], n0 < # p(l0), n < n0, n < # p(l0), n + 1 < # p(l0), ctrok(ctr, writers), notMember(t, readers), oneMember(t, l0, writers), onePendingW(t, l0, p), pendingOk(p), writersOk(p, writers), ∀ l. ¬ FO(t) ∈ p(l), ∀ n. ¬(n < # p(l0) ∧ p(l0)[n] = FO(t)) ⊦ |
p(l0)[n] = W(v, t), p(l0)[n0] = FO(t), p(l0) ≠ [], n + 1 < # p(l0), n < # p(l0), n < n0, n0 < # p(l0), ctrok(ctr, writers), notMember(t, readers), oneMember(t, l0, writers), onePendingW(t, l0, p), pendingOk(p), writersOk(p, writers), ∀ l. ¬ FO(t) ∈ p(l), ∀ n1. ¬ n1 < # p(l0) ∨ p(l0)[n1] ≠ FO(t) ⊦
| p(l0)[n] = W(v, t), p(l0)[n0] = FO(t), p(l0) ≠ [], n + 1 < # p(l0), n < # p(l0), n < n0, n0 < # p(l0), ctrok(ctr, writers), notMember(t, readers), oneMember(t, l0, writers), onePendingW(t, l0, p), pendingOk(p), writersOk(p, writers), ∀ l. ¬ FO(t) ∈ p(l), ∀ n1. ¬ n1 < # p(l0) ∨ p(l0)[n1] ≠ FO(t) ⊦ |
Used terms: n0
| l ≠ ls.l, ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), onePendingW(ls.t, ls.l, gs.p), pendingOk(gs.p), writersOk(gs.p, gs.writers), W(v, ls.t) ∈ gs.p(l), ∀ l. ¬ FO(ls.t) ∈ gs.p(l), ∀ n. n < # gs.p(ls.l) ∧ gs.p(ls.l)[n].W? ∧ gs.p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # gs.p(ls.l) ∧ gs.p(ls.l)[n0] = FO(ls.t)) ⊦ |
⊦ onePendingW(t, l, p) ↔ (∀ l0. l0 ≠ l → p(l0) |W | t = [])
l ≠ ls.l, ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers), W(v, ls.t) ∈ gs.p(l), ∀ n. n < # gs.p(ls.l) ∧ gs.p(ls.l)[n].W? ∧ gs.p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # gs.p(ls.l) ∧ gs.p(ls.l)[n0] = FO(ls.t)), ∀ l. ¬ FO(ls.t) ∈ gs.p(l), ∀ l0. l0 ≠ ls.l → gs.p(l0) |W | ls.t = [] ⊦
Used terms: ls.t, ls.l, gs.p
| ⊦ onePendingW(t, l, p) ↔ (∀ l0. l0 ≠ l → p(l0) |W | t = []) |
| l ≠ ls.l, ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers), W(v, ls.t) ∈ gs.p(l), ∀ n. n < # gs.p(ls.l) ∧ gs.p(ls.l)[n].W? ∧ gs.p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # gs.p(ls.l) ∧ gs.p(ls.l)[n0] = FO(ls.t)), ∀ l. ¬ FO(ls.t) ∈ gs.p(l), ∀ l0. l0 ≠ ls.l → gs.p(l0) |W | ls.t = [] ⊦ |
l ≠ ls.l, ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers), W(v, ls.t) ∈ gs.p(l), l ≠ ls.l → gs.p(l) |W | ls.t = [], ∀ l. ¬ FO(ls.t) ∈ gs.p(l), ∀ n. n < # gs.p(ls.l) ∧ gs.p(ls.l)[n].W? ∧ gs.p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # gs.p(ls.l) ∧ gs.p(ls.l)[n0] = FO(ls.t)) ⊦
Used terms: l
| l ≠ ls.l, ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers), W(v, ls.t) ∈ gs.p(l), l ≠ ls.l → gs.p(l) |W | ls.t = [], ∀ l. ¬ FO(ls.t) ∈ gs.p(l), ∀ n. n < # gs.p(ls.l) ∧ gs.p(ls.l)[n].W? ∧ gs.p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # gs.p(ls.l) ∧ gs.p(ls.l)[n0] = FO(ls.t)) ⊦ |
gs.p(l) |W | ls.t = [], l ≠ ls.l, ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers), W(v, ls.t) ∈ gs.p(l), ∀ n. n < # gs.p(ls.l) ∧ gs.p(ls.l)[n].W? ∧ gs.p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # gs.p(ls.l) ∧ gs.p(ls.l)[n0] = FO(ls.t)), ∀ l. ¬ FO(ls.t) ∈ gs.p(l) ⊦
| gs.p(l) |W | ls.t = [], l ≠ ls.l, ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers), W(v, ls.t) ∈ gs.p(l), ∀ n. n < # gs.p(ls.l) ∧ gs.p(ls.l)[n].W? ∧ gs.p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # gs.p(ls.l) ∧ gs.p(ls.l)[n0] = FO(ls.t)), ∀ l. ¬ FO(ls.t) ∈ gs.p(l) ⊦ |
⊦ x = [] ↔ ¬(∃ a. a ∈ x)
l ≠ ls.l, ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers), W(v, ls.t) ∈ gs.p(l), ∀ l. ¬ FO(ls.t) ∈ gs.p(l), ∀ n. n < # gs.p(ls.l) ∧ gs.p(ls.l)[n].W? ∧ gs.p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # gs.p(ls.l) ∧ gs.p(ls.l)[n0] = FO(ls.t)), ∀ fow. ¬ fow ∈ gs.p(l) |W | ls.t ⊦
Used terms: gs.p(l) |W | ls.t
| ⊦ x = [] ↔ ¬(∃ a. a ∈ x) |
| l ≠ ls.l, ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers), W(v, ls.t) ∈ gs.p(l), ∀ l. ¬ FO(ls.t) ∈ gs.p(l), ∀ n. n < # gs.p(ls.l) ∧ gs.p(ls.l)[n].W? ∧ gs.p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # gs.p(ls.l) ∧ gs.p(ls.l)[n0] = FO(ls.t)), ∀ fow. ¬ fow ∈ gs.p(l) |W | ls.t ⊦ |
l ≠ ls.l, ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers), W(v, ls.t) ∈ gs.p(l), ∀ n. n < # gs.p(ls.l) ∧ gs.p(ls.l)[n].W? ∧ gs.p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # gs.p(ls.l) ∧ gs.p(ls.l)[n0] = FO(ls.t)), ∀ l. ¬ FO(ls.t) ∈ gs.p(l), ∀ fow. ¬ fow ∈ gs.p(l) ∨ ¬ fow.W? ∨ fow.tid ≠ ls.t ⊦
Used simplifier rules: ⊦ fow ∈ fowl |W ↔ fow ∈ fowl ∧ fow.W?; (s) ⊦ fow ∈ fowl | t ↔ fow ∈ fowl ∧ fow.tid = t; (s)
| l ≠ ls.l, ctrok(gs.ctr, gs.writers), notMember(ls.t, gs.readers), oneMember(ls.t, ls.l, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers), W(v, ls.t) ∈ gs.p(l), ∀ n. n < # gs.p(ls.l) ∧ gs.p(ls.l)[n].W? ∧ gs.p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # gs.p(ls.l) ∧ gs.p(ls.l)[n0] = FO(ls.t)), ∀ l. ¬ FO(ls.t) ∈ gs.p(l), ∀ fow. ¬ fow ∈ gs.p(l) ∨ ¬ fow.W? ∨ fow.tid ≠ ls.t ⊦ |
gs = mkFLITPSCgs(mem, p, ctr, writers, readers), l ≠ ls.l, ctrok(ctr, writers), notMember(ls.t, readers), oneMember(ls.t, ls.l, writers), pendingOk(p), writersOk(p, writers), W(v, ls.t) ∈ p(l), ∀ fow. ¬ fow ∈ p(l) ∨ ¬ fow.W? ∨ fow.tid ≠ ls.t, ∀ l. ¬ FO(ls.t) ∈ p(l), ∀ n. n < # p(ls.l) ∧ p(ls.l)[n].W? ∧ p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # p(ls.l) ∧ p(ls.l)[n0] = FO(ls.t)) ⊦
Used simplifier rules: ⊦ (((mem = gs.mem ∧ p = gs.p) ∧ ctr = gs.ctr) ∧ writers = gs.writers) ∧ readers = gs.readers ↔ gs = mkFLITPSCgs(mem, p, ctr, writers, readers); (elim) Used terms: gs, mem, ctr, writers, readers, p
| gs = mkFLITPSCgs(mem, p, ctr, writers, readers), l ≠ ls.l, ctrok(ctr, writers), notMember(ls.t, readers), oneMember(ls.t, ls.l, writers), pendingOk(p), writersOk(p, writers), W(v, ls.t) ∈ p(l), ∀ fow. ¬ fow ∈ p(l) ∨ ¬ fow.W? ∨ fow.tid ≠ ls.t, ∀ l. ¬ FO(ls.t) ∈ p(l), ∀ n. n < # p(ls.l) ∧ p(ls.l)[n].W? ∧ p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # p(ls.l) ∧ p(ls.l)[n0] = FO(ls.t)) ⊦ |
l ≠ ls.l, ctrok(ctr, writers), notMember(ls.t, readers), oneMember(ls.t, ls.l, writers), pendingOk(p), writersOk(p, writers), W(v, ls.t) ∈ p(l), ∀ n. n < # p(ls.l) ∧ p(ls.l)[n].W? ∧ p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # p(ls.l) ∧ p(ls.l)[n0] = FO(ls.t)), ∀ l. ¬ FO(ls.t) ∈ p(l), ∀ fow. ¬ fow ∈ p(l) ∨ ¬ fow.W? ∨ fow.tid ≠ ls.t ⊦
| l ≠ ls.l, ctrok(ctr, writers), notMember(ls.t, readers), oneMember(ls.t, ls.l, writers), pendingOk(p), writersOk(p, writers), W(v, ls.t) ∈ p(l), ∀ n. n < # p(ls.l) ∧ p(ls.l)[n].W? ∧ p(ls.l)[n].tid = ls.t → (∃ n0. n < n0 ∧ n0 < # p(ls.l) ∧ p(ls.l)[n0] = FO(ls.t)), ∀ l. ¬ FO(ls.t) ∈ p(l), ∀ fow. ¬ fow ∈ p(l) ∨ ¬ fow.W? ∨ fow.tid ≠ ls.t ⊦ |
ls = mkFLITPSCls(t, l0, v0), l ≠ l0, ctrok(ctr, writers), notMember(t, readers), oneMember(t, l0, writers), pendingOk(p), writersOk(p, writers), W(v, t) ∈ p(l), ∀ fow. ¬ fow ∈ p(l) ∨ ¬ fow.W? ∨ fow.tid ≠ t, ∀ l. ¬ FO(t) ∈ p(l), ∀ n. n < # p(l0) ∧ p(l0)[n].W? ∧ p(l0)[n].tid = t → (∃ n0. n < n0 ∧ n0 < # p(l0) ∧ p(l0)[n0] = FO(t)) ⊦
Used simplifier rules: ⊦ (t = ls.t ∧ l = ls.l) ∧ v = ls.v ↔ ls = mkFLITPSCls(t, l, v); (elim) Used terms: ls, t, l0, v0
| ls = mkFLITPSCls(t, l0, v0), l ≠ l0, ctrok(ctr, writers), notMember(t, readers), oneMember(t, l0, writers), pendingOk(p), writersOk(p, writers), W(v, t) ∈ p(l), ∀ fow. ¬ fow ∈ p(l) ∨ ¬ fow.W? ∨ fow.tid ≠ t, ∀ l. ¬ FO(t) ∈ p(l), ∀ n. n < # p(l0) ∧ p(l0)[n].W? ∧ p(l0)[n].tid = t → (∃ n0. n < n0 ∧ n0 < # p(l0) ∧ p(l0)[n0] = FO(t)) ⊦ |
l ≠ l0, ctrok(ctr, writers), notMember(t, readers), oneMember(t, l0, writers), pendingOk(p), writersOk(p, writers), W(v, t) ∈ p(l), ∀ l. ¬ FO(t) ∈ p(l), ∀ fow. ¬ fow ∈ p(l) ∨ ¬ fow.W? ∨ fow.tid ≠ t, ∀ n. n < # p(l0) ∧ p(l0)[n].W? ∧ p(l0)[n].tid = t → (∃ n0. n < n0 ∧ n0 < # p(l0) ∧ p(l0)[n0] = FO(p(l0)[n].tid)) ⊦
| l ≠ l0, ctrok(ctr, writers), notMember(t, readers), oneMember(t, l0, writers), pendingOk(p), writersOk(p, writers), W(v, t) ∈ p(l), ∀ l. ¬ FO(t) ∈ p(l), ∀ fow. ¬ fow ∈ p(l) ∨ ¬ fow.W? ∨ fow.tid ≠ t, ∀ n. n < # p(l0) ∧ p(l0)[n].W? ∧ p(l0)[n].tid = t → (∃ n0. n < n0 ∧ n0 < # p(l0) ∧ p(l0)[n0] = FO(p(l0)[n].tid)) ⊦ |
Used simplifier rules: ⊦ W(v, tid).W?; (s) ⊦ W(v, tid).tid = tid; (s) Used terms: W(v, 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.