| ⊦ allWritesOKInd(pending, persisted, h1 + h2) → allWritesOKInd(pending, persisted, h1 + persistDependentReads(l, h2)) |
allWritesOKInd(pending, persisted, h1 + h2), ¬ allWritesOKInd(pending, persisted, h1 + persistDependentReads(l, h2)) ⊦
| allWritesOKInd(pending, persisted, h1 + h2), ¬ allWritesOKInd(pending, persisted, h1 + persistDependentReads(l, h2)) ⊦ |
allWritesOKInd(pending, persisted, [] + h2), ¬ allWritesOKInd(pending, persisted, [] + persistDependentReads(l, h2)) ⊦
allWritesOKInd(pending, persisted, (vpe + h) + h2), ¬ allWritesOKInd(pending, persisted, (vpe + h) + persistDependentReads(l, h2)), ∀ pending, persisted, h2, l. ¬(allWritesOKInd(pending, persisted, h + h2) ∧ ¬ allWritesOKInd(pending, persisted, h + persistDependentReads(l, h2))) ⊦
Used simplifier rules: List('a) freely generated by [], +;;
| allWritesOKInd(pending, persisted, [] + h2), ¬ allWritesOKInd(pending, persisted, [] + persistDependentReads(l, h2)) ⊦ |
allWritesOKInd(pending, persisted, h2), ¬ allWritesOKInd(pending, persisted, persistDependentReads(l, h2)) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s)
| allWritesOKInd(pending, persisted, h2), ¬ allWritesOKInd(pending, persisted, persistDependentReads(l, h2)) ⊦ |
allWritesOKInd(pending, persisted, vpe + h), ¬ allWritesOKInd(pending, persisted, persistDependentReads(l, vpe + h)), ∀ pending, persisted, l. ¬(allWritesOKInd(pending, persisted, h) ∧ ¬ allWritesOKInd(pending, persisted, persistDependentReads(l, h))) ⊦
Used simplifier rules: persistDependentReads-base: ⊦ persistDependentReads(l, []) = []; allWritesOKInd-base: ⊦ allWritesOKInd(pending, persisted, []); List('a) freely generated by [], +;;
| allWritesOKInd(pending, persisted, vpe + h), ¬ allWritesOKInd(pending, persisted, persistDependentReads(l, vpe + h)), ∀ pending, persisted, l. ¬(allWritesOKInd(pending, persisted, h) ∧ ¬ allWritesOKInd(pending, persisted, persistDependentReads(l, h))) ⊦ |
allWritesOKInd(pending, persisted, vpe ' + h), ¬ allWritesOKInd(pending, persisted, persistDependentReads(l, vpe ' + h)), ∀ pending0, persisted0, l0. ¬ allWritesOKInd(pending0, persisted0, h) ∨ allWritesOKInd(pending0, persisted0, persistDependentReads(l0, h)) ⊦
Used simplifier rules: ⊦ a + x = a ' + x; (s)
| allWritesOKInd(pending, persisted, vpe ' + h), ¬ allWritesOKInd(pending, persisted, persistDependentReads(l, vpe ' + h)), ∀ pending0, persisted0, l0. ¬ allWritesOKInd(pending0, persisted0, h) ∨ allWritesOKInd(pending0, persisted0, persistDependentReads(l0, h)) ⊦ |
vpe = (e, b), allWritesOKInd(pending, persisted, vpe ' + h), ¬ allWritesOKInd(pending, persisted, persistDependentReads(l, vpe ' + h)), ∀ pending0, persisted0, l0. ¬ allWritesOKInd(pending0, persisted0, h) ∨ allWritesOKInd(pending0, persisted0, persistDependentReads(l0, h)) ⊦
| vpe = (e, b), allWritesOKInd(pending, persisted, vpe ' + h), ¬ allWritesOKInd(pending, persisted, persistDependentReads(l, vpe ' + h)), ∀ pending0, persisted0, l0. ¬ allWritesOKInd(pending0, persisted0, h) ∨ allWritesOKInd(pending0, persisted0, persistDependentReads(l0, h)) ⊦ |
allWritesOKInd(pending, persisted, (e, b) ' + h), ¬ allWritesOKInd(pending, persisted, persistDependentReads(l, (e, b) ' + h)), ∀ pending0, persisted0, l0. ¬ allWritesOKInd(pending0, persisted0, h) ∨ allWritesOKInd(pending0, persisted0, persistDependentReads(l0, h)) ⊦
| allWritesOKInd(pending, persisted, (e, b) ' + h), ¬ allWritesOKInd(pending, persisted, persistDependentReads(l, (e, b) ' + h)), ∀ pending0, persisted0, l0. ¬ allWritesOKInd(pending0, persisted0, h) ∨ allWritesOKInd(pending0, persisted0, persistDependentReads(l0, h)) ⊦ |
e = R(t, l1, v), allWritesOKInd(pending, persisted, (e, b) ' + h), ¬ allWritesOKInd(pending, persisted, persistDependentReads(l, (e, b) ' + h)), ∀ pending0, persisted0, l0. ¬ allWritesOKInd(pending0, persisted0, h) ∨ allWritesOKInd(pending0, persisted0, persistDependentReads(l0, h)) ⊦
e = W(t, l1, v), allWritesOKInd(pending, persisted, (e, b) ' + h), ¬ allWritesOKInd(pending, persisted, persistDependentReads(l, (e, b) ' + h)), ∀ pending0, persisted0, l0. ¬ allWritesOKInd(pending0, persisted0, h) ∨ allWritesOKInd(pending0, persisted0, persistDependentReads(l0, h)) ⊦
Used simplifier rules: RWevent freely generated by R, W;;
| e = R(t, l1, v), allWritesOKInd(pending, persisted, (e, b) ' + h), ¬ allWritesOKInd(pending, persisted, persistDependentReads(l, (e, b) ' + h)), ∀ pending0, persisted0, l0. ¬ allWritesOKInd(pending0, persisted0, h) ∨ allWritesOKInd(pending0, persisted0, persistDependentReads(l0, h)) ⊦ |
allWritesOKInd(pending, persisted, h), ¬ allWritesOKInd(pending, persisted, persistDependentReads(l, (R(t, l1, v), b) ' + h)), ∀ pending0, persisted0, l0. ¬ allWritesOKInd(pending0, persisted0, h) ∨ allWritesOKInd(pending0, persisted0, persistDependentReads(l0, h)) ⊦
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, h), ¬ allWritesOKInd(pending, persisted, persistDependentReads(l, (R(t, l1, v), b) ' + h)), ∀ pending0, persisted0, l0. ¬ allWritesOKInd(pending0, persisted0, h) ∨ allWritesOKInd(pending0, persisted0, persistDependentReads(l0, h)) ⊦ |
⊦ l ≠ l0 → persistDependentReads(l, (R(t, l0, v), b) ' + h) = (R(t, l0, v), b) + persistDependentReads(l, h)
l = l1, allWritesOKInd(pending, persisted, h), ¬ allWritesOKInd(pending, persisted, persistDependentReads(l, (R(t, l1, v), b) ' + h)), ∀ pending0, persisted0, l0. ¬ allWritesOKInd(pending0, persisted0, h) ∨ allWritesOKInd(pending0, persisted0, persistDependentReads(l0, h)) ⊦
l ≠ l1, allWritesOKInd(pending, persisted, h), ¬ allWritesOKInd(pending, persisted, (R(t, l1, v), b) + persistDependentReads(l, h)), ∀ pending0, persisted0, l0. ¬ allWritesOKInd(pending0, persisted0, h) ∨ allWritesOKInd(pending0, persisted0, persistDependentReads(l0, h)) ⊦
Used terms: v, b, l, l1, t, h
| ⊦ l ≠ l0 → persistDependentReads(l, (R(t, l0, v), b) ' + h) = (R(t, l0, v), b) + persistDependentReads(l, h) |
| l = l1, allWritesOKInd(pending, persisted, h), ¬ allWritesOKInd(pending, persisted, persistDependentReads(l, (R(t, l1, v), b) ' + h)), ∀ pending0, persisted0, l0. ¬ allWritesOKInd(pending0, persisted0, h) ∨ allWritesOKInd(pending0, persisted0, persistDependentReads(l0, h)) ⊦ |
allWritesOKInd(pending, persisted, h), ¬ allWritesOKInd(pending, persisted, persistDependentReads(l1, h)), ∀ pending0, persisted0, l0. ¬ allWritesOKInd(pending0, persisted0, h) ∨ allWritesOKInd(pending0, persisted0, persistDependentReads(l0, h)) ⊦
Used simplifier rules: persistDependentReads-read: ⊦ persistDependentReads(l, (R(t, l, v), b) ' + h) = (R(t, l, v), true) ' + persistDependentReads(l, h); 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, h), ¬ allWritesOKInd(pending, persisted, persistDependentReads(l1, h)), ∀ pending0, persisted0, l0. ¬ allWritesOKInd(pending0, persisted0, h) ∨ allWritesOKInd(pending0, persisted0, persistDependentReads(l0, h)) ⊦ |
Used terms: pending, persisted, l1
| l ≠ l1, allWritesOKInd(pending, persisted, h), ¬ allWritesOKInd(pending, persisted, (R(t, l1, v), b) + persistDependentReads(l, h)), ∀ pending0, persisted0, l0. ¬ allWritesOKInd(pending0, persisted0, h) ∨ allWritesOKInd(pending0, persisted0, persistDependentReads(l0, h)) ⊦ |
l ≠ l1, allWritesOKInd(pending, persisted, h), ¬ allWritesOKInd(pending, persisted, persistDependentReads(l, h)), ∀ pending0, persisted0, l0. ¬ allWritesOKInd(pending0, persisted0, h) ∨ allWritesOKInd(pending0, persisted0, persistDependentReads(l0, h)) ⊦
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 ⊦ a + x = a ' + x; (s)
| l ≠ l1, allWritesOKInd(pending, persisted, h), ¬ allWritesOKInd(pending, persisted, persistDependentReads(l, h)), ∀ pending0, persisted0, l0. ¬ allWritesOKInd(pending0, persisted0, h) ∨ allWritesOKInd(pending0, persisted0, persistDependentReads(l0, h)) ⊦ |
Used terms: pending, persisted, l
| e = W(t, l1, v), allWritesOKInd(pending, persisted, (e, b) ' + h), ¬ allWritesOKInd(pending, persisted, persistDependentReads(l, (e, b) ' + h)), ∀ pending0, persisted0, l0. ¬ allWritesOKInd(pending0, persisted0, h) ∨ allWritesOKInd(pending0, persisted0, persistDependentReads(l0, h)) ⊦ |
allWritesOKInd(pending(t := ¬ b), persisted(l1 := b), h), ¬ allWritesOKInd(pending, persisted, persistDependentReads(l, (W(t, l1, v), b) ' + h)), ¬ pending(t), b → persisted(l1), ∀ pending0, persisted0, l0. ¬ allWritesOKInd(pending0, persisted0, h) ∨ allWritesOKInd(pending0, persisted0, persistDependentReads(l0, h)) ⊦
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(t := ¬ b), persisted(l1 := b), h), ¬ allWritesOKInd(pending, persisted, persistDependentReads(l, (W(t, l1, v), b) ' + h)), ¬ pending(t), b → persisted(l1), ∀ pending0, persisted0, l0. ¬ allWritesOKInd(pending0, persisted0, h) ∨ allWritesOKInd(pending0, persisted0, persistDependentReads(l0, h)) ⊦ |
⊦ l ≠ l0 → persistDependentReads(l, (W(t, l0, v), b) ' + h) = (W(t, l0, v), b) ' + persistDependentReads(l, h)
l ≠ l1, allWritesOKInd(pending(t := ¬ b), persisted(l1 := b), h), ¬ allWritesOKInd(pending, persisted, (W(t, l1, v), b) ' + persistDependentReads(l, h)), ¬ pending(t), b → persisted(l1), ∀ pending0, persisted0, l0. ¬ allWritesOKInd(pending0, persisted0, h) ∨ allWritesOKInd(pending0, persisted0, persistDependentReads(l0, h)) ⊦
Used simplifier rules: persistDependentReads-nextwrite: ⊦ persistDependentReads(l, (W(t, l, v), b) ' + h) = (W(t, l, v), b) ' + h; 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 Used terms: v, b, l, l1, t, h
| ⊦ l ≠ l0 → persistDependentReads(l, (W(t, l0, v), b) ' + h) = (W(t, l0, v), b) ' + persistDependentReads(l, h) |
| l ≠ l1, allWritesOKInd(pending(t := ¬ b), persisted(l1 := b), h), ¬ allWritesOKInd(pending, persisted, (W(t, l1, v), b) ' + persistDependentReads(l, h)), ¬ pending(t), b → persisted(l1), ∀ pending0, persisted0, l0. ¬ allWritesOKInd(pending0, persisted0, h) ∨ allWritesOKInd(pending0, persisted0, persistDependentReads(l0, h)) ⊦ |
l ≠ l1, allWritesOKInd(pending(t := ¬ b), persisted(l1 := b), h), ¬ allWritesOKInd(pending(t := ¬ b), persisted(l1 := b), persistDependentReads(l, h)), ¬ pending(t), b → persisted(l1), ∀ pending0, persisted0, l0. ¬ allWritesOKInd(pending0, persisted0, h) ∨ allWritesOKInd(pending0, persisted0, persistDependentReads(l0, h)) ⊦
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
| l ≠ l1, allWritesOKInd(pending(t := ¬ b), persisted(l1 := b), h), ¬ allWritesOKInd(pending(t := ¬ b), persisted(l1 := b), persistDependentReads(l, h)), ¬ pending(t), b → persisted(l1), ∀ pending0, persisted0, l0. ¬ allWritesOKInd(pending0, persisted0, h) ∨ allWritesOKInd(pending0, persisted0, persistDependentReads(l0, h)) ⊦ |
Used terms: pending(t := ¬ b), persisted(l1 := b), l
| allWritesOKInd(pending, persisted, (vpe + h) + h2), ¬ allWritesOKInd(pending, persisted, (vpe + h) + persistDependentReads(l, h2)), ∀ pending, persisted, h2, l. ¬(allWritesOKInd(pending, persisted, h + h2) ∧ ¬ allWritesOKInd(pending, persisted, h + persistDependentReads(l, h2))) ⊦ |
allWritesOKInd(pending, persisted, (vpe ' + h) + h2), ¬ allWritesOKInd(pending, persisted, (vpe ' + h) + persistDependentReads(l, h2)), ∀ pending0, persisted0, h0, l0. ¬ allWritesOKInd(pending0, persisted0, h + h0) ∨ allWritesOKInd(pending0, persisted0, h + persistDependentReads(l0, h0)) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a + x = a ' + x; (s)
| allWritesOKInd(pending, persisted, (vpe ' + h) + h2), ¬ allWritesOKInd(pending, persisted, (vpe ' + h) + persistDependentReads(l, h2)), ∀ pending0, persisted0, h0, l0. ¬ allWritesOKInd(pending0, persisted0, h + h0) ∨ allWritesOKInd(pending0, persisted0, h + persistDependentReads(l0, h0)) ⊦ |
vpe = (e, b), allWritesOKInd(pending, persisted, (vpe ' + h) + h2), ¬ allWritesOKInd(pending, persisted, (vpe ' + h) + persistDependentReads(l, h2)), ∀ pending0, persisted0, h0, l0. ¬ allWritesOKInd(pending0, persisted0, h + h0) ∨ allWritesOKInd(pending0, persisted0, h + persistDependentReads(l0, h0)) ⊦
| vpe = (e, b), allWritesOKInd(pending, persisted, (vpe ' + h) + h2), ¬ allWritesOKInd(pending, persisted, (vpe ' + h) + persistDependentReads(l, h2)), ∀ pending0, persisted0, h0, l0. ¬ allWritesOKInd(pending0, persisted0, h + h0) ∨ allWritesOKInd(pending0, persisted0, h + persistDependentReads(l0, h0)) ⊦ |
allWritesOKInd(pending, persisted, ((e, b) ' + h) + h2), ¬ allWritesOKInd(pending, persisted, ((e, b) ' + h) + persistDependentReads(l, h2)), ∀ pending0, persisted0, h0, l0. ¬ allWritesOKInd(pending0, persisted0, h + h0) ∨ allWritesOKInd(pending0, persisted0, h + persistDependentReads(l0, h0)) ⊦
| allWritesOKInd(pending, persisted, ((e, b) ' + h) + h2), ¬ allWritesOKInd(pending, persisted, ((e, b) ' + h) + persistDependentReads(l, h2)), ∀ pending0, persisted0, h0, l0. ¬ allWritesOKInd(pending0, persisted0, h + h0) ∨ allWritesOKInd(pending0, persisted0, h + persistDependentReads(l0, h0)) ⊦ |
e = R(t, l1, v), allWritesOKInd(pending, persisted, ((e, b) ' + h) + h2), ¬ allWritesOKInd(pending, persisted, ((e, b) ' + h) + persistDependentReads(l, h2)), ∀ pending0, persisted0, h0, l0. ¬ allWritesOKInd(pending0, persisted0, h + h0) ∨ allWritesOKInd(pending0, persisted0, h + persistDependentReads(l0, h0)) ⊦
e = W(t, l1, v), allWritesOKInd(pending, persisted, ((e, b) ' + h) + h2), ¬ allWritesOKInd(pending, persisted, ((e, b) ' + h) + persistDependentReads(l, h2)), ∀ pending0, persisted0, h0, l0. ¬ allWritesOKInd(pending0, persisted0, h + h0) ∨ allWritesOKInd(pending0, persisted0, h + persistDependentReads(l0, h0)) ⊦
Used simplifier rules: RWevent freely generated by R, W;;
| e = R(t, l1, v), allWritesOKInd(pending, persisted, ((e, b) ' + h) + h2), ¬ allWritesOKInd(pending, persisted, ((e, b) ' + h) + persistDependentReads(l, h2)), ∀ pending0, persisted0, h0, l0. ¬ allWritesOKInd(pending0, persisted0, h + h0) ∨ allWritesOKInd(pending0, persisted0, h + persistDependentReads(l0, h0)) ⊦ |
allWritesOKInd(pending, persisted, h + h2), ¬ allWritesOKInd(pending, persisted, h + persistDependentReads(l, h2)), ∀ pending0, persisted0, h0, l0. ¬ allWritesOKInd(pending0, persisted0, h + h0) ∨ allWritesOKInd(pending0, persisted0, h + persistDependentReads(l0, 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, persisted, h + h2), ¬ allWritesOKInd(pending, persisted, h + persistDependentReads(l, h2)), ∀ pending0, persisted0, h0, l0. ¬ allWritesOKInd(pending0, persisted0, h + h0) ∨ allWritesOKInd(pending0, persisted0, h + persistDependentReads(l0, h0)) ⊦ |
Used terms: pending, persisted, h2, l
| e = W(t, l1, v), allWritesOKInd(pending, persisted, ((e, b) ' + h) + h2), ¬ allWritesOKInd(pending, persisted, ((e, b) ' + h) + persistDependentReads(l, h2)), ∀ pending0, persisted0, h0, l0. ¬ allWritesOKInd(pending0, persisted0, h + h0) ∨ allWritesOKInd(pending0, persisted0, h + persistDependentReads(l0, h0)) ⊦ |
allWritesOKInd(pending(t := ¬ b), persisted(l1 := b), h + h2), ¬ allWritesOKInd(pending(t := ¬ b), persisted(l1 := b), h + persistDependentReads(l, h2)), ¬ pending(t), b → persisted(l1), ∀ pending0, persisted0, h0, l0. ¬ allWritesOKInd(pending0, persisted0, h + h0) ∨ allWritesOKInd(pending0, persisted0, h + persistDependentReads(l0, 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
| allWritesOKInd(pending(t := ¬ b), persisted(l1 := b), h + h2), ¬ allWritesOKInd(pending(t := ¬ b), persisted(l1 := b), h + persistDependentReads(l, h2)), ¬ pending(t), b → persisted(l1), ∀ pending0, persisted0, h0, l0. ¬ allWritesOKInd(pending0, persisted0, h + h0) ∨ allWritesOKInd(pending0, persisted0, h + persistDependentReads(l0, h0)) ⊦ |
Used terms: pending(t := ¬ b), persisted(l1 := b), h2, l
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.