| ⊦ allReadsOKInd(mem, persisted, h1 + (W(t, l, v), false) ' + h2) → allReadsOKInd(mem, persisted, h1 + (W(t, l, v), true) ' + persistDependentReads(l, h2)) |
allReadsOKInd(mem, persisted, h1 + (W(t, l, v), false) ' + h2), ¬ allReadsOKInd(mem, persisted, h1 + (W(t, l, v), true) ' + persistDependentReads(l, h2)) ⊦
| allReadsOKInd(mem, persisted, h1 + (W(t, l, v), false) ' + h2), ¬ allReadsOKInd(mem, persisted, h1 + (W(t, l, v), true) ' + persistDependentReads(l, h2)) ⊦ |
allReadsOKInd(mem, persisted, [] + (W(t, l, v), false) ' + h2), ¬ allReadsOKInd(mem, persisted, [] + (W(t, l, v), true) ' + persistDependentReads(l, h2)) ⊦
allReadsOKInd(mem, persisted, (vpe + h) + (W(t, l, v), false) ' + h2), ¬ allReadsOKInd(mem, persisted, (vpe + h) + (W(t, l, v), true) ' + persistDependentReads(l, h2)), ∀ mem, persisted, t, l, v, h2. ¬ ( allReadsOKInd(mem, persisted, h + (W(t, l, v), false) ' + h2) ∧ ¬ allReadsOKInd(mem, persisted, h + (W(t, l, v), true) ' + persistDependentReads(l, h2))) ⊦
Used simplifier rules: List('a) freely generated by [], +;;
| allReadsOKInd(mem, persisted, [] + (W(t, l, v), false) ' + h2), ¬ allReadsOKInd(mem, persisted, [] + (W(t, l, v), true) ' + persistDependentReads(l, h2)) ⊦ |
allReadsOKInd(mem(l := v), persisted(l := false), h2), ¬ allReadsOKInd(mem(l := v), persisted(l := true), persistDependentReads(l, h2)) ⊦
Used simplifier rules: allReadsOKInd-recW: ⊦ allReadsOKInd(mem, persisted, (W(t, l, v), b) ' + h) ↔ allReadsOKInd(mem(l := v), persisted(l := b), h); a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s)
| allReadsOKInd(mem(l := v), persisted(l := false), h2), ¬ allReadsOKInd(mem(l := v), persisted(l := true), persistDependentReads(l, h2)) ⊦ |
allReadsOKInd(mem(l := v), persisted(l := false), vpe + h), ¬ allReadsOKInd(mem(l := v), persisted(l := true), persistDependentReads(l, vpe + h)), ∀ mem, l, v, persisted. ¬(allReadsOKInd(mem(l := v), persisted(l := false), h) ∧ ¬ allReadsOKInd(mem(l := v), persisted(l := true), persistDependentReads(l, h))) ⊦
Used simplifier rules: persistDependentReads-base: ⊦ persistDependentReads(l, []) = []; allReadsOKInd-base: ⊦ allReadsOKInd(mem, persisted, []); List('a) freely generated by [], +;;
| allReadsOKInd(mem(l := v), persisted(l := false), vpe + h), ¬ allReadsOKInd(mem(l := v), persisted(l := true), persistDependentReads(l, vpe + h)), ∀ mem, l, v, persisted. ¬(allReadsOKInd(mem(l := v), persisted(l := false), h) ∧ ¬ allReadsOKInd(mem(l := v), persisted(l := true), persistDependentReads(l, h))) ⊦ |
allReadsOKInd(mem(l := v), persisted(l := false), vpe ' + h), ¬ allReadsOKInd(mem(l := v), persisted(l := true), persistDependentReads(l, vpe ' + h)), ∀ mem0, l0, v0, persisted0. ¬ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := false), h) ∨ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := true), persistDependentReads(l0, h)) ⊦
Used simplifier rules: ⊦ a + x = a ' + x; (s)
| allReadsOKInd(mem(l := v), persisted(l := false), vpe ' + h), ¬ allReadsOKInd(mem(l := v), persisted(l := true), persistDependentReads(l, vpe ' + h)), ∀ mem0, l0, v0, persisted0. ¬ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := false), h) ∨ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := true), persistDependentReads(l0, h)) ⊦ |
vpe = (e, b), allReadsOKInd(mem(l := v), persisted(l := false), vpe ' + h), ¬ allReadsOKInd(mem(l := v), persisted(l := true), persistDependentReads(l, vpe ' + h)), ∀ mem0, l0, v0, persisted0. ¬ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := false), h) ∨ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := true), persistDependentReads(l0, h)) ⊦
| vpe = (e, b), allReadsOKInd(mem(l := v), persisted(l := false), vpe ' + h), ¬ allReadsOKInd(mem(l := v), persisted(l := true), persistDependentReads(l, vpe ' + h)), ∀ mem0, l0, v0, persisted0. ¬ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := false), h) ∨ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := true), persistDependentReads(l0, h)) ⊦ |
allReadsOKInd(mem(l := v), persisted(l := false), (e, b) ' + h), ¬ allReadsOKInd(mem(l := v), persisted(l := true), persistDependentReads(l, (e, b) ' + h)), ∀ mem0, l0, v0, persisted0. ¬ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := false), h) ∨ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := true), persistDependentReads(l0, h)) ⊦
| allReadsOKInd(mem(l := v), persisted(l := false), (e, b) ' + h), ¬ allReadsOKInd(mem(l := v), persisted(l := true), persistDependentReads(l, (e, b) ' + h)), ∀ mem0, l0, v0, persisted0. ¬ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := false), h) ∨ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := true), persistDependentReads(l0, h)) ⊦ |
e = R(t, l1, v1), allReadsOKInd(mem(l := v), persisted(l := false), (e, b) ' + h), ¬ allReadsOKInd(mem(l := v), persisted(l := true), persistDependentReads(l, (e, b) ' + h)), ∀ mem0, l0, v0, persisted0. ¬ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := false), h) ∨ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := true), persistDependentReads(l0, h)) ⊦
e = W(t, l1, v1), allReadsOKInd(mem(l := v), persisted(l := false), (e, b) ' + h), ¬ allReadsOKInd(mem(l := v), persisted(l := true), persistDependentReads(l, (e, b) ' + h)), ∀ mem0, l0, v0, persisted0. ¬ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := false), h) ∨ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := true), persistDependentReads(l0, h)) ⊦
Used simplifier rules: RWevent freely generated by R, W;;
| e = R(t, l1, v1), allReadsOKInd(mem(l := v), persisted(l := false), (e, b) ' + h), ¬ allReadsOKInd(mem(l := v), persisted(l := true), persistDependentReads(l, (e, b) ' + h)), ∀ mem0, l0, v0, persisted0. ¬ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := false), h) ∨ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := true), persistDependentReads(l0, h)) ⊦ |
allReadsOKInd(mem(l := v), persisted(l := false), h), ¬ allReadsOKInd(mem(l := v), persisted(l := true), persistDependentReads(l, (R(t, l1, (l = l1 ⊃ v;mem(l1))), l ≠ l1 ∧ persisted(l1)) ' + h)), ∀ mem0, l0, v0, persisted0. ¬ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := false), h) ∨ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := true), persistDependentReads(l0, h)) ⊦
Used simplifier rules: allReadsOKInd-recR: ⊦ allReadsOKInd(mem, persisted, (R(t, l, v), b) ' + h) ↔ v = mem(l) ∧ (b ↔ persisted(l)) ∧ allReadsOKInd(mem, persisted, h); a: ⊦ (x + y) + z = x + y + z; from specification list
| allReadsOKInd(mem(l := v), persisted(l := false), h), ¬ allReadsOKInd(mem(l := v), persisted(l := true), persistDependentReads(l, (R(t, l1, (l = l1 ⊃ v;mem(l1))), l ≠ l1 ∧ persisted(l1)) ' + h)), ∀ mem0, l0, v0, persisted0. ¬ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := false), h) ∨ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := true), persistDependentReads(l0, h)) ⊦ |
⊦ l ≠ l0 → persistDependentReads(l, (R(t, l0, v), b) ' + h) = (R(t, l0, v), b) + persistDependentReads(l, h)
l = l1, allReadsOKInd(mem(l := v), persisted(l := false), h), ¬ allReadsOKInd(mem(l := v), persisted(l := true), persistDependentReads(l, (R(t, l1, (l = l1 ⊃ v;mem(l1))), l ≠ l1 ∧ persisted(l1)) ' + h)), ∀ mem0, l0, v0, persisted0. ¬ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := false), h) ∨ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := true), persistDependentReads(l0, h)) ⊦
l ≠ l1, allReadsOKInd(mem(l := v), persisted(l := false), h), ¬ allReadsOKInd(mem(l := v), persisted(l := true), (R(t, l1, (l = l1 ⊃ v;mem(l1))), l ≠ l1 ∧ persisted(l1)) + persistDependentReads(l, h)), ∀ mem0, l0, v0, persisted0. ¬ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := false), h) ∨ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := true), persistDependentReads(l0, h)) ⊦
Used terms: (l = l1 ⊃ v;mem(l1)), l ≠ l1 ∧ persisted(l1), l, l1, t, h
| ⊦ l ≠ l0 → persistDependentReads(l, (R(t, l0, v), b) ' + h) = (R(t, l0, v), b) + persistDependentReads(l, h) |
| l = l1, allReadsOKInd(mem(l := v), persisted(l := false), h), ¬ allReadsOKInd(mem(l := v), persisted(l := true), persistDependentReads(l, (R(t, l1, (l = l1 ⊃ v;mem(l1))), l ≠ l1 ∧ persisted(l1)) ' + h)), ∀ mem0, l0, v0, persisted0. ¬ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := false), h) ∨ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := true), persistDependentReads(l0, h)) ⊦ |
allReadsOKInd(mem(l1 := v), persisted(l1 := false), h), ¬ allReadsOKInd(mem(l1 := v), persisted(l1 := true), persistDependentReads(l1, h)), ∀ mem0, l0, v0, persisted0. ¬ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := false), h) ∨ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := true), persistDependentReads(l0, h)) ⊦
Used simplifier rules: persistDependentReads-read: ⊦ persistDependentReads(l, (R(t, l, v), b) ' + h) = (R(t, l, v), true) ' + persistDependentReads(l, h); allReadsOKInd-recR: ⊦ allReadsOKInd(mem, persisted, (R(t, l, v), b) ' + h) ↔ v = mem(l) ∧ (b ↔ persisted(l)) ∧ allReadsOKInd(mem, persisted, h); a: ⊦ (x + y) + z = x + y + z; from specification list
| allReadsOKInd(mem(l1 := v), persisted(l1 := false), h), ¬ allReadsOKInd(mem(l1 := v), persisted(l1 := true), persistDependentReads(l1, h)), ∀ mem0, l0, v0, persisted0. ¬ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := false), h) ∨ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := true), persistDependentReads(l0, h)) ⊦ |
Used terms: mem, l1, v, persisted
| l ≠ l1, allReadsOKInd(mem(l := v), persisted(l := false), h), ¬ allReadsOKInd(mem(l := v), persisted(l := true), (R(t, l1, (l = l1 ⊃ v;mem(l1))), l ≠ l1 ∧ persisted(l1)) + persistDependentReads(l, h)), ∀ mem0, l0, v0, persisted0. ¬ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := false), h) ∨ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := true), persistDependentReads(l0, h)) ⊦ |
l ≠ l1, allReadsOKInd(mem(l := v), persisted(l := false), h), ¬ allReadsOKInd(mem(l := v), persisted(l := true), persistDependentReads(l, h)), ∀ mem0, l0, v0, persisted0. ¬ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := false), h) ∨ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := true), persistDependentReads(l0, h)) ⊦
Used simplifier rules: allReadsOKInd-recR: ⊦ allReadsOKInd(mem, persisted, (R(t, l, v), b) ' + h) ↔ v = mem(l) ∧ (b ↔ persisted(l)) ∧ allReadsOKInd(mem, persisted, h); a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a + x = a ' + x; (s)
| l ≠ l1, allReadsOKInd(mem(l := v), persisted(l := false), h), ¬ allReadsOKInd(mem(l := v), persisted(l := true), persistDependentReads(l, h)), ∀ mem0, l0, v0, persisted0. ¬ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := false), h) ∨ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := true), persistDependentReads(l0, h)) ⊦ |
Used terms: mem, l, v, persisted
| e = W(t, l1, v1), allReadsOKInd(mem(l := v), persisted(l := false), (e, b) ' + h), ¬ allReadsOKInd(mem(l := v), persisted(l := true), persistDependentReads(l, (e, b) ' + h)), ∀ mem0, l0, v0, persisted0. ¬ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := false), h) ∨ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := true), persistDependentReads(l0, h)) ⊦ |
allReadsOKInd(mem(l := v)(l1 := v1), persisted(l := false)(l1 := b), h), ¬ allReadsOKInd(mem(l := v), persisted(l := true), persistDependentReads(l, (W(t, l1, v1), b) ' + h)), ∀ mem0, l0, v0, persisted0. ¬ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := false), h) ∨ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := true), persistDependentReads(l0, h)) ⊦
Used simplifier rules: allReadsOKInd-recW: ⊦ allReadsOKInd(mem, persisted, (W(t, l, v), b) ' + h) ↔ allReadsOKInd(mem(l := v), persisted(l := b), h); a: ⊦ (x + y) + z = x + y + z; from specification list
| allReadsOKInd(mem(l := v)(l1 := v1), persisted(l := false)(l1 := b), h), ¬ allReadsOKInd(mem(l := v), persisted(l := true), persistDependentReads(l, (W(t, l1, v1), b) ' + h)), ∀ mem0, l0, v0, persisted0. ¬ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := false), h) ∨ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := true), persistDependentReads(l0, h)) ⊦ |
⊦ l ≠ l0 → persistDependentReads(l, (W(t, l0, v), b) ' + h) = (W(t, l0, v), b) ' + persistDependentReads(l, h)
l ≠ l1, allReadsOKInd(mem(l := v)(l1 := v1), persisted(l := false)(l1 := b), h), ¬ allReadsOKInd(mem(l := v), persisted(l := true), (W(t, l1, v1), b) ' + persistDependentReads(l, h)), ∀ mem0, l0, v0, persisted0. ¬ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := false), h) ∨ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := true), persistDependentReads(l0, h)) ⊦
Used simplifier rules: persistDependentReads-nextwrite: ⊦ persistDependentReads(l, (W(t, l, v), b) ' + h) = (W(t, l, v), b) ' + h; allReadsOKInd-recW: ⊦ allReadsOKInd(mem, persisted, (W(t, l, v), b) ' + h) ↔ allReadsOKInd(mem(l := v), persisted(l := b), h); mem-update-same: ⊦ mem(l := v0)(l := v) = mem(l := v); persisted-update-same: ⊦ persisted(l := b0)(l := b) = persisted(l := b); a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: v1, 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, allReadsOKInd(mem(l := v)(l1 := v1), persisted(l := false)(l1 := b), h), ¬ allReadsOKInd(mem(l := v), persisted(l := true), (W(t, l1, v1), b) ' + persistDependentReads(l, h)), ∀ mem0, l0, v0, persisted0. ¬ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := false), h) ∨ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := true), persistDependentReads(l0, h)) ⊦ |
l ≠ l1, allReadsOKInd(mem(l := v)(l1 := v1), persisted(l := false)(l1 := b), h), ¬ allReadsOKInd(mem(l := v)(l1 := v1), persisted(l := true)(l1 := b), persistDependentReads(l, h)), ∀ mem0, l0, v0, persisted0. ¬ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := false), h) ∨ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := true), persistDependentReads(l0, h)) ⊦
Used simplifier rules: allReadsOKInd-recW: ⊦ allReadsOKInd(mem, persisted, (W(t, l, v), b) ' + h) ↔ allReadsOKInd(mem(l := v), persisted(l := b), h); a: ⊦ (x + y) + z = x + y + z; from specification list
| l ≠ l1, allReadsOKInd(mem(l := v)(l1 := v1), persisted(l := false)(l1 := b), h), ¬ allReadsOKInd(mem(l := v)(l1 := v1), persisted(l := true)(l1 := b), persistDependentReads(l, h)), ∀ mem0, l0, v0, persisted0. ¬ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := false), h) ∨ allReadsOKInd(mem0(l0 := v0), persisted0(l0 := true), persistDependentReads(l0, h)) ⊦ |
l ≠ l1, allReadsOKInd(mem(l := v)(l1 := v1), persisted(l := false)(l1 := b), h), ¬ allReadsOKInd(mem(l := v)(l1 := v1), persisted(l := true)(l1 := b), persistDependentReads(l, h)), ¬ allReadsOKInd(mem(l1 := v1)(l := v), persisted(l1 := b)(l := false), h) ∨ allReadsOKInd(mem(l1 := v1)(l := v), persisted(l1 := b)(l := true), persistDependentReads(l, h)) ⊦
Used terms: mem(l1 := v1), l, v, persisted(l1 := b)
| l ≠ l1, allReadsOKInd(mem(l := v)(l1 := v1), persisted(l := false)(l1 := b), h), ¬ allReadsOKInd(mem(l := v)(l1 := v1), persisted(l := true)(l1 := b), persistDependentReads(l, h)), ¬ allReadsOKInd(mem(l1 := v1)(l := v), persisted(l1 := b)(l := false), h) ∨ allReadsOKInd(mem(l1 := v1)(l := v), persisted(l1 := b)(l := true), persistDependentReads(l, h)) ⊦ |
l ≠ l1, allReadsOKInd(mem(l := v)(l1 := v1), persisted(l := false)(l1 := b), h), ¬ allReadsOKInd(mem(l1 := v1)(l := v), persisted(l1 := b)(l := false), h), ¬ allReadsOKInd(mem(l := v)(l1 := v1), persisted(l := true)(l1 := b), persistDependentReads(l, h)) ⊦
l ≠ l1, allReadsOKInd(mem(l := v)(l1 := v1), persisted(l := false)(l1 := b), h), allReadsOKInd(mem(l1 := v1)(l := v), persisted(l1 := b)(l := true), persistDependentReads(l, h)), ¬ allReadsOKInd(mem(l := v)(l1 := v1), persisted(l := true)(l1 := b), persistDependentReads(l, h)) ⊦
| l ≠ l1, allReadsOKInd(mem(l := v)(l1 := v1), persisted(l := false)(l1 := b), h), ¬ allReadsOKInd(mem(l1 := v1)(l := v), persisted(l1 := b)(l := false), h), ¬ allReadsOKInd(mem(l := v)(l1 := v1), persisted(l := true)(l1 := b), persistDependentReads(l, h)) ⊦ |
⊦ l0 ≠ l1 → persisted(l0 := b0)(l1 := b1) = persisted(l1 := b1)(l0 := b0)
l ≠ l1, allReadsOKInd(mem(l := v)(l1 := v1), persisted(l := false)(l1 := b), h), ¬ allReadsOKInd(mem(l1 := v1)(l := v), persisted(l := false)(l1 := b), h), ¬ allReadsOKInd(mem(l := v)(l1 := v1), persisted(l := true)(l1 := b), persistDependentReads(l, h)) ⊦
Used terms: persisted, false, l, b, l1
| ⊦ l0 ≠ l1 → persisted(l0 := b0)(l1 := b1) = persisted(l1 := b1)(l0 := b0) |
| l ≠ l1, allReadsOKInd(mem(l := v)(l1 := v1), persisted(l := false)(l1 := b), h), ¬ allReadsOKInd(mem(l1 := v1)(l := v), persisted(l := false)(l1 := b), h), ¬ allReadsOKInd(mem(l := v)(l1 := v1), persisted(l := true)(l1 := b), persistDependentReads(l, h)) ⊦ |
⊦ l0 ≠ l1 → mem(l0 := v0)(l1 := v1) = mem(l1 := v1)(l0 := v0)
Used terms: l, mem, v, l1, v1
| ⊦ l0 ≠ l1 → mem(l0 := v0)(l1 := v1) = mem(l1 := v1)(l0 := v0) |
| l ≠ l1, allReadsOKInd(mem(l := v)(l1 := v1), persisted(l := false)(l1 := b), h), allReadsOKInd(mem(l1 := v1)(l := v), persisted(l1 := b)(l := true), persistDependentReads(l, h)), ¬ allReadsOKInd(mem(l := v)(l1 := v1), persisted(l := true)(l1 := b), persistDependentReads(l, h)) ⊦ |
⊦ l0 ≠ l1 → persisted(l0 := b0)(l1 := b1) = persisted(l1 := b1)(l0 := b0)
l ≠ l1, allReadsOKInd(mem(l1 := v1)(l := v), persisted(l := true)(l1 := b), persistDependentReads(l, h)), allReadsOKInd(mem(l := v)(l1 := v1), persisted(l := false)(l1 := b), h), ¬ allReadsOKInd(mem(l := v)(l1 := v1), persisted(l := true)(l1 := b), persistDependentReads(l, h)) ⊦
Used terms: persisted, true, l, b, l1
| ⊦ l0 ≠ l1 → persisted(l0 := b0)(l1 := b1) = persisted(l1 := b1)(l0 := b0) |
| l ≠ l1, allReadsOKInd(mem(l1 := v1)(l := v), persisted(l := true)(l1 := b), persistDependentReads(l, h)), allReadsOKInd(mem(l := v)(l1 := v1), persisted(l := false)(l1 := b), h), ¬ allReadsOKInd(mem(l := v)(l1 := v1), persisted(l := true)(l1 := b), persistDependentReads(l, h)) ⊦ |
⊦ l0 ≠ l1 → mem(l0 := v0)(l1 := v1) = mem(l1 := v1)(l0 := v0)
Used terms: l, mem, v, l1, v1
| ⊦ l0 ≠ l1 → mem(l0 := v0)(l1 := v1) = mem(l1 := v1)(l0 := v0) |
| allReadsOKInd(mem, persisted, (vpe + h) + (W(t, l, v), false) ' + h2), ¬ allReadsOKInd(mem, persisted, (vpe + h) + (W(t, l, v), true) ' + persistDependentReads(l, h2)), ∀ mem, persisted, t, l, v, h2. ¬ ( allReadsOKInd(mem, persisted, h + (W(t, l, v), false) ' + h2) ∧ ¬ allReadsOKInd(mem, persisted, h + (W(t, l, v), true) ' + persistDependentReads(l, h2))) ⊦ |
allReadsOKInd(mem, persisted, (vpe ' + h) + (W(t, l, v), false) ' + h2), ¬ allReadsOKInd(mem, persisted, (vpe ' + h) + (W(t, l, v), true) ' + persistDependentReads(l, h2)), ∀ mem0, persisted0, t0, l0, v0, h0. ¬ allReadsOKInd(mem0, persisted0, h + (W(t0, l0, v0), false) ' + h0) ∨ allReadsOKInd(mem0, persisted0, h + (W(t0, l0, v0), true) ' + persistDependentReads(l0, h0)) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a + x = a ' + x; (s)
| allReadsOKInd(mem, persisted, (vpe ' + h) + (W(t, l, v), false) ' + h2), ¬ allReadsOKInd(mem, persisted, (vpe ' + h) + (W(t, l, v), true) ' + persistDependentReads(l, h2)), ∀ mem0, persisted0, t0, l0, v0, h0. ¬ allReadsOKInd(mem0, persisted0, h + (W(t0, l0, v0), false) ' + h0) ∨ allReadsOKInd(mem0, persisted0, h + (W(t0, l0, v0), true) ' + persistDependentReads(l0, h0)) ⊦ |
vpe = (e, b), allReadsOKInd(mem, persisted, (vpe ' + h) + (W(t, l, v), false) ' + h2), ¬ allReadsOKInd(mem, persisted, (vpe ' + h) + (W(t, l, v), true) ' + persistDependentReads(l, h2)), ∀ mem0, persisted0, t0, l0, v0, h0. ¬ allReadsOKInd(mem0, persisted0, h + (W(t0, l0, v0), false) ' + h0) ∨ allReadsOKInd(mem0, persisted0, h + (W(t0, l0, v0), true) ' + persistDependentReads(l0, h0)) ⊦
| vpe = (e, b), allReadsOKInd(mem, persisted, (vpe ' + h) + (W(t, l, v), false) ' + h2), ¬ allReadsOKInd(mem, persisted, (vpe ' + h) + (W(t, l, v), true) ' + persistDependentReads(l, h2)), ∀ mem0, persisted0, t0, l0, v0, h0. ¬ allReadsOKInd(mem0, persisted0, h + (W(t0, l0, v0), false) ' + h0) ∨ allReadsOKInd(mem0, persisted0, h + (W(t0, l0, v0), true) ' + persistDependentReads(l0, h0)) ⊦ |
allReadsOKInd(mem, persisted, ((e, b) ' + h) + (W(t, l, v), false) ' + h2), ¬ allReadsOKInd(mem, persisted, ((e, b) ' + h) + (W(t, l, v), true) ' + persistDependentReads(l, h2)), ∀ mem0, persisted0, t0, l0, v0, h0. ¬ allReadsOKInd(mem0, persisted0, h + (W(t0, l0, v0), false) ' + h0) ∨ allReadsOKInd(mem0, persisted0, h + (W(t0, l0, v0), true) ' + persistDependentReads(l0, h0)) ⊦
| allReadsOKInd(mem, persisted, ((e, b) ' + h) + (W(t, l, v), false) ' + h2), ¬ allReadsOKInd(mem, persisted, ((e, b) ' + h) + (W(t, l, v), true) ' + persistDependentReads(l, h2)), ∀ mem0, persisted0, t0, l0, v0, h0. ¬ allReadsOKInd(mem0, persisted0, h + (W(t0, l0, v0), false) ' + h0) ∨ allReadsOKInd(mem0, persisted0, h + (W(t0, l0, v0), true) ' + persistDependentReads(l0, h0)) ⊦ |
e = R(t1, l1, v1), allReadsOKInd(mem, persisted, ((e, b) ' + h) + (W(t, l, v), false) ' + h2), ¬ allReadsOKInd(mem, persisted, ((e, b) ' + h) + (W(t, l, v), true) ' + persistDependentReads(l, h2)), ∀ mem0, persisted0, t0, l0, v0, h0. ¬ allReadsOKInd(mem0, persisted0, h + (W(t0, l0, v0), false) ' + h0) ∨ allReadsOKInd(mem0, persisted0, h + (W(t0, l0, v0), true) ' + persistDependentReads(l0, h0)) ⊦
e = W(t1, l1, v1), allReadsOKInd(mem, persisted, ((e, b) ' + h) + (W(t, l, v), false) ' + h2), ¬ allReadsOKInd(mem, persisted, ((e, b) ' + h) + (W(t, l, v), true) ' + persistDependentReads(l, h2)), ∀ mem0, persisted0, t0, l0, v0, h0. ¬ allReadsOKInd(mem0, persisted0, h + (W(t0, l0, v0), false) ' + h0) ∨ allReadsOKInd(mem0, persisted0, h + (W(t0, l0, v0), true) ' + persistDependentReads(l0, h0)) ⊦
Used simplifier rules: RWevent freely generated by R, W;;
| e = R(t1, l1, v1), allReadsOKInd(mem, persisted, ((e, b) ' + h) + (W(t, l, v), false) ' + h2), ¬ allReadsOKInd(mem, persisted, ((e, b) ' + h) + (W(t, l, v), true) ' + persistDependentReads(l, h2)), ∀ mem0, persisted0, t0, l0, v0, h0. ¬ allReadsOKInd(mem0, persisted0, h + (W(t0, l0, v0), false) ' + h0) ∨ allReadsOKInd(mem0, persisted0, h + (W(t0, l0, v0), true) ' + persistDependentReads(l0, h0)) ⊦ |
allReadsOKInd(mem, persisted, h + (W(t, l, v), false) ' + h2), ¬ allReadsOKInd(mem, persisted, h + (W(t, l, v), true) ' + persistDependentReads(l, h2)), ∀ mem0, persisted0, t0, l0, v0, h0. ¬ allReadsOKInd(mem0, persisted0, h + (W(t0, l0, v0), false) ' + h0) ∨ allReadsOKInd(mem0, persisted0, h + (W(t0, l0, v0), true) ' + persistDependentReads(l0, h0)) ⊦
Used simplifier rules: allReadsOKInd-recR: ⊦ allReadsOKInd(mem, persisted, (R(t, l, v), b) ' + h) ↔ v = mem(l) ∧ (b ↔ persisted(l)) ∧ allReadsOKInd(mem, persisted, h); a: ⊦ (x + y) + z = x + y + z; from specification list
| allReadsOKInd(mem, persisted, h + (W(t, l, v), false) ' + h2), ¬ allReadsOKInd(mem, persisted, h + (W(t, l, v), true) ' + persistDependentReads(l, h2)), ∀ mem0, persisted0, t0, l0, v0, h0. ¬ allReadsOKInd(mem0, persisted0, h + (W(t0, l0, v0), false) ' + h0) ∨ allReadsOKInd(mem0, persisted0, h + (W(t0, l0, v0), true) ' + persistDependentReads(l0, h0)) ⊦ |
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: mem, persisted, t, l, v, h2
| e = W(t1, l1, v1), allReadsOKInd(mem, persisted, ((e, b) ' + h) + (W(t, l, v), false) ' + h2), ¬ allReadsOKInd(mem, persisted, ((e, b) ' + h) + (W(t, l, v), true) ' + persistDependentReads(l, h2)), ∀ mem0, persisted0, t0, l0, v0, h0. ¬ allReadsOKInd(mem0, persisted0, h + (W(t0, l0, v0), false) ' + h0) ∨ allReadsOKInd(mem0, persisted0, h + (W(t0, l0, v0), true) ' + persistDependentReads(l0, h0)) ⊦ |
allReadsOKInd(mem(l1 := v1), persisted(l1 := b), h + (W(t, l, v), false) ' + h2), ¬ allReadsOKInd(mem(l1 := v1), persisted(l1 := b), h + (W(t, l, v), true) ' + persistDependentReads(l, h2)), ∀ mem0, persisted0, t0, l0, v0, h0. ¬ allReadsOKInd(mem0, persisted0, h + (W(t0, l0, v0), false) ' + h0) ∨ allReadsOKInd(mem0, persisted0, h + (W(t0, l0, v0), true) ' + persistDependentReads(l0, h0)) ⊦
Used simplifier rules: allReadsOKInd-recW: ⊦ allReadsOKInd(mem, persisted, (W(t, l, v), b) ' + h) ↔ allReadsOKInd(mem(l := v), persisted(l := b), h); a: ⊦ (x + y) + z = x + y + z; from specification list
| allReadsOKInd(mem(l1 := v1), persisted(l1 := b), h + (W(t, l, v), false) ' + h2), ¬ allReadsOKInd(mem(l1 := v1), persisted(l1 := b), h + (W(t, l, v), true) ' + persistDependentReads(l, h2)), ∀ mem0, persisted0, t0, l0, v0, h0. ¬ allReadsOKInd(mem0, persisted0, h + (W(t0, l0, v0), false) ' + h0) ∨ allReadsOKInd(mem0, persisted0, h + (W(t0, l0, v0), true) ' + persistDependentReads(l0, h0)) ⊦ |
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: mem(l1 := v1), persisted(l1 := b), t, l, v, h2
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.