| ⊦ allWritesOKInd(pending, persisted, h) → allWritesOKInd(pending, persisted, h + (R(t, l, v), b) ') |
allWritesOKInd(pending, persisted, h), ¬ allWritesOKInd(pending, persisted, h + (R(t, l, v), b) ') ⊦
| allWritesOKInd(pending, persisted, h), ¬ allWritesOKInd(pending, persisted, h + (R(t, l, v), b) ') ⊦ |
allWritesOKInd(pending, persisted, vpe + h0), ¬ allWritesOKInd(pending, persisted, (vpe + h0) + (R(t, l, v), b) '), ∀ pending, persisted, t, l, v, b. ¬(allWritesOKInd(pending, persisted, h0) ∧ ¬ allWritesOKInd(pending, persisted, h0 + (R(t, l, v), b) ')) ⊦
Used simplifier rules: allWritesOKInd-base: ⊦ allWritesOKInd(pending, persisted, []); allwritesOK-ind-one: ⊦ allWritesOKInd(pending, persisted, (e, b) ') ↔ e.R? ∨ e.W? ∧ ¬ pending(e.t) ∧ (b → persisted(e.l)); List('a) freely generated by [], +;; ⊦ [] + x = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ R(t, l, v).R?; (s)
| allWritesOKInd(pending, persisted, vpe + h0), ¬ allWritesOKInd(pending, persisted, (vpe + h0) + (R(t, l, v), b) '), ∀ pending, persisted, t, l, v, b. ¬(allWritesOKInd(pending, persisted, h0) ∧ ¬ allWritesOKInd(pending, persisted, h0 + (R(t, l, v), b) ')) ⊦ |
allWritesOKInd(pending, persisted, vpe ' + h0), ¬ allWritesOKInd(pending, persisted, (vpe ' + h0) + (R(t, l, v), b) '), ∀ pending0, persisted0, t0, l0, v0, b0. ¬ allWritesOKInd(pending0, persisted0, h0) ∨ allWritesOKInd(pending0, persisted0, h0 + (R(t0, l0, v0), b0) ') ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a + x = a ' + x; (s)
| allWritesOKInd(pending, persisted, vpe ' + h0), ¬ allWritesOKInd(pending, persisted, (vpe ' + h0) + (R(t, l, v), b) '), ∀ pending0, persisted0, t0, l0, v0, b0. ¬ allWritesOKInd(pending0, persisted0, h0) ∨ allWritesOKInd(pending0, persisted0, h0 + (R(t0, l0, v0), b0) ') ⊦ |
vpe = (e, b1), allWritesOKInd(pending, persisted, vpe ' + h0), ¬ allWritesOKInd(pending, persisted, (vpe ' + h0) + (R(t, l, v), b) '), ∀ pending0, persisted0, t0, l0, v0, b0. ¬ allWritesOKInd(pending0, persisted0, h0) ∨ allWritesOKInd(pending0, persisted0, h0 + (R(t0, l0, v0), b0) ') ⊦
| vpe = (e, b1), allWritesOKInd(pending, persisted, vpe ' + h0), ¬ allWritesOKInd(pending, persisted, (vpe ' + h0) + (R(t, l, v), b) '), ∀ pending0, persisted0, t0, l0, v0, b0. ¬ allWritesOKInd(pending0, persisted0, h0) ∨ allWritesOKInd(pending0, persisted0, h0 + (R(t0, l0, v0), b0) ') ⊦ |
allWritesOKInd(pending, persisted, (e, b1) ' + h0), ¬ allWritesOKInd(pending, persisted, ((e, b1) ' + h0) + (R(t, l, v), b) '), ∀ pending0, persisted0, t0, l0, v0, b0. ¬ allWritesOKInd(pending0, persisted0, h0) ∨ allWritesOKInd(pending0, persisted0, h0 + (R(t0, l0, v0), b0) ') ⊦
| allWritesOKInd(pending, persisted, (e, b1) ' + h0), ¬ allWritesOKInd(pending, persisted, ((e, b1) ' + h0) + (R(t, l, v), b) '), ∀ pending0, persisted0, t0, l0, v0, b0. ¬ allWritesOKInd(pending0, persisted0, h0) ∨ allWritesOKInd(pending0, persisted0, h0 + (R(t0, l0, v0), b0) ') ⊦ |
e = R(t1, l1, v1), allWritesOKInd(pending, persisted, (e, b1) ' + h0), ¬ allWritesOKInd(pending, persisted, ((e, b1) ' + h0) + (R(t, l, v), b) '), ∀ pending0, persisted0, t0, l0, v0, b0. ¬ allWritesOKInd(pending0, persisted0, h0) ∨ allWritesOKInd(pending0, persisted0, h0 + (R(t0, l0, v0), b0) ') ⊦
e = W(t1, l1, v1), allWritesOKInd(pending, persisted, (e, b1) ' + h0), ¬ allWritesOKInd(pending, persisted, ((e, b1) ' + h0) + (R(t, l, v), b) '), ∀ pending0, persisted0, t0, l0, v0, b0. ¬ allWritesOKInd(pending0, persisted0, h0) ∨ allWritesOKInd(pending0, persisted0, h0 + (R(t0, l0, v0), b0) ') ⊦
Used simplifier rules: RWevent freely generated by R, W;;
| e = R(t1, l1, v1), allWritesOKInd(pending, persisted, (e, b1) ' + h0), ¬ allWritesOKInd(pending, persisted, ((e, b1) ' + h0) + (R(t, l, v), b) '), ∀ pending0, persisted0, t0, l0, v0, b0. ¬ allWritesOKInd(pending0, persisted0, h0) ∨ allWritesOKInd(pending0, persisted0, h0 + (R(t0, l0, v0), b0) ') ⊦ |
allWritesOKInd(pending, persisted, h0), ¬ allWritesOKInd(pending, persisted, h0 + (R(t, l, v), b) '), ∀ pending0, persisted0, t0, l0, v0, b0. ¬ allWritesOKInd(pending0, persisted0, h0) ∨ allWritesOKInd(pending0, persisted0, h0 + (R(t0, l0, v0), b0) ') ⊦
Used simplifier rules: allWritesOKInd-recR: ⊦ allWritesOKInd(pending, persisted, (R(t, l, v), b) ' + h) ↔ allWritesOKInd(pending, persisted, h); a: ⊦ (x + y) + z = x + y + z; from specification list
| allWritesOKInd(pending, persisted, h0), ¬ allWritesOKInd(pending, persisted, h0 + (R(t, l, v), b) '), ∀ pending0, persisted0, t0, l0, v0, b0. ¬ allWritesOKInd(pending0, persisted0, h0) ∨ allWritesOKInd(pending0, persisted0, h0 + (R(t0, l0, v0), b0) ') ⊦ |
Used terms: pending, persisted, t, l, v, b
| e = W(t1, l1, v1), allWritesOKInd(pending, persisted, (e, b1) ' + h0), ¬ allWritesOKInd(pending, persisted, ((e, b1) ' + h0) + (R(t, l, v), b) '), ∀ pending0, persisted0, t0, l0, v0, b0. ¬ allWritesOKInd(pending0, persisted0, h0) ∨ allWritesOKInd(pending0, persisted0, h0 + (R(t0, l0, v0), b0) ') ⊦ |
allWritesOKInd(pending(t1 := ¬ b1), persisted(l1 := b1), h0), ¬ allWritesOKInd(pending(t1 := ¬ b1), persisted(l1 := b1), h0 + (R(t, l, v), b) '), ¬ pending(t1), b1 → persisted(l1), ∀ pending0, persisted0, t0, l0, v0, b0. ¬ allWritesOKInd(pending0, persisted0, h0) ∨ allWritesOKInd(pending0, persisted0, h0 + (R(t0, l0, v0), b0) ') ⊦
Used simplifier rules: allWritesOKInd-recW: ⊦ allWritesOKInd(pending, persisted, (W(t, l, v), b) ' + h) ↔ ¬ pending(t) ∧ (b → persisted(l)) ∧ allWritesOKInd(pending(t := ¬ b), persisted(l := b), h); a: ⊦ (x + y) + z = x + y + z; from specification list
| allWritesOKInd(pending(t1 := ¬ b1), persisted(l1 := b1), h0), ¬ allWritesOKInd(pending(t1 := ¬ b1), persisted(l1 := b1), h0 + (R(t, l, v), b) '), ¬ pending(t1), b1 → persisted(l1), ∀ pending0, persisted0, t0, l0, v0, b0. ¬ allWritesOKInd(pending0, persisted0, h0) ∨ allWritesOKInd(pending0, persisted0, h0 + (R(t0, l0, v0), b0) ') ⊦ |
Used terms: pending(t1 := ¬ b1), persisted(l1 := b1), t, l, v, b
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.