| ⊦ ( ( ( 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) ∧ oneMember(ls.t, ls.loc, gs.fwriters) ∧ ¬ SF ∈ gs.bq(ls.t) ∧ gs.rfo(ls.t) = [] ∧ (gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ') ∧ (gs.bq(ls.t) ≠ [] ∧ gs.bq(ls.t).head.W? → gs.bq(ls.t).head = W(ls.loc, ls.val))) ∧ ctrok(gs0.fctr, gs0.fwriters) ∧ writersOk(gs0.bq, gs0.pq, gs0.fwriters) ∧ pendingOk(gs0.bq, gs0.pq) ∧ SFTrailing(gs0.bq) ∧ readFOsOk(gs0.rfo, gs0.fwriters)) ∧ relyws(ls.t, gs.freaders, gs0.freaders) ∧ relyws(ls.t, gs.fwriters, gs0.fwriters) ∧ rely(ls.t, gs.pq, gs.bq, gs0.pq, gs0.bq) ∧ gs.bq(ls.t) ⊒w gs0.bq(ls.t) ∧ (gs.rfo(ls.t) = [] → gs0.rfo(ls.t) = []) ∧ (gs.rfo(ls.t) = gs.bq(ls.t) → gs0.rfo(ls.t) = gs0.bq(ls.t)) ∧ (gs.rfo(ls.t) + SF ' = gs.bq(ls.t) → gs0.rfo(ls.t) + SF ' = gs0.bq(ls.t) ∨ gs0.rfo(ls.t) = gs0.bq(ls.t)) → notMember(ls.t, gs0.freaders) ∧ oneMember(ls.t, ls.loc, gs0.fwriters) ∧ ¬ SF ∈ gs0.bq(ls.t) ∧ gs0.rfo(ls.t) = [] ∧ (gs0.bq(ls.t) = [] ∨ gs0.bq(ls.t) = W(ls.loc, ls.val) ') ∧ (gs0.bq(ls.t) ≠ [] ∧ gs0.bq(ls.t).head.W? → gs0.bq(ls.t).head = W(ls.loc, ls.val)) |
gs.rfo(ls.t) = [], SFTrailing(gs.bq), SFTrailing(gs0.bq), ctrok(gs.fctr, gs.fwriters), ctrok(gs0.fctr, gs0.fwriters), notMember(ls.t, gs.freaders), oneMember(ls.t, ls.loc, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(gs0.bq, gs0.pq), readFOsOk(gs.rfo, gs.fwriters), readFOsOk(gs0.rfo, gs0.fwriters), rely(ls.t, gs.pq, gs.bq, gs0.pq, gs0.bq), relyws(ls.t, gs.freaders, gs0.freaders), relyws(ls.t, gs.fwriters, gs0.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(gs0.bq, gs0.pq, gs0.fwriters), gs.bq(ls.t) ⊒w gs0.bq(ls.t), ¬ SF ∈ gs.bq(ls.t), gs.bq(ls.t) ≠ [] ∧ gs.bq(ls.t).head.W? → gs.bq(ls.t).head = W(ls.loc, ls.val), gs.rfo(ls.t) = [] → gs0.rfo(ls.t) = [], gs.rfo(ls.t) = gs.bq(ls.t) → gs0.rfo(ls.t) = gs0.bq(ls.t), gs.rfo(ls.t) + SF ' = gs.bq(ls.t) → gs0.rfo(ls.t) + SF ' = gs0.bq(ls.t) ∨ gs0.rfo(ls.t) = gs0.bq(ls.t), gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' ⊦ notMember(ls.t, gs0.freaders) ∧ oneMember(ls.t, ls.loc, gs0.fwriters) ∧ ¬ SF ∈ gs0.bq(ls.t) ∧ gs0.rfo(ls.t) = [] ∧ (gs0.bq(ls.t) = [] ∨ gs0.bq(ls.t) = W(ls.loc, ls.val) ') ∧ (gs0.bq(ls.t) ≠ [] ∧ gs0.bq(ls.t).head.W? → gs0.bq(ls.t).head = W(ls.loc, ls.val))
| gs.rfo(ls.t) = [], SFTrailing(gs.bq), SFTrailing(gs0.bq), ctrok(gs.fctr, gs.fwriters), ctrok(gs0.fctr, gs0.fwriters), notMember(ls.t, gs.freaders), oneMember(ls.t, ls.loc, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(gs0.bq, gs0.pq), readFOsOk(gs.rfo, gs.fwriters), readFOsOk(gs0.rfo, gs0.fwriters), rely(ls.t, gs.pq, gs.bq, gs0.pq, gs0.bq), relyws(ls.t, gs.freaders, gs0.freaders), relyws(ls.t, gs.fwriters, gs0.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(gs0.bq, gs0.pq, gs0.fwriters), gs.bq(ls.t) ⊒w gs0.bq(ls.t), ¬ SF ∈ gs.bq(ls.t), gs.bq(ls.t) ≠ [] ∧ gs.bq(ls.t).head.W? → gs.bq(ls.t).head = W(ls.loc, ls.val), gs.rfo(ls.t) = [] → gs0.rfo(ls.t) = [], gs.rfo(ls.t) = gs.bq(ls.t) → gs0.rfo(ls.t) = gs0.bq(ls.t), gs.rfo(ls.t) + SF ' = gs.bq(ls.t) → gs0.rfo(ls.t) + SF ' = gs0.bq(ls.t) ∨ gs0.rfo(ls.t) = gs0.bq(ls.t), gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' ⊦ notMember(ls.t, gs0.freaders) ∧ oneMember(ls.t, ls.loc, gs0.fwriters) ∧ ¬ SF ∈ gs0.bq(ls.t) ∧ gs0.rfo(ls.t) = [] ∧ (gs0.bq(ls.t) = [] ∨ gs0.bq(ls.t) = W(ls.loc, ls.val) ') ∧ (gs0.bq(ls.t) ≠ [] ∧ gs0.bq(ls.t).head.W? → gs0.bq(ls.t).head = W(ls.loc, ls.val)) |
gs0.rfo(ls.t) = [], gs.rfo(ls.t) = [], SFTrailing(gs.bq), SFTrailing(gs0.bq), ctrok(gs.fctr, gs.fwriters), ctrok(gs0.fctr, gs0.fwriters), notMember(ls.t, gs.freaders), oneMember(ls.t, ls.loc, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(gs0.bq, gs0.pq), readFOsOk(gs.rfo, gs.fwriters), readFOsOk(gs0.rfo, gs0.fwriters), rely(ls.t, gs.pq, gs.bq, gs0.pq, gs0.bq), relyws(ls.t, gs.freaders, gs0.freaders), relyws(ls.t, gs.fwriters, gs0.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(gs0.bq, gs0.pq, gs0.fwriters), gs.bq(ls.t) ⊒w gs0.bq(ls.t), ¬ SF ∈ gs.bq(ls.t), [] = gs.bq(ls.t) → [] = gs0.bq(ls.t), gs.bq(ls.t) ≠ [] ∧ gs.bq(ls.t).head.W? → gs.bq(ls.t).head = W(ls.loc, ls.val), SF ' = gs.bq(ls.t) → SF ' = gs0.bq(ls.t) ∨ [] = gs0.bq(ls.t), gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' ⊦ (gs0.bq(ls.t) = [] ∨ gs0.bq(ls.t) = W(ls.loc, ls.val) ') ∧ (gs0.bq(ls.t) ≠ [] ∧ gs0.bq(ls.t).head.W? → gs0.bq(ls.t).head = W(ls.loc, ls.val))
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s) ⊦ bel ⊒w bel0 ∧ ¬ be ∈ bel → ¬ be ∈ bel0; (as) ⊦ relyws(t, tsf0, tsf1) ∧ oneMember(t, l, tsf0) → oneMember(t, l, tsf1); (s) ⊦ relyws(t, tsf0, tsf1) ∧ notMember(t, tsf0) → notMember(t, tsf1); (s)
| gs0.rfo(ls.t) = [], gs.rfo(ls.t) = [], SFTrailing(gs.bq), SFTrailing(gs0.bq), ctrok(gs.fctr, gs.fwriters), ctrok(gs0.fctr, gs0.fwriters), notMember(ls.t, gs.freaders), oneMember(ls.t, ls.loc, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(gs0.bq, gs0.pq), readFOsOk(gs.rfo, gs.fwriters), readFOsOk(gs0.rfo, gs0.fwriters), rely(ls.t, gs.pq, gs.bq, gs0.pq, gs0.bq), relyws(ls.t, gs.freaders, gs0.freaders), relyws(ls.t, gs.fwriters, gs0.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(gs0.bq, gs0.pq, gs0.fwriters), gs.bq(ls.t) ⊒w gs0.bq(ls.t), ¬ SF ∈ gs.bq(ls.t), [] = gs.bq(ls.t) → [] = gs0.bq(ls.t), gs.bq(ls.t) ≠ [] ∧ gs.bq(ls.t).head.W? → gs.bq(ls.t).head = W(ls.loc, ls.val), SF ' = gs.bq(ls.t) → SF ' = gs0.bq(ls.t) ∨ [] = gs0.bq(ls.t), gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' ⊦ (gs0.bq(ls.t) = [] ∨ gs0.bq(ls.t) = W(ls.loc, ls.val) ') ∧ (gs0.bq(ls.t) ≠ [] ∧ gs0.bq(ls.t).head.W? → gs0.bq(ls.t).head = W(ls.loc, ls.val)) |
gs.rfo(ls.t) = [], gs0.rfo(ls.t) = [], gs0.bq(ls.t) ≠ [], gs0.bq(ls.t) ≠ W(ls.loc, ls.val) ', SFTrailing(gs0.bq), SFTrailing(gs.bq), ctrok(gs0.fctr, gs0.fwriters), ctrok(gs.fctr, gs.fwriters), notMember(ls.t, gs.freaders), oneMember(ls.t, ls.loc, gs.fwriters), pendingOk(gs0.bq, gs0.pq), pendingOk(gs.bq, gs.pq), readFOsOk(gs0.rfo, gs0.fwriters), readFOsOk(gs.rfo, gs.fwriters), rely(ls.t, gs.pq, gs.bq, gs0.pq, gs0.bq), relyws(ls.t, gs.fwriters, gs0.fwriters), relyws(ls.t, gs.freaders, gs0.freaders), writersOk(gs0.bq, gs0.pq, gs0.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), gs.bq(ls.t) ⊒w gs0.bq(ls.t), ¬ SF ∈ gs.bq(ls.t), SF ' = gs.bq(ls.t) → SF ' = gs0.bq(ls.t) ∨ [] = gs0.bq(ls.t), gs.bq(ls.t) ≠ [] ∧ gs.bq(ls.t).head.W? → gs.bq(ls.t).head = W(ls.loc, ls.val), [] = gs.bq(ls.t) → [] = gs0.bq(ls.t), gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' ⊦
gs.rfo(ls.t) = [], gs0.rfo(ls.t) = [], gs0.bq(ls.t) ≠ [], gs0.bq(ls.t).head ≠ W(ls.loc, ls.val), gs0.bq(ls.t).head.W?, SFTrailing(gs0.bq), SFTrailing(gs.bq), ctrok(gs0.fctr, gs0.fwriters), ctrok(gs.fctr, gs.fwriters), notMember(ls.t, gs.freaders), oneMember(ls.t, ls.loc, gs.fwriters), pendingOk(gs0.bq, gs0.pq), pendingOk(gs.bq, gs.pq), readFOsOk(gs0.rfo, gs0.fwriters), readFOsOk(gs.rfo, gs.fwriters), rely(ls.t, gs.pq, gs.bq, gs0.pq, gs0.bq), relyws(ls.t, gs.fwriters, gs0.fwriters), relyws(ls.t, gs.freaders, gs0.freaders), writersOk(gs0.bq, gs0.pq, gs0.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), gs.bq(ls.t) ⊒w gs0.bq(ls.t), ¬ SF ∈ gs.bq(ls.t), SF ' = gs.bq(ls.t) → SF ' = gs0.bq(ls.t) ∨ [] = gs0.bq(ls.t), gs.bq(ls.t) ≠ [] ∧ gs.bq(ls.t).head.W? → gs.bq(ls.t).head = W(ls.loc, ls.val), [] = gs.bq(ls.t) → [] = gs0.bq(ls.t), gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' ⊦
| gs.rfo(ls.t) = [], gs0.rfo(ls.t) = [], gs0.bq(ls.t) ≠ [], gs0.bq(ls.t) ≠ W(ls.loc, ls.val) ', SFTrailing(gs0.bq), SFTrailing(gs.bq), ctrok(gs0.fctr, gs0.fwriters), ctrok(gs.fctr, gs.fwriters), notMember(ls.t, gs.freaders), oneMember(ls.t, ls.loc, gs.fwriters), pendingOk(gs0.bq, gs0.pq), pendingOk(gs.bq, gs.pq), readFOsOk(gs0.rfo, gs0.fwriters), readFOsOk(gs.rfo, gs.fwriters), rely(ls.t, gs.pq, gs.bq, gs0.pq, gs0.bq), relyws(ls.t, gs.fwriters, gs0.fwriters), relyws(ls.t, gs.freaders, gs0.freaders), writersOk(gs0.bq, gs0.pq, gs0.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), gs.bq(ls.t) ⊒w gs0.bq(ls.t), ¬ SF ∈ gs.bq(ls.t), SF ' = gs.bq(ls.t) → SF ' = gs0.bq(ls.t) ∨ [] = gs0.bq(ls.t), gs.bq(ls.t) ≠ [] ∧ gs.bq(ls.t).head.W? → gs.bq(ls.t).head = W(ls.loc, ls.val), [] = gs.bq(ls.t) → [] = gs0.bq(ls.t), gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' ⊦ |
gs.bq(ls.t) = W(ls.loc, ls.val) ', gs0.rfo(ls.t) = [], gs.rfo(ls.t) = [], gs0.bq(ls.t) ≠ [], gs0.bq(ls.t) ≠ gs.bq(ls.t), [] ≠ gs.bq(ls.t), SFTrailing(gs.bq), SFTrailing(gs0.bq), ctrok(gs.fctr, gs.fwriters), ctrok(gs0.fctr, gs0.fwriters), notMember(ls.t, gs.freaders), oneMember(ls.t, ls.loc, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(gs0.bq, gs0.pq), readFOsOk(gs.rfo, gs.fwriters), readFOsOk(gs0.rfo, gs0.fwriters), rely(ls.t, gs.pq, gs.bq, gs0.pq, gs0.bq), relyws(ls.t, gs.freaders, gs0.freaders), relyws(ls.t, gs.fwriters, gs0.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(gs0.bq, gs0.pq, gs0.fwriters), gs.bq(ls.t) ⊒w gs0.bq(ls.t), ¬ SF ∈ gs.bq(ls.t), gs.bq(ls.t).head.W? → gs.bq(ls.t).head = W(ls.loc, ls.val), SF ' = gs.bq(ls.t) → SF ' = gs0.bq(ls.t) ⊦
| gs.bq(ls.t) = W(ls.loc, ls.val) ', gs0.rfo(ls.t) = [], gs.rfo(ls.t) = [], gs0.bq(ls.t) ≠ [], gs0.bq(ls.t) ≠ gs.bq(ls.t), [] ≠ gs.bq(ls.t), SFTrailing(gs.bq), SFTrailing(gs0.bq), ctrok(gs.fctr, gs.fwriters), ctrok(gs0.fctr, gs0.fwriters), notMember(ls.t, gs.freaders), oneMember(ls.t, ls.loc, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(gs0.bq, gs0.pq), readFOsOk(gs.rfo, gs.fwriters), readFOsOk(gs0.rfo, gs0.fwriters), rely(ls.t, gs.pq, gs.bq, gs0.pq, gs0.bq), relyws(ls.t, gs.freaders, gs0.freaders), relyws(ls.t, gs.fwriters, gs0.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(gs0.bq, gs0.pq, gs0.fwriters), gs.bq(ls.t) ⊒w gs0.bq(ls.t), ¬ SF ∈ gs.bq(ls.t), gs.bq(ls.t).head.W? → gs.bq(ls.t).head = W(ls.loc, ls.val), SF ' = gs.bq(ls.t) → SF ' = gs0.bq(ls.t) ⊦ |
Used simplifier rules: ⊦ a + x = a ' + x; (s) in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ a ' ≠ []; (s) ⊦ a ∈ a0 ' ↔ a = a0; (s) ⊦ a ∈ a0 ' + x ↔ ¬(a ≠ a0 ∧ ¬ a ∈ x); (ss) ⊦ a ' = a0 ' + x ↔ a = a0 ∧ x = []; (ws) ⊦ W(l, v) ≠ SF; (s) ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ be ' ⊒w bel ↔ bel = be ' ∨ bel = []; (ws) ⊦ x ≠ [] → (head = x.head ∧ tail = x.tail ↔ x = head + tail); (elim) Used terms: gs.bq(ls.t), be, bel
| gs.rfo(ls.t) = [], gs0.rfo(ls.t) = [], gs0.bq(ls.t) ≠ [], gs0.bq(ls.t).head ≠ W(ls.loc, ls.val), gs0.bq(ls.t).head.W?, SFTrailing(gs0.bq), SFTrailing(gs.bq), ctrok(gs0.fctr, gs0.fwriters), ctrok(gs.fctr, gs.fwriters), notMember(ls.t, gs.freaders), oneMember(ls.t, ls.loc, gs.fwriters), pendingOk(gs0.bq, gs0.pq), pendingOk(gs.bq, gs.pq), readFOsOk(gs0.rfo, gs0.fwriters), readFOsOk(gs.rfo, gs.fwriters), rely(ls.t, gs.pq, gs.bq, gs0.pq, gs0.bq), relyws(ls.t, gs.fwriters, gs0.fwriters), relyws(ls.t, gs.freaders, gs0.freaders), writersOk(gs0.bq, gs0.pq, gs0.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), gs.bq(ls.t) ⊒w gs0.bq(ls.t), ¬ SF ∈ gs.bq(ls.t), SF ' = gs.bq(ls.t) → SF ' = gs0.bq(ls.t) ∨ [] = gs0.bq(ls.t), gs.bq(ls.t) ≠ [] ∧ gs.bq(ls.t).head.W? → gs.bq(ls.t).head = W(ls.loc, ls.val), [] = gs.bq(ls.t) → [] = gs0.bq(ls.t), gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' ⊦ |
gs.bq(ls.t) = W(ls.loc, ls.val) ', gs0.rfo(ls.t) = [], gs.rfo(ls.t) = [], gs0.bq(ls.t) ≠ [], gs0.bq(ls.t).head ≠ W(ls.loc, ls.val), [] ≠ gs.bq(ls.t), gs0.bq(ls.t).head.W?, SFTrailing(gs.bq), SFTrailing(gs0.bq), ctrok(gs.fctr, gs.fwriters), ctrok(gs0.fctr, gs0.fwriters), notMember(ls.t, gs.freaders), oneMember(ls.t, ls.loc, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(gs0.bq, gs0.pq), readFOsOk(gs.rfo, gs.fwriters), readFOsOk(gs0.rfo, gs0.fwriters), rely(ls.t, gs.pq, gs.bq, gs0.pq, gs0.bq), relyws(ls.t, gs.freaders, gs0.freaders), relyws(ls.t, gs.fwriters, gs0.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(gs0.bq, gs0.pq, gs0.fwriters), gs.bq(ls.t) ⊒w gs0.bq(ls.t), ¬ SF ∈ gs.bq(ls.t), gs.bq(ls.t).head.W? → gs.bq(ls.t).head = W(ls.loc, ls.val), SF ' = gs.bq(ls.t) → SF ' = gs0.bq(ls.t) ⊦
| gs.bq(ls.t) = W(ls.loc, ls.val) ', gs0.rfo(ls.t) = [], gs.rfo(ls.t) = [], gs0.bq(ls.t) ≠ [], gs0.bq(ls.t).head ≠ W(ls.loc, ls.val), [] ≠ gs.bq(ls.t), gs0.bq(ls.t).head.W?, SFTrailing(gs.bq), SFTrailing(gs0.bq), ctrok(gs.fctr, gs.fwriters), ctrok(gs0.fctr, gs0.fwriters), notMember(ls.t, gs.freaders), oneMember(ls.t, ls.loc, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(gs0.bq, gs0.pq), readFOsOk(gs.rfo, gs.fwriters), readFOsOk(gs0.rfo, gs0.fwriters), rely(ls.t, gs.pq, gs.bq, gs0.pq, gs0.bq), relyws(ls.t, gs.freaders, gs0.freaders), relyws(ls.t, gs.fwriters, gs0.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(gs0.bq, gs0.pq, gs0.fwriters), gs.bq(ls.t) ⊒w gs0.bq(ls.t), ¬ SF ∈ gs.bq(ls.t), gs.bq(ls.t).head.W? → gs.bq(ls.t).head = W(ls.loc, ls.val), SF ' = gs.bq(ls.t) → SF ' = gs0.bq(ls.t) ⊦ |
gs.bq(ls.t) = W(ls.loc, ls.val) ', gs0.bq(ls.t) = be + bel, gs.rfo(ls.t) = [], gs0.rfo(ls.t) = [], gs0.bq(ls.t) ≠ [], [] ≠ gs.bq(ls.t), be ≠ W(ls.loc, ls.val), be.W?, SFTrailing(gs0.bq), SFTrailing(gs.bq), ctrok(gs0.fctr, gs0.fwriters), ctrok(gs.fctr, gs.fwriters), notMember(ls.t, gs.freaders), oneMember(ls.t, ls.loc, gs.fwriters), pendingOk(gs0.bq, gs0.pq), pendingOk(gs.bq, gs.pq), readFOsOk(gs0.rfo, gs0.fwriters), readFOsOk(gs.rfo, gs.fwriters), rely(ls.t, gs.pq, gs.bq, gs0.pq, gs0.bq), relyws(ls.t, gs.fwriters, gs0.fwriters), relyws(ls.t, gs.freaders, gs0.freaders), writersOk(gs0.bq, gs0.pq, gs0.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), gs.bq(ls.t) ⊒w gs0.bq(ls.t), ¬ SF ∈ gs.bq(ls.t), SF ' = gs.bq(ls.t) → SF ' = gs0.bq(ls.t), gs.bq(ls.t).head.W? → gs.bq(ls.t).head = W(ls.loc, ls.val) ⊦
Used simplifier rules: ⊦ x ≠ [] → (head = x.head ∧ tail = x.tail ↔ x = head + tail); (elim) Used terms: gs0.bq(ls.t), be, bel
| gs.bq(ls.t) = W(ls.loc, ls.val) ', gs0.bq(ls.t) = be + bel, gs.rfo(ls.t) = [], gs0.rfo(ls.t) = [], gs0.bq(ls.t) ≠ [], [] ≠ gs.bq(ls.t), be ≠ W(ls.loc, ls.val), be.W?, SFTrailing(gs0.bq), SFTrailing(gs.bq), ctrok(gs0.fctr, gs0.fwriters), ctrok(gs.fctr, gs.fwriters), notMember(ls.t, gs.freaders), oneMember(ls.t, ls.loc, gs.fwriters), pendingOk(gs0.bq, gs0.pq), pendingOk(gs.bq, gs.pq), readFOsOk(gs0.rfo, gs0.fwriters), readFOsOk(gs.rfo, gs.fwriters), rely(ls.t, gs.pq, gs.bq, gs0.pq, gs0.bq), relyws(ls.t, gs.fwriters, gs0.fwriters), relyws(ls.t, gs.freaders, gs0.freaders), writersOk(gs0.bq, gs0.pq, gs0.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), gs.bq(ls.t) ⊒w gs0.bq(ls.t), ¬ SF ∈ gs.bq(ls.t), SF ' = gs.bq(ls.t) → SF ' = gs0.bq(ls.t), gs.bq(ls.t).head.W? → gs.bq(ls.t).head = W(ls.loc, ls.val) ⊦ |
gs.bq(ls.t) = W(ls.loc, ls.val) ', gs0.bq(ls.t) = be ' + bel, gs0.rfo(ls.t) = [], gs.rfo(ls.t) = [], [] ≠ gs.bq(ls.t), be ≠ W(ls.loc, ls.val), be.W?, SFTrailing(gs.bq), SFTrailing(gs0.bq), ctrok(gs.fctr, gs.fwriters), ctrok(gs0.fctr, gs0.fwriters), notMember(ls.t, gs.freaders), oneMember(ls.t, ls.loc, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(gs0.bq, gs0.pq), readFOsOk(gs.rfo, gs.fwriters), readFOsOk(gs0.rfo, gs0.fwriters), rely(ls.t, gs.pq, gs.bq, gs0.pq, gs0.bq), relyws(ls.t, gs.freaders, gs0.freaders), relyws(ls.t, gs.fwriters, gs0.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(gs0.bq, gs0.pq, gs0.fwriters), gs.bq(ls.t) ⊒w be ' + bel, ¬ SF ∈ gs.bq(ls.t), gs.bq(ls.t).head.W? → gs.bq(ls.t).head = W(ls.loc, ls.val), SF ' = gs.bq(ls.t) → SF ' = be ' + bel ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a ∈ a0 ' + x ↔ a = a0 ∨ a ∈ x; (s) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ a + x = a ' + x; (s)
| gs.bq(ls.t) = W(ls.loc, ls.val) ', gs0.bq(ls.t) = be ' + bel, gs0.rfo(ls.t) = [], gs.rfo(ls.t) = [], [] ≠ gs.bq(ls.t), be ≠ W(ls.loc, ls.val), be.W?, SFTrailing(gs.bq), SFTrailing(gs0.bq), ctrok(gs.fctr, gs.fwriters), ctrok(gs0.fctr, gs0.fwriters), notMember(ls.t, gs.freaders), oneMember(ls.t, ls.loc, gs.fwriters), pendingOk(gs.bq, gs.pq), pendingOk(gs0.bq, gs0.pq), readFOsOk(gs.rfo, gs.fwriters), readFOsOk(gs0.rfo, gs0.fwriters), rely(ls.t, gs.pq, gs.bq, gs0.pq, gs0.bq), relyws(ls.t, gs.freaders, gs0.freaders), relyws(ls.t, gs.fwriters, gs0.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), writersOk(gs0.bq, gs0.pq, gs0.fwriters), gs.bq(ls.t) ⊒w be ' + bel, ¬ SF ∈ gs.bq(ls.t), gs.bq(ls.t).head.W? → gs.bq(ls.t).head = W(ls.loc, ls.val), SF ' = gs.bq(ls.t) → SF ' = be ' + bel ⊦ |
Used simplifier rules: ⊦ a + x = a ' + x; (s) in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ a ' ≠ []; (s) ⊦ a ∈ a0 ' ↔ a = a0; (s) ⊦ a ∈ a0 ' + x ↔ ¬(a ≠ a0 ∧ ¬ a ∈ x); (ss) ⊦ a ' = a0 ' + x ↔ a = a0 ∧ x = []; (ws) ⊦ W(l, v) ≠ SF; (s) ⊦ x + [] = x; (s) ⊦ be ' ⊒w be0 ' + bel ↔ be0 = be ∧ bel = []; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x ≠ [] → (head = x.head ∧ tail = x.tail ↔ x = head + tail); (elim) Used terms: gs.bq(ls.t), be0, bel0
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.