| ⊦ (h |W | l) | false ≠ [] → h[firstVolWrite(l, h)] = ((h |W | l) | false).head |
h[firstVolWrite(l, h)] ≠ ((h |W | l) | false).head, (h |W | l) | false ≠ [] ⊦
| h[firstVolWrite(l, h)] ≠ ((h |W | l) | false).head, (h |W | l) | false ≠ [] ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) ≠ [], h[firstVolWrite(l, h)] ≠ (h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2)).head ⊦
Used simplifier rules: restrict-W: ⊦ h |W = h.filter(λ vpe. vpe._1.W?); restrict-loc: ⊦ h | l = h.filter(λ vpe. vpe._1.l = l); restrict-vp: ⊦ h | b = h.filter(λ vpe. vpe._2 ↔ b);
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) ≠ [], h[firstVolWrite(l, h)] ≠ (h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2)).head ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = vpe0 + h0, h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) ≠ [], h[firstVolWrite(l, h)] ≠ vpe0 ⊦
Used simplifier rules: ⊦ x ≠ [] → (head = x.head ∧ tail = x.tail ↔ x = head + tail); (elim) Used terms: h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2), vpe0, h0
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = vpe0 + h0, h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) ≠ [], h[firstVolWrite(l, h)] ≠ vpe0 ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = vpe0._1.l).filter(λ vpe. ¬ vpe._2) = vpe0 ' + h0, h[firstVolWrite(vpe0._1.l, h)] ≠ vpe0, vpe0._1.W?, vpe0 ∈ h ⊦ vpe0._2
Used simplifier rules: ⊦ a ∈ x.filter(p) ↔ a ∈ x ∧ p(a); (s) a: ⊦ (x + y) + z = x + y + z; from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ a + x = a ' + x; (s)
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = vpe0._1.l).filter(λ vpe. ¬ vpe._2) = vpe0 ' + h0, h[firstVolWrite(vpe0._1.l, h)] ≠ vpe0, vpe0._1.W?, vpe0 ∈ h ⊦ vpe0._2 |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = e.l).filter(λ vpe. ¬ vpe._2) = vpe0 ' + h0, ¬ boolvar, vpe0 = (e, boolvar), h[firstVolWrite(e.l, h)] ≠ vpe0, e.W?, vpe0 ∈ h ⊦
Used terms: e, boolvar
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = e.l).filter(λ vpe. ¬ vpe._2) = vpe0 ' + h0, ¬ boolvar, vpe0 = (e, boolvar), h[firstVolWrite(e.l, h)] ≠ vpe0, e.W?, vpe0 ∈ h ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = e.l).filter(λ vpe. ¬ vpe._2) = (e, false) ' + h0, h[firstVolWrite(e.l, h)] ≠ (e, false), e.W?, (e, false) ∈ h ⊦
Used simplifier rules: ⊦ a ∈ x.filter(p) ↔ a ∈ x ∧ p(a); (s) a: ⊦ (x + y) + z = x + y + z; from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = e.l).filter(λ vpe. ¬ vpe._2) = (e, false) ' + h0, h[firstVolWrite(e.l, h)] ≠ (e, false), e.W?, (e, false) ∈ h ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = (e, false) ' + h0, e = W(t, l, v), h[firstVolWrite(l, h)] ≠ (e, false), e.W?, (e, false) ∈ h ⊦
Used simplifier rules: ⊦ e.W? → ((t = e.t ∧ l = e.l) ∧ v = e.v ↔ e = W(t, l, v)); (elim) Used terms: e, t, l, v
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = (e, false) ' + h0, e = W(t, l, v), h[firstVolWrite(l, h)] ≠ (e, false), e.W?, (e, false) ∈ h ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = (W(t, l, v), false) ' + h0, h[firstVolWrite(l, h)] ≠ (W(t, l, v), false), (W(t, l, v), false) ∈ h ⊦
Used simplifier rules: ⊦ W(t, l, v).l = l; (s) ⊦ W(t, l, v).W?; (s) ⊦ a ∈ x.filter(p) ↔ a ∈ x ∧ p(a); (s) a: ⊦ (x + y) + z = x + y + z; from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = (W(t, l, v), false) ' + h0, h[firstVolWrite(l, h)] ≠ (W(t, l, v), false), (W(t, l, v), false) ∈ h ⊦ |
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.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = (W(t, l, v), false) ' + h0, [] = h, h[firstVolWrite(l, h)] ≠ (W(t, l, v), false), (W(t, l, v), false) ∈ h ⊦
∀ h0, l, t, v, h2. ¬ ( h = h0 ∧ h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = (W(t, l, v), false) ' + h2 ∧ h0[firstVolWrite(l, h0)] ≠ (W(t, l, v), false) ∧ (W(t, l, v), false) ∈ h0) ⊦ ∀ h0, l0, t0, v0, h2. ¬ ( (W(t, l, v), true) ' + h = h0 ∧ h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), false) ' + h2 ∧ h0[firstVolWrite(l0, h0)] ≠ (W(t0, l0, v0), false) ∧ (W(t0, l0, v0), false) ∈ h0)
∀ h0, l, t, v, h2. ¬ ( h = h0 ∧ h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = (W(t, l, v), false) ' + h2 ∧ h0[firstVolWrite(l, h0)] ≠ (W(t, l, v), false) ∧ (W(t, l, v), false) ∈ h0) ⊦ ∀ h0, l0, t0, v0, h2. ¬ ( (W(t, l, v), false) ' + h = h0 ∧ h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), false) ' + h2 ∧ h0[firstVolWrite(l0, h0)] ≠ (W(t0, l0, v0), false) ∧ (W(t0, l0, v0), false) ∈ h0)
∀ h0, l, t, v, h2. ¬ ( h = h0 ∧ h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = (W(t, l, v), false) ' + h2 ∧ h0[firstVolWrite(l, h0)] ≠ (W(t, l, v), false) ∧ (W(t, l, v), false) ∈ h0) ⊦ ∀ h0, l0, t0, v0, h2. ¬ ( (R(t, l, v), true) ' + h = h0 ∧ h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), false) ' + h2 ∧ h0[firstVolWrite(l0, h0)] ≠ (W(t0, l0, v0), false) ∧ (W(t0, l0, v0), false) ∈ h0)
∀ h0, l, t, v, h2. ¬ ( h = h0 ∧ h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = (W(t, l, v), false) ' + h2 ∧ h0[firstVolWrite(l, h0)] ≠ (W(t, l, v), false) ∧ (W(t, l, v), false) ∈ h0) ⊦ ∀ h0, l0, t0, v0, h2. ¬ ( (R(t, l, v), false) ' + h = h0 ∧ h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), false) ' + h2 ∧ h0[firstVolWrite(l0, h0)] ≠ (W(t0, l0, v0), false) ∧ (W(t0, l0, v0), false) ∈ h0)
Used terms: h, λ h1. ∀ h, l, t, v, h0. ¬ ( h1 = h ∧ h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = (W(t, l, v), false) ' + h0 ∧ h[firstVolWrite(l, h)] ≠ (W(t, l, v), false) ∧ (W(t, l, v), false) ∈ h)
| 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.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = (W(t, l, v), false) ' + h0, [] = h, h[firstVolWrite(l, h)] ≠ (W(t, l, v), false), (W(t, l, v), false) ∈ h ⊦ |
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ [].filter(p) = []; (s)
| ∀ h0, l, t, v, h2. ¬ ( h = h0 ∧ h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = (W(t, l, v), false) ' + h2 ∧ h0[firstVolWrite(l, h0)] ≠ (W(t, l, v), false) ∧ (W(t, l, v), false) ∈ h0) ⊦ ∀ h0, l0, t0, v0, h2. ¬ ( (W(t, l, v), true) ' + h = h0 ∧ h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), false) ' + h2 ∧ h0[firstVolWrite(l0, h0)] ≠ (W(t0, l0, v0), false) ∧ (W(t0, l0, v0), false) ∈ h0) |
(l = l0 ⊃ (W(t, l0, v), true) ';[]).filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), false) ' + h2, (W(t0, l0, v0), false) ≠ (W(t, l, v), true), h[firstVolWrite(l0, h)] ≠ (W(t0, l0, v0), false), (W(t0, l0, v0), false) ∈ h, ∀ l1, t1, v1, h1. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l1).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v1), false) ' + h1 ∨ h[firstVolWrite(l1, h)] = (W(t1, l1, v1), false) ∨ ¬ (W(t1, l1, v1), false) ∈ h ⊦
Used simplifier rules: first-vol-write-rec-write-persisted: ⊦ firstVolWrite(l, (W(t, l0, v), true) ' + h) = firstVolWrite(l, h) + 1; ⊦ ¬ a ∈ []; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ W(t, l, v).l = l; (s) ⊦ W(t, l, v).W?; (s) ⊦ a ∈ x.filter(p) ↔ a ∈ x ∧ p(a); (s) ⊦ a ∈ x + y ↔ a ∈ x ∨ a ∈ y; (s) in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ a ∈ a0 ' + x ↔ a = a0 ∨ a ∈ x; (s) 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) ⊦ (x + y).filter(p) = x.filter(p) + y.filter(p); (s) ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s)
| (l = l0 ⊃ (W(t, l0, v), true) ';[]).filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), false) ' + h2, (W(t0, l0, v0), false) ≠ (W(t, l, v), true), h[firstVolWrite(l0, h)] ≠ (W(t0, l0, v0), false), (W(t0, l0, v0), false) ∈ h, ∀ l1, t1, v1, h1. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l1).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v1), false) ' + h1 ∨ h[firstVolWrite(l1, h)] = (W(t1, l1, v1), false) ∨ ¬ (W(t1, l1, v1), false) ∈ h ⊦ |
(W(t, l0, v), true) '.filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), false) ' + h2, l = l0, (W(t0, l0, v0), false) ≠ (W(t, l, v), true), h[firstVolWrite(l0, h)] ≠ (W(t0, l0, v0), false), (W(t0, l0, v0), false) ∈ h, ∀ l1, t1, v1, h1. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l1).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v1), false) ' + h1 ∨ h[firstVolWrite(l1, h)] = (W(t1, l1, v1), false) ∨ ¬ (W(t1, l1, v1), false) ∈ h ⊦
[].filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), false) ' + h2, (W(t0, l0, v0), false) ≠ (W(t, l, v), true), h[firstVolWrite(l0, h)] ≠ (W(t0, l0, v0), false), l ≠ l0, (W(t0, l0, v0), false) ∈ h, ∀ l1, t1, v1, h1. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l1).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v1), false) ' + h1 ∨ h[firstVolWrite(l1, h)] = (W(t1, l1, v1), false) ∨ ¬ (W(t1, l1, v1), false) ∈ h ⊦
| (W(t, l0, v), true) '.filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), false) ' + h2, l = l0, (W(t0, l0, v0), false) ≠ (W(t, l, v), true), h[firstVolWrite(l0, h)] ≠ (W(t0, l0, v0), false), (W(t0, l0, v0), false) ∈ h, ∀ l1, t1, v1, h1. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l1).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v1), false) ' + h1 ∨ h[firstVolWrite(l1, h)] = (W(t1, l1, v1), false) ∨ ¬ (W(t1, l1, v1), false) ∈ h ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), false) ' + h2, (W(t0, l0, v0), false) ≠ (W(t, l0, v), true), h[firstVolWrite(l0, h)] ≠ (W(t0, l0, v0), false), (W(t0, l0, v0), false) ∈ h, ∀ l1, t1, v1, h1. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l1).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v1), false) ' + h1 ∨ h[firstVolWrite(l1, h)] = (W(t1, l1, v1), false) ∨ ¬ (W(t1, l1, v1), false) ∈ h ⊦
Used simplifier rules: ⊦ W(t, l, v).l = l; (s) ⊦ W(t, l, v).W?; (s) ⊦ a ∈ x.filter(p) ↔ a ∈ x ∧ p(a); (s) a: ⊦ (x + y) + z = x + y + z; from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ [] + x = x; (s) ⊦ a '.filter(p) = (p(a) ⊃ a ';[]); (s)
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), false) ' + h2, (W(t0, l0, v0), false) ≠ (W(t, l0, v), true), h[firstVolWrite(l0, h)] ≠ (W(t0, l0, v0), false), (W(t0, l0, v0), false) ∈ h, ∀ l1, t1, v1, h1. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l1).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v1), false) ' + h1 ∨ h[firstVolWrite(l1, h)] = (W(t1, l1, v1), false) ∨ ¬ (W(t1, l1, v1), false) ∈ h ⊦ |
Used terms: l0, t0, v0, h2
| [].filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), false) ' + h2, (W(t0, l0, v0), false) ≠ (W(t, l, v), true), h[firstVolWrite(l0, h)] ≠ (W(t0, l0, v0), false), l ≠ l0, (W(t0, l0, v0), false) ∈ h, ∀ l1, t1, v1, h1. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l1).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v1), false) ' + h1 ∨ h[firstVolWrite(l1, h)] = (W(t1, l1, v1), false) ∨ ¬ (W(t1, l1, v1), false) ∈ h ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), false) ' + h2, (W(t0, l0, v0), false) ≠ (W(t, l, v), true), h[firstVolWrite(l0, h)] ≠ (W(t0, l0, v0), false), l ≠ l0, (W(t0, l0, v0), false) ∈ h, ∀ l1, t1, v1, h1. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l1).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v1), false) ' + h1 ∨ h[firstVolWrite(l1, h)] = (W(t1, l1, v1), false) ∨ ¬ (W(t1, l1, v1), false) ∈ h ⊦
Used simplifier rules: ⊦ W(t, l, v).l = l; (s) ⊦ W(t, l, v).W?; (s) ⊦ a ∈ x.filter(p) ↔ a ∈ x ∧ p(a); (s) a: ⊦ (x + y) + z = x + y + z; from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ [] + x = x; (s) ⊦ [].filter(p) = []; (s)
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), false) ' + h2, (W(t0, l0, v0), false) ≠ (W(t, l, v), true), h[firstVolWrite(l0, h)] ≠ (W(t0, l0, v0), false), l ≠ l0, (W(t0, l0, v0), false) ∈ h, ∀ l1, t1, v1, h1. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l1).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v1), false) ' + h1 ∨ h[firstVolWrite(l1, h)] = (W(t1, l1, v1), false) ∨ ¬ (W(t1, l1, v1), false) ∈ h ⊦ |
Used terms: l0, t0, v0, h2
| ∀ h0, l, t, v, h2. ¬ ( h = h0 ∧ h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = (W(t, l, v), false) ' + h2 ∧ h0[firstVolWrite(l, h0)] ≠ (W(t, l, v), false) ∧ (W(t, l, v), false) ∈ h0) ⊦ ∀ h0, l0, t0, v0, h2. ¬ ( (W(t, l, v), false) ' + h = h0 ∧ h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), false) ' + h2 ∧ h0[firstVolWrite(l0, h0)] ≠ (W(t0, l0, v0), false) ∧ (W(t0, l0, v0), false) ∈ h0) |
(l = l0 ⊃ (W(t, l0, v), false) ';[]).filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), false) ' + h2, ((W(t, l, v), false) ' + h)[firstVolWrite(l0, (W(t, l, v), false) ' + h)] ≠ (W(t0, l0, v0), false), ∀ l1, t1, v1, h1. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l1).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v1), false) ' + h1 ∨ h[firstVolWrite(l1, h)] = (W(t1, l1, v1), false) ∨ ¬ (W(t1, l1, v1), false) ∈ h, W(t0, l0, v0) = W(t, l, v) ∨ (W(t0, l0, v0), false) ∈ h, (W(t0, l0, v0), false) ∈ (l = l0 ⊃ (W(t, l0, v), false) ';[]) ∨ (W(t0, l0, v0), false) ∈ h ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ W(t, l, v).l = l; (s) ⊦ W(t, l, v).W?; (s) ⊦ a ∈ x.filter(p) ↔ a ∈ x ∧ p(a); (s) ⊦ a ∈ x + y ↔ a ∈ x ∨ a ∈ y; (s) in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ a ∈ a0 ' + x ↔ a = a0 ∨ a ∈ x; (s) ⊦ (x + y).filter(p) = x.filter(p) + y.filter(p); (s) ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s)
| (l = l0 ⊃ (W(t, l0, v), false) ';[]).filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), false) ' + h2, ((W(t, l, v), false) ' + h)[firstVolWrite(l0, (W(t, l, v), false) ' + h)] ≠ (W(t0, l0, v0), false), ∀ l1, t1, v1, h1. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l1).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v1), false) ' + h1 ∨ h[firstVolWrite(l1, h)] = (W(t1, l1, v1), false) ∨ ¬ (W(t1, l1, v1), false) ∈ h, W(t0, l0, v0) = W(t, l, v) ∨ (W(t0, l0, v0), false) ∈ h, (W(t0, l0, v0), false) ∈ (l = l0 ⊃ (W(t, l0, v), false) ';[]) ∨ (W(t0, l0, v0), false) ∈ h ⊦ |
[].filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), false) ' + h2, ((W(t, l, v), false) ' + h)[firstVolWrite(l0, (W(t, l, v), false) ' + h)] ≠ (W(t0, l0, v0), false), l ≠ l0, ∀ l1, t1, v1, h1. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l1).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v1), false) ' + h1 ∨ h[firstVolWrite(l1, h)] = (W(t1, l1, v1), false) ∨ ¬ (W(t1, l1, v1), false) ∈ h, (W(t0, l0, v0), false) ∈ (l = l0 ⊃ (W(t, l0, v), false) ';[]) ∨ (W(t0, l0, v0), false) ∈ h, W(t0, l0, v0) = W(t, l, v) ∨ (W(t0, l0, v0), false) ∈ h ⊦
Used simplifier rules: first-vol-write-rec-write-unpersisted: ⊦ firstVolWrite(l, (W(t, l, v), false) ' + h) = 0; ⊦ a '.filter(p) = (p(a) ⊃ a ';[]); (s) ⊦ a ' + x = a0 ' + y ↔ a = a0 ∧ x = y; (ws) ⊦ (a ' + x)[0] = a; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ W(t, l, v) = W(t0, l0, v0) ↔ t = t0 ∧ l = l0 ∧ v = v0; (ws)
| [].filter(λ vpe. ¬ vpe._2) + h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), false) ' + h2, ((W(t, l, v), false) ' + h)[firstVolWrite(l0, (W(t, l, v), false) ' + h)] ≠ (W(t0, l0, v0), false), l ≠ l0, ∀ l1, t1, v1, h1. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l1).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v1), false) ' + h1 ∨ h[firstVolWrite(l1, h)] = (W(t1, l1, v1), false) ∨ ¬ (W(t1, l1, v1), false) ∈ h, (W(t0, l0, v0), false) ∈ (l = l0 ⊃ (W(t, l0, v), false) ';[]) ∨ (W(t0, l0, v0), false) ∈ h, W(t0, l0, v0) = W(t, l, v) ∨ (W(t0, l0, v0), false) ∈ h ⊦ |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), false) ' + h2, h[firstVolWrite(l0, h)] ≠ (W(t0, l0, v0), false), l ≠ l0, (W(t0, l0, v0), false) ∈ h, ∀ l1, t1, v1, h1. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l1).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v1), false) ' + h1 ∨ h[firstVolWrite(l1, h)] = (W(t1, l1, v1), false) ∨ ¬ (W(t1, l1, v1), false) ∈ h ⊦
Used simplifier rules: first-vol-write-rec-write-other: ⊦ l0 ≠ l → firstVolWrite(l, (W(t, l0, v), b) ' + h) = firstVolWrite(l, h) + 1; ⊦ W(t, l, v).l = l; (s) ⊦ W(t, l, v).W?; (s) ⊦ a ∈ x.filter(p) ↔ a ∈ x ∧ p(a); (s) a: ⊦ (x + y) + z = x + y + z; from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ ¬ a ∈ []; (s) 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) ⊦ [] + x = x; (s) ⊦ [].filter(p) = []; (s)
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), false) ' + h2, h[firstVolWrite(l0, h)] ≠ (W(t0, l0, v0), false), l ≠ l0, (W(t0, l0, v0), false) ∈ h, ∀ l1, t1, v1, h1. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l1).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v1), false) ' + h1 ∨ h[firstVolWrite(l1, h)] = (W(t1, l1, v1), false) ∨ ¬ (W(t1, l1, v1), false) ∈ h ⊦ |
Used terms: l0, t0, v0, h2
| ∀ h0, l, t, v, h2. ¬ ( h = h0 ∧ h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = (W(t, l, v), false) ' + h2 ∧ h0[firstVolWrite(l, h0)] ≠ (W(t, l, v), false) ∧ (W(t, l, v), false) ∈ h0) ⊦ ∀ h0, l0, t0, v0, h2. ¬ ( (R(t, l, v), true) ' + h = h0 ∧ h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), false) ' + h2 ∧ h0[firstVolWrite(l0, h0)] ≠ (W(t0, l0, v0), false) ∧ (W(t0, l0, v0), false) ∈ h0) |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), false) ' + h2, h[firstVolWrite(l0, h)] ≠ (W(t0, l0, v0), false), (W(t0, l0, v0), false) ∈ h, ∀ l1, t1, v1, h1. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l1).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v1), false) ' + h1 ∨ h[firstVolWrite(l1, h)] = (W(t1, l1, v1), false) ∨ ¬ (W(t1, l1, v1), false) ∈ h ⊦
Used simplifier rules: first-vol-write-rec-read: ⊦ firstVolWrite(l, (R(t, l0, v), b) ' + h) = firstVolWrite(l, h) + 1; ⊦ W(t, l, v).l = l; (s) ⊦ W(t, l, v).W?; (s) ⊦ a ∈ x.filter(p) ↔ a ∈ x ∧ p(a); (s) a: ⊦ (x + y) + z = x + y + z; from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ a ∈ a0 ' + x ↔ a = a0 ∨ a ∈ x; (s) 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) ⊦ [] + x = x; (s) ⊦ ¬ R(t, l, v).W?; (s) ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s)
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), false) ' + h2, h[firstVolWrite(l0, h)] ≠ (W(t0, l0, v0), false), (W(t0, l0, v0), false) ∈ h, ∀ l1, t1, v1, h1. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l1).filter(λ vpe. ¬ vpe._2) ≠ (W(t1, l1, v1), false) ' + h1 ∨ h[firstVolWrite(l1, h)] = (W(t1, l1, v1), false) ∨ ¬ (W(t1, l1, v1), false) ∈ h ⊦ |
Used terms: l0, t0, v0, h2
| ∀ h0, l, t, v, h2. ¬ ( h = h0 ∧ h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = (W(t, l, v), false) ' + h2 ∧ h0[firstVolWrite(l, h0)] ≠ (W(t, l, v), false) ∧ (W(t, l, v), false) ∈ h0) ⊦ ∀ h0, l0, t0, v0, h2. ¬ ( (R(t, l, v), false) ' + h = h0 ∧ h0.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), false) ' + h2 ∧ h0[firstVolWrite(l0, h0)] ≠ (W(t0, l0, v0), false) ∧ (W(t0, l0, v0), false) ∈ h0) |
h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), false) ' + h2, h[firstVolWrite(l0, h)] ≠ (W(t0, l0, v0), false), (W(t0, l0, v0), false) ∈ h, ∀ l, t, v, h1. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) ≠ (W(t, l, v), false) ' + h1 ∨ h[firstVolWrite(l, h)] = (W(t, l, v), false) ∨ ¬ (W(t, l, v), false) ∈ h ⊦
Used simplifier rules: first-vol-write-rec-read: ⊦ firstVolWrite(l, (R(t, l0, v), b) ' + h) = firstVolWrite(l, h) + 1; ⊦ W(t, l, v).l = l; (s) ⊦ W(t, l, v).W?; (s) ⊦ a ∈ x.filter(p) ↔ a ∈ x ∧ p(a); (s) a: ⊦ (x + y) + z = x + y + z; from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ R(t, l, v) ≠ W(t0, l0, v0); (s) ⊦ a ∈ a0 ' + x ↔ a = a0 ∨ a ∈ x; (s) 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) ⊦ [] + x = x; (s) ⊦ ¬ R(t, l, v).W?; (s) ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s)
| h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l0).filter(λ vpe. ¬ vpe._2) = (W(t0, l0, v0), false) ' + h2, h[firstVolWrite(l0, h)] ≠ (W(t0, l0, v0), false), (W(t0, l0, v0), false) ∈ h, ∀ l, t, v, h1. h.filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) ≠ (W(t, l, v), false) ' + h1 ∨ h[firstVolWrite(l, h)] = (W(t, l, v), false) ∨ ¬ (W(t, l, v), false) ∈ h ⊦ |
Used terms: l0, t0, v0, h2
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.