| ⊦ (ctrok(gs.ctr, gs.writers) ∧ writersOk(gs.p, gs.writers) ∧ pendingOk(gs.p)) ∧ FLITPSCLInv(gs, lsf(t), pcf(t)) → ⟪p := gs.p, ctr := gs.ctr, writers := gs.writers, readers := gs.readers; PSCCRASH(; p, ctr, writers, readers, pcf); gs := (((gs.p:= p).ctr:= ctr).writers:= writers).readers:= readers⟫ ((ctrok(gs.ctr, gs.writers) ∧ writersOk(gs.p, gs.writers) ∧ pendingOk(gs.p)) ∧ FLITPSCLInv(gs, lsf(t), pcf(t))) |
FLITPSCLInv(gs, lsf(t), pcf(t)), ctrok(gs.ctr, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers) ⊦ ⟪p := gs.p, ctr := gs.ctr, writers := gs.writers, readers := gs.readers; PSCCRASH(; p, ctr, writers, readers, pcf); gs := (((gs.p:= p).ctr:= ctr).writers:= writers).readers:= readers⟫ ((ctrok(gs.ctr, gs.writers) ∧ writersOk(gs.p, gs.writers) ∧ pendingOk(gs.p)) ∧ FLITPSCLInv(gs, lsf(t), pcf(t)))
| FLITPSCLInv(gs, lsf(t), pcf(t)), ctrok(gs.ctr, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers) ⊦ ⟪p := gs.p, ctr := gs.ctr, writers := gs.writers, readers := gs.readers; PSCCRASH(; p, ctr, writers, readers, pcf); gs := (((gs.p:= p).ctr:= ctr).writers:= writers).readers:= readers⟫ ((ctrok(gs.ctr, gs.writers) ∧ writersOk(gs.p, gs.writers) ∧ pendingOk(gs.p)) ∧ FLITPSCLInv(gs, lsf(t), pcf(t))) |
ctr = gs.ctr, p = gs.p, readers = gs.readers, writers = gs.writers, FLITPSCLInv(gs, lsf(t), pcf(t)), ctrok(gs.ctr, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers) ⊦ ⟪PSCCRASH(; p, ctr, writers, readers, pcf); gs := (((gs.p:= p).ctr:= ctr).writers:= writers).readers:= readers⟫ ((ctrok(gs.ctr, gs.writers) ∧ writersOk(gs.p, gs.writers) ∧ pendingOk(gs.p)) ∧ FLITPSCLInv(gs, lsf(t), pcf(t)))
| ctr = gs.ctr, p = gs.p, readers = gs.readers, writers = gs.writers, FLITPSCLInv(gs, lsf(t), pcf(t)), ctrok(gs.ctr, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers) ⊦ ⟪PSCCRASH(; p, ctr, writers, readers, pcf); gs := (((gs.p:= p).ctr:= ctr).writers:= writers).readers:= readers⟫ ((ctrok(gs.ctr, gs.writers) ∧ writersOk(gs.p, gs.writers) ∧ pendingOk(gs.p)) ∧ FLITPSCLInv(gs, lsf(t), pcf(t))) |
ctr = gs.ctr, p = gs.p, readers = gs.readers, writers = gs.writers, FLITPSCLInv(gs, lsf(t), pcf(t)), ctrok(gs.ctr, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers) ⊦ ⟪PSCCRASH(; p, ctr, writers, readers, pcf); gs := (((gs.p:= p).ctr:= ctr).writers:= writers).readers:= readers⟫ (ctrok(gs.ctr, gs.writers) ∧ writersOk(gs.p, gs.writers) ∧ pendingOk(gs.p) ∧ FLITPSCLInv(gs, lsf(t), pcf(t)))
| ctr = gs.ctr, p = gs.p, readers = gs.readers, writers = gs.writers, FLITPSCLInv(gs, lsf(t), pcf(t)), ctrok(gs.ctr, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers) ⊦ ⟪PSCCRASH(; p, ctr, writers, readers, pcf); gs := (((gs.p:= p).ctr:= ctr).writers:= writers).readers:= readers⟫ (ctrok(gs.ctr, gs.writers) ∧ writersOk(gs.p, gs.writers) ∧ pendingOk(gs.p) ∧ FLITPSCLInv(gs, lsf(t), pcf(t))) |
ctr = gs.ctr, p = gs.p, readers = gs.readers, writers = gs.writers, FLITPSCLInv(gs, lsf(t), pcf(t)), ctrok(gs.ctr, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers) ⊦ ⟪pcf := λ t. (pcf(t) = idle ⊃ idle;crashed), p := λ l. [], ctr := λ l. 0, readers := λ l. ∅, writers := λ l. ∅; gs := (((gs.p:= p).ctr:= ctr).writers:= writers).readers:= readers⟫ (ctrok(gs.ctr, gs.writers) ∧ writersOk(gs.p, gs.writers) ∧ pendingOk(gs.p) ∧ FLITPSCLInv(gs, lsf(t), pcf(t)))
Used simplifier rules: decl: PSCCRASH(; p, ctr, writers, readers, pcf) {pcf := λ t. (pcf(t) = idle ⊃ idle;crashed), p := λ l. [], ctr := λ l. 0, readers := λ l. ∅, writers := λ l. ∅ };
| ctr = gs.ctr, p = gs.p, readers = gs.readers, writers = gs.writers, FLITPSCLInv(gs, lsf(t), pcf(t)), ctrok(gs.ctr, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers) ⊦ ⟪pcf := λ t. (pcf(t) = idle ⊃ idle;crashed), p := λ l. [], ctr := λ l. 0, readers := λ l. ∅, writers := λ l. ∅; gs := (((gs.p:= p).ctr:= ctr).writers:= writers).readers:= readers⟫ (ctrok(gs.ctr, gs.writers) ∧ writersOk(gs.p, gs.writers) ∧ pendingOk(gs.p) ∧ FLITPSCLInv(gs, lsf(t), pcf(t))) |
ctr = gs.ctr, p = gs.p, readers = gs.readers, writers = gs.writers, FLITPSCLInv(gs, lsf(t), pcf(t)), ctrok(gs.ctr, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers) ⊦ ⟪gs := (((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)⟫ (ctrok(gs.ctr, gs.writers) ∧ writersOk(gs.p, gs.writers) ∧ pendingOk(gs.p) ∧ FLITPSCLInv(gs, lsf(t), (pcf(t) = idle ⊃ idle;crashed)))
| ctr = gs.ctr, p = gs.p, readers = gs.readers, writers = gs.writers, FLITPSCLInv(gs, lsf(t), pcf(t)), ctrok(gs.ctr, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers) ⊦ ⟪gs := (((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)⟫ (ctrok(gs.ctr, gs.writers) ∧ writersOk(gs.p, gs.writers) ∧ pendingOk(gs.p) ∧ FLITPSCLInv(gs, lsf(t), (pcf(t) = idle ⊃ idle;crashed))) |
ctr = gs.ctr, p = gs.p, readers = gs.readers, writers = gs.writers, FLITPSCLInv(gs, lsf(t), pcf(t)), ctrok(gs.ctr, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers) ⊦ ctrok (((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).ctr, ((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).writers) ∧ writersOk (((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).p, ((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).writers) ∧ pendingOk(((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).p) ∧ FLITPSCLInv((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅), lsf(t), (pcf(t) = idle ⊃ idle;crashed))
| ctr = gs.ctr, p = gs.p, readers = gs.readers, writers = gs.writers, FLITPSCLInv(gs, lsf(t), pcf(t)), ctrok(gs.ctr, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers) ⊦ ctrok (((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).ctr, ((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).writers) ∧ writersOk (((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).p, ((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).writers) ∧ pendingOk(((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).p) ∧ FLITPSCLInv((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅), lsf(t), (pcf(t) = idle ⊃ idle;crashed)) |
FLITPSCLInv(gs, lsf(t), pcf(t)), ctrok(gs.ctr, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers) ⊦ ctrok(λ l. 0, λ l. ∅) ∧ writersOk(λ l. [], λ l. ∅) ∧ pendingOk(λ l. []) ∧ FLITPSCLInv((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅), lsf(t), (pcf(t) = idle ⊃ idle;crashed))
Used simplifier rules: ⊦ (gs.p:= p).p = p; (s) ⊦ (gs.ctr:= ctr).p = gs.p; (s) ⊦ (gs.writers:= writers).p = gs.p; (s) ⊦ (gs.readers:= writers0).p = gs.p; (s) ⊦ (gs.writers:= writers).writers = writers; (s) ⊦ (gs.readers:= writers0).writers = gs.writers; (s) ⊦ (gs.ctr:= ctr).ctr = ctr; (s) ⊦ (gs.writers:= writers).ctr = gs.ctr; (s) ⊦ (gs.readers:= writers0).ctr = gs.ctr; (s)
| FLITPSCLInv(gs, lsf(t), pcf(t)), ctrok(gs.ctr, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers) ⊦ ctrok(λ l. 0, λ l. ∅) ∧ writersOk(λ l. [], λ l. ∅) ∧ pendingOk(λ l. []) ∧ FLITPSCLInv((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅), lsf(t), (pcf(t) = idle ⊃ idle;crashed)) |
FLITPSCLInv(gs, lsf(t), pcf(t)), ctrok(gs.ctr, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers), ¬ ctrok(λ l. 0, λ l. ∅) ⊦
FLITPSCLInv(gs, lsf(t), pcf(t)), ctrok(gs.ctr, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers), ¬ writersOk(λ l. [], λ l. ∅) ⊦
FLITPSCLInv(gs, lsf(t), pcf(t)), ctrok(gs.ctr, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers), ¬ pendingOk(λ l. []) ⊦
FLITPSCLInv(gs, lsf(t), pcf(t)), ctrok(gs.ctr, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers), ¬ FLITPSCLInv((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅), lsf(t), (pcf(t) = idle ⊃ idle;crashed)) ⊦
| FLITPSCLInv(gs, lsf(t), pcf(t)), ctrok(gs.ctr, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers), ¬ ctrok(λ l. 0, λ l. ∅) ⊦ |
⊦ ctrok(ctr, writers) ↔ (∀ l. # writers(l) = ctr(l))
Used simplifier rules: ⊦ # ∅ = 0; (s) Used terms: λ l. 0, λ l. ∅
| ⊦ ctrok(ctr, writers) ↔ (∀ l. # writers(l) = ctr(l)) |
| FLITPSCLInv(gs, lsf(t), pcf(t)), ctrok(gs.ctr, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers), ¬ writersOk(λ l. [], λ l. ∅) ⊦ |
⊦ writersOk(p, writers) ↔ (∀ l, t. (t ∈ writers(l) → (∀ l0. l0 ≠ l → ¬ t ∈ writers(l0))) ∧ (¬ t ∈ writers(l) → p(l) |W | t = []))
Used simplifier rules: ⊦ ¬ a ∈ ∅; (s) ⊦ [] |W = []; (s) ⊦ [] | t = []; (s) Used terms: λ l. [], λ l. ∅
| ⊦ writersOk(p, writers) ↔ (∀ l, t. (t ∈ writers(l) → (∀ l0. l0 ≠ l → ¬ t ∈ writers(l0))) ∧ (¬ t ∈ writers(l) → p(l) |W | t = [])) |
| FLITPSCLInv(gs, lsf(t), pcf(t)), ctrok(gs.ctr, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers), ¬ pendingOk(λ l. []) ⊦ |
⊦ pendingOk(p) ↔ (∀ l, t. #(p(l) |W | t) ≤ 1)
Used simplifier rules: ⊦ [] |W = []; (s) ⊦ [] | t = []; (s) ⊦ # [] = 0; (s) Used terms: λ l. []
| ⊦ pendingOk(p) ↔ (∀ l, t. #(p(l) |W | t) ≤ 1) |
| FLITPSCLInv(gs, lsf(t), pcf(t)), ctrok(gs.ctr, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers), ¬ FLITPSCLInv((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅), lsf(t), (pcf(t) = idle ⊃ idle;crashed)) ⊦ |
pcf(t) = idle, FLITPSCLInv(gs, lsf(t), pcf(t)), ctrok(gs.ctr, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers), ¬ FLITPSCLInv((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅), lsf(t), idle) ⊦
pcf(t) ≠ idle, FLITPSCLInv(gs, lsf(t), pcf(t)), ctrok(gs.ctr, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers), ¬ FLITPSCLInv((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅), lsf(t), crashed) ⊦
| pcf(t) = idle, FLITPSCLInv(gs, lsf(t), pcf(t)), ctrok(gs.ctr, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers), ¬ FLITPSCLInv((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅), lsf(t), idle) ⊦ |
pcf(t) = idle, FLITPSCLInv(gs, lsf(t), idle), ctrok(gs.ctr, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers), ¬ FLITPSCLInv((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅), lsf(t), idle) ⊦
| pcf(t) = idle, FLITPSCLInv(gs, lsf(t), idle), ctrok(gs.ctr, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers), ¬ FLITPSCLInv((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅), lsf(t), idle) ⊦ |
⊦ 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))
pcf(t) = idle, ctrok(gs.ctr, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers), ¬ FLITPSCLInv((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅), lsf(t), idle), idle = W1 ∨ idle = W2 ∨ idle = W3 ∨ idle = W4 ∨ idle = W5 ∨ idle = W6 ∨ idle = W7 → notMember(lsf(t).t, gs.readers), idle = W1 ∨ idle = W2 ∨ idle = W7 → notMember(lsf(t).t, gs.writers), idle = W3 ∨ idle = W4 ∨ idle = W5 ∨ idle = W6 → oneMember(lsf(t).t, lsf(t).l, gs.writers), idle = W1 ∨ idle = W2 → noPendingW(lsf(t).t, gs.p), idle = W2 ∨ idle = W3 ∨ idle = W6 ∨ idle = W7 → noPending(lsf(t).t, gs.p), idle = W4 ∨ idle = W5 → onePendingW(lsf(t).t, lsf(t).l, gs.p), idle = W5 → FOFollowsW(lsf(t).t, gs.p(lsf(t).l)), idle = R1 ∨ idle = R2 ∨ idle = R3 ∨ idle = R4 → notMember(lsf(t).t, gs.writers), idle = R1 ∨ idle = R4 → notMember(lsf(t).t, gs.readers), idle = R2 ∨ idle = R3 → oneMember(lsf(t).t, lsf(t).l, gs.readers), idle = R1 ∨ idle = R2 ∨ idle = R3 ∨ idle = R4 → noPendingW(lsf(t).t, gs.p), idle = idle ∨ idle = ready → notMember(lsf(t).t, gs.writers), idle = idle ∨ idle = ready → notMember(lsf(t).t, gs.readers), idle = idle ∨ idle = ready → noPendingW(lsf(t).t, gs.p), idle = idle → noPending(lsf(t).t, gs.p) ⊦
Used terms: gs, lsf(t), idle
| ⊦ 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)) |
| pcf(t) = idle, ctrok(gs.ctr, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers), ¬ FLITPSCLInv((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅), lsf(t), idle), idle = W1 ∨ idle = W2 ∨ idle = W3 ∨ idle = W4 ∨ idle = W5 ∨ idle = W6 ∨ idle = W7 → notMember(lsf(t).t, gs.readers), idle = W1 ∨ idle = W2 ∨ idle = W7 → notMember(lsf(t).t, gs.writers), idle = W3 ∨ idle = W4 ∨ idle = W5 ∨ idle = W6 → oneMember(lsf(t).t, lsf(t).l, gs.writers), idle = W1 ∨ idle = W2 → noPendingW(lsf(t).t, gs.p), idle = W2 ∨ idle = W3 ∨ idle = W6 ∨ idle = W7 → noPending(lsf(t).t, gs.p), idle = W4 ∨ idle = W5 → onePendingW(lsf(t).t, lsf(t).l, gs.p), idle = W5 → FOFollowsW(lsf(t).t, gs.p(lsf(t).l)), idle = R1 ∨ idle = R2 ∨ idle = R3 ∨ idle = R4 → notMember(lsf(t).t, gs.writers), idle = R1 ∨ idle = R4 → notMember(lsf(t).t, gs.readers), idle = R2 ∨ idle = R3 → oneMember(lsf(t).t, lsf(t).l, gs.readers), idle = R1 ∨ idle = R2 ∨ idle = R3 ∨ idle = R4 → noPendingW(lsf(t).t, gs.p), idle = idle ∨ idle = ready → notMember(lsf(t).t, gs.writers), idle = idle ∨ idle = ready → notMember(lsf(t).t, gs.readers), idle = idle ∨ idle = ready → noPendingW(lsf(t).t, gs.p), idle = idle → noPending(lsf(t).t, gs.p) ⊦ |
pcf(t) = idle, ctrok(gs.ctr, gs.writers), noPending(lsf(t).t, gs.p), noPendingW(lsf(t).t, gs.p), notMember(lsf(t).t, gs.readers), notMember(lsf(t).t, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers), ¬ FLITPSCLInv((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅), lsf(t), idle) ⊦
Used simplifier rules: ⊦ W7 ≠ idle; (s) ⊦ W6 ≠ idle; (s) ⊦ W5 ≠ idle; (s) ⊦ W4 ≠ idle; (s) ⊦ W3 ≠ idle; (s) ⊦ W2 ≠ idle; (s) ⊦ W1 ≠ idle; (s) ⊦ R4 ≠ idle; (s) ⊦ R3 ≠ idle; (s) ⊦ R2 ≠ idle; (s) ⊦ R1 ≠ idle; (s)
| pcf(t) = idle, ctrok(gs.ctr, gs.writers), noPending(lsf(t).t, gs.p), noPendingW(lsf(t).t, gs.p), notMember(lsf(t).t, gs.readers), notMember(lsf(t).t, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers), ¬ FLITPSCLInv((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅), lsf(t), idle) ⊦ |
⊦ 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))
pcf(t) = idle, ctrok(gs.ctr, gs.writers), noPending(lsf(t).t, gs.p), noPendingW(lsf(t).t, gs.p), notMember(lsf(t).t, gs.writers), notMember(lsf(t).t, gs.readers), pendingOk(gs.p), writersOk(gs.p, gs.writers), ¬ ( idle = W1 ∨ idle = W2 ∨ idle = W3 ∨ idle = W4 ∨ idle = W5 ∨ idle = W6 ∨ idle = W7 → notMember(lsf(t).t, ((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).readers)) ∨ ¬(idle = W1 ∨ idle = W2 ∨ idle = W7 → notMember(lsf(t).t, ((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).writers)) ∨ ¬ ( idle = W3 ∨ idle = W4 ∨ idle = W5 ∨ idle = W6 → oneMember(lsf(t).t, lsf(t).l, ((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).writers)) ∨ ¬(idle = W1 ∨ idle = W2 → noPendingW(lsf(t).t, ((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).p)) ∨ ¬ ( idle = W2 ∨ idle = W3 ∨ idle = W6 ∨ idle = W7 → noPending(lsf(t).t, ((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).p)) ∨ ¬(idle = W4 ∨ idle = W5 → onePendingW(lsf(t).t, lsf(t).l, ((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).p)) ∨ ¬(idle = W5 → FOFollowsW(lsf(t).t, ((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).p(lsf(t).l))) ∨ ¬ ( idle = R1 ∨ idle = R2 ∨ idle = R3 ∨ idle = R4 → notMember(lsf(t).t, ((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).writers)) ∨ ¬(idle = R1 ∨ idle = R4 → notMember(lsf(t).t, ((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).readers)) ∨ ¬(idle = R2 ∨ idle = R3 → oneMember(lsf(t).t, lsf(t).l, ((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).readers)) ∨ ¬ ( idle = R1 ∨ idle = R2 ∨ idle = R3 ∨ idle = R4 → noPendingW(lsf(t).t, ((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).p)) ∨ ¬(idle = idle ∨ idle = ready → notMember(lsf(t).t, ((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).writers)) ∨ ¬(idle = idle ∨ idle = ready → notMember(lsf(t).t, ((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).readers)) ∨ ¬(idle = idle ∨ idle = ready → noPendingW(lsf(t).t, ((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).p)) ∨ ¬(idle = idle → noPending(lsf(t).t, ((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).p)) ⊦
Used terms: (((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅), lsf(t), idle
| ⊦ 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)) |
| pcf(t) = idle, ctrok(gs.ctr, gs.writers), noPending(lsf(t).t, gs.p), noPendingW(lsf(t).t, gs.p), notMember(lsf(t).t, gs.writers), notMember(lsf(t).t, gs.readers), pendingOk(gs.p), writersOk(gs.p, gs.writers), ¬ ( idle = W1 ∨ idle = W2 ∨ idle = W3 ∨ idle = W4 ∨ idle = W5 ∨ idle = W6 ∨ idle = W7 → notMember(lsf(t).t, ((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).readers)) ∨ ¬(idle = W1 ∨ idle = W2 ∨ idle = W7 → notMember(lsf(t).t, ((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).writers)) ∨ ¬ ( idle = W3 ∨ idle = W4 ∨ idle = W5 ∨ idle = W6 → oneMember(lsf(t).t, lsf(t).l, ((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).writers)) ∨ ¬(idle = W1 ∨ idle = W2 → noPendingW(lsf(t).t, ((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).p)) ∨ ¬ ( idle = W2 ∨ idle = W3 ∨ idle = W6 ∨ idle = W7 → noPending(lsf(t).t, ((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).p)) ∨ ¬(idle = W4 ∨ idle = W5 → onePendingW(lsf(t).t, lsf(t).l, ((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).p)) ∨ ¬(idle = W5 → FOFollowsW(lsf(t).t, ((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).p(lsf(t).l))) ∨ ¬ ( idle = R1 ∨ idle = R2 ∨ idle = R3 ∨ idle = R4 → notMember(lsf(t).t, ((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).writers)) ∨ ¬(idle = R1 ∨ idle = R4 → notMember(lsf(t).t, ((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).readers)) ∨ ¬(idle = R2 ∨ idle = R3 → oneMember(lsf(t).t, lsf(t).l, ((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).readers)) ∨ ¬ ( idle = R1 ∨ idle = R2 ∨ idle = R3 ∨ idle = R4 → noPendingW(lsf(t).t, ((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).p)) ∨ ¬(idle = idle ∨ idle = ready → notMember(lsf(t).t, ((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).writers)) ∨ ¬(idle = idle ∨ idle = ready → notMember(lsf(t).t, ((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).readers)) ∨ ¬(idle = idle ∨ idle = ready → noPendingW(lsf(t).t, ((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).p)) ∨ ¬(idle = idle → noPending(lsf(t).t, ((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅)).p)) ⊦ |
pcf(t) = idle, ctrok(gs.ctr, gs.writers), noPending(lsf(t).t, gs.p), noPendingW(lsf(t).t, gs.p), notMember(lsf(t).t, gs.readers), notMember(lsf(t).t, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers), ¬ notMember(lsf(t).t, λ l. ∅) ∨ ¬ noPending(lsf(t).t, λ l. []) ⊦
Used simplifier rules: ⊦ noPending(t, p) → noPendingW(t, p); (ss) ⊦ (gs.p:= p).p = p; (s) ⊦ (gs.ctr:= ctr).p = gs.p; (s) ⊦ (gs.writers:= writers).p = gs.p; (s) ⊦ (gs.readers:= writers0).p = gs.p; (s) ⊦ (gs.readers:= writers0).readers = writers0; (s) ⊦ (gs.writers:= writers).writers = writers; (s) ⊦ (gs.readers:= writers0).writers = gs.writers; (s) ⊦ R4 ≠ idle; (s) ⊦ R3 ≠ idle; (s) ⊦ R2 ≠ idle; (s) ⊦ R1 ≠ idle; (s) ⊦ W5 ≠ idle; (s) ⊦ W4 ≠ idle; (s) ⊦ W7 ≠ idle; (s) ⊦ W6 ≠ idle; (s) ⊦ W3 ≠ idle; (s) ⊦ W2 ≠ idle; (s) ⊦ W1 ≠ idle; (s)
| pcf(t) = idle, ctrok(gs.ctr, gs.writers), noPending(lsf(t).t, gs.p), noPendingW(lsf(t).t, gs.p), notMember(lsf(t).t, gs.readers), notMember(lsf(t).t, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers), ¬ notMember(lsf(t).t, λ l. ∅) ∨ ¬ noPending(lsf(t).t, λ l. []) ⊦ |
⊦ noPending(t, p) ↔ (∀ l. p(l) | t = [])
pcf(t) = idle, ctrok(gs.ctr, gs.writers), noPending(lsf(t).t, gs.p), noPendingW(lsf(t).t, gs.p), notMember(lsf(t).t, gs.writers), notMember(lsf(t).t, gs.readers), pendingOk(gs.p), writersOk(gs.p, gs.writers), ¬ notMember(lsf(t).t, λ l. ∅) ∨ ¬(∀ l. [] | lsf(t).t = []) ⊦
Used terms: lsf(t).t, λ l. []
| ⊦ noPending(t, p) ↔ (∀ l. p(l) | t = []) |
| pcf(t) = idle, ctrok(gs.ctr, gs.writers), noPending(lsf(t).t, gs.p), noPendingW(lsf(t).t, gs.p), notMember(lsf(t).t, gs.writers), notMember(lsf(t).t, gs.readers), pendingOk(gs.p), writersOk(gs.p, gs.writers), ¬ notMember(lsf(t).t, λ l. ∅) ∨ ¬(∀ l. [] | lsf(t).t = []) ⊦ |
pcf(t) = idle, ctrok(gs.ctr, gs.writers), noPending(lsf(t).t, gs.p), noPendingW(lsf(t).t, gs.p), notMember(lsf(t).t, gs.readers), notMember(lsf(t).t, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers), ¬ notMember(lsf(t).t, λ l. ∅) ⊦
Used simplifier rules: ⊦ [] | t = []; (s)
| pcf(t) = idle, ctrok(gs.ctr, gs.writers), noPending(lsf(t).t, gs.p), noPendingW(lsf(t).t, gs.p), notMember(lsf(t).t, gs.readers), notMember(lsf(t).t, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers), ¬ notMember(lsf(t).t, λ l. ∅) ⊦ |
⊦ notMember(t, tsf) ↔ (∀ l. ¬ t ∈ tsf(l))
Used simplifier rules: ⊦ ¬ a ∈ ∅; (s) Used terms: lsf(t).t, λ l. ∅
| ⊦ notMember(t, tsf) ↔ (∀ l. ¬ t ∈ tsf(l)) |
| pcf(t) ≠ idle, FLITPSCLInv(gs, lsf(t), pcf(t)), ctrok(gs.ctr, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers), ¬ FLITPSCLInv((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅), lsf(t), crashed) ⊦ |
⊦ 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))
pcf(t) ≠ idle, ctrok(gs.ctr, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers), ¬ FLITPSCLInv((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅), lsf(t), crashed), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → notMember(lsf(t).t, gs.readers), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W7 → notMember(lsf(t).t, gs.writers), pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → oneMember(lsf(t).t, lsf(t).l, gs.writers), pcf(t) = W1 ∨ pcf(t) = W2 → noPendingW(lsf(t).t, gs.p), pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → noPending(lsf(t).t, gs.p), pcf(t) = W4 ∨ pcf(t) = W5 → onePendingW(lsf(t).t, lsf(t).l, gs.p), pcf(t) = W5 → FOFollowsW(lsf(t).t, gs.p(lsf(t).l)), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → notMember(lsf(t).t, gs.writers), pcf(t) = R1 ∨ pcf(t) = R4 → notMember(lsf(t).t, gs.readers), pcf(t) = R2 ∨ pcf(t) = R3 → oneMember(lsf(t).t, lsf(t).l, gs.readers), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → noPendingW(lsf(t).t, gs.p), pcf(t) = idle ∨ pcf(t) = ready → notMember(lsf(t).t, gs.writers), pcf(t) = idle ∨ pcf(t) = ready → notMember(lsf(t).t, gs.readers), pcf(t) = idle ∨ pcf(t) = ready → noPendingW(lsf(t).t, gs.p), pcf(t) = idle → noPending(lsf(t).t, gs.p) ⊦
Used terms: gs, lsf(t), pcf(t)
| ⊦ 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)) |
| pcf(t) ≠ idle, ctrok(gs.ctr, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers), ¬ FLITPSCLInv((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅), lsf(t), crashed), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → notMember(lsf(t).t, gs.readers), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W7 → notMember(lsf(t).t, gs.writers), pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → oneMember(lsf(t).t, lsf(t).l, gs.writers), pcf(t) = W1 ∨ pcf(t) = W2 → noPendingW(lsf(t).t, gs.p), pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → noPending(lsf(t).t, gs.p), pcf(t) = W4 ∨ pcf(t) = W5 → onePendingW(lsf(t).t, lsf(t).l, gs.p), pcf(t) = W5 → FOFollowsW(lsf(t).t, gs.p(lsf(t).l)), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → notMember(lsf(t).t, gs.writers), pcf(t) = R1 ∨ pcf(t) = R4 → notMember(lsf(t).t, gs.readers), pcf(t) = R2 ∨ pcf(t) = R3 → oneMember(lsf(t).t, lsf(t).l, gs.readers), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → noPendingW(lsf(t).t, gs.p), pcf(t) = idle ∨ pcf(t) = ready → notMember(lsf(t).t, gs.writers), pcf(t) = idle ∨ pcf(t) = ready → notMember(lsf(t).t, gs.readers), pcf(t) = idle ∨ pcf(t) = ready → noPendingW(lsf(t).t, gs.p), pcf(t) = idle → noPending(lsf(t).t, gs.p) ⊦ |
pcf(t) ≠ idle, ctrok(gs.ctr, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers), ¬ FLITPSCLInv((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅), lsf(t), crashed), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → noPendingW(lsf(t).t, gs.p), pcf(t) = R2 ∨ pcf(t) = R3 → oneMember(lsf(t).t, lsf(t).l, gs.readers), pcf(t) = R1 ∨ pcf(t) = R4 → notMember(lsf(t).t, gs.readers), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → notMember(lsf(t).t, gs.writers), pcf(t) = W5 → FOFollowsW(lsf(t).t, gs.p(lsf(t).l)), pcf(t) = W4 ∨ pcf(t) = W5 → onePendingW(lsf(t).t, lsf(t).l, gs.p), pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → noPending(lsf(t).t, gs.p), pcf(t) = W1 ∨ pcf(t) = W2 → noPendingW(lsf(t).t, gs.p), pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → oneMember(lsf(t).t, lsf(t).l, gs.writers), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W7 → notMember(lsf(t).t, gs.writers), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → notMember(lsf(t).t, gs.readers), pcf(t) = ready → noPendingW(lsf(t).t, gs.p), pcf(t) = ready → notMember(lsf(t).t, gs.readers), pcf(t) = ready → notMember(lsf(t).t, gs.writers) ⊦
| pcf(t) ≠ idle, ctrok(gs.ctr, gs.writers), pendingOk(gs.p), writersOk(gs.p, gs.writers), ¬ FLITPSCLInv((((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅), lsf(t), crashed), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → noPendingW(lsf(t).t, gs.p), pcf(t) = R2 ∨ pcf(t) = R3 → oneMember(lsf(t).t, lsf(t).l, gs.readers), pcf(t) = R1 ∨ pcf(t) = R4 → notMember(lsf(t).t, gs.readers), pcf(t) = R1 ∨ pcf(t) = R2 ∨ pcf(t) = R3 ∨ pcf(t) = R4 → notMember(lsf(t).t, gs.writers), pcf(t) = W5 → FOFollowsW(lsf(t).t, gs.p(lsf(t).l)), pcf(t) = W4 ∨ pcf(t) = W5 → onePendingW(lsf(t).t, lsf(t).l, gs.p), pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → noPending(lsf(t).t, gs.p), pcf(t) = W1 ∨ pcf(t) = W2 → noPendingW(lsf(t).t, gs.p), pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 → oneMember(lsf(t).t, lsf(t).l, gs.writers), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W7 → notMember(lsf(t).t, gs.writers), pcf(t) = W1 ∨ pcf(t) = W2 ∨ pcf(t) = W3 ∨ pcf(t) = W4 ∨ pcf(t) = W5 ∨ pcf(t) = W6 ∨ pcf(t) = W7 → notMember(lsf(t).t, gs.readers), pcf(t) = ready → noPendingW(lsf(t).t, gs.p), pcf(t) = ready → notMember(lsf(t).t, gs.readers), pcf(t) = ready → notMember(lsf(t).t, gs.writers) ⊦ |
⊦ 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))
Used simplifier rules: ⊦ W1 ≠ crashed; (s) ⊦ W2 ≠ crashed; (s) ⊦ W3 ≠ crashed; (s) ⊦ W6 ≠ crashed; (s) ⊦ W7 ≠ crashed; (s) ⊦ W4 ≠ crashed; (s) ⊦ W5 ≠ crashed; (s) ⊦ R1 ≠ crashed; (s) ⊦ R2 ≠ crashed; (s) ⊦ R3 ≠ crashed; (s) ⊦ R4 ≠ crashed; (s) ⊦ crashed ≠ ready; (s) ⊦ crashed ≠ idle; (s) Used terms: (((gs.p:= (λ l. [])).ctr:= (λ l. 0)).writers:= (λ l. ∅)).readers:= (λ l. ∅), lsf(t), crashed
| ⊦ 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)) |
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.