| ⊦ abs(h, rs, p) ∧ firstPersistW(p(l)) < # p(l) ∧ h[firstVolWrite(l, h)] = (e, bv) → mem(l := e.v) ⊕ p(l := p(l) -p firstPersistW(p(l))) = mem ⊕ p |
h[firstVolWrite(l, h)] = (e, bv), mem(l := e.v) ⊕ p(l := p(l) -p firstPersistW(p(l))) ≠ mem ⊕ p, firstPersistW(p(l)) < # p(l), abs(h, rs, p) ⊦
| h[firstVolWrite(l, h)] = (e, bv), mem(l := e.v) ⊕ p(l := p(l) -p firstPersistW(p(l))) ≠ mem ⊕ p, firstPersistW(p(l)) < # p(l), abs(h, rs, p) ⊦ |
h[firstVolWrite(l, h)] = (e, bv), p(l) ≠ [], mem(l := e.v) ⊕ p(l := p(l) -p firstPersistW(p(l))) ≠ mem ⊕ p, firstPersistW(p(l)) < # p(l), abs(h, rs, p) ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| h[firstVolWrite(l, h)] = (e, bv), p(l) ≠ [], mem(l := e.v) ⊕ p(l := p(l) -p firstPersistW(p(l))) ≠ mem ⊕ p, firstPersistW(p(l)) < # p(l), abs(h, rs, p) ⊦ |
h[firstVolWrite(l, h)] = (e, bv), p(l) ≠ [], ((mem(l := e.v) ⊕ p(l := p(l) -p firstPersistW(p(l)))))(l0) ≠ ((mem ⊕ p))(l0), firstPersistW(p(l)) < # p(l), abs(h, rs, p) ⊦
| h[firstVolWrite(l, h)] = (e, bv), p(l) ≠ [], ((mem(l := e.v) ⊕ p(l := p(l) -p firstPersistW(p(l)))))(l0) ≠ ((mem ⊕ p))(l0), firstPersistW(p(l)) < # p(l), abs(h, rs, p) ⊦ |
h[firstVolWrite(l, h)] = (e, bv), p(l) ≠ [], (l = l0 ⊃ e.v;mem(l0)) ⊕ (l = l0 ⊃ p(l0) -p firstPersistW(p(l0));p(l0)) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l)) < # p(l), abs(h, rs, p) ⊦
Used simplifier rules: ⊦ ((mem ⊕ p))(l) = mem(l) ⊕ p(l); (s)
| h[firstVolWrite(l, h)] = (e, bv), p(l) ≠ [], (l = l0 ⊃ e.v;mem(l0)) ⊕ (l = l0 ⊃ p(l0) -p firstPersistW(p(l0));p(l0)) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l)) < # p(l), abs(h, rs, p) ⊦ |
h[firstVolWrite(l, h)] = (e, bv), l = l0, p(l) ≠ [], (l = l0 ⊃ e.v;mem(l0)) ⊕ (l = l0 ⊃ p(l0) -p firstPersistW(p(l0));p(l0)) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l)) < # p(l), abs(h, rs, p) ⊦
Used simplifier rules: ⊦ fowl0 |W = fowl1 |W → (v ⊕ fowl0 = v ⊕ fowl1 ↔ true); (s) Used formulas: l = l0
| h[firstVolWrite(l, h)] = (e, bv), l = l0, p(l) ≠ [], (l = l0 ⊃ e.v;mem(l0)) ⊕ (l = l0 ⊃ p(l0) -p firstPersistW(p(l0));p(l0)) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l)) < # p(l), abs(h, rs, p) ⊦ |
h[firstVolWrite(l0, h)] = (e, bv), p(l0) ≠ [], e.v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), abs(h, rs, p) ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| h[firstVolWrite(l0, h)] = (e, bv), p(l0) ≠ [], e.v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), abs(h, rs, p) ⊦ |
⊦ abs(h, rs, p) ↔ (∀ l. absloc(events((h | l) | false), rs(l), p(l)))
h[firstVolWrite(l0, h)] = (e, bv), p(l0) ≠ [], e.v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), ∀ l. absloc(events((h | l) | false), rs(l), p(l)) ⊦
Used terms: h, rs, p
| ⊦ abs(h, rs, p) ↔ (∀ l. absloc(events((h | l) | false), rs(l), p(l))) |
| h[firstVolWrite(l0, h)] = (e, bv), p(l0) ≠ [], e.v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), ∀ l. absloc(events((h | l) | false), rs(l), p(l)) ⊦ |
h[firstVolWrite(l0, h)] = (e, bv), p(l0) ≠ [], e.v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(events((h | l0) | false), rs(l0), p(l0)) ⊦
Used terms: l0
| h[firstVolWrite(l0, h)] = (e, bv), p(l0) ≠ [], e.v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(events((h | l0) | false), rs(l0), p(l0)) ⊦ |
(vpe + h0)[firstVolWrite(l0, vpe + h0)] = (e, bv), p(l0) ≠ [], e.v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(events((vpe + h0 | l0) | false), rs(l0), p(l0)), ∀ l0, e, bv, p, mem, rs. ¬ ( h0[firstVolWrite(l0, h0)] = (e, bv) ∧ p(l0) ≠ [] ∧ e.v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0) ∧ firstPersistW(p(l0)) < # p(l0) ∧ absloc(events((h0 | l0) | false), rs(l0), p(l0))) ⊦
Used simplifier rules: absloc-base: ⊦ absloc([], rset, fowl) ↔ fowl |W = []; List('a) freely generated by [], +;; ⊦ [] | l = []; (s) ⊦ [] | b = []; (s) ⊦ events([]) = []; (s) ⊦ x -p # x = x; (s) ⊦ fowl |W = [] → firstPersistW(fowl) = # fowl; (s) ⊦ ¬ n < n; (s)
| (vpe + h0)[firstVolWrite(l0, vpe + h0)] = (e, bv), p(l0) ≠ [], e.v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(events((vpe + h0 | l0) | false), rs(l0), p(l0)), ∀ l0, e, bv, p, mem, rs. ¬ ( h0[firstVolWrite(l0, h0)] = (e, bv) ∧ p(l0) ≠ [] ∧ e.v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0) ∧ firstPersistW(p(l0)) < # p(l0) ∧ absloc(events((h0 | l0) | false), rs(l0), p(l0))) ⊦ |
(vpe ' + h0)[firstVolWrite(l0, vpe ' + h0)] = (e, bv), p(l0) ≠ [], e.v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(events((vpe._1.l = l0 ⊃ vpe ';[]) | false) + events((h0 | l0) | false), rs(l0), p(l0)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ events(h1 + h2) = events(h1) + events(h2); (s) ⊦ h + h0 | b = (h | b) + (h0 | b); (s) ⊦ vpe ' | l = (vpe._1.l = l ⊃ vpe ';[]); (s) ⊦ h + h0 | l0 = (h | l0) + (h0 | l0); (s) ⊦ a + x = a ' + x; (s)
| (vpe ' + h0)[firstVolWrite(l0, vpe ' + h0)] = (e, bv), p(l0) ≠ [], e.v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(events((vpe._1.l = l0 ⊃ vpe ';[]) | false) + events((h0 | l0) | false), rs(l0), p(l0)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦ |
(vpe ' + h0)[firstVolWrite(l0, vpe ' + h0)] = (e, bv), vpe = (e0, bv0), p(l0) ≠ [], e.v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(events((e0.l = l0 ⊃ vpe ';[]) | false) + events((h0 | l0) | false), rs(l0), p(l0)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦
Used terms: e0, bv0
| (vpe ' + h0)[firstVolWrite(l0, vpe ' + h0)] = (e, bv), vpe = (e0, bv0), p(l0) ≠ [], e.v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(events((e0.l = l0 ⊃ vpe ';[]) | false) + events((h0 | l0) | false), rs(l0), p(l0)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦ |
((e0, bv0) ' + h0)[firstVolWrite(l0, (e0, bv0) ' + h0)] = (e, bv), p(l0) ≠ [], e.v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(events((e0.l = l0 ⊃ (e0, bv0) ';[]) | false) + events((h0 | l0) | false), rs(l0), p(l0)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦
| ((e0, bv0) ' + h0)[firstVolWrite(l0, (e0, bv0) ' + h0)] = (e, bv), p(l0) ≠ [], e.v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(events((e0.l = l0 ⊃ (e0, bv0) ';[]) | false) + events((h0 | l0) | false), rs(l0), p(l0)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦ |
e0.l = l0, ((e0, bv0) ' + h0)[firstVolWrite(l0, (e0, bv0) ' + h0)] = (e, bv), p(l0) ≠ [], e.v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(events((e0, bv0) ' | false) + events((h0 | l0) | false), rs(l0), p(l0)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦
((e0, bv0) ' + h0)[firstVolWrite(l0, (e0, bv0) ' + h0)] = (e, bv), e0.l ≠ l0, p(l0) ≠ [], e.v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(events([] | false) + events((h0 | l0) | false), rs(l0), p(l0)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦
| e0.l = l0, ((e0, bv0) ' + h0)[firstVolWrite(l0, (e0, bv0) ' + h0)] = (e, bv), p(l0) ≠ [], e.v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(events((e0, bv0) ' | false) + events((h0 | l0) | false), rs(l0), p(l0)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦ |
((e0, bv0) ' + h0)[firstVolWrite(e0.l, (e0, bv0) ' + h0)] = (e, bv), p(e0.l) ≠ [], e.v ⊕ (p(e0.l) -p firstPersistW(p(e0.l))) ≠ mem(e0.l) ⊕ p(e0.l), firstPersistW(p(e0.l)) < # p(e0.l), absloc(events((¬ bv0 ⊃ (e0, false) ';[])) + events((h0 | e0.l) | false), rs(e0.l), p(e0.l)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ (e, b) ' | b0 = (b ↔ b0 ⊃ (e, b) ';[]); (s)
| ((e0, bv0) ' + h0)[firstVolWrite(e0.l, (e0, bv0) ' + h0)] = (e, bv), p(e0.l) ≠ [], e.v ⊕ (p(e0.l) -p firstPersistW(p(e0.l))) ≠ mem(e0.l) ⊕ p(e0.l), firstPersistW(p(e0.l)) < # p(e0.l), absloc(events((¬ bv0 ⊃ (e0, false) ';[])) + events((h0 | e0.l) | false), rs(e0.l), p(e0.l)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦ |
((e0, bv0) ' + h0)[firstVolWrite(e0.l, (e0, bv0) ' + h0)] = (e, bv), ¬ bv0, p(e0.l) ≠ [], e.v ⊕ (p(e0.l) -p firstPersistW(p(e0.l))) ≠ mem(e0.l) ⊕ p(e0.l), firstPersistW(p(e0.l)) < # p(e0.l), absloc(events((e0, false) ') + events((h0 | e0.l) | false), rs(e0.l), p(e0.l)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦
((e0, bv0) ' + h0)[firstVolWrite(e0.l, (e0, bv0) ' + h0)] = (e, bv), bv0, p(e0.l) ≠ [], e.v ⊕ (p(e0.l) -p firstPersistW(p(e0.l))) ≠ mem(e0.l) ⊕ p(e0.l), firstPersistW(p(e0.l)) < # p(e0.l), absloc(events([]) + events((h0 | e0.l) | false), rs(e0.l), p(e0.l)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦
| ((e0, bv0) ' + h0)[firstVolWrite(e0.l, (e0, bv0) ' + h0)] = (e, bv), ¬ bv0, p(e0.l) ≠ [], e.v ⊕ (p(e0.l) -p firstPersistW(p(e0.l))) ≠ mem(e0.l) ⊕ p(e0.l), firstPersistW(p(e0.l)) < # p(e0.l), absloc(events((e0, false) ') + events((h0 | e0.l) | false), rs(e0.l), p(e0.l)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦ |
((e0, false) ' + h0)[firstVolWrite(e0.l, (e0, false) ' + h0)] = (e, bv), p(e0.l) ≠ [], e.v ⊕ (p(e0.l) -p firstPersistW(p(e0.l))) ≠ mem(e0.l) ⊕ p(e0.l), firstPersistW(p(e0.l)) < # p(e0.l), absloc(e0 ' + events((h0 | e0.l) | false), rs(e0.l), p(e0.l)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦
Used simplifier rules: ⊦ events(vpe ') = vpe._1 '; (s)
| ((e0, false) ' + h0)[firstVolWrite(e0.l, (e0, false) ' + h0)] = (e, bv), p(e0.l) ≠ [], e.v ⊕ (p(e0.l) -p firstPersistW(p(e0.l))) ≠ mem(e0.l) ⊕ p(e0.l), firstPersistW(p(e0.l)) < # p(e0.l), absloc(e0 ' + events((h0 | e0.l) | false), rs(e0.l), p(e0.l)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦ |
((e0, false) ' + h0)[firstVolWrite(e0.l, (e0, false) ' + h0)] = (e, bv), e0 = R(t, l0, v), p(e0.l) ≠ [], e.v ⊕ (p(e0.l) -p firstPersistW(p(e0.l))) ≠ mem(e0.l) ⊕ p(e0.l), firstPersistW(p(e0.l)) < # p(e0.l), absloc(e0 ' + events((h0 | e0.l) | false), rs(e0.l), p(e0.l)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦
((e0, false) ' + h0)[firstVolWrite(e0.l, (e0, false) ' + h0)] = (e, bv), e0 = W(t, l0, v), p(e0.l) ≠ [], e.v ⊕ (p(e0.l) -p firstPersistW(p(e0.l))) ≠ mem(e0.l) ⊕ p(e0.l), firstPersistW(p(e0.l)) < # p(e0.l), absloc(e0 ' + events((h0 | e0.l) | false), rs(e0.l), p(e0.l)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦
Used simplifier rules: RWevent freely generated by R, W;;
| ((e0, false) ' + h0)[firstVolWrite(e0.l, (e0, false) ' + h0)] = (e, bv), e0 = R(t, l0, v), p(e0.l) ≠ [], e.v ⊕ (p(e0.l) -p firstPersistW(p(e0.l))) ≠ mem(e0.l) ⊕ p(e0.l), firstPersistW(p(e0.l)) < # p(e0.l), absloc(e0 ' + events((h0 | e0.l) | false), rs(e0.l), p(e0.l)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦ |
h0[firstVolWrite(l0, h0)] = (e, bv), p(l0) ≠ [], e.v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(events((h0 | l0) | false), rs(l0), p(l0)), ¬ t ∈ rs(l0) → FO(t) ∈ p(l0), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦
Used simplifier rules: absloc-recR: ⊦ absloc(R(t, l, v) ' + el, rset, fowl) ↔ (¬ t ∈ rset → FO(t) ∈ fowl) ∧ absloc(el, rset, fowl); ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ R(t, l, v).l = l; (s) a: ⊦ (x + y) + z = x + y + z; from specification list c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ (a ' + x)[n + 1] = x[n]; (s) ⊦ firstVolWrite(l, (R(t, l0, v), b) ' + h) = firstVolWrite(l, h) + 1; (s)
| h0[firstVolWrite(l0, h0)] = (e, bv), p(l0) ≠ [], e.v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(events((h0 | l0) | false), rs(l0), p(l0)), ¬ t ∈ rs(l0) → FO(t) ∈ p(l0), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦ |
Used terms: l0, e, bv, p, mem, rs
| ((e0, false) ' + h0)[firstVolWrite(e0.l, (e0, false) ' + h0)] = (e, bv), e0 = W(t, l0, v), p(e0.l) ≠ [], e.v ⊕ (p(e0.l) -p firstPersistW(p(e0.l))) ≠ mem(e0.l) ⊕ p(e0.l), firstPersistW(p(e0.l)) < # p(e0.l), absloc(e0 ' + events((h0 | e0.l) | false), rs(e0.l), p(e0.l)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦ |
p(l0) ≠ [], v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(W(t, l0, v) ' + events((h0 | l0) | false), rs(l0), p(l0)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦
Used simplifier rules: ⊦ W(t, l, v).v = v; (s) ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ W(t, l, v).l = l; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (a ' + x)[0] = a; (s) ⊦ firstVolWrite(l, (W(t, l, v), false) ' + h) = 0; (s)
| p(l0) ≠ [], v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(W(t, l0, v) ' + events((h0 | l0) | false), rs(l0), p(l0)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦ |
p(l0) ≠ [], v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(W(t, l0, v) ' + events((h0 | l0) | false), rs(l0), p(l0)) ⊦
| p(l0) ≠ [], v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(W(t, l0, v) ' + events((h0 | l0) | false), rs(l0), p(l0)) ⊦ |
p(l0) ≠ [], v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(W(t, l0, v) ' + events((h0 | l0) | false), rs(l0), p(l0)), ∃ fowl. fowl = p(l0) ⊦
Used formulas: ∃ fowl. fowl = p(l0)
| p(l0) ≠ [], v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(W(t, l0, v) ' + events((h0 | l0) | false), rs(l0), p(l0)), ∃ fowl. fowl = p(l0) ⊦ |
fowl = p(l0), p(l0) ≠ [], v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(W(t, l0, v) ' + events((h0 | l0) | false), rs(l0), p(l0)) ⊦
| fowl = p(l0), p(l0) ≠ [], v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(W(t, l0, v) ' + events((h0 | l0) | false), rs(l0), p(l0)) ⊦ |
fowl ≠ [], v ⊕ (fowl -p firstPersistW(fowl)) ≠ mem(l0) ⊕ fowl, firstPersistW(fowl) < # fowl, absloc(W(t, l0, v) ' + events((h0 | l0) | false), rs(l0), fowl) ⊦
| fowl ≠ [], v ⊕ (fowl -p firstPersistW(fowl)) ≠ mem(l0) ⊕ fowl, firstPersistW(fowl) < # fowl, absloc(W(t, l0, v) ' + events((h0 | l0) | false), rs(l0), fowl) ⊦ |
fow + fowl0 ≠ [], v ⊕ ((fow + fowl0) -p firstPersistW(fow + fowl0)) ≠ mem(l0) ⊕ (fow + fowl0), firstPersistW(fow + fowl0) < #(fow + fowl0), absloc(W(t, l0, v) ' + events((h0 | l0) | false), rs(l0), fow + fowl0), ∀ v, mem, l0, t, h0, rs. ¬ ( fowl0 ≠ [] ∧ v ⊕ (fowl0 -p firstPersistW(fowl0)) ≠ mem(l0) ⊕ fowl0 ∧ firstPersistW(fowl0) < # fowl0 ∧ absloc(W(t, l0, v) ' + events((h0 | l0) | false), rs(l0), fowl0)) ⊦
Used simplifier rules: List('a) freely generated by [], +;;
| fow + fowl0 ≠ [], v ⊕ ((fow + fowl0) -p firstPersistW(fow + fowl0)) ≠ mem(l0) ⊕ (fow + fowl0), firstPersistW(fow + fowl0) < #(fow + fowl0), absloc(W(t, l0, v) ' + events((h0 | l0) | false), rs(l0), fow + fowl0), ∀ v, mem, l0, t, h0, rs. ¬ ( fowl0 ≠ [] ∧ v ⊕ (fowl0 -p firstPersistW(fowl0)) ≠ mem(l0) ⊕ fowl0 ∧ firstPersistW(fowl0) < # fowl0 ∧ absloc(W(t, l0, v) ' + events((h0 | l0) | false), rs(l0), fowl0)) ⊦ |
v ⊕ ((fow ' + fowl0) -p firstPersistW(fow ' + fowl0)) ≠ (mem(l0) ⊕ fow ') ⊕ fowl0, absloc(W(t, l0, v) ' + events((h0 | l0) | false), rs(l0), fow ' + fowl0), firstPersistW(fow ' + fowl0) ≤ # fowl0, fowl0 = [] ∨ (∀ v0, mem0, l, t0, h, rs0. v0 ⊕ (fowl0 -p firstPersistW(fowl0)) = mem0(l) ⊕ fowl0 ∨ ¬ firstPersistW(fowl0) < # fowl0 ∨ ¬ absloc(W(t0, l, v0) ' + events((h | l) | false), rs0(l), fowl0)) ⊦
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m < n + 1 ↔ ¬ n < m; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ m +1 = m + 1; (s) ⊦ #(a ' + x) = (# x)+1; (s) ⊦ a + x = a ' + x; (s) ⊦ v ⊕ (fowl0 + fowl1) = (v ⊕ fowl0) ⊕ fowl1; (s) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s)
| v ⊕ ((fow ' + fowl0) -p firstPersistW(fow ' + fowl0)) ≠ (mem(l0) ⊕ fow ') ⊕ fowl0, absloc(W(t, l0, v) ' + events((h0 | l0) | false), rs(l0), fow ' + fowl0), firstPersistW(fow ' + fowl0) ≤ # fowl0, fowl0 = [] ∨ (∀ v0, mem0, l, t0, h, rs0. v0 ⊕ (fowl0 -p firstPersistW(fowl0)) = mem0(l) ⊕ fowl0 ∨ ¬ firstPersistW(fowl0) < # fowl0 ∨ ¬ absloc(W(t0, l, v0) ' + events((h | l) | false), rs0(l), fowl0)) ⊦ |
fow = FO(t1), v ⊕ ((fow ' + fowl0) -p firstPersistW(fow ' + fowl0)) ≠ (mem(l0) ⊕ fow ') ⊕ fowl0, absloc(W(t, l0, v) ' + events((h0 | l0) | false), rs(l0), fow ' + fowl0), firstPersistW(fow ' + fowl0) ≤ # fowl0, fowl0 = [] ∨ (∀ v0, mem0, l, t0, h, rs0. v0 ⊕ (fowl0 -p firstPersistW(fowl0)) = mem0(l) ⊕ fowl0 ∨ ¬ firstPersistW(fowl0) < # fowl0 ∨ ¬ absloc(W(t0, l, v0) ' + events((h | l) | false), rs0(l), fowl0)) ⊦
Used simplifier rules: absloc-recW-W: ⊦ absloc(W(t, l, v) ' + el, rset, W(v0, t0) ' + fowl) ↔ t0 = t ∧ v0 = v ∧ absloc(el, rset, fowl); FOW freely generated by FO, W;; ⊦ (a ' + x) -p 0 = x; (s) ⊦ v ⊕ W(v0, t) ' = v0; (s) ⊦ firstPersistW(W(v, t) ' + fowl) = 0; (s) ⊦ 0 ≤ m; (s) a: ⊦ (x + y) + z = x + y + z; from specification list
| fow = FO(t1), v ⊕ ((fow ' + fowl0) -p firstPersistW(fow ' + fowl0)) ≠ (mem(l0) ⊕ fow ') ⊕ fowl0, absloc(W(t, l0, v) ' + events((h0 | l0) | false), rs(l0), fow ' + fowl0), firstPersistW(fow ' + fowl0) ≤ # fowl0, fowl0 = [] ∨ (∀ v0, mem0, l, t0, h, rs0. v0 ⊕ (fowl0 -p firstPersistW(fowl0)) = mem0(l) ⊕ fowl0 ∨ ¬ firstPersistW(fowl0) < # fowl0 ∨ ¬ absloc(W(t0, l, v0) ' + events((h | l) | false), rs0(l), fowl0)) ⊦ |
fowl0 ≠ [], v ⊕ (fowl0 -p firstPersistW(fowl0)) ≠ mem(l0) ⊕ fowl0, firstPersistW(fowl0) < # fowl0, absloc(W(t, l0, v) ' + events((h0 | l0) | false), rs(l0), fowl0), ∀ v0, mem0, l, t0, h, rs0. v0 ⊕ (fowl0 -p firstPersistW(fowl0)) = mem0(l) ⊕ fowl0 ∨ ¬ absloc(W(t0, l, v0) ' + events((h | l) | false), rs0(l), fowl0) ⊦
Used simplifier rules: absloc-recW-FO: ⊦ absloc(W(t, l, v) ' + el, rset, FO(t0) ' + fowl) ↔ absloc(W(t, l, v) ' + el, rset, fowl); ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic a: ⊦ (x + y) + z = x + y + z; from specification list c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + 1 ≤ n ↔ m < n; (s) ⊦ firstPersistW(FO(t) ' + fowl) = firstPersistW(fowl) + 1; (s) ⊦ v ⊕ FO(t) ' = v; (s) ⊦ v ⊕ (FO(t) ' + fowl) = v ⊕ fowl; (s) ⊦ a + x = a ' + x; (s) ⊦ (a ' + x) -p (n + 1) = a + (x -p n); (s)
| fowl0 ≠ [], v ⊕ (fowl0 -p firstPersistW(fowl0)) ≠ mem(l0) ⊕ fowl0, firstPersistW(fowl0) < # fowl0, absloc(W(t, l0, v) ' + events((h0 | l0) | false), rs(l0), fowl0), ∀ v0, mem0, l, t0, h, rs0. v0 ⊕ (fowl0 -p firstPersistW(fowl0)) = mem0(l) ⊕ fowl0 ∨ ¬ absloc(W(t0, l, v0) ' + events((h | l) | false), rs0(l), fowl0) ⊦ |
Used terms: v, mem, l0, t, h0, rs
| ((e0, bv0) ' + h0)[firstVolWrite(e0.l, (e0, bv0) ' + h0)] = (e, bv), bv0, p(e0.l) ≠ [], e.v ⊕ (p(e0.l) -p firstPersistW(p(e0.l))) ≠ mem(e0.l) ⊕ p(e0.l), firstPersistW(p(e0.l)) < # p(e0.l), absloc(events([]) + events((h0 | e0.l) | false), rs(e0.l), p(e0.l)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦ |
((e0, true) ' + h0)[firstVolWrite(e0.l, (e0, true) ' + h0)] = (e, bv), p(e0.l) ≠ [], e.v ⊕ (p(e0.l) -p firstPersistW(p(e0.l))) ≠ mem(e0.l) ⊕ p(e0.l), firstPersistW(p(e0.l)) < # p(e0.l), absloc(events((h0 | e0.l) | false), rs(e0.l), p(e0.l)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s) ⊦ events([]) = []; (s)
| ((e0, true) ' + h0)[firstVolWrite(e0.l, (e0, true) ' + h0)] = (e, bv), p(e0.l) ≠ [], e.v ⊕ (p(e0.l) -p firstPersistW(p(e0.l))) ≠ mem(e0.l) ⊕ p(e0.l), firstPersistW(p(e0.l)) < # p(e0.l), absloc(events((h0 | e0.l) | false), rs(e0.l), p(e0.l)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦ |
((e0, true) ' + h0)[firstVolWrite(e0.l, (e0, true) ' + h0)] = (e, bv), e0 = R(t, l0, v), p(e0.l) ≠ [], e.v ⊕ (p(e0.l) -p firstPersistW(p(e0.l))) ≠ mem(e0.l) ⊕ p(e0.l), firstPersistW(p(e0.l)) < # p(e0.l), absloc(events((h0 | e0.l) | false), rs(e0.l), p(e0.l)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦
((e0, true) ' + h0)[firstVolWrite(e0.l, (e0, true) ' + h0)] = (e, bv), e0 = W(t, l0, v), p(e0.l) ≠ [], e.v ⊕ (p(e0.l) -p firstPersistW(p(e0.l))) ≠ mem(e0.l) ⊕ p(e0.l), firstPersistW(p(e0.l)) < # p(e0.l), absloc(events((h0 | e0.l) | false), rs(e0.l), p(e0.l)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦
Used simplifier rules: RWevent freely generated by R, W;;
| ((e0, true) ' + h0)[firstVolWrite(e0.l, (e0, true) ' + h0)] = (e, bv), e0 = R(t, l0, v), p(e0.l) ≠ [], e.v ⊕ (p(e0.l) -p firstPersistW(p(e0.l))) ≠ mem(e0.l) ⊕ p(e0.l), firstPersistW(p(e0.l)) < # p(e0.l), absloc(events((h0 | e0.l) | false), rs(e0.l), p(e0.l)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦ |
h0[firstVolWrite(l0, h0)] = (e, bv), p(l0) ≠ [], e.v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(events((h0 | l0) | false), rs(l0), p(l0)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ R(t, l, v).l = l; (s) a: ⊦ (x + y) + z = x + y + z; from specification list c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ (a ' + x)[n + 1] = x[n]; (s) ⊦ firstVolWrite(l, (R(t, l0, v), b) ' + h) = firstVolWrite(l, h) + 1; (s)
| h0[firstVolWrite(l0, h0)] = (e, bv), p(l0) ≠ [], e.v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(events((h0 | l0) | false), rs(l0), p(l0)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦ |
Used terms: l0, e, bv, p, mem, rs
| ((e0, true) ' + h0)[firstVolWrite(e0.l, (e0, true) ' + h0)] = (e, bv), e0 = W(t, l0, v), p(e0.l) ≠ [], e.v ⊕ (p(e0.l) -p firstPersistW(p(e0.l))) ≠ mem(e0.l) ⊕ p(e0.l), firstPersistW(p(e0.l)) < # p(e0.l), absloc(events((h0 | e0.l) | false), rs(e0.l), p(e0.l)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦ |
h0[firstVolWrite(l0, h0)] = (e, bv), p(l0) ≠ [], e.v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(events((h0 | l0) | false), rs(l0), p(l0)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ W(t, l, v).l = l; (s) a: ⊦ (x + y) + z = x + y + z; from specification list c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ (a ' + x)[n + 1] = x[n]; (s) ⊦ firstVolWrite(l, (W(t, l0, v), true) ' + h) = firstVolWrite(l, h) + 1; (s)
| h0[firstVolWrite(l0, h0)] = (e, bv), p(l0) ≠ [], e.v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(events((h0 | l0) | false), rs(l0), p(l0)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦ |
Used terms: l0, e, bv, p, mem, rs
| ((e0, bv0) ' + h0)[firstVolWrite(l0, (e0, bv0) ' + h0)] = (e, bv), e0.l ≠ l0, p(l0) ≠ [], e.v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(events([] | false) + events((h0 | l0) | false), rs(l0), p(l0)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦ |
((e0, bv0) ' + h0)[firstVolWrite(l0, (e0, bv0) ' + h0)] = (e, bv), e0.l ≠ l0, p(l0) ≠ [], e.v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(events((h0 | l0) | false), rs(l0), p(l0)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s) ⊦ events([]) = []; (s) ⊦ [] | b = []; (s)
| ((e0, bv0) ' + h0)[firstVolWrite(l0, (e0, bv0) ' + h0)] = (e, bv), e0.l ≠ l0, p(l0) ≠ [], e.v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(events((h0 | l0) | false), rs(l0), p(l0)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦ |
((e0, bv0) ' + h0)[firstVolWrite(l0, (e0, bv0) ' + h0)] = (e, bv), e0 = R(t, l1, v), e0.l ≠ l0, p(l0) ≠ [], e.v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(events((h0 | l0) | false), rs(l0), p(l0)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦
((e0, bv0) ' + h0)[firstVolWrite(l0, (e0, bv0) ' + h0)] = (e, bv), e0 = W(t, l1, v), e0.l ≠ l0, p(l0) ≠ [], e.v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(events((h0 | l0) | false), rs(l0), p(l0)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦
Used simplifier rules: RWevent freely generated by R, W;;
| ((e0, bv0) ' + h0)[firstVolWrite(l0, (e0, bv0) ' + h0)] = (e, bv), e0 = R(t, l1, v), e0.l ≠ l0, p(l0) ≠ [], e.v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(events((h0 | l0) | false), rs(l0), p(l0)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦ |
h0[firstVolWrite(l0, h0)] = (e, bv), l1 ≠ l0, p(l0) ≠ [], e.v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(events((h0 | l0) | false), rs(l0), p(l0)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦
Used simplifier rules: ⊦ R(t, l, v).l = l; (s) a: ⊦ (x + y) + z = x + y + z; from specification list c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ (a ' + x)[n + 1] = x[n]; (s) ⊦ firstVolWrite(l, (R(t, l0, v), b) ' + h) = firstVolWrite(l, h) + 1; (s)
| h0[firstVolWrite(l0, h0)] = (e, bv), l1 ≠ l0, p(l0) ≠ [], e.v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(events((h0 | l0) | false), rs(l0), p(l0)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦ |
Used terms: l0, e, bv, p, mem, rs
| ((e0, bv0) ' + h0)[firstVolWrite(l0, (e0, bv0) ' + h0)] = (e, bv), e0 = W(t, l1, v), e0.l ≠ l0, p(l0) ≠ [], e.v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(events((h0 | l0) | false), rs(l0), p(l0)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦ |
h0[firstVolWrite(l0, h0)] = (e, bv), l1 ≠ l0, p(l0) ≠ [], e.v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(events((h0 | l0) | false), rs(l0), p(l0)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ (a ' + x)[n + 1] = x[n]; (s) ⊦ l0 ≠ l → firstVolWrite(l, (W(t, l0, v), b) ' + h) = firstVolWrite(l, h) + 1; (s) ⊦ W(t, l, v).l = l; (s)
| h0[firstVolWrite(l0, h0)] = (e, bv), l1 ≠ l0, p(l0) ≠ [], e.v ⊕ (p(l0) -p firstPersistW(p(l0))) ≠ mem(l0) ⊕ p(l0), firstPersistW(p(l0)) < # p(l0), absloc(events((h0 | l0) | false), rs(l0), p(l0)), ∀ l, e0, bv0, p0, mem0, rs0. h0[firstVolWrite(l, h0)] ≠ (e0, bv0) ∨ p0(l) = [] ∨ e0.v ⊕ (p0(l) -p firstPersistW(p0(l))) = mem0(l) ⊕ p0(l) ∨ ¬ firstPersistW(p0(l)) < # p0(l) ∨ ¬ absloc(events((h0 | l) | false), rs0(l), p0(l)) ⊦ |
Used terms: l0, e, bv, p, mem, rs
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.