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