| ⊦ ((h | l) | t) | false = (W(t0, l0, v0), b) ' → ((persistDependentReads(l, h) | l) | t) | false = (W(t0, l0, v0), b) ' |
((h | l) | t) | false = (W(t0, l0, v0), b) ', ((persistDependentReads(l, h) | l) | t) | false ≠ (W(t0, l0, v0), b) ' ⊦
| ((h | l) | t) | false = (W(t0, l0, v0), b) ', ((persistDependentReads(l, h) | l) | t) | false ≠ (W(t0, l0, v0), b) ' ⊦ |
h.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.t = t).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), b) ', persistDependentReads(l, h).filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.t = t).filter(λ vpe. ¬ vpe._2) ≠ (W(t0, l0, v0), b) ' ⊦
Used simplifier rules: restrict-loc: ⊦ h | l = h.filter(λ vpe. vpe._1.l = l); restrict-thread: ⊦ h | t = h.filter(λ vpe. vpe._1.t = t); restrict-vp: ⊦ h | b = h.filter(λ vpe. vpe._2 ↔ b);
| h.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.t = t).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), b) ', persistDependentReads(l, h).filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.t = t).filter(λ vpe. ¬ vpe._2) ≠ (W(t0, l0, v0), 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.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.t = t).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), b) ', [] = h, persistDependentReads(l, h).filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.t = t).filter(λ vpe. ¬ vpe._2) ≠ (W(t0, l0, v0), b) ' ⊦
∀ h1, l, t, t0, l0, v0, b. ¬ ( h = h1 ∧ h1.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.t = t).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), b) ' ∧ persistDependentReads(l, h1).filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.t = t).filter(λ vpe. ¬ vpe._2) ≠ (W(t0, l0, v0), b) ') ⊦ ∀ h1, l0, t0, t1, l1, v0, b. ¬ ( (W(t, l, v), true) ' + h = h1 ∧ h1.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ' ∧ persistDependentReads(l0, h1).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ')
∀ h1, l, t, t0, l0, v0, b. ¬ ( h = h1 ∧ h1.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.t = t).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), b) ' ∧ persistDependentReads(l, h1).filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.t = t).filter(λ vpe. ¬ vpe._2) ≠ (W(t0, l0, v0), b) ') ⊦ ∀ h1, l0, t0, t1, l1, v0, b. ¬ ( (W(t, l, v), false) ' + h = h1 ∧ h1.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ' ∧ persistDependentReads(l0, h1).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ')
∀ h1, l, t, t0, l0, v0, b. ¬ ( h = h1 ∧ h1.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.t = t).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), b) ' ∧ persistDependentReads(l, h1).filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.t = t).filter(λ vpe. ¬ vpe._2) ≠ (W(t0, l0, v0), b) ') ⊦ ∀ h1, l0, t0, t1, l1, v0, b. ¬ ( (R(t, l, v), true) ' + h = h1 ∧ h1.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ' ∧ persistDependentReads(l0, h1).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ')
∀ h1, l, t, t0, l0, v0, b. ¬ ( h = h1 ∧ h1.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.t = t).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), b) ' ∧ persistDependentReads(l, h1).filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.t = t).filter(λ vpe. ¬ vpe._2) ≠ (W(t0, l0, v0), b) ') ⊦ ∀ h1, l0, t0, t1, l1, v0, b. ¬ ( (R(t, l, v), false) ' + h = h1 ∧ h1.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ' ∧ persistDependentReads(l0, h1).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ')
Used terms: h, λ h0. ∀ h, l, t, t0, l0, v0, b. ¬ ( h0 = h ∧ h.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.t = t).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), b) ' ∧ persistDependentReads(l, h).filter(λ vpe. vpe._1.l = l) .filter (λ vpe. vpe._1.t = t ) .filter (λ vpe. ¬ vpe._2 ) ≠ (W(t0, l0, v0), 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.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.t = t).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), b) ', [] = h, persistDependentReads(l, h).filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.t = t).filter(λ vpe. ¬ vpe._2) ≠ (W(t0, l0, v0), b) ' ⊦ |
Used simplifier rules: ⊦ a ' ≠ []; (s) ⊦ [].filter(p) = []; (s)
| ∀ h1, l, t, t0, l0, v0, b. ¬ ( h = h1 ∧ h1.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.t = t).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), b) ' ∧ persistDependentReads(l, h1).filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.t = t).filter(λ vpe. ¬ vpe._2) ≠ (W(t0, l0, v0), b) ') ⊦ ∀ h1, l0, t0, t1, l1, v0, b. ¬ ( (W(t, l, v), true) ' + h = h1 ∧ h1.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ' ∧ persistDependentReads(l0, h1).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ') |
(l = l0 ⊃ (W(t, l0, v), true) ';[]).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', persistDependentReads(l0, (W(t, l, v), true) ' + h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (x + y).filter(p) = x.filter(p) + y.filter(p); (s) ⊦ W(t, l, v).l = l; (s) ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s)
| (l = l0 ⊃ (W(t, l0, v), true) ';[]).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', persistDependentReads(l0, (W(t, l, v), true) ' + h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦ |
[].filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', persistDependentReads(l0, (W(t, l, v), true) ' + h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', l ≠ l0, ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦
Used simplifier rules: persistDependentReads-nextwrite: ⊦ persistDependentReads(l, (W(t, l, v), b) ' + h) = (W(t, l, v), b) ' + h; ⊦ a '.filter(p) = (p(a) ⊃ a ';[]); (s) ⊦ W(t, l, v).l = l; (s) ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s) ⊦ W(t, l, v).t = t; (s) ⊦ (x + y).filter(p) = x.filter(p) + y.filter(p); (s) a: ⊦ (x + y) + z = x + y + z; from specification list
| [].filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', persistDependentReads(l0, (W(t, l, v), true) ' + h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', l ≠ l0, ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦ |
h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', persistDependentReads(l0, h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', l ≠ l0, ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦
Used simplifier rules: persistDependentReads-otherwrite: ⊦ l ≠ l0 → persistDependentReads(l, (W(t, l0, v), b) ' + h) = (W(t, l0, v), b) ' + persistDependentReads(l, h); a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s) ⊦ W(t, l, v).l = l; (s) ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s) ⊦ [].filter(p) = []; (s)
| h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', persistDependentReads(l0, h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', l ≠ l0, ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦ |
Used terms: l0, t0, t1, l1, v0, b
| ∀ h1, l, t, t0, l0, v0, b. ¬ ( h = h1 ∧ h1.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.t = t).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), b) ' ∧ persistDependentReads(l, h1).filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.t = t).filter(λ vpe. ¬ vpe._2) ≠ (W(t0, l0, v0), b) ') ⊦ ∀ h1, l0, t0, t1, l1, v0, b. ¬ ( (W(t, l, v), false) ' + h = h1 ∧ h1.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ' ∧ persistDependentReads(l0, h1).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ') |
(l = l0 ⊃ (W(t, l0, v), false) ';[]).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', persistDependentReads(l0, (W(t, l, v), false) ' + h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (x + y).filter(p) = x.filter(p) + y.filter(p); (s) ⊦ W(t, l, v).l = l; (s) ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s)
| (l = l0 ⊃ (W(t, l0, v), false) ';[]).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', persistDependentReads(l0, (W(t, l, v), false) ' + h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦ |
[].filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', persistDependentReads(l0, (W(t, l, v), false) ' + h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', l ≠ l0, ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦
Used simplifier rules: persistDependentReads-nextwrite: ⊦ persistDependentReads(l, (W(t, l, v), b) ' + h) = (W(t, l, v), b) ' + h; ⊦ a '.filter(p) = (p(a) ⊃ a ';[]); (s) ⊦ W(t, l, v).l = l; (s) ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s) ⊦ W(t, l, v).t = t; (s) ⊦ (x + y).filter(p) = x.filter(p) + y.filter(p); (s) a: ⊦ (x + y) + z = x + y + z; from specification list
| [].filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', persistDependentReads(l0, (W(t, l, v), false) ' + h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', l ≠ l0, ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦ |
h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', persistDependentReads(l0, h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', l ≠ l0, ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦
Used simplifier rules: persistDependentReads-otherwrite: ⊦ l ≠ l0 → persistDependentReads(l, (W(t, l0, v), b) ' + h) = (W(t, l0, v), b) ' + persistDependentReads(l, h); a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s) ⊦ W(t, l, v).l = l; (s) ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s) ⊦ [].filter(p) = []; (s)
| h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', persistDependentReads(l0, h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', l ≠ l0, ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦ |
Used terms: l0, t0, t1, l1, v0, b
| ∀ h1, l, t, t0, l0, v0, b. ¬ ( h = h1 ∧ h1.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.t = t).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), b) ' ∧ persistDependentReads(l, h1).filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.t = t).filter(λ vpe. ¬ vpe._2) ≠ (W(t0, l0, v0), b) ') ⊦ ∀ h1, l0, t0, t1, l1, v0, b. ¬ ( (R(t, l, v), true) ' + h = h1 ∧ h1.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ' ∧ persistDependentReads(l0, h1).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ') |
(l = l0 ⊃ (R(t, l0, v), true) ';[]).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', persistDependentReads(l0, (R(t, l, v), true) ' + h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (x + y).filter(p) = x.filter(p) + y.filter(p); (s) ⊦ R(t, l, v).l = l; (s) ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s)
| (l = l0 ⊃ (R(t, l0, v), true) ';[]).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', persistDependentReads(l0, (R(t, l, v), true) ' + h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦ |
(R(t, l0, v), true) '.filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', l = l0, persistDependentReads(l0, (R(t, l, v), true) ' + h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦
[].filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', persistDependentReads(l0, (R(t, l, v), true) ' + h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', l ≠ l0, ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦
| (R(t, l0, v), true) '.filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', l = l0, persistDependentReads(l0, (R(t, l, v), true) ' + h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦ |
(t = t0 ⊃ (R(t0, l0, v), true) ';[]).filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', (t = t0 ⊃ (R(t0, l0, v), true) ';[]).filter(λ vpe. ¬ vpe._2) + persistDependentReads(l0, h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦
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 + y).filter(p) = x.filter(p) + y.filter(p); (s) ⊦ R(t, l, v).t = t; (s) ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s) ⊦ R(t, l, v).l = l; (s) ⊦ a '.filter(p) = (p(a) ⊃ a ';[]); (s)
| (t = t0 ⊃ (R(t0, l0, v), true) ';[]).filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', (t = t0 ⊃ (R(t0, l0, v), true) ';[]).filter(λ vpe. ¬ vpe._2) + persistDependentReads(l0, h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦ |
(R(t0, l0, v), true) '.filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', t = t0, (t = t0 ⊃ (R(t0, l0, v), true) ';[]).filter(λ vpe. ¬ vpe._2) + persistDependentReads(l0, h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦
[].filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', (t = t0 ⊃ (R(t0, l0, v), true) ';[]).filter(λ vpe. ¬ vpe._2) + persistDependentReads(l0, h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', t ≠ t0, ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦
| (R(t0, l0, v), true) '.filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', t = t0, (t = t0 ⊃ (R(t0, l0, v), true) ';[]).filter(λ vpe. ¬ vpe._2) + persistDependentReads(l0, h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦ |
h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', persistDependentReads(l0, h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s) ⊦ a '.filter(p) = (p(a) ⊃ a ';[]); (s)
| h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', persistDependentReads(l0, h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦ |
Used terms: l0, t0, t1, l1, v0, b
| [].filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', (t = t0 ⊃ (R(t0, l0, v), true) ';[]).filter(λ vpe. ¬ vpe._2) + persistDependentReads(l0, h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', t ≠ t0, ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦ |
h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', persistDependentReads(l0, h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', t ≠ t0, ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s) ⊦ [].filter(p) = []; (s)
| h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', persistDependentReads(l0, h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', t ≠ t0, ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦ |
Used terms: l0, t0, t1, l1, v0, b
| [].filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', persistDependentReads(l0, (R(t, l, v), true) ' + h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', l ≠ l0, ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦ |
h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', persistDependentReads(l0, h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', l ≠ l0, ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦
Used simplifier rules: persistDependentReads-otherread: ⊦ l ≠ l0 → persistDependentReads(l, (R(t, l0, v), b) ' + h) = (R(t, l0, v), b) + persistDependentReads(l, h); a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s) ⊦ R(t, l, v).l = l; (s) ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s) ⊦ a + x = a ' + x; (s) ⊦ [].filter(p) = []; (s)
| h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', persistDependentReads(l0, h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', l ≠ l0, ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦ |
Used terms: l0, t0, t1, l1, v0, b
| ∀ h1, l, t, t0, l0, v0, b. ¬ ( h = h1 ∧ h1.filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.t = t).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), b) ' ∧ persistDependentReads(l, h1).filter(λ vpe. vpe._1.l = l).filter(λ vpe. vpe._1.t = t).filter(λ vpe. ¬ vpe._2) ≠ (W(t0, l0, v0), b) ') ⊦ ∀ h1, l0, t0, t1, l1, v0, b. ¬ ( (R(t, l, v), false) ' + h = h1 ∧ h1.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ' ∧ persistDependentReads(l0, h1).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ') |
(l = l0 ⊃ (R(t, l0, v), false) ';[]).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', persistDependentReads(l0, (R(t, l, v), false) ' + h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (x + y).filter(p) = x.filter(p) + y.filter(p); (s) ⊦ R(t, l, v).l = l; (s) ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s)
| (l = l0 ⊃ (R(t, l0, v), false) ';[]).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', persistDependentReads(l0, (R(t, l, v), false) ' + h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦ |
(R(t, l0, v), false) '.filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', l = l0, persistDependentReads(l0, (R(t, l, v), false) ' + h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦
[].filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', persistDependentReads(l0, (R(t, l, v), false) ' + h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', l ≠ l0, ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦
| (R(t, l0, v), false) '.filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', l = l0, persistDependentReads(l0, (R(t, l, v), false) ' + h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦ |
(t = t0 ⊃ (R(t0, l0, v), false) ';[]).filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', (t = t0 ⊃ (R(t0, l0, v), true) ';[]).filter(λ vpe. ¬ vpe._2) + persistDependentReads(l0, h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦
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 + y).filter(p) = x.filter(p) + y.filter(p); (s) ⊦ R(t, l, v).t = t; (s) ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s) ⊦ R(t, l, v).l = l; (s) ⊦ a '.filter(p) = (p(a) ⊃ a ';[]); (s)
| (t = t0 ⊃ (R(t0, l0, v), false) ';[]).filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', (t = t0 ⊃ (R(t0, l0, v), true) ';[]).filter(λ vpe. ¬ vpe._2) + persistDependentReads(l0, h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦ |
(t = t0 ⊃ (R(t0, l0, v), false) ';[]).filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', (t = t0 ⊃ (R(t0, l0, v), true) ';[]).filter(λ vpe. ¬ vpe._2) + persistDependentReads(l0, h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', t ≠ t0, ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦
Used simplifier rules: ⊦ a '.filter(p) = (p(a) ⊃ a ';[]); (s) ⊦ a ' = a0 ' + x ↔ a = a0 ∧ x = []; (ws) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ R(t, l, v) ≠ W(t0, l0, v0); (s) Used formulas: t = t0
| (t = t0 ⊃ (R(t0, l0, v), false) ';[]).filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', (t = t0 ⊃ (R(t0, l0, v), true) ';[]).filter(λ vpe. ¬ vpe._2) + persistDependentReads(l0, h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', t ≠ t0, ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦ |
h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', persistDependentReads(l0, h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', t ≠ t0, ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s) ⊦ [].filter(p) = []; (s)
| h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', persistDependentReads(l0, h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', t ≠ t0, ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦ |
Used terms: l0, t0, t1, l1, v0, b
| [].filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', persistDependentReads(l0, (R(t, l, v), false) ' + h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', l ≠ l0, ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦ |
h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', persistDependentReads(l0, h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', l ≠ l0, ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦
Used simplifier rules: persistDependentReads-otherread: ⊦ l ≠ l0 → persistDependentReads(l, (R(t, l0, v), b) ' + h) = (R(t, l0, v), b) + persistDependentReads(l, h); a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s) ⊦ R(t, l, v).l = l; (s) ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s) ⊦ a + x = a ' + x; (s) ⊦ [].filter(p) = []; (s)
| h.filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) = (W(t1, l1, v0), b) ', persistDependentReads(l0, h).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. vpe._1.t = t0).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v0), b) ', l ≠ l0, ∀ l2, t2, t3, l3, v1, b0. h.filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) ≠ (W(t3, l3, v1), b0) ' ∨ persistDependentReads(l2, h).filter(λ vpe. vpe._1.l = l2).filter(λ vpe. vpe._1.t = t2).filter(λ vpe. ¬ vpe._2) = (W(t3, l3, v1), b0) ' ⊦ |
Used terms: l0, t0, t1, l1, 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.