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