| ⊦ allWritesOKInd(pending(t := true), persisted, h) → allWritesOKInd(pending(t := false), persisted, h) |
allWritesOKInd(pending(t := true), persisted, h), ¬ allWritesOKInd(pending(t := false), persisted, h) ⊦
| allWritesOKInd(pending(t := true), persisted, h), ¬ allWritesOKInd(pending(t := false), persisted, h) ⊦ |
allWritesOKInd(pending(t := true), persisted, vpe + h0), ¬ allWritesOKInd(pending(t := false), persisted, vpe + h0), ∀ pending, t, persisted. ¬(allWritesOKInd(pending(t := true), persisted, h0) ∧ ¬ allWritesOKInd(pending(t := false), persisted, h0)) ⊦
Used simplifier rules: allWritesOKInd-base: ⊦ allWritesOKInd(pending, persisted, []); List('a) freely generated by [], +;;
| allWritesOKInd(pending(t := true), persisted, vpe + h0), ¬ allWritesOKInd(pending(t := false), persisted, vpe + h0), ∀ pending, t, persisted. ¬(allWritesOKInd(pending(t := true), persisted, h0) ∧ ¬ allWritesOKInd(pending(t := false), persisted, h0)) ⊦ |
allWritesOKInd(pending(t := true), persisted, vpe ' + h0), ¬ allWritesOKInd(pending(t := false), persisted, vpe ' + h0), ∀ pending0, t0, persisted0. ¬ allWritesOKInd(pending0(t0 := true), persisted0, h0) ∨ allWritesOKInd(pending0(t0 := false), persisted0, h0) ⊦
Used simplifier rules: ⊦ a + x = a ' + x; (s)
| allWritesOKInd(pending(t := true), persisted, vpe ' + h0), ¬ allWritesOKInd(pending(t := false), persisted, vpe ' + h0), ∀ pending0, t0, persisted0. ¬ allWritesOKInd(pending0(t0 := true), persisted0, h0) ∨ allWritesOKInd(pending0(t0 := false), persisted0, h0) ⊦ |
vpe = (e, b), allWritesOKInd(pending(t := true), persisted, vpe ' + h0), ¬ allWritesOKInd(pending(t := false), persisted, vpe ' + h0), ∀ pending0, t0, persisted0. ¬ allWritesOKInd(pending0(t0 := true), persisted0, h0) ∨ allWritesOKInd(pending0(t0 := false), persisted0, h0) ⊦
| vpe = (e, b), allWritesOKInd(pending(t := true), persisted, vpe ' + h0), ¬ allWritesOKInd(pending(t := false), persisted, vpe ' + h0), ∀ pending0, t0, persisted0. ¬ allWritesOKInd(pending0(t0 := true), persisted0, h0) ∨ allWritesOKInd(pending0(t0 := false), persisted0, h0) ⊦ |
allWritesOKInd(pending(t := true), persisted, (e, b) ' + h0), ¬ allWritesOKInd(pending(t := false), persisted, (e, b) ' + h0), ∀ pending0, t0, persisted0. ¬ allWritesOKInd(pending0(t0 := true), persisted0, h0) ∨ allWritesOKInd(pending0(t0 := false), persisted0, h0) ⊦
| allWritesOKInd(pending(t := true), persisted, (e, b) ' + h0), ¬ allWritesOKInd(pending(t := false), persisted, (e, b) ' + h0), ∀ pending0, t0, persisted0. ¬ allWritesOKInd(pending0(t0 := true), persisted0, h0) ∨ allWritesOKInd(pending0(t0 := false), persisted0, h0) ⊦ |
e = R(t1, l, v), allWritesOKInd(pending(t := true), persisted, (e, b) ' + h0), ¬ allWritesOKInd(pending(t := false), persisted, (e, b) ' + h0), ∀ pending0, t0, persisted0. ¬ allWritesOKInd(pending0(t0 := true), persisted0, h0) ∨ allWritesOKInd(pending0(t0 := false), persisted0, h0) ⊦
e = W(t1, l, v), allWritesOKInd(pending(t := true), persisted, (e, b) ' + h0), ¬ allWritesOKInd(pending(t := false), persisted, (e, b) ' + h0), ∀ pending0, t0, persisted0. ¬ allWritesOKInd(pending0(t0 := true), persisted0, h0) ∨ allWritesOKInd(pending0(t0 := false), persisted0, h0) ⊦
Used simplifier rules: RWevent freely generated by R, W;;
| e = R(t1, l, v), allWritesOKInd(pending(t := true), persisted, (e, b) ' + h0), ¬ allWritesOKInd(pending(t := false), persisted, (e, b) ' + h0), ∀ pending0, t0, persisted0. ¬ allWritesOKInd(pending0(t0 := true), persisted0, h0) ∨ allWritesOKInd(pending0(t0 := false), persisted0, h0) ⊦ |
allWritesOKInd(pending(t := true), persisted, h0), ¬ allWritesOKInd(pending(t := false), persisted, h0), ∀ pending0, t0, persisted0. ¬ allWritesOKInd(pending0(t0 := true), persisted0, h0) ∨ allWritesOKInd(pending0(t0 := false), persisted0, h0) ⊦
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(t := true), persisted, h0), ¬ allWritesOKInd(pending(t := false), persisted, h0), ∀ pending0, t0, persisted0. ¬ allWritesOKInd(pending0(t0 := true), persisted0, h0) ∨ allWritesOKInd(pending0(t0 := false), persisted0, h0) ⊦ |
Used terms: pending, t, persisted
| e = W(t1, l, v), allWritesOKInd(pending(t := true), persisted, (e, b) ' + h0), ¬ allWritesOKInd(pending(t := false), persisted, (e, b) ' + h0), ∀ pending0, t0, persisted0. ¬ allWritesOKInd(pending0(t0 := true), persisted0, h0) ∨ allWritesOKInd(pending0(t0 := false), persisted0, h0) ⊦ |
t ≠ t1, allWritesOKInd(pending(t := true)(t1 := ¬ b), persisted(l := b), h0), ¬ allWritesOKInd(pending(t := false)(t1 := ¬ b), persisted(l := b), h0), ¬ pending(t1), b → persisted(l), ∀ pending0, t0, persisted0. ¬ allWritesOKInd(pending0(t0 := true), persisted0, h0) ∨ allWritesOKInd(pending0(t0 := false), persisted0, h0) ⊦
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
| t ≠ t1, allWritesOKInd(pending(t := true)(t1 := ¬ b), persisted(l := b), h0), ¬ allWritesOKInd(pending(t := false)(t1 := ¬ b), persisted(l := b), h0), ¬ pending(t1), b → persisted(l), ∀ pending0, t0, persisted0. ¬ allWritesOKInd(pending0(t0 := true), persisted0, h0) ∨ allWritesOKInd(pending0(t0 := false), persisted0, h0) ⊦ |
⊦ t0 ≠ t1 → pending(t0 := b0)(t1 := b1) = pending(t1 := b1)(t0 := b0)
t ≠ t1, allWritesOKInd(pending(t1 := ¬ b)(t := true), persisted(l := b), h0), ¬ allWritesOKInd(pending(t := false)(t1 := ¬ b), persisted(l := b), h0), ¬ pending(t1), b → persisted(l), ∀ pending0, t0, persisted0. ¬ allWritesOKInd(pending0(t0 := true), persisted0, h0) ∨ allWritesOKInd(pending0(t0 := false), persisted0, h0) ⊦
Used terms: ¬ b, pending, true, t1, t
| ⊦ t0 ≠ t1 → pending(t0 := b0)(t1 := b1) = pending(t1 := b1)(t0 := b0) |
| t ≠ t1, allWritesOKInd(pending(t1 := ¬ b)(t := true), persisted(l := b), h0), ¬ allWritesOKInd(pending(t := false)(t1 := ¬ b), persisted(l := b), h0), ¬ pending(t1), b → persisted(l), ∀ pending0, t0, persisted0. ¬ allWritesOKInd(pending0(t0 := true), persisted0, h0) ∨ allWritesOKInd(pending0(t0 := false), persisted0, h0) ⊦ |
⊦ t0 ≠ t1 → pending(t0 := b0)(t1 := b1) = pending(t1 := b1)(t0 := b0)
t ≠ t1, allWritesOKInd(pending(t1 := ¬ b)(t := true), persisted(l := b), h0), ¬ allWritesOKInd(pending(t1 := ¬ b)(t := false), persisted(l := b), h0), ¬ pending(t1), b → persisted(l), ∀ pending0, t0, persisted0. ¬ allWritesOKInd(pending0(t0 := true), persisted0, h0) ∨ allWritesOKInd(pending0(t0 := false), persisted0, h0) ⊦
Used terms: ¬ b, pending, false, t1, t
| ⊦ t0 ≠ t1 → pending(t0 := b0)(t1 := b1) = pending(t1 := b1)(t0 := b0) |
| t ≠ t1, allWritesOKInd(pending(t1 := ¬ b)(t := true), persisted(l := b), h0), ¬ allWritesOKInd(pending(t1 := ¬ b)(t := false), persisted(l := b), h0), ¬ pending(t1), b → persisted(l), ∀ pending0, t0, persisted0. ¬ allWritesOKInd(pending0(t0 := true), persisted0, h0) ∨ allWritesOKInd(pending0(t0 := false), persisted0, h0) ⊦ |
Used terms: pending(t1 := ¬ b), t, persisted(l := 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.