| (gs.mem = (λ l. O) ∧ pcf = (λ tid. idle) ∧ gs.p = (λ l. []) ∧ gs.ctr = (λ l. 0) ∧ gs.readers = (λ l. ∅) ∧ gs.writers = (λ l. ∅)) ∧ (∀ t. t = lsf(t).t) ⊦ FLITPSCInv(gs, lsf, pcf) |
gs.ctr = (λ l. 0), gs.mem = (λ l. O), gs.p = (λ l. []), gs.readers = (λ l. ∅), gs.writers = (λ l. ∅), pcf = (λ tid. idle), ¬ FLITPSCInv(gs, lsf, pcf), ∀ t. t = lsf(t).t ⊦
| gs.ctr = (λ l. 0), gs.mem = (λ l. O), gs.p = (λ l. []), gs.readers = (λ l. ∅), gs.writers = (λ l. ∅), pcf = (λ tid. idle), ¬ FLITPSCInv(gs, lsf, pcf), ∀ t. t = lsf(t).t ⊦ |
gs.ctr = (λ l. 0), gs.mem = (λ l. O), gs.p = (λ l. []), gs.readers = (λ l. ∅), gs.writers = (λ l. ∅), ¬ FLITPSCInv(gs, lsf, λ tid. idle), ∀ t. t = lsf(t).t ⊦
| gs.ctr = (λ l. 0), gs.mem = (λ l. O), gs.p = (λ l. []), gs.readers = (λ l. ∅), gs.writers = (λ l. ∅), ¬ FLITPSCInv(gs, lsf, λ tid. idle), ∀ t. t = lsf(t).t ⊦ |
⊦ FLITPSCInv(gs, lsf, pcf) ↔ FLITPSCGInv(gs) ∧ (∀ t. lsf(t).t = t ∧ FLITPSCLInv(gs, lsf(t), pcf(t)))
gs.ctr = (λ l. 0), gs.mem = (λ l. O), gs.p = (λ l. []), gs.readers = (λ l. ∅), gs.writers = (λ l. ∅), ∀ t. t = lsf(t).t, ¬ FLITPSCGInv(gs) ∨ (∃ t. ¬(lsf(t).t = t ∧ FLITPSCLInv(gs, lsf(t), idle))) ⊦
Used terms: gs, lsf, λ tid. idle
| ⊦ FLITPSCInv(gs, lsf, pcf) ↔ FLITPSCGInv(gs) ∧ (∀ t. lsf(t).t = t ∧ FLITPSCLInv(gs, lsf(t), pcf(t))) |
| gs.ctr = (λ l. 0), gs.mem = (λ l. O), gs.p = (λ l. []), gs.readers = (λ l. ∅), gs.writers = (λ l. ∅), ∀ t. t = lsf(t).t, ¬ FLITPSCGInv(gs) ∨ (∃ t. ¬(lsf(t).t = t ∧ FLITPSCLInv(gs, lsf(t), idle))) ⊦ |
gs.ctr = (λ l. 0), gs.mem = (λ l. O), gs.p = (λ l. []), gs.readers = (λ l. ∅), gs.writers = (λ l. ∅), ∀ t. t = lsf(t).t, ¬ FLITPSCGInv(gs) ∨ lsf(t).t ≠ t ∨ ¬ FLITPSCLInv(gs, lsf(t), idle) ⊦
| gs.ctr = (λ l. 0), gs.mem = (λ l. O), gs.p = (λ l. []), gs.readers = (λ l. ∅), gs.writers = (λ l. ∅), ∀ t. t = lsf(t).t, ¬ FLITPSCGInv(gs) ∨ lsf(t).t ≠ t ∨ ¬ FLITPSCLInv(gs, lsf(t), idle) ⊦ |
⊦ FLITPSCGInv(gs) ↔ ctrok(gs.ctr, gs.writers) ∧ writersOk(gs.p, gs.writers) ∧ pendingOk(gs.p)
gs.ctr = (λ l. 0), gs.mem = (λ l. O), gs.p = (λ l. []), gs.readers = (λ l. ∅), gs.writers = (λ l. ∅), ∀ t. t = lsf(t).t, ¬(ctrok(gs.ctr, gs.writers) ∧ writersOk(gs.p, gs.writers) ∧ pendingOk(gs.p)) ∨ lsf(t).t ≠ t ∨ ¬ FLITPSCLInv(gs, lsf(t), idle) ⊦
Used terms: gs
| ⊦ FLITPSCGInv(gs) ↔ ctrok(gs.ctr, gs.writers) ∧ writersOk(gs.p, gs.writers) ∧ pendingOk(gs.p) |
| gs.ctr = (λ l. 0), gs.mem = (λ l. O), gs.p = (λ l. []), gs.readers = (λ l. ∅), gs.writers = (λ l. ∅), ∀ t. t = lsf(t).t, ¬(ctrok(gs.ctr, gs.writers) ∧ writersOk(gs.p, gs.writers) ∧ pendingOk(gs.p)) ∨ lsf(t).t ≠ t ∨ ¬ FLITPSCLInv(gs, lsf(t), idle) ⊦ |
gs.ctr = (λ l. 0), gs.mem = (λ l. O), gs.p = (λ l. []), gs.readers = (λ l. ∅), gs.writers = (λ l. ∅), ∀ t. t = lsf(t).t, ¬ ctrok(λ l. 0, λ l. ∅) ∨ ¬ writersOk(λ l. [], λ l. ∅) ∨ ¬ pendingOk(λ l. []) ∨ lsf(t).t ≠ t ∨ ¬ FLITPSCLInv(gs, lsf(t), idle) ⊦
| gs.ctr = (λ l. 0), gs.mem = (λ l. O), gs.p = (λ l. []), gs.readers = (λ l. ∅), gs.writers = (λ l. ∅), ∀ t. t = lsf(t).t, ¬ ctrok(λ l. 0, λ l. ∅) ∨ ¬ writersOk(λ l. [], λ l. ∅) ∨ ¬ pendingOk(λ l. []) ∨ lsf(t).t ≠ t ∨ ¬ FLITPSCLInv(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))
gs.ctr = (λ l. 0), gs.mem = (λ l. O), gs.p = (λ l. []), gs.readers = (λ l. ∅), gs.writers = (λ l. ∅), ∀ t. t = lsf(t).t, ¬ ctrok(λ l. 0, λ l. ∅) ∨ ¬ writersOk(λ l. [], λ l. ∅) ∨ ¬ pendingOk(λ l. []) ∨ lsf(t).t ≠ t ∨ ¬ ( (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)) |
| gs.ctr = (λ l. 0), gs.mem = (λ l. O), gs.p = (λ l. []), gs.readers = (λ l. ∅), gs.writers = (λ l. ∅), ∀ t. t = lsf(t).t, ¬ ctrok(λ l. 0, λ l. ∅) ∨ ¬ writersOk(λ l. [], λ l. ∅) ∨ ¬ pendingOk(λ l. []) ∨ lsf(t).t ≠ t ∨ ¬ ( (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))) ⊦ |
gs.ctr = (λ l. 0), gs.mem = (λ l. O), gs.p = (λ l. []), gs.readers = (λ l. ∅), gs.writers = (λ l. ∅), ∀ t. t = lsf(t).t, ¬ ctrok(λ l. 0, λ l. ∅) ∨ ¬ writersOk(λ l. [], λ l. ∅) ∨ ¬ pendingOk(λ l. []) ∨ lsf(t).t ≠ t ∨ ¬ notMember(lsf(t).t, λ l. ∅) ∨ ¬ noPending(lsf(t).t, λ l. []) ⊦
Used simplifier rules: ⊦ noPending(t, p) → noPendingW(t, p); (ss) ⊦ 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)
| gs.ctr = (λ l. 0), gs.mem = (λ l. O), gs.p = (λ l. []), gs.readers = (λ l. ∅), gs.writers = (λ l. ∅), ∀ t. t = lsf(t).t, ¬ ctrok(λ l. 0, λ l. ∅) ∨ ¬ writersOk(λ l. [], λ l. ∅) ∨ ¬ pendingOk(λ l. []) ∨ lsf(t).t ≠ t ∨ ¬ notMember(lsf(t).t, λ l. ∅) ∨ ¬ noPending(lsf(t).t, λ l. []) ⊦ |
⊦ ctrok(ctr, writers) ↔ (∀ l. # writers(l) = ctr(l))
gs.ctr = (λ l. 0), gs.mem = (λ l. O), gs.p = (λ l. []), gs.readers = (λ l. ∅), gs.writers = (λ l. ∅), ∀ t. t = lsf(t).t, ¬(∀ l. # ∅ = 0) ∨ ¬ writersOk(λ l. [], λ l. ∅) ∨ ¬ pendingOk(λ l. []) ∨ lsf(t).t ≠ t ∨ ¬ notMember(lsf(t).t, λ l. ∅) ∨ ¬ noPending(lsf(t).t, λ l. []) ⊦
Used terms: λ l. 0, λ l. ∅
| ⊦ ctrok(ctr, writers) ↔ (∀ l. # writers(l) = ctr(l)) |
| gs.ctr = (λ l. 0), gs.mem = (λ l. O), gs.p = (λ l. []), gs.readers = (λ l. ∅), gs.writers = (λ l. ∅), ∀ t. t = lsf(t).t, ¬(∀ l. # ∅ = 0) ∨ ¬ writersOk(λ l. [], λ l. ∅) ∨ ¬ pendingOk(λ l. []) ∨ lsf(t).t ≠ t ∨ ¬ notMember(lsf(t).t, λ l. ∅) ∨ ¬ noPending(lsf(t).t, λ l. []) ⊦ |
gs.ctr = (λ l. 0), gs.mem = (λ l. O), gs.p = (λ l. []), gs.readers = (λ l. ∅), gs.writers = (λ l. ∅), ∀ t. t = lsf(t).t, ¬ writersOk(λ l. [], λ l. ∅) ∨ ¬ pendingOk(λ l. []) ∨ lsf(t).t ≠ t ∨ ¬ notMember(lsf(t).t, λ l. ∅) ∨ ¬ noPending(lsf(t).t, λ l. []) ⊦
Used simplifier rules: ⊦ # ∅ = 0; (s)
| gs.ctr = (λ l. 0), gs.mem = (λ l. O), gs.p = (λ l. []), gs.readers = (λ l. ∅), gs.writers = (λ l. ∅), ∀ t. t = lsf(t).t, ¬ writersOk(λ l. [], λ l. ∅) ∨ ¬ pendingOk(λ l. []) ∨ lsf(t).t ≠ t ∨ ¬ notMember(lsf(t).t, λ l. ∅) ∨ ¬ noPending(lsf(t).t, λ l. []) ⊦ |
⊦ writersOk(p, writers) ↔ (∀ l, t. (t ∈ writers(l) → (∀ l0. l0 ≠ l → ¬ t ∈ writers(l0))) ∧ (¬ t ∈ writers(l) → p(l) |W | t = []))
gs.ctr = (λ l. 0), gs.mem = (λ l. O), gs.p = (λ l. []), gs.readers = (λ l. ∅), gs.writers = (λ l. ∅), ∀ t. t = lsf(t).t, ¬(∀ l, t. (t ∈ ∅ → (∀ l0. l0 ≠ l → ¬ t ∈ ∅)) ∧ (¬ t ∈ ∅ → [] |W | t = [])) ∨ ¬ pendingOk(λ l. []) ∨ lsf(t).t ≠ t ∨ ¬ notMember(lsf(t).t, λ l. ∅) ∨ ¬ noPending(lsf(t).t, λ l. []) ⊦
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 = [])) |
| gs.ctr = (λ l. 0), gs.mem = (λ l. O), gs.p = (λ l. []), gs.readers = (λ l. ∅), gs.writers = (λ l. ∅), ∀ t. t = lsf(t).t, ¬(∀ l, t. (t ∈ ∅ → (∀ l0. l0 ≠ l → ¬ t ∈ ∅)) ∧ (¬ t ∈ ∅ → [] |W | t = [])) ∨ ¬ pendingOk(λ l. []) ∨ lsf(t).t ≠ t ∨ ¬ notMember(lsf(t).t, λ l. ∅) ∨ ¬ noPending(lsf(t).t, λ l. []) ⊦ |
gs.ctr = (λ l. 0), gs.mem = (λ l. O), gs.p = (λ l. []), gs.readers = (λ l. ∅), gs.writers = (λ l. ∅), ∀ t. t = lsf(t).t, ¬ pendingOk(λ l. []) ∨ lsf(t).t ≠ t ∨ ¬ notMember(lsf(t).t, λ l. ∅) ∨ ¬ noPending(lsf(t).t, λ l. []) ⊦
Used simplifier rules: ⊦ [] | t = []; (s) ⊦ [] |W = []; (s) ⊦ ¬ a ∈ ∅; (s)
| gs.ctr = (λ l. 0), gs.mem = (λ l. O), gs.p = (λ l. []), gs.readers = (λ l. ∅), gs.writers = (λ l. ∅), ∀ t. t = lsf(t).t, ¬ pendingOk(λ l. []) ∨ lsf(t).t ≠ t ∨ ¬ notMember(lsf(t).t, λ l. ∅) ∨ ¬ noPending(lsf(t).t, λ l. []) ⊦ |
⊦ pendingOk(p) ↔ (∀ l, t. #(p(l) |W | t) ≤ 1)
gs.ctr = (λ l. 0), gs.mem = (λ l. O), gs.p = (λ l. []), gs.readers = (λ l. ∅), gs.writers = (λ l. ∅), ∀ t. t = lsf(t).t, ¬(∀ l, t. #([] |W | t) ≤ 1) ∨ lsf(t).t ≠ t ∨ ¬ notMember(lsf(t).t, λ l. ∅) ∨ ¬ noPending(lsf(t).t, λ l. []) ⊦
Used terms: λ l. []
| ⊦ pendingOk(p) ↔ (∀ l, t. #(p(l) |W | t) ≤ 1) |
| gs.ctr = (λ l. 0), gs.mem = (λ l. O), gs.p = (λ l. []), gs.readers = (λ l. ∅), gs.writers = (λ l. ∅), ∀ t. t = lsf(t).t, ¬(∀ l, t. #([] |W | t) ≤ 1) ∨ lsf(t).t ≠ t ∨ ¬ notMember(lsf(t).t, λ l. ∅) ∨ ¬ noPending(lsf(t).t, λ l. []) ⊦ |
gs.ctr = (λ l. 0), gs.mem = (λ l. O), gs.p = (λ l. []), gs.readers = (λ l. ∅), gs.writers = (λ l. ∅), ∀ t. t = lsf(t).t, lsf(t).t ≠ t ∨ ¬ notMember(lsf(t).t, λ l. ∅) ∨ ¬ noPending(lsf(t).t, λ l. []) ⊦
Used simplifier rules: ⊦ # [] = 0; (s) ⊦ [] | t = []; (s) ⊦ [] |W = []; (s)
| gs.ctr = (λ l. 0), gs.mem = (λ l. O), gs.p = (λ l. []), gs.readers = (λ l. ∅), gs.writers = (λ l. ∅), ∀ t. t = lsf(t).t, lsf(t).t ≠ t ∨ ¬ notMember(lsf(t).t, λ l. ∅) ∨ ¬ noPending(lsf(t).t, λ l. []) ⊦ |
⊦ noPending(t, p) ↔ (∀ l. p(l) | t = [])
gs.ctr = (λ l. 0), gs.mem = (λ l. O), gs.p = (λ l. []), gs.readers = (λ l. ∅), gs.writers = (λ l. ∅), ∀ t. t = lsf(t).t, lsf(t).t ≠ t ∨ ¬ notMember(lsf(t).t, λ l. ∅) ∨ ¬(∀ l. [] | lsf(t).t = []) ⊦
Used terms: lsf(t).t, λ l. []
| ⊦ noPending(t, p) ↔ (∀ l. p(l) | t = []) |
| gs.ctr = (λ l. 0), gs.mem = (λ l. O), gs.p = (λ l. []), gs.readers = (λ l. ∅), gs.writers = (λ l. ∅), ∀ t. t = lsf(t).t, lsf(t).t ≠ t ∨ ¬ notMember(lsf(t).t, λ l. ∅) ∨ ¬(∀ l. [] | lsf(t).t = []) ⊦ |
gs.ctr = (λ l. 0), gs.mem = (λ l. O), gs.p = (λ l. []), gs.readers = (λ l. ∅), gs.writers = (λ l. ∅), ∀ t. t = lsf(t).t, lsf(t).t ≠ t ∨ ¬ notMember(lsf(t).t, λ l. ∅) ⊦
Used simplifier rules: ⊦ [] | t = []; (s)
| gs.ctr = (λ l. 0), gs.mem = (λ l. O), gs.p = (λ l. []), gs.readers = (λ l. ∅), gs.writers = (λ l. ∅), ∀ t. t = lsf(t).t, lsf(t).t ≠ t ∨ ¬ notMember(lsf(t).t, λ l. ∅) ⊦ |
⊦ notMember(t, tsf) ↔ (∀ l. ¬ t ∈ tsf(l))
gs.ctr = (λ l. 0), gs.mem = (λ l. O), gs.p = (λ l. []), gs.readers = (λ l. ∅), gs.writers = (λ l. ∅), ∀ t. t = lsf(t).t, lsf(t).t ≠ t ∨ ¬(∀ l. ¬ lsf(t).t ∈ ∅) ⊦
Used terms: lsf(t).t, λ l. ∅
| ⊦ notMember(t, tsf) ↔ (∀ l. ¬ t ∈ tsf(l)) |
| gs.ctr = (λ l. 0), gs.mem = (λ l. O), gs.p = (λ l. []), gs.readers = (λ l. ∅), gs.writers = (λ l. ∅), ∀ t. t = lsf(t).t, lsf(t).t ≠ t ∨ ¬(∀ l. ¬ lsf(t).t ∈ ∅) ⊦ |
gs.ctr = (λ l. 0), gs.mem = (λ l. O), gs.p = (λ l. []), gs.readers = (λ l. ∅), gs.writers = (λ l. ∅), lsf(t).t ≠ t, ∀ t. t = lsf(t).t ⊦
Used simplifier rules: ⊦ ¬ a ∈ ∅; (s)
| gs.ctr = (λ l. 0), gs.mem = (λ l. O), gs.p = (λ l. []), gs.readers = (λ l. ∅), gs.writers = (λ l. ∅), lsf(t).t ≠ t, ∀ t. t = lsf(t).t ⊦ |
Used terms: 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.