| (gs.set = ∅ ∧ pcf = (λ tid. idle)) ∧ (∀ tid. tid = lsf(tid).tid) ⊦ SetInv(gs, lsf, pcf) |
gs.set = ∅, pcf = (λ tid. idle), ¬ SetInv(gs, lsf, pcf), ∀ tid. tid = lsf(tid).tid ⊦
| gs.set = ∅, pcf = (λ tid. idle), ¬ SetInv(gs, lsf, pcf), ∀ tid. tid = lsf(tid).tid ⊦ |
gs.set = ∅, ¬ SetInv(gs, lsf, λ tid. idle), ∀ tid. tid = lsf(tid).tid ⊦
| gs.set = ∅, ¬ SetInv(gs, lsf, λ tid. idle), ∀ tid. tid = lsf(tid).tid ⊦ |
⊦ SetInv(gs, lsf, pcf) ↔ SetGInv(gs) ∧ (∀ tid. lsf(tid).tid = tid ∧ SetLInv(gs, lsf(tid), pcf(tid)))
gs.set = ∅, ∀ tid. tid = lsf(tid).tid, ¬ SetGInv(gs) ∨ (∃ tid. ¬(lsf(tid).tid = tid ∧ SetLInv(gs, lsf(tid), idle))) ⊦
Used terms: gs, lsf, λ tid. idle
| ⊦ SetInv(gs, lsf, pcf) ↔ SetGInv(gs) ∧ (∀ tid. lsf(tid).tid = tid ∧ SetLInv(gs, lsf(tid), pcf(tid))) |
| gs.set = ∅, ∀ tid. tid = lsf(tid).tid, ¬ SetGInv(gs) ∨ (∃ tid. ¬(lsf(tid).tid = tid ∧ SetLInv(gs, lsf(tid), idle))) ⊦ |
gs.set = ∅, ∀ tid. tid = lsf(tid).tid, ¬ SetGInv(gs) ∨ lsf(tid).tid ≠ tid ∨ ¬ SetLInv(gs, lsf(tid), idle) ⊦
| gs.set = ∅, ∀ tid. tid = lsf(tid).tid, ¬ SetGInv(gs) ∨ lsf(tid).tid ≠ tid ∨ ¬ SetLInv(gs, lsf(tid), idle) ⊦ |
⊦ SetGInv(gs) ↔ true
gs.set = ∅, ∀ tid. tid = lsf(tid).tid, ¬ true ∨ lsf(tid).tid ≠ tid ∨ ¬ SetLInv(gs, lsf(tid), idle) ⊦
Used terms: gs
| ⊦ SetGInv(gs) ↔ true |
| gs.set = ∅, ∀ tid. tid = lsf(tid).tid, ¬ true ∨ lsf(tid).tid ≠ tid ∨ ¬ SetLInv(gs, lsf(tid), idle) ⊦ |
gs.set = ∅, ∀ tid. tid = lsf(tid).tid, lsf(tid).tid ≠ tid ∨ ¬ SetLInv(gs, lsf(tid), idle) ⊦
| gs.set = ∅, ∀ tid. tid = lsf(tid).tid, lsf(tid).tid ≠ tid ∨ ¬ SetLInv(gs, lsf(tid), idle) ⊦ |
⊦ SetLInv(gs, ls, pc) ↔ (pc = invInsert ∨ pc = retInsert ∨ pc = invMember ∨ pc = retMember → ls.le ≠ ⊥) ∧ (pc = retMember ∨ pc = retInsert → ls.lb → ls.le ∈ gs.set)
gs.set = ∅, ∀ tid. tid = lsf(tid).tid, lsf(tid).tid ≠ tid ∨ ¬ ( (idle = invInsert ∨ idle = retInsert ∨ idle = invMember ∨ idle = retMember → lsf(tid).le ≠ ⊥) ∧ (idle = retMember ∨ idle = retInsert → lsf(tid).lb → lsf(tid).le ∈ gs.set)) ⊦
Used terms: gs, lsf(tid), idle
| ⊦ SetLInv(gs, ls, pc) ↔ (pc = invInsert ∨ pc = retInsert ∨ pc = invMember ∨ pc = retMember → ls.le ≠ ⊥) ∧ (pc = retMember ∨ pc = retInsert → ls.lb → ls.le ∈ gs.set) |
| gs.set = ∅, ∀ tid. tid = lsf(tid).tid, lsf(tid).tid ≠ tid ∨ ¬ ( (idle = invInsert ∨ idle = retInsert ∨ idle = invMember ∨ idle = retMember → lsf(tid).le ≠ ⊥) ∧ (idle = retMember ∨ idle = retInsert → lsf(tid).lb → lsf(tid).le ∈ gs.set)) ⊦ |
gs.set = ∅, lsf(tid).tid ≠ tid, ∀ tid. tid = lsf(tid).tid ⊦
Used simplifier rules: ⊦ idle ≠ retInsert; (s) ⊦ idle ≠ retMember; (s) ⊦ idle ≠ invMember; (s) ⊦ idle ≠ invInsert; (s)
| gs.set = ∅, lsf(tid).tid ≠ tid, ∀ tid. tid = lsf(tid).tid ⊦ |
Used terms: tid
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.