| ⊦ allReadsOKInd(mem, persisted, h) → allReadsOKInd(mem, persisted, h + (W(t, l, v), b) ') |
allReadsOKInd(mem, persisted, h), ¬ allReadsOKInd(mem, persisted, h + (W(t, l, v), b) ') ⊦
| allReadsOKInd(mem, persisted, h), ¬ allReadsOKInd(mem, persisted, h + (W(t, l, v), b) ') ⊦ |
hPred([]), ∀ t, l, v, h. hPred(h) → hPred((W(t, l, v), true) ' + h), ∀ t, l, v, h. hPred(h) → hPred((W(t, l, v), false) ' + h), ∀ t, l, v, h. hPred(h) → hPred((R(t, l, v), true) ' + h), ∀ t, l, v, h. hPred(h) → hPred((R(t, l, v), false) ' + h) ⊦ hPred(h)
[] = h, allReadsOKInd(mem, persisted, h), ¬ allReadsOKInd(mem, persisted, h + (W(t, l, v), b) ') ⊦
∀ mem, persisted, h1, t, l, v, b. ¬(h = h1 ∧ allReadsOKInd(mem, persisted, h1) ∧ ¬ allReadsOKInd(mem, persisted, h1 + (W(t, l, v), b) ')) ⊦ ∀ mem, persisted, h1, t0, l0, v0, b. ¬((W(t, l, v), true) ' + h = h1 ∧ allReadsOKInd(mem, persisted, h1) ∧ ¬ allReadsOKInd(mem, persisted, h1 + (W(t0, l0, v0), b) '))
∀ mem, persisted, h1, t, l, v, b. ¬(h = h1 ∧ allReadsOKInd(mem, persisted, h1) ∧ ¬ allReadsOKInd(mem, persisted, h1 + (W(t, l, v), b) ')) ⊦ ∀ mem, persisted, h1, t0, l0, v0, b. ¬((W(t, l, v), false) ' + h = h1 ∧ allReadsOKInd(mem, persisted, h1) ∧ ¬ allReadsOKInd(mem, persisted, h1 + (W(t0, l0, v0), b) '))
∀ mem, persisted, h1, t, l, v, b. ¬(h = h1 ∧ allReadsOKInd(mem, persisted, h1) ∧ ¬ allReadsOKInd(mem, persisted, h1 + (W(t, l, v), b) ')) ⊦ ∀ mem, persisted, h1, t0, l0, v0, b. ¬((R(t, l, v), true) ' + h = h1 ∧ allReadsOKInd(mem, persisted, h1) ∧ ¬ allReadsOKInd(mem, persisted, h1 + (W(t0, l0, v0), b) '))
∀ mem, persisted, h1, t, l, v, b. ¬(h = h1 ∧ allReadsOKInd(mem, persisted, h1) ∧ ¬ allReadsOKInd(mem, persisted, h1 + (W(t, l, v), b) ')) ⊦ ∀ mem, persisted, h1, t0, l0, v0, b. ¬((R(t, l, v), false) ' + h = h1 ∧ allReadsOKInd(mem, persisted, h1) ∧ ¬ allReadsOKInd(mem, persisted, h1 + (W(t0, l0, v0), b) '))
Used terms: h, λ h0. ∀ mem, persisted, h, t, l, v, b. ¬ ( h0 = h ∧ allReadsOKInd(mem, persisted, h) ∧ ¬ allReadsOKInd(mem, persisted, h + (W(t, l, v), b) '))
| hPred([]), ∀ t, l, v, h. hPred(h) → hPred((W(t, l, v), true) ' + h), ∀ t, l, v, h. hPred(h) → hPred((W(t, l, v), false) ' + h), ∀ t, l, v, h. hPred(h) → hPred((R(t, l, v), true) ' + h), ∀ t, l, v, h. hPred(h) → hPred((R(t, l, v), false) ' + h) ⊦ hPred(h) |
| [] = h, allReadsOKInd(mem, persisted, h), ¬ allReadsOKInd(mem, persisted, h + (W(t, l, v), b) ') ⊦ |
Used simplifier rules: allReadsOKInd-base: ⊦ allReadsOKInd(mem, persisted, []); allreadsok-ind-one: ⊦ allReadsOKInd(mem, persisted, (e, b) ') ↔ e.W? ∨ e.R? ∧ e.v = mem(e.l) ∧ (b ↔ persisted(e.l)); ⊦ W(t, l, v).W?; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s)
| ∀ mem, persisted, h1, t, l, v, b. ¬(h = h1 ∧ allReadsOKInd(mem, persisted, h1) ∧ ¬ allReadsOKInd(mem, persisted, h1 + (W(t, l, v), b) ')) ⊦ ∀ mem, persisted, h1, t0, l0, v0, b. ¬((W(t, l, v), true) ' + h = h1 ∧ allReadsOKInd(mem, persisted, h1) ∧ ¬ allReadsOKInd(mem, persisted, h1 + (W(t0, l0, v0), b) ')) |
allReadsOKInd(mem(l := v), persisted(l := true), h), ¬ allReadsOKInd(mem(l := v), persisted(l := true), h + (W(t0, l0, v0), b) '), ∀ mem0, persisted0, t, l1, v1, b0. ¬ allReadsOKInd(mem0, persisted0, h) ∨ allReadsOKInd(mem0, persisted0, h + (W(t, l1, v1), b0) ') ⊦
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), persisted(l := true), h), ¬ allReadsOKInd(mem(l := v), persisted(l := true), h + (W(t0, l0, v0), b) '), ∀ mem0, persisted0, t, l1, v1, b0. ¬ allReadsOKInd(mem0, persisted0, h) ∨ allReadsOKInd(mem0, persisted0, h + (W(t, l1, v1), b0) ') ⊦ |
Used terms: mem(l := v), persisted(l := true), t0, l0, v0, b
| ∀ mem, persisted, h1, t, l, v, b. ¬(h = h1 ∧ allReadsOKInd(mem, persisted, h1) ∧ ¬ allReadsOKInd(mem, persisted, h1 + (W(t, l, v), b) ')) ⊦ ∀ mem, persisted, h1, t0, l0, v0, b. ¬((W(t, l, v), false) ' + h = h1 ∧ allReadsOKInd(mem, persisted, h1) ∧ ¬ allReadsOKInd(mem, persisted, h1 + (W(t0, l0, v0), b) ')) |
allReadsOKInd(mem(l := v), persisted(l := false), h), ¬ allReadsOKInd(mem(l := v), persisted(l := false), h + (W(t0, l0, v0), b) '), ∀ mem0, persisted0, t, l1, v1, b0. ¬ allReadsOKInd(mem0, persisted0, h) ∨ allReadsOKInd(mem0, persisted0, h + (W(t, l1, v1), b0) ') ⊦
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), persisted(l := false), h), ¬ allReadsOKInd(mem(l := v), persisted(l := false), h + (W(t0, l0, v0), b) '), ∀ mem0, persisted0, t, l1, v1, b0. ¬ allReadsOKInd(mem0, persisted0, h) ∨ allReadsOKInd(mem0, persisted0, h + (W(t, l1, v1), b0) ') ⊦ |
Used terms: mem(l := v), persisted(l := false), t0, l0, v0, b
| ∀ mem, persisted, h1, t, l, v, b. ¬(h = h1 ∧ allReadsOKInd(mem, persisted, h1) ∧ ¬ allReadsOKInd(mem, persisted, h1 + (W(t, l, v), b) ')) ⊦ ∀ mem, persisted, h1, t0, l0, v0, b. ¬((R(t, l, v), true) ' + h = h1 ∧ allReadsOKInd(mem, persisted, h1) ∧ ¬ allReadsOKInd(mem, persisted, h1 + (W(t0, l0, v0), b) ')) |
allReadsOKInd(mem, persisted, h), persisted(l), ¬ allReadsOKInd(mem, persisted, h + (W(t0, l0, v0), b) '), ∀ mem0, persisted0, t, l1, v1, b0. ¬ allReadsOKInd(mem0, persisted0, h) ∨ allReadsOKInd(mem0, persisted0, h + (W(t, l1, v1), b0) ') ⊦
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), persisted(l), ¬ allReadsOKInd(mem, persisted, h + (W(t0, l0, v0), b) '), ∀ mem0, persisted0, t, l1, v1, b0. ¬ allReadsOKInd(mem0, persisted0, h) ∨ allReadsOKInd(mem0, persisted0, h + (W(t, l1, v1), b0) ') ⊦ |
Used terms: mem, persisted, t0, l0, v0, b
| ∀ mem, persisted, h1, t, l, v, b. ¬(h = h1 ∧ allReadsOKInd(mem, persisted, h1) ∧ ¬ allReadsOKInd(mem, persisted, h1 + (W(t, l, v), b) ')) ⊦ ∀ mem, persisted, h1, t0, l0, v0, b. ¬((R(t, l, v), false) ' + h = h1 ∧ allReadsOKInd(mem, persisted, h1) ∧ ¬ allReadsOKInd(mem, persisted, h1 + (W(t0, l0, v0), b) ')) |
allReadsOKInd(mem, persisted, h), ¬ allReadsOKInd(mem, persisted, h + (W(t0, l0, v0), b) '), ¬ persisted(l), ∀ mem0, persisted0, t, l1, v1, b0. ¬ allReadsOKInd(mem0, persisted0, h) ∨ allReadsOKInd(mem0, persisted0, h + (W(t, l1, v1), b0) ') ⊦
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), ¬ allReadsOKInd(mem, persisted, h + (W(t0, l0, v0), b) '), ¬ persisted(l), ∀ mem0, persisted0, t, l1, v1, b0. ¬ allReadsOKInd(mem0, persisted0, h) ∨ allReadsOKInd(mem0, persisted0, h + (W(t, l1, v1), b0) ') ⊦ |
Used terms: mem, persisted, t0, l0, v0, 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.