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