| ⊦ ((h.take(firstVolWrite(l, h)))|W | l) | false = [] |
((h.take(firstVolWrite(l, h)))|W | l) | false ≠ [] ⊦
| ((h.take(firstVolWrite(l, h)))|W | l) | false ≠ [] ⊦ |
h.take(firstVolWrite(l, h)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) ≠ [] ⊦
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.take(firstVolWrite(l, h)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) ≠ [] ⊦ |
[].take(firstVolWrite(l, [])).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) ≠ [] ⊦
(vpe + h0).take(firstVolWrite(l, vpe + h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦
Used simplifier rules: List('a) freely generated by [], +;;
| [].take(firstVolWrite(l, [])).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) ≠ [] ⊦ |
⊦ firstVolWrite(l, h) = h.indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)
Used simplifier rules: ⊦ [].indexWhere(p) = 0; (s) ⊦ x.take(0) = []; (s) ⊦ [].filter(p) = []; (s) Used terms: l, []
| ⊦ firstVolWrite(l, h) = h.indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2) |
| (vpe + h0).take(firstVolWrite(l, vpe + h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦ |
(vpe ' + h0).take(firstVolWrite(l, vpe ' + h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦
Used simplifier rules: ⊦ a + x = a ' + x; (s)
| (vpe ' + h0).take(firstVolWrite(l, vpe ' + h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦ |
⊦ firstVolWrite(l, h) = h.indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)
(vpe ' + h0).take((vpe ' + h0).indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l) .filter (λ vpe. ¬ vpe._2 ) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦
Used terms: l, vpe ' + h0
| ⊦ firstVolWrite(l, h) = h.indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2) |
| (vpe ' + h0).take((vpe ' + h0).indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l) .filter (λ vpe. ¬ vpe._2 ) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦ |
vpe = (e, b), (vpe ' + h0).take((vpe ' + h0).indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l) .filter (λ vpe. ¬ vpe._2 ) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦
| vpe = (e, b), (vpe ' + h0).take((vpe ' + h0).indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l) .filter (λ vpe. ¬ vpe._2 ) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦ |
((e, b) ' + h0).take(((e, b) ' + h0).indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l) .filter (λ vpe. ¬ vpe._2 ) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦
| ((e, b) ' + h0).take(((e, b) ' + h0).indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l) .filter (λ vpe. ¬ vpe._2 ) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦ |
e = R(t, l0, v), ((e, b) ' + h0).take(((e, b) ' + h0).indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l) .filter (λ vpe. ¬ vpe._2 ) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦
e = W(t, l0, v), ((e, b) ' + h0).take(((e, b) ' + h0).indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l) .filter (λ vpe. ¬ vpe._2 ) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦
Used simplifier rules: RWevent freely generated by R, W;;
| e = R(t, l0, v), ((e, b) ' + h0).take(((e, b) ' + h0).indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l) .filter (λ vpe. ¬ vpe._2 ) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦ |
((R(t, l0, v), b) ' + h0).take(((R(t, l0, v), b) ' + h0).indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?) .filter (λ vpe. vpe._1.l = l ) .filter (λ vpe. ¬ vpe._2 ) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦
| ((R(t, l0, v), b) ' + h0).take(((R(t, l0, v), b) ' + h0).indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?) .filter (λ vpe. vpe._1.l = l ) .filter (λ vpe. ¬ vpe._2 ) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦ |
⊦ ¬ p(a) → (a ' + x).indexWhere(p) = 1 + x.indexWhere(p)
((R(t, l0, v), b) ' + h0).take(1 + h0.indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l) .filter (λ vpe. ¬ vpe._2 ) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦ (R(t, l0, v), b)._1.W? ∧ (R(t, l0, v), b)._1.l = l ∧ ¬ (R(t, l0, v), b)._2
Used simplifier rules: ⊦ R(t, l, v).l = l; (s) ⊦ ¬ R(t, l, v).W?; (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2, (R(t, l0, v), b), h0
| ⊦ ¬ p(a) → (a ' + x).indexWhere(p) = 1 + x.indexWhere(p) |
| ((R(t, l0, v), b) ' + h0).take(1 + h0.indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l) .filter (λ vpe. ¬ vpe._2 ) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦ (R(t, l0, v), b)._1.W? ∧ (R(t, l0, v), b)._1.l = l ∧ ¬ (R(t, l0, v), b)._2 |
h0.take(h0.indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦
Used simplifier rules: ⊦ ¬ R(t, l, v).W?; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s) ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ a + x = a ' + x; (s) ⊦ (a ' + x).take(n + 1) = a + x.take(n); (s)
| h0.take(h0.indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦ |
h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], h0.take(h0.indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦
Used terms: l
| h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], h0.take(h0.indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦ |
⊦ x = [] ↔ ¬(∃ a. a ∈ x)
h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], ∃ a. a ∈ h0.take(h0.indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) ⊦
Used terms: h0.take(h0.indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)) .filter (λ vpe. vpe._1.W? ) .filter (λ vpe. vpe._1.l = l ) .filter (λ vpe. ¬ vpe._2 )
| ⊦ x = [] ↔ ¬(∃ a. a ∈ x) |
| h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], ∃ a. a ∈ h0.take(h0.indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) ⊦ |
h0.take(firstVolWrite(vpe._1.l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe0. vpe0._1.l = vpe._1.l).filter(λ vpe. ¬ vpe._2) = [], vpe._1.W?, vpe ∈ h0.take(h0.indexWhere(λ vpe0. vpe0._1.W? ∧ vpe0._1.l = vpe._1.l ∧ ¬ vpe0._2)), ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦ vpe._2
Used simplifier rules: ⊦ a ∈ x.filter(p) ↔ a ∈ x ∧ p(a); (s)
| h0.take(firstVolWrite(vpe._1.l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe0. vpe0._1.l = vpe._1.l).filter(λ vpe. ¬ vpe._2) = [], vpe._1.W?, vpe ∈ h0.take(h0.indexWhere(λ vpe0. vpe0._1.W? ∧ vpe0._1.l = vpe._1.l ∧ ¬ vpe0._2)), ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦ vpe._2 |
h0.take(firstVolWrite(e.l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe0. vpe0._1.l = e.l).filter(λ vpe. ¬ vpe._2) = [], ¬ boolvar, vpe = (e, boolvar), e.W?, vpe ∈ h0.take(h0.indexWhere(λ vpe0. vpe0._1.W? ∧ vpe0._1.l = e.l ∧ ¬ vpe0._2)), ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦
Used terms: e, boolvar
| h0.take(firstVolWrite(e.l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe0. vpe0._1.l = e.l).filter(λ vpe. ¬ vpe._2) = [], ¬ boolvar, vpe = (e, boolvar), e.W?, vpe ∈ h0.take(h0.indexWhere(λ vpe0. vpe0._1.W? ∧ vpe0._1.l = e.l ∧ ¬ vpe0._2)), ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦ |
h0.take(firstVolWrite(e.l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe0. vpe0._1.l = e.l).filter(λ vpe. ¬ vpe._2) = [], e.W?, (e, false) ∈ h0.take(h0.indexWhere(λ vpe0. vpe0._1.W? ∧ vpe0._1.l = e.l ∧ ¬ vpe0._2)), ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦
| h0.take(firstVolWrite(e.l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe0. vpe0._1.l = e.l).filter(λ vpe. ¬ vpe._2) = [], e.W?, (e, false) ∈ h0.take(h0.indexWhere(λ vpe0. vpe0._1.W? ∧ vpe0._1.l = e.l ∧ ¬ vpe0._2)), ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦ |
h0.take(firstVolWrite(l0, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe0. vpe0._1.l = l0).filter(λ vpe. ¬ vpe._2) = [], e = W(t, l0, v), e.W?, (e, false) ∈ h0.take(h0.indexWhere(λ vpe0. vpe0._1.W? ∧ vpe0._1.l = l0 ∧ ¬ vpe0._2)), ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦
Used simplifier rules: ⊦ e.W? → ((t = e.t ∧ l = e.l) ∧ v = e.v ↔ e = W(t, l, v)); (elim) Used terms: e, t, l0, v
| h0.take(firstVolWrite(l0, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe0. vpe0._1.l = l0).filter(λ vpe. ¬ vpe._2) = [], e = W(t, l0, v), e.W?, (e, false) ∈ h0.take(h0.indexWhere(λ vpe0. vpe0._1.W? ∧ vpe0._1.l = l0 ∧ ¬ vpe0._2)), ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦ |
h0.take(firstVolWrite(l0, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe0. vpe0._1.l = l0).filter(λ vpe. ¬ vpe._2) = [], (W(t, l0, v), false) ∈ h0.take(h0.indexWhere(λ vpe0. vpe0._1.W? ∧ vpe0._1.l = l0 ∧ ¬ vpe0._2)), ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦
Used simplifier rules: ⊦ W(t, l, v).W?; (s)
| h0.take(firstVolWrite(l0, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe0. vpe0._1.l = l0).filter(λ vpe. ¬ vpe._2) = [], (W(t, l0, v), false) ∈ h0.take(h0.indexWhere(λ vpe0. vpe0._1.W? ∧ vpe0._1.l = l0 ∧ ¬ vpe0._2)), ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦ |
⊦ x = [] ↔ ¬(∃ a. a ∈ x)
(W(t, l0, v), false) ∈ h0.take(h0.indexWhere(λ vpe0. vpe0._1.W? ∧ vpe0._1.l = l0 ∧ ¬ vpe0._2)), ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], ∀ a. ¬ a ∈ h0.take(firstVolWrite(l0, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe0. vpe0._1.l = l0).filter(λ vpe. ¬ vpe._2) ⊦
Used terms: h0.take(firstVolWrite(l0, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe0. vpe0._1.l = l0) .filter (λ vpe. ¬ vpe._2 )
| ⊦ x = [] ↔ ¬(∃ a. a ∈ x) |
| (W(t, l0, v), false) ∈ h0.take(h0.indexWhere(λ vpe0. vpe0._1.W? ∧ vpe0._1.l = l0 ∧ ¬ vpe0._2)), ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], ∀ a. ¬ a ∈ h0.take(firstVolWrite(l0, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe0. vpe0._1.l = l0).filter(λ vpe. ¬ vpe._2) ⊦ |
(W(t, l0, v), false) ∈ h0.take(h0.indexWhere(λ vpe0. vpe0._1.W? ∧ vpe0._1.l = l0 ∧ ¬ vpe0._2)), ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], ∀ a. ¬ a ∈ h0.take(firstVolWrite(a._1.l, h0)) ∨ ¬ a._1.W? ∨ a._1.l ≠ l0 ∨ a._2 ⊦
Used simplifier rules: ⊦ a ∈ x.filter(p) ↔ a ∈ x ∧ p(a); (s)
| (W(t, l0, v), false) ∈ h0.take(h0.indexWhere(λ vpe0. vpe0._1.W? ∧ vpe0._1.l = l0 ∧ ¬ vpe0._2)), ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], ∀ a. ¬ a ∈ h0.take(firstVolWrite(a._1.l, h0)) ∨ ¬ a._1.W? ∨ a._1.l ≠ l0 ∨ a._2 ⊦ |
(W(t, l0, v), false) ∈ h0.take(h0.indexWhere(λ vpe0. vpe0._1.W? ∧ vpe0._1.l = l0 ∧ ¬ vpe0._2)), ∀ a. ¬ a ∈ h0.take(firstVolWrite(a._1.l, h0)) ∨ ¬ a._1.W? ∨ a._1.l ≠ l0 ∨ a._2, ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], ¬ (W(t, l0, v), false) ∈ h0.take(firstVolWrite((W(t, l0, v), false)._1.l, h0)) ∨ ¬ (W(t, l0, v), false)._1.W? ∨ (W(t, l0, v), false)._1.l ≠ l0 ∨ (W(t, l0, v), false)._2 ⊦
Used terms: (W(t, l0, v), false)
| (W(t, l0, v), false) ∈ h0.take(h0.indexWhere(λ vpe0. vpe0._1.W? ∧ vpe0._1.l = l0 ∧ ¬ vpe0._2)), ∀ a. ¬ a ∈ h0.take(firstVolWrite(a._1.l, h0)) ∨ ¬ a._1.W? ∨ a._1.l ≠ l0 ∨ a._2, ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], ¬ (W(t, l0, v), false) ∈ h0.take(firstVolWrite((W(t, l0, v), false)._1.l, h0)) ∨ ¬ (W(t, l0, v), false)._1.W? ∨ (W(t, l0, v), false)._1.l ≠ l0 ∨ (W(t, l0, v), false)._2 ⊦ |
(W(t, l0, v), false) ∈ h0.take(h0.indexWhere(λ vpe0. vpe0._1.W? ∧ vpe0._1.l = l0 ∧ ¬ vpe0._2)), ¬ (W(t, l0, v), false) ∈ h0.take(firstVolWrite(l0, h0)), ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], ∀ a. ¬ a ∈ h0.take(firstVolWrite(a._1.l, h0)) ∨ ¬ a._1.W? ∨ a._1.l ≠ l0 ∨ a._2 ⊦
Used simplifier rules: ⊦ W(t, l, v).l = l; (s) ⊦ W(t, l, v).W?; (s)
| (W(t, l0, v), false) ∈ h0.take(h0.indexWhere(λ vpe0. vpe0._1.W? ∧ vpe0._1.l = l0 ∧ ¬ vpe0._2)), ¬ (W(t, l0, v), false) ∈ h0.take(firstVolWrite(l0, h0)), ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], ∀ a. ¬ a ∈ h0.take(firstVolWrite(a._1.l, h0)) ∨ ¬ a._1.W? ∨ a._1.l ≠ l0 ∨ a._2 ⊦ |
⊦ firstVolWrite(l, h) = h.indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)
Used terms: l0, h0
| ⊦ firstVolWrite(l, h) = h.indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2) |
| e = W(t, l0, v), ((e, b) ' + h0).take(((e, b) ' + h0).indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l) .filter (λ vpe. ¬ vpe._2 ) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦ |
((W(t, l0, v), b) ' + h0).take(((W(t, l0, v), b) ' + h0).indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?) .filter (λ vpe. vpe._1.l = l ) .filter (λ vpe. ¬ vpe._2 ) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦
| ((W(t, l0, v), b) ' + h0).take(((W(t, l0, v), b) ' + h0).indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?) .filter (λ vpe. vpe._1.l = l ) .filter (λ vpe. ¬ vpe._2 ) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦ |
b, ((W(t, l0, v), b) ' + h0).take(((W(t, l0, v), b) ' + h0).indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?) .filter (λ vpe. vpe._1.l = l ) .filter (λ vpe. ¬ vpe._2 ) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦
¬ b, ((W(t, l0, v), b) ' + h0).take(((W(t, l0, v), b) ' + h0).indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?) .filter (λ vpe. vpe._1.l = l ) .filter (λ vpe. ¬ vpe._2 ) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦
Used formulas: b
| b, ((W(t, l0, v), b) ' + h0).take(((W(t, l0, v), b) ' + h0).indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?) .filter (λ vpe. vpe._1.l = l ) .filter (λ vpe. ¬ vpe._2 ) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦ |
((W(t, l0, v), true) ' + h0).take(((W(t, l0, v), true) ' + h0).indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?) .filter (λ vpe. vpe._1.l = l ) .filter (λ vpe. ¬ vpe._2 ) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦
| ((W(t, l0, v), true) ' + h0).take(((W(t, l0, v), true) ' + h0).indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?) .filter (λ vpe. vpe._1.l = l ) .filter (λ vpe. ¬ vpe._2 ) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦ |
⊦ ¬ p(a) → (a ' + x).indexWhere(p) = 1 + x.indexWhere(p)
((W(t, l0, v), true) ' + h0).take(1 + h0.indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?) .filter (λ vpe. vpe._1.l = l ) .filter (λ vpe. ¬ vpe._2 ) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦ (W(t, l0, v), true)._1.W? ∧ (W(t, l0, v), true)._1.l = l ∧ ¬ (W(t, l0, v), true)._2
Used simplifier rules: ⊦ W(t, l, v).l = l; (s) ⊦ W(t, l, v).W?; (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2, (W(t, l0, v), true), h0
| ⊦ ¬ p(a) → (a ' + x).indexWhere(p) = 1 + x.indexWhere(p) |
| ((W(t, l0, v), true) ' + h0).take(1 + h0.indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?) .filter (λ vpe. vpe._1.l = l ) .filter (λ vpe. ¬ vpe._2 ) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦ (W(t, l0, v), true)._1.W? ∧ (W(t, l0, v), true)._1.l = l ∧ ¬ (W(t, l0, v), true)._2 |
∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦ (l0 = l ⊃ (W(t, l, v), true) ';[]).filter(λ vpe. ¬ vpe._2) = [] ∧ h0.take(h0.indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = []
Used simplifier rules: ⊦ W(t, l, v).l = l; (s) ⊦ W(t, l, v).W?; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ (x + y).filter(p) = x.filter(p) + y.filter(p); (s) ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ a + x = a ' + x; (s) ⊦ (a ' + x).take(n + 1) = a + x.take(n); (s)
| ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦ (l0 = l ⊃ (W(t, l, v), true) ';[]).filter(λ vpe. ¬ vpe._2) = [] ∧ h0.take(h0.indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] |
(l0 = l ⊃ (W(t, l, v), true) ';[]).filter(λ vpe. ¬ vpe._2) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦
h0.take(h0.indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦
| (l0 = l ⊃ (W(t, l, v), true) ';[]).filter(λ vpe. ¬ vpe._2) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦ |
Used simplifier rules: ⊦ [].filter(p) = []; (s) ⊦ a '.filter(p) = (p(a) ⊃ a ';[]); (s) Used formulas: l0 = l
| h0.take(h0.indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦ |
h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], h0.take(h0.indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) ≠ [] ⊦
Used terms: l
| h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], h0.take(h0.indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) ≠ [] ⊦ |
⊦ firstVolWrite(l, h) = h.indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)
Used terms: l, h0
| ⊦ firstVolWrite(l, h) = h.indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2) |
| ¬ b, ((W(t, l0, v), b) ' + h0).take(((W(t, l0, v), b) ' + h0).indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?) .filter (λ vpe. vpe._1.l = l ) .filter (λ vpe. ¬ vpe._2 ) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦ |
((W(t, l0, v), false) ' + h0).take(((W(t, l0, v), false) ' + h0).indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?) .filter (λ vpe. vpe._1.l = l ) .filter (λ vpe. ¬ vpe._2 ) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦
| ((W(t, l0, v), false) ' + h0).take(((W(t, l0, v), false) ' + h0).indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?) .filter (λ vpe. vpe._1.l = l ) .filter (λ vpe. ¬ vpe._2 ) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦ |
⊦ p(a) → (a ' + x).indexWhere(p) = 0
((W(t, l0, v), false) ' + h0).take(((W(t, l0, v), false) ' + h0).indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?) .filter (λ vpe. vpe._1.l = l ) .filter (λ vpe. ¬ vpe._2 ) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦ (W(t, l0, v), false)._1.W? ∧ (W(t, l0, v), false)._1.l = l ∧ ¬ (W(t, l0, v), false)._2
Used simplifier rules: ⊦ x.take(0) = []; (s) ⊦ W(t, l, v).l = l; (s) ⊦ [].filter(p) = []; (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2, (W(t, l0, v), false), h0
| ⊦ p(a) → (a ' + x).indexWhere(p) = 0 |
| ((W(t, l0, v), false) ' + h0).take(((W(t, l0, v), false) ' + h0).indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?) .filter (λ vpe. vpe._1.l = l ) .filter (λ vpe. ¬ vpe._2 ) ≠ [], ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦ (W(t, l0, v), false)._1.W? ∧ (W(t, l0, v), false)._1.l = l ∧ ¬ (W(t, l0, v), false)._2 |
((W(t, l0, v), false) ' + h0).take(((W(t, l0, v), false) ' + h0).indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?) .filter (λ vpe. vpe._1.l = l ) .filter (λ vpe. ¬ vpe._2 ) ≠ [], l0 ≠ l, ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦
Used simplifier rules: ⊦ W(t, l, v).l = l; (s) ⊦ W(t, l, v).W?; (s)
| ((W(t, l0, v), false) ' + h0).take(((W(t, l0, v), false) ' + h0).indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?) .filter (λ vpe. vpe._1.l = l ) .filter (λ vpe. ¬ vpe._2 ) ≠ [], l0 ≠ l, ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦ |
⊦ ¬ p(a) → (a ' + x).indexWhere(p) = 1 + x.indexWhere(p)
((W(t, l0, v), false) ' + h0).take(1 + h0.indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?) .filter (λ vpe. vpe._1.l = l ) .filter (λ vpe. ¬ vpe._2 ) ≠ [], l0 ≠ l, ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦ (W(t, l0, v), false)._1.W? ∧ (W(t, l0, v), false)._1.l = l ∧ ¬ (W(t, l0, v), false)._2
Used simplifier rules: ⊦ W(t, l, v).l = l; (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2, (W(t, l0, v), false), h0
| ⊦ ¬ p(a) → (a ' + x).indexWhere(p) = 1 + x.indexWhere(p) |
| ((W(t, l0, v), false) ' + h0).take(1 + h0.indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?) .filter (λ vpe. vpe._1.l = l ) .filter (λ vpe. ¬ vpe._2 ) ≠ [], l0 ≠ l, ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦ (W(t, l0, v), false)._1.W? ∧ (W(t, l0, v), false)._1.l = l ∧ ¬ (W(t, l0, v), false)._2 |
h0.take(h0.indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) ≠ [], l0 ≠ l, ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦
Used simplifier rules: ⊦ W(t, l, v).l = l; (s) ⊦ W(t, l, v).W?; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s) ⊦ (a ' + x).filter(p) = (p(a) ⊃ a ';[]) + x.filter(p); (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ a + x = a ' + x; (s) ⊦ (a ' + x).take(n + 1) = a + x.take(n); (s)
| h0.take(h0.indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) ≠ [], l0 ≠ l, ∀ l. h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [] ⊦ |
h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], h0.take(h0.indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) ≠ [], l0 ≠ l ⊦
Used terms: l
| h0.take(firstVolWrite(l, h0)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) = [], h0.take(h0.indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)).filter(λ vpe. vpe._1.W?).filter(λ vpe. vpe._1.l = l).filter(λ vpe. ¬ vpe._2) ≠ [], l0 ≠ l ⊦ |
⊦ firstVolWrite(l, h) = h.indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2)
Used terms: l, h0
| ⊦ firstVolWrite(l, h) = h.indexWhere(λ vpe. vpe._1.W? ∧ vpe._1.l = l ∧ ¬ vpe._2) |
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.