| ⊦ persistDependentReads(l0, h) |W = h |W |
persistDependentReads(l0, h) |W ≠ h |W ⊦
| persistDependentReads(l0, h) |W ≠ h |W ⊦ |
persistDependentReads(l0, h).filter(λ vpe. vpe._1.W?) ≠ h.filter(λ vpe. vpe._1.W?) ⊦
Used simplifier rules: restrict-W: ⊦ h |W = h.filter(λ vpe. vpe._1.W?);
| persistDependentReads(l0, h).filter(λ vpe. vpe._1.W?) ≠ h.filter(λ vpe. vpe._1.W?) ⊦ |
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, persistDependentReads(l0, h).filter(λ vpe. vpe._1.W?) ≠ h.filter(λ vpe. vpe._1.W?) ⊦
∀ l0, h1. ¬(h = h1 ∧ persistDependentReads(l0, h1).filter(λ vpe. vpe._1.W?) ≠ h1.filter(λ vpe. vpe._1.W?)) ⊦ ∀ l0, h1. ¬((W(t, l, v), true) ' + h = h1 ∧ persistDependentReads(l0, h1).filter(λ vpe. vpe._1.W?) ≠ h1.filter(λ vpe. vpe._1.W?))
∀ l0, h1. ¬(h = h1 ∧ persistDependentReads(l0, h1).filter(λ vpe. vpe._1.W?) ≠ h1.filter(λ vpe. vpe._1.W?)) ⊦ ∀ l0, h1. ¬((W(t, l, v), false) ' + h = h1 ∧ persistDependentReads(l0, h1).filter(λ vpe. vpe._1.W?) ≠ h1.filter(λ vpe. vpe._1.W?))
∀ l0, h1. ¬(h = h1 ∧ persistDependentReads(l0, h1).filter(λ vpe. vpe._1.W?) ≠ h1.filter(λ vpe. vpe._1.W?)) ⊦ ∀ l0, h1. ¬((R(t, l, v), true) ' + h = h1 ∧ persistDependentReads(l0, h1).filter(λ vpe. vpe._1.W?) ≠ h1.filter(λ vpe. vpe._1.W?))
∀ l0, h1. ¬(h = h1 ∧ persistDependentReads(l0, h1).filter(λ vpe. vpe._1.W?) ≠ h1.filter(λ vpe. vpe._1.W?)) ⊦ ∀ l0, h1. ¬((R(t, l, v), false) ' + h = h1 ∧ persistDependentReads(l0, h1).filter(λ vpe. vpe._1.W?) ≠ h1.filter(λ vpe. vpe._1.W?))
Used terms: h, λ h0. ∀ l0, h. ¬ ( h0 = h ∧ persistDependentReads(l0, h).filter(λ vpe. vpe._1.W?) ≠ h.filter(λ vpe. vpe._1.W?))
| 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, persistDependentReads(l0, h).filter(λ vpe. vpe._1.W?) ≠ h.filter(λ vpe. vpe._1.W?) ⊦ |
Used simplifier rules: persistDependentReads-base: ⊦ persistDependentReads(l, []) = []; ⊦ [].filter(p) = []; (s)
| ∀ l0, h1. ¬(h = h1 ∧ persistDependentReads(l0, h1).filter(λ vpe. vpe._1.W?) ≠ h1.filter(λ vpe. vpe._1.W?)) ⊦ ∀ l0, h1. ¬((W(t, l, v), true) ' + h = h1 ∧ persistDependentReads(l0, h1).filter(λ vpe. vpe._1.W?) ≠ h1.filter(λ vpe. vpe._1.W?)) |
persistDependentReads(l0, (W(t, l, v), true) ' + h).filter(λ vpe. vpe._1.W?) ≠ (W(t, l, v), true) ' + h.filter(λ vpe. vpe._1.W?), ∀ l1. persistDependentReads(l1, h).filter(λ vpe. vpe._1.W?) = h.filter(λ vpe. vpe._1.W?) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ W(t, l, v).W?; (s) ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s)
| persistDependentReads(l0, (W(t, l, v), true) ' + h).filter(λ vpe. vpe._1.W?) ≠ (W(t, l, v), true) ' + h.filter(λ vpe. vpe._1.W?), ∀ l1. persistDependentReads(l1, h).filter(λ vpe. vpe._1.W?) = h.filter(λ vpe. vpe._1.W?) ⊦ |
⊦ l ≠ l0 → persistDependentReads(l, (W(t, l0, v), b) ' + h) = (W(t, l0, v), b) ' + persistDependentReads(l, h)
((W(t, l, v), true) ' + persistDependentReads(l0, h)).filter(λ vpe. vpe._1.W?) ≠ (W(t, l, v), true) ' + h.filter(λ vpe. vpe._1.W?), l0 ≠ l, ∀ l1. persistDependentReads(l1, h).filter(λ vpe. vpe._1.W?) = h.filter(λ vpe. vpe._1.W?) ⊦
Used simplifier rules: persistDependentReads-nextwrite: ⊦ persistDependentReads(l, (W(t, l, v), b) ' + h) = (W(t, l, v), b) ' + h; ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s) ⊦ W(t, l, v).W?; (s) ⊦ # x = # z → (x + y = z + y0 ↔ x = z ∧ y = y0); (ws) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: v, true, l0, l, t, h
| ⊦ l ≠ l0 → persistDependentReads(l, (W(t, l0, v), b) ' + h) = (W(t, l0, v), b) ' + persistDependentReads(l, h) |
| ((W(t, l, v), true) ' + persistDependentReads(l0, h)).filter(λ vpe. vpe._1.W?) ≠ (W(t, l, v), true) ' + h.filter(λ vpe. vpe._1.W?), l0 ≠ l, ∀ l1. persistDependentReads(l1, h).filter(λ vpe. vpe._1.W?) = h.filter(λ vpe. vpe._1.W?) ⊦ |
persistDependentReads(l0, h).filter(λ vpe. vpe._1.W?) ≠ h.filter(λ vpe. vpe._1.W?), l0 ≠ l, ∀ l1. persistDependentReads(l1, h).filter(λ vpe. vpe._1.W?) = h.filter(λ vpe. vpe._1.W?) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ # x = # z → (x + y = z + y0 ↔ x = z ∧ y = y0); (ws) ⊦ W(t, l, v).W?; (s) ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s)
| persistDependentReads(l0, h).filter(λ vpe. vpe._1.W?) ≠ h.filter(λ vpe. vpe._1.W?), l0 ≠ l, ∀ l1. persistDependentReads(l1, h).filter(λ vpe. vpe._1.W?) = h.filter(λ vpe. vpe._1.W?) ⊦ |
Used terms: l0
| ∀ l0, h1. ¬(h = h1 ∧ persistDependentReads(l0, h1).filter(λ vpe. vpe._1.W?) ≠ h1.filter(λ vpe. vpe._1.W?)) ⊦ ∀ l0, h1. ¬((W(t, l, v), false) ' + h = h1 ∧ persistDependentReads(l0, h1).filter(λ vpe. vpe._1.W?) ≠ h1.filter(λ vpe. vpe._1.W?)) |
persistDependentReads(l0, (W(t, l, v), false) ' + h).filter(λ vpe. vpe._1.W?) ≠ (W(t, l, v), false) ' + h.filter(λ vpe. vpe._1.W?), ∀ l1. persistDependentReads(l1, h).filter(λ vpe. vpe._1.W?) = h.filter(λ vpe. vpe._1.W?) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ W(t, l, v).W?; (s) ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s)
| persistDependentReads(l0, (W(t, l, v), false) ' + h).filter(λ vpe. vpe._1.W?) ≠ (W(t, l, v), false) ' + h.filter(λ vpe. vpe._1.W?), ∀ l1. persistDependentReads(l1, h).filter(λ vpe. vpe._1.W?) = h.filter(λ vpe. vpe._1.W?) ⊦ |
⊦ l ≠ l0 → persistDependentReads(l, (W(t, l0, v), b) ' + h) = (W(t, l0, v), b) ' + persistDependentReads(l, h)
((W(t, l, v), false) ' + persistDependentReads(l0, h)).filter(λ vpe. vpe._1.W?) ≠ (W(t, l, v), false) ' + h.filter(λ vpe. vpe._1.W?), l0 ≠ l, ∀ l1. persistDependentReads(l1, h).filter(λ vpe. vpe._1.W?) = h.filter(λ vpe. vpe._1.W?) ⊦
Used simplifier rules: persistDependentReads-nextwrite: ⊦ persistDependentReads(l, (W(t, l, v), b) ' + h) = (W(t, l, v), b) ' + h; ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s) ⊦ W(t, l, v).W?; (s) ⊦ # x = # z → (x + y = z + y0 ↔ x = z ∧ y = y0); (ws) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: v, false, l0, l, t, h
| ⊦ l ≠ l0 → persistDependentReads(l, (W(t, l0, v), b) ' + h) = (W(t, l0, v), b) ' + persistDependentReads(l, h) |
| ((W(t, l, v), false) ' + persistDependentReads(l0, h)).filter(λ vpe. vpe._1.W?) ≠ (W(t, l, v), false) ' + h.filter(λ vpe. vpe._1.W?), l0 ≠ l, ∀ l1. persistDependentReads(l1, h).filter(λ vpe. vpe._1.W?) = h.filter(λ vpe. vpe._1.W?) ⊦ |
persistDependentReads(l0, h).filter(λ vpe. vpe._1.W?) ≠ h.filter(λ vpe. vpe._1.W?), l0 ≠ l, ∀ l1. persistDependentReads(l1, h).filter(λ vpe. vpe._1.W?) = h.filter(λ vpe. vpe._1.W?) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ # x = # z → (x + y = z + y0 ↔ x = z ∧ y = y0); (ws) ⊦ W(t, l, v).W?; (s) ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s)
| persistDependentReads(l0, h).filter(λ vpe. vpe._1.W?) ≠ h.filter(λ vpe. vpe._1.W?), l0 ≠ l, ∀ l1. persistDependentReads(l1, h).filter(λ vpe. vpe._1.W?) = h.filter(λ vpe. vpe._1.W?) ⊦ |
Used terms: l0
| ∀ l0, h1. ¬(h = h1 ∧ persistDependentReads(l0, h1).filter(λ vpe. vpe._1.W?) ≠ h1.filter(λ vpe. vpe._1.W?)) ⊦ ∀ l0, h1. ¬((R(t, l, v), true) ' + h = h1 ∧ persistDependentReads(l0, h1).filter(λ vpe. vpe._1.W?) ≠ h1.filter(λ vpe. vpe._1.W?)) |
persistDependentReads(l0, (R(t, l, v), true) ' + h).filter(λ vpe. vpe._1.W?) ≠ h.filter(λ vpe. vpe._1.W?), ∀ l1. persistDependentReads(l1, h).filter(λ vpe. vpe._1.W?) = h.filter(λ vpe. vpe._1.W?) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s) ⊦ ¬ R(t, l, v).W?; (s) ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s)
| persistDependentReads(l0, (R(t, l, v), true) ' + h).filter(λ vpe. vpe._1.W?) ≠ h.filter(λ vpe. vpe._1.W?), ∀ l1. persistDependentReads(l1, h).filter(λ vpe. vpe._1.W?) = h.filter(λ vpe. vpe._1.W?) ⊦ |
⊦ l ≠ l0 → persistDependentReads(l, (R(t, l0, v), b) ' + h) = (R(t, l0, v), b) + persistDependentReads(l, h)
l0 = l, persistDependentReads(l0, (R(t, l, v), true) ' + h).filter(λ vpe. vpe._1.W?) ≠ h.filter(λ vpe. vpe._1.W?), ∀ l1. persistDependentReads(l1, h).filter(λ vpe. vpe._1.W?) = h.filter(λ vpe. vpe._1.W?) ⊦
((R(t, l, v), true) + persistDependentReads(l0, h)).filter(λ vpe. vpe._1.W?) ≠ h.filter(λ vpe. vpe._1.W?), l0 ≠ l, ∀ l1. persistDependentReads(l1, h).filter(λ vpe. vpe._1.W?) = h.filter(λ vpe. vpe._1.W?) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: v, true, l0, l, t, h
| ⊦ l ≠ l0 → persistDependentReads(l, (R(t, l0, v), b) ' + h) = (R(t, l0, v), b) + persistDependentReads(l, h) |
| l0 = l, persistDependentReads(l0, (R(t, l, v), true) ' + h).filter(λ vpe. vpe._1.W?) ≠ h.filter(λ vpe. vpe._1.W?), ∀ l1. persistDependentReads(l1, h).filter(λ vpe. vpe._1.W?) = h.filter(λ vpe. vpe._1.W?) ⊦ |
persistDependentReads(l, h).filter(λ vpe. vpe._1.W?) ≠ h.filter(λ vpe. vpe._1.W?), ∀ l1. persistDependentReads(l1, h).filter(λ vpe. vpe._1.W?) = h.filter(λ vpe. vpe._1.W?) ⊦
Used simplifier rules: persistDependentReads-read: ⊦ persistDependentReads(l, (R(t, l, v), b) ' + h) = (R(t, l, v), true) ' + persistDependentReads(l, h); a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s) ⊦ ¬ R(t, l, v).W?; (s) ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s)
| persistDependentReads(l, h).filter(λ vpe. vpe._1.W?) ≠ h.filter(λ vpe. vpe._1.W?), ∀ l1. persistDependentReads(l1, h).filter(λ vpe. vpe._1.W?) = h.filter(λ vpe. vpe._1.W?) ⊦ |
Used terms: l
| ((R(t, l, v), true) + persistDependentReads(l0, h)).filter(λ vpe. vpe._1.W?) ≠ h.filter(λ vpe. vpe._1.W?), l0 ≠ l, ∀ l1. persistDependentReads(l1, h).filter(λ vpe. vpe._1.W?) = h.filter(λ vpe. vpe._1.W?) ⊦ |
persistDependentReads(l0, h).filter(λ vpe. vpe._1.W?) ≠ h.filter(λ vpe. vpe._1.W?), l0 ≠ l, ∀ l1. persistDependentReads(l1, h).filter(λ vpe. vpe._1.W?) = h.filter(λ vpe. vpe._1.W?) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s) ⊦ ¬ R(t, l, v).W?; (s) ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s) ⊦ a + x = a ' + x; (s)
| persistDependentReads(l0, h).filter(λ vpe. vpe._1.W?) ≠ h.filter(λ vpe. vpe._1.W?), l0 ≠ l, ∀ l1. persistDependentReads(l1, h).filter(λ vpe. vpe._1.W?) = h.filter(λ vpe. vpe._1.W?) ⊦ |
Used terms: l0
| ∀ l0, h1. ¬(h = h1 ∧ persistDependentReads(l0, h1).filter(λ vpe. vpe._1.W?) ≠ h1.filter(λ vpe. vpe._1.W?)) ⊦ ∀ l0, h1. ¬((R(t, l, v), false) ' + h = h1 ∧ persistDependentReads(l0, h1).filter(λ vpe. vpe._1.W?) ≠ h1.filter(λ vpe. vpe._1.W?)) |
persistDependentReads(l0, (R(t, l, v), false) ' + h).filter(λ vpe. vpe._1.W?) ≠ h.filter(λ vpe. vpe._1.W?), ∀ l1. persistDependentReads(l1, h).filter(λ vpe. vpe._1.W?) = h.filter(λ vpe. vpe._1.W?) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s) ⊦ ¬ R(t, l, v).W?; (s) ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s)
| persistDependentReads(l0, (R(t, l, v), false) ' + h).filter(λ vpe. vpe._1.W?) ≠ h.filter(λ vpe. vpe._1.W?), ∀ l1. persistDependentReads(l1, h).filter(λ vpe. vpe._1.W?) = h.filter(λ vpe. vpe._1.W?) ⊦ |
⊦ l ≠ l0 → persistDependentReads(l, (R(t, l0, v), b) ' + h) = (R(t, l0, v), b) + persistDependentReads(l, h)
l0 = l, persistDependentReads(l0, (R(t, l, v), false) ' + h).filter(λ vpe. vpe._1.W?) ≠ h.filter(λ vpe. vpe._1.W?), ∀ l1. persistDependentReads(l1, h).filter(λ vpe. vpe._1.W?) = h.filter(λ vpe. vpe._1.W?) ⊦
((R(t, l, v), false) + persistDependentReads(l0, h)).filter(λ vpe. vpe._1.W?) ≠ h.filter(λ vpe. vpe._1.W?), l0 ≠ l, ∀ l1. persistDependentReads(l1, h).filter(λ vpe. vpe._1.W?) = h.filter(λ vpe. vpe._1.W?) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: v, false, l0, l, t, h
| ⊦ l ≠ l0 → persistDependentReads(l, (R(t, l0, v), b) ' + h) = (R(t, l0, v), b) + persistDependentReads(l, h) |
| l0 = l, persistDependentReads(l0, (R(t, l, v), false) ' + h).filter(λ vpe. vpe._1.W?) ≠ h.filter(λ vpe. vpe._1.W?), ∀ l1. persistDependentReads(l1, h).filter(λ vpe. vpe._1.W?) = h.filter(λ vpe. vpe._1.W?) ⊦ |
persistDependentReads(l, h).filter(λ vpe. vpe._1.W?) ≠ h.filter(λ vpe. vpe._1.W?), ∀ l1. persistDependentReads(l1, h).filter(λ vpe. vpe._1.W?) = h.filter(λ vpe. vpe._1.W?) ⊦
Used simplifier rules: persistDependentReads-read: ⊦ persistDependentReads(l, (R(t, l, v), b) ' + h) = (R(t, l, v), true) ' + persistDependentReads(l, h); a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s) ⊦ ¬ R(t, l, v).W?; (s) ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s)
| persistDependentReads(l, h).filter(λ vpe. vpe._1.W?) ≠ h.filter(λ vpe. vpe._1.W?), ∀ l1. persistDependentReads(l1, h).filter(λ vpe. vpe._1.W?) = h.filter(λ vpe. vpe._1.W?) ⊦ |
Used terms: l
| ((R(t, l, v), false) + persistDependentReads(l0, h)).filter(λ vpe. vpe._1.W?) ≠ h.filter(λ vpe. vpe._1.W?), l0 ≠ l, ∀ l1. persistDependentReads(l1, h).filter(λ vpe. vpe._1.W?) = h.filter(λ vpe. vpe._1.W?) ⊦ |
persistDependentReads(l0, h).filter(λ vpe. vpe._1.W?) ≠ h.filter(λ vpe. vpe._1.W?), l0 ≠ l, ∀ l1. persistDependentReads(l1, h).filter(λ vpe. vpe._1.W?) = h.filter(λ vpe. vpe._1.W?) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s) ⊦ ¬ R(t, l, v).W?; (s) ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s) ⊦ a + x = a ' + x; (s)
| persistDependentReads(l0, h).filter(λ vpe. vpe._1.W?) ≠ h.filter(λ vpe. vpe._1.W?), l0 ≠ l, ∀ l1. persistDependentReads(l1, h).filter(λ vpe. vpe._1.W?) = h.filter(λ vpe. vpe._1.W?) ⊦ |
Used terms: l0
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.