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