| ⊦ l ≠ l0 → persistDependentReads(l, h) | l0 = h | l0 |
l ≠ l0, persistDependentReads(l, h) | l0 ≠ h | l0 ⊦
| l ≠ l0, persistDependentReads(l, h) | l0 ≠ h | l0 ⊦ |
persistDependentReads(l, h).filter(λ vpe. vpe._1.l = l0) ≠ h.filter(λ vpe. vpe._1.l = l0), l ≠ l0 ⊦
Used simplifier rules: restrict-loc: ⊦ h | l = h.filter(λ vpe. vpe._1.l = l);
| persistDependentReads(l, h).filter(λ vpe. vpe._1.l = l0) ≠ h.filter(λ vpe. vpe._1.l = l0), l ≠ l0 ⊦ |
persistDependentReads(l, vpe + h0).filter(λ vpe. vpe._1.l = l0) ≠ (vpe + h0).filter(λ vpe. vpe._1.l = l0), l ≠ l0, ∀ l, l0. ¬(persistDependentReads(l, h0).filter(λ vpe. vpe._1.l = l0) ≠ h0.filter(λ vpe. vpe._1.l = l0) ∧ l ≠ l0) ⊦
Used simplifier rules: persistDependentReads-base: ⊦ persistDependentReads(l, []) = []; List('a) freely generated by [], +;; ⊦ [].filter(p) = []; (s)
| persistDependentReads(l, vpe + h0).filter(λ vpe. vpe._1.l = l0) ≠ (vpe + h0).filter(λ vpe. vpe._1.l = l0), l ≠ l0, ∀ l, l0. ¬(persistDependentReads(l, h0).filter(λ vpe. vpe._1.l = l0) ≠ h0.filter(λ vpe. vpe._1.l = l0) ∧ l ≠ l0) ⊦ |
persistDependentReads(l, vpe ' + h0).filter(λ vpe. vpe._1.l = l0) ≠ (vpe._1.l = l0 ⊃ vpe ';[]) + h0.filter(λ vpe. vpe._1.l = l0), l ≠ l0, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s) ⊦ a + x = a ' + x; (s)
| persistDependentReads(l, vpe ' + h0).filter(λ vpe. vpe._1.l = l0) ≠ (vpe._1.l = l0 ⊃ vpe ';[]) + h0.filter(λ vpe. vpe._1.l = l0), l ≠ l0, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦ |
vpe = (e, boolvar), persistDependentReads(l, vpe ' + h0).filter(λ vpe. vpe._1.l = l0) ≠ (e.l = l0 ⊃ vpe ';[]) + h0.filter(λ vpe. vpe._1.l = l0), l ≠ l0, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦
Used terms: e, boolvar
| vpe = (e, boolvar), persistDependentReads(l, vpe ' + h0).filter(λ vpe. vpe._1.l = l0) ≠ (e.l = l0 ⊃ vpe ';[]) + h0.filter(λ vpe. vpe._1.l = l0), l ≠ l0, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦ |
persistDependentReads(l, (e, boolvar) ' + h0).filter(λ vpe. vpe._1.l = l0) ≠ (e.l = l0 ⊃ (e, boolvar) ';[]) + h0.filter(λ vpe. vpe._1.l = l0), l ≠ l0, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦
| persistDependentReads(l, (e, boolvar) ' + h0).filter(λ vpe. vpe._1.l = l0) ≠ (e.l = l0 ⊃ (e, boolvar) ';[]) + h0.filter(λ vpe. vpe._1.l = l0), l ≠ l0, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦ |
e.l = l0, persistDependentReads(l, (e, boolvar) ' + h0).filter(λ vpe. vpe._1.l = l0) ≠ (e, boolvar) ' + h0.filter(λ vpe. vpe._1.l = l0), l ≠ l0, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦
persistDependentReads(l, (e, boolvar) ' + h0).filter(λ vpe. vpe._1.l = l0) ≠ [] + h0.filter(λ vpe. vpe._1.l = l0), e.l ≠ l0, l ≠ l0, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦
| e.l = l0, persistDependentReads(l, (e, boolvar) ' + h0).filter(λ vpe. vpe._1.l = l0) ≠ (e, boolvar) ' + h0.filter(λ vpe. vpe._1.l = l0), l ≠ l0, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦ |
persistDependentReads(l, (e, boolvar) ' + h0).filter(λ vpe. vpe._1.l = e.l) ≠ (e, boolvar) ' + h0.filter(λ vpe. vpe._1.l = e.l), l ≠ e.l, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦
| persistDependentReads(l, (e, boolvar) ' + h0).filter(λ vpe. vpe._1.l = e.l) ≠ (e, boolvar) ' + h0.filter(λ vpe. vpe._1.l = e.l), l ≠ e.l, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦ |
e = R(t, l0, v), persistDependentReads(l, (e, boolvar) ' + h0).filter(λ vpe. vpe._1.l = e.l) ≠ (e, boolvar) ' + h0.filter(λ vpe. vpe._1.l = e.l), l ≠ e.l, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦
e = W(t, l0, v), persistDependentReads(l, (e, boolvar) ' + h0).filter(λ vpe. vpe._1.l = e.l) ≠ (e, boolvar) ' + h0.filter(λ vpe. vpe._1.l = e.l), l ≠ e.l, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦
Used simplifier rules: RWevent freely generated by R, W;;
| e = R(t, l0, v), persistDependentReads(l, (e, boolvar) ' + h0).filter(λ vpe. vpe._1.l = e.l) ≠ (e, boolvar) ' + h0.filter(λ vpe. vpe._1.l = e.l), l ≠ e.l, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦ |
persistDependentReads(l, h0).filter(λ vpe. vpe._1.l = l0) ≠ h0.filter(λ vpe. vpe._1.l = l0), l ≠ l0, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦
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 = # z → (x + y = z + y0 ↔ x = z ∧ y = y0); (ws) ⊦ R(t, l, v).l = l; (s) ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s) ⊦ a + x = a ' + x; (s)
| persistDependentReads(l, h0).filter(λ vpe. vpe._1.l = l0) ≠ h0.filter(λ vpe. vpe._1.l = l0), l ≠ l0, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦ |
Used terms: l, l0
| e = W(t, l0, v), persistDependentReads(l, (e, boolvar) ' + h0).filter(λ vpe. vpe._1.l = e.l) ≠ (e, boolvar) ' + h0.filter(λ vpe. vpe._1.l = e.l), l ≠ e.l, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦ |
persistDependentReads(l, h0).filter(λ vpe. vpe._1.l = l0) ≠ h0.filter(λ vpe. vpe._1.l = l0), l ≠ l0, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦
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 = # z → (x + y = z + y0 ↔ x = z ∧ y = y0); (ws) ⊦ W(t, l, v).l = l; (s) ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s)
| persistDependentReads(l, h0).filter(λ vpe. vpe._1.l = l0) ≠ h0.filter(λ vpe. vpe._1.l = l0), l ≠ l0, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦ |
Used terms: l, l0
| persistDependentReads(l, (e, boolvar) ' + h0).filter(λ vpe. vpe._1.l = l0) ≠ [] + h0.filter(λ vpe. vpe._1.l = l0), e.l ≠ l0, l ≠ l0, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦ |
persistDependentReads(l, (e, boolvar) ' + h0).filter(λ vpe. vpe._1.l = l0) ≠ h0.filter(λ vpe. vpe._1.l = l0), e.l ≠ l0, l ≠ l0, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s)
| persistDependentReads(l, (e, boolvar) ' + h0).filter(λ vpe. vpe._1.l = l0) ≠ h0.filter(λ vpe. vpe._1.l = l0), e.l ≠ l0, l ≠ l0, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦ |
e = R(t, l3, v), persistDependentReads(l, (e, boolvar) ' + h0).filter(λ vpe. vpe._1.l = l0) ≠ h0.filter(λ vpe. vpe._1.l = l0), e.l ≠ l0, l ≠ l0, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦
e = W(t, l3, v), persistDependentReads(l, (e, boolvar) ' + h0).filter(λ vpe. vpe._1.l = l0) ≠ h0.filter(λ vpe. vpe._1.l = l0), e.l ≠ l0, l ≠ l0, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦
Used simplifier rules: RWevent freely generated by R, W;;
| e = R(t, l3, v), persistDependentReads(l, (e, boolvar) ' + h0).filter(λ vpe. vpe._1.l = l0) ≠ h0.filter(λ vpe. vpe._1.l = l0), e.l ≠ l0, l ≠ l0, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦ |
persistDependentReads(l, (R(t, l3, v), boolvar) ' + h0).filter(λ vpe. vpe._1.l = l0) ≠ h0.filter(λ vpe. vpe._1.l = l0), l ≠ l0, l3 ≠ l0, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦
Used simplifier rules: ⊦ R(t, l, v).l = l; (s)
| persistDependentReads(l, (R(t, l3, v), boolvar) ' + h0).filter(λ vpe. vpe._1.l = l0) ≠ h0.filter(λ vpe. vpe._1.l = l0), l ≠ l0, l3 ≠ l0, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦ |
⊦ l ≠ l0 → persistDependentReads(l, (R(t, l0, v), b) ' + h) = (R(t, l0, v), b) + persistDependentReads(l, h)
l = l3, persistDependentReads(l, (R(t, l3, v), boolvar) ' + h0).filter(λ vpe. vpe._1.l = l0) ≠ h0.filter(λ vpe. vpe._1.l = l0), l ≠ l0, l3 ≠ l0, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦
((R(t, l3, v), boolvar) + persistDependentReads(l, h0)).filter(λ vpe. vpe._1.l = l0) ≠ h0.filter(λ vpe. vpe._1.l = l0), l ≠ l3, l ≠ l0, l3 ≠ l0, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: v, boolvar, l, l3, t, h0
| ⊦ l ≠ l0 → persistDependentReads(l, (R(t, l0, v), b) ' + h) = (R(t, l0, v), b) + persistDependentReads(l, h) |
| l = l3, persistDependentReads(l, (R(t, l3, v), boolvar) ' + h0).filter(λ vpe. vpe._1.l = l0) ≠ h0.filter(λ vpe. vpe._1.l = l0), l ≠ l0, l3 ≠ l0, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦ |
persistDependentReads(l3, h0).filter(λ vpe. vpe._1.l = l0) ≠ h0.filter(λ vpe. vpe._1.l = l0), l3 ≠ l0, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦
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).l = l; (s) ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s)
| persistDependentReads(l3, h0).filter(λ vpe. vpe._1.l = l0) ≠ h0.filter(λ vpe. vpe._1.l = l0), l3 ≠ l0, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦ |
Used terms: l3, l0
| ((R(t, l3, v), boolvar) + persistDependentReads(l, h0)).filter(λ vpe. vpe._1.l = l0) ≠ h0.filter(λ vpe. vpe._1.l = l0), l ≠ l3, l ≠ l0, l3 ≠ l0, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦ |
persistDependentReads(l, h0).filter(λ vpe. vpe._1.l = l0) ≠ h0.filter(λ vpe. vpe._1.l = l0), l ≠ l3, l ≠ l0, l3 ≠ l0, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦
Used simplifier rules: 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)
| persistDependentReads(l, h0).filter(λ vpe. vpe._1.l = l0) ≠ h0.filter(λ vpe. vpe._1.l = l0), l ≠ l3, l ≠ l0, l3 ≠ l0, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦ |
Used terms: l, l0
| e = W(t, l3, v), persistDependentReads(l, (e, boolvar) ' + h0).filter(λ vpe. vpe._1.l = l0) ≠ h0.filter(λ vpe. vpe._1.l = l0), e.l ≠ l0, l ≠ l0, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦ |
persistDependentReads(l, (W(t, l3, v), boolvar) ' + h0).filter(λ vpe. vpe._1.l = l0) ≠ h0.filter(λ vpe. vpe._1.l = l0), l ≠ l0, l3 ≠ l0, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦
Used simplifier rules: ⊦ W(t, l, v).l = l; (s)
| persistDependentReads(l, (W(t, l3, v), boolvar) ' + h0).filter(λ vpe. vpe._1.l = l0) ≠ h0.filter(λ vpe. vpe._1.l = l0), l ≠ l0, l3 ≠ l0, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦ |
⊦ l ≠ l0 → persistDependentReads(l, (W(t, l0, v), b) ' + h) = (W(t, l0, v), b) ' + persistDependentReads(l, h)
((W(t, l3, v), boolvar) ' + persistDependentReads(l, h0)).filter(λ vpe. vpe._1.l = l0) ≠ h0.filter(λ vpe. vpe._1.l = l0), l ≠ l3, l ≠ l0, l3 ≠ l0, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦
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).l = l; (s) ⊦ [] + x = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: v, boolvar, l, l3, t, h0
| ⊦ l ≠ l0 → persistDependentReads(l, (W(t, l0, v), b) ' + h) = (W(t, l0, v), b) ' + persistDependentReads(l, h) |
| ((W(t, l3, v), boolvar) ' + persistDependentReads(l, h0)).filter(λ vpe. vpe._1.l = l0) ≠ h0.filter(λ vpe. vpe._1.l = l0), l ≠ l3, l ≠ l0, l3 ≠ l0, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦ |
persistDependentReads(l, h0).filter(λ vpe. vpe._1.l = l0) ≠ h0.filter(λ vpe. vpe._1.l = l0), l ≠ l3, l ≠ l0, l3 ≠ l0, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦
Used simplifier rules: 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)
| persistDependentReads(l, h0).filter(λ vpe. vpe._1.l = l0) ≠ h0.filter(λ vpe. vpe._1.l = l0), l ≠ l3, l ≠ l0, l3 ≠ l0, ∀ l1, l2. persistDependentReads(l1, h0).filter(λ vpe. vpe._1.l = l2) = h0.filter(λ vpe. vpe._1.l = l2) ∨ l1 = l2 ⊦ |
Used terms: l, 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.