| ⊦ (el = [] ∨ ¬ el.head.R?) ∧ absloc(el, rset, fowl) ∧ isPersistFO(n, fowl) → absloc(el, rset, fowl -p n) |
absloc(el, rset, fowl), isPersistFO(n, fowl), ¬ absloc(el, rset, fowl -p n), el = [] ∨ ¬ el.head.R? ⊦
| absloc(el, rset, fowl), isPersistFO(n, fowl), ¬ absloc(el, rset, fowl -p n), el = [] ∨ ¬ el.head.R? ⊦ |
absloc(e + el0, rset, fowl), isPersistFO(n, fowl), ¬ absloc(e + el0, rset, fowl -p n), ∀ rset, fowl, n. ¬(absloc(el0, rset, fowl) ∧ isPersistFO(n, fowl) ∧ ¬ absloc(el0, rset, fowl -p n) ∧ (el0 = [] ∨ ¬ el0.head.R?)), e + el0 = [] ∨ ¬ (e + el0).head.R? ⊦
Used simplifier rules: absloc-base: ⊦ absloc([], rset, fowl) ↔ fowl |W = []; List('a) freely generated by [], +;; ⊦ isPersistFO(n, fowl) → (fowl -p n)|W = fowl |W; (s)
| absloc(e + el0, rset, fowl), isPersistFO(n, fowl), ¬ absloc(e + el0, rset, fowl -p n), ∀ rset, fowl, n. ¬(absloc(el0, rset, fowl) ∧ isPersistFO(n, fowl) ∧ ¬ absloc(el0, rset, fowl -p n) ∧ (el0 = [] ∨ ¬ el0.head.R?)), e + el0 = [] ∨ ¬ (e + el0).head.R? ⊦ |
absloc(e ' + el0, rset, fowl), isPersistFO(n, fowl), ¬ e.R?, ¬ absloc(e ' + el0, rset, fowl -p n), ∀ rset0, fowl0, n0. ¬ absloc(el0, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(el0, rset0, fowl0 -p n0) ∨ el0 ≠ [] ∧ el0.head.R? ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (a ' + x).head = a; (s) ⊦ a + x = a ' + x; (s) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s)
| absloc(e ' + el0, rset, fowl), isPersistFO(n, fowl), ¬ e.R?, ¬ absloc(e ' + el0, rset, fowl -p n), ∀ rset0, fowl0, n0. ¬ absloc(el0, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(el0, rset0, fowl0 -p n0) ∨ el0 ≠ [] ∧ el0.head.R? ⊦ |
e = W(t, l, v), absloc(e ' + el0, rset, fowl), isPersistFO(n, fowl), ¬ e.R?, ¬ absloc(e ' + el0, rset, fowl -p n), ∀ rset0, fowl0, n0. ¬ absloc(el0, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(el0, rset0, fowl0 -p n0) ∨ el0 ≠ [] ∧ el0.head.R? ⊦
Used simplifier rules: absloc-recR: ⊦ absloc(R(t, l, v) ' + el, rset, fowl) ↔ (¬ t ∈ rset → FO(t) ∈ fowl) ∧ absloc(el, rset, fowl); RWevent freely generated by R, W;; a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ R(t, l, v).R?; (s)
| e = W(t, l, v), absloc(e ' + el0, rset, fowl), isPersistFO(n, fowl), ¬ e.R?, ¬ absloc(e ' + el0, rset, fowl -p n), ∀ rset0, fowl0, n0. ¬ absloc(el0, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(el0, rset0, fowl0 -p n0) ∨ el0 ≠ [] ∧ el0.head.R? ⊦ |
absloc(W(t, l, v) ' + el0, rset, fowl), isPersistFO(n, fowl), ¬ absloc(W(t, l, v) ' + el0, rset, fowl -p n), ∀ rset0, fowl0, n0. ¬ absloc(el0, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(el0, rset0, fowl0 -p n0) ∨ el0 ≠ [] ∧ el0.head.R? ⊦
Used simplifier rules: ⊦ ¬ W(t, l, v).R?; (s)
| absloc(W(t, l, v) ' + el0, rset, fowl), isPersistFO(n, fowl), ¬ absloc(W(t, l, v) ' + el0, rset, fowl -p n), ∀ rset0, fowl0, n0. ¬ absloc(el0, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(el0, rset0, fowl0 -p n0) ∨ el0 ≠ [] ∧ el0.head.R? ⊦ |
absloc(W(t, l, v) ' + el0, rset, fow + fowl0), isPersistFO(n, fow + fowl0), ¬ absloc(W(t, l, v) ' + el0, rset, (fow + fowl0) -p n), ∀ rset0, fowl0, n0. ¬ absloc(el0, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(el0, rset0, fowl0 -p n0) ∨ el0 ≠ [] ∧ el0.head.R?, ∀ t, l, v, el0, rset, n. ¬ ( absloc(W(t, l, v) ' + el0, rset, fowl0) ∧ isPersistFO(n, fowl0) ∧ ¬ absloc(W(t, l, v) ' + el0, rset, fowl0 -p n) ∧ (∀ rset0, fowl0, n0. ¬ absloc(el0, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(el0, rset0, fowl0 -p n0) ∨ el0 ≠ [] ∧ el0.head.R?)) ⊦
Used simplifier rules: absloc-recW-empty: ⊦ ¬ absloc(W(t, l, v) ' + el, rset, []); List('a) freely generated by [], +;; a: ⊦ (x + y) + z = x + y + z; from specification list
| absloc(W(t, l, v) ' + el0, rset, fow + fowl0), isPersistFO(n, fow + fowl0), ¬ absloc(W(t, l, v) ' + el0, rset, (fow + fowl0) -p n), ∀ rset0, fowl0, n0. ¬ absloc(el0, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(el0, rset0, fowl0 -p n0) ∨ el0 ≠ [] ∧ el0.head.R?, ∀ t, l, v, el0, rset, n. ¬ ( absloc(W(t, l, v) ' + el0, rset, fowl0) ∧ isPersistFO(n, fowl0) ∧ ¬ absloc(W(t, l, v) ' + el0, rset, fowl0 -p n) ∧ (∀ rset0, fowl0, n0. ¬ absloc(el0, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(el0, rset0, fowl0 -p n0) ∨ el0 ≠ [] ∧ el0.head.R?)) ⊦ |
absloc(W(t, l, v) ' + el0, rset, fow ' + fowl0), isPersistFO(n, fow ' + fowl0), ¬ absloc(W(t, l, v) ' + el0, rset, (fow ' + fowl0) -p n), ∀ rset0, fowl0, n0. ¬ absloc(el0, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(el0, rset0, fowl0 -p n0) ∨ el0 ≠ [] ∧ el0.head.R?, ∀ t0, l0, v0, el, rset0, n0. ¬ absloc(W(t0, l0, v0) ' + el, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(W(t0, l0, v0) ' + el, rset0, fowl0 -p n0) ∨ ¬(∀ rset0, fowl0, n0. ¬ absloc(el, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(el, rset0, fowl0 -p n0) ∨ el ≠ [] ∧ el.head.R?) ⊦
Used simplifier rules: ⊦ a + x = a ' + x; (s)
| absloc(W(t, l, v) ' + el0, rset, fow ' + fowl0), isPersistFO(n, fow ' + fowl0), ¬ absloc(W(t, l, v) ' + el0, rset, (fow ' + fowl0) -p n), ∀ rset0, fowl0, n0. ¬ absloc(el0, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(el0, rset0, fowl0 -p n0) ∨ el0 ≠ [] ∧ el0.head.R?, ∀ t0, l0, v0, el, rset0, n0. ¬ absloc(W(t0, l0, v0) ' + el, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(W(t0, l0, v0) ' + el, rset0, fowl0 -p n0) ∨ ¬(∀ rset0, fowl0, n0. ¬ absloc(el, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(el, rset0, fowl0 -p n0) ∨ el ≠ [] ∧ el.head.R?) ⊦ |
fow = FO(t1), absloc(W(t, l, v) ' + el0, rset, fow ' + fowl0), isPersistFO(n, fow ' + fowl0), ¬ absloc(W(t, l, v) ' + el0, rset, (fow ' + fowl0) -p n), ∀ t0, l0, v0, el, rset0, n0. ¬ absloc(W(t0, l0, v0) ' + el, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(W(t0, l0, v0) ' + el, rset0, fowl0 -p n0) ∨ ¬(∀ rset0, fowl0, n0. ¬ absloc(el, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(el, rset0, fowl0 -p n0) ∨ el ≠ [] ∧ el.head.R?), ∀ rset0, fowl0, n0. ¬ absloc(el0, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(el0, rset0, fowl0 -p n0) ∨ el0 ≠ [] ∧ el0.head.R? ⊦
Used simplifier rules: FOW freely generated by FO, W;; ⊦ ¬ isPersistFO(n, W(v, t) ' + fowl); (s) a: ⊦ (x + y) + z = x + y + z; from specification list
| fow = FO(t1), absloc(W(t, l, v) ' + el0, rset, fow ' + fowl0), isPersistFO(n, fow ' + fowl0), ¬ absloc(W(t, l, v) ' + el0, rset, (fow ' + fowl0) -p n), ∀ t0, l0, v0, el, rset0, n0. ¬ absloc(W(t0, l0, v0) ' + el, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(W(t0, l0, v0) ' + el, rset0, fowl0 -p n0) ∨ ¬(∀ rset0, fowl0, n0. ¬ absloc(el, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(el, rset0, fowl0 -p n0) ∨ el ≠ [] ∧ el.head.R?), ∀ rset0, fowl0, n0. ¬ absloc(el0, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(el0, rset0, fowl0 -p n0) ∨ el0 ≠ [] ∧ el0.head.R? ⊦ |
absloc(W(t, l, v) ' + el0, rset, fowl0), isPersistFO(n, FO(t1) ' + fowl0), ¬ absloc(W(t, l, v) ' + el0, rset, (FO(t1) ' + fowl0) -p n), ∀ rset0, fowl0, n0. ¬ absloc(el0, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(el0, rset0, fowl0 -p n0) ∨ el0 ≠ [] ∧ el0.head.R?, ∀ t0, l0, v0, el, rset0, n0. ¬ absloc(W(t0, l0, v0) ' + el, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(W(t0, l0, v0) ' + el, rset0, fowl0 -p n0) ∨ ¬(∀ rset0, fowl0, n0. ¬ absloc(el, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(el, rset0, fowl0 -p n0) ∨ el ≠ [] ∧ el.head.R?) ⊦
Used simplifier rules: absloc-recW-FO: ⊦ absloc(W(t, l, v) ' + el, rset, FO(t0) ' + fowl) ↔ absloc(W(t, l, v) ' + el, rset, fowl); a: ⊦ (x + y) + z = x + y + z; from specification list
| absloc(W(t, l, v) ' + el0, rset, fowl0), isPersistFO(n, FO(t1) ' + fowl0), ¬ absloc(W(t, l, v) ' + el0, rset, (FO(t1) ' + fowl0) -p n), ∀ rset0, fowl0, n0. ¬ absloc(el0, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(el0, rset0, fowl0 -p n0) ∨ el0 ≠ [] ∧ el0.head.R?, ∀ t0, l0, v0, el, rset0, n0. ¬ absloc(W(t0, l0, v0) ' + el, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(W(t0, l0, v0) ' + el, rset0, fowl0 -p n0) ∨ ¬(∀ rset0, fowl0, n0. ¬ absloc(el, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(el, rset0, fowl0 -p n0) ∨ el ≠ [] ∧ el.head.R?) ⊦ |
n = n1 +1, absloc(W(t, l, v) ' + el0, rset, fowl0), isPersistFO(n, FO(t1) ' + fowl0), ¬ absloc(W(t, l, v) ' + el0, rset, (FO(t1) ' + fowl0) -p n), ∀ t0, l0, v0, el, rset0, n0. ¬ absloc(W(t0, l0, v0) ' + el, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(W(t0, l0, v0) ' + el, rset0, fowl0 -p n0) ∨ ¬(∀ rset0, fowl0, n0. ¬ absloc(el, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(el, rset0, fowl0 -p n0) ∨ el ≠ [] ∧ el.head.R?), ∀ rset0, fowl0, n0. ¬ absloc(el0, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(el0, rset0, fowl0 -p n0) ∨ el0 ≠ [] ∧ el0.head.R? ⊦
Used simplifier rules: Nat freely generated by 0, +1;; ⊦ (a ' + x) -p 0 = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list
| n = n1 +1, absloc(W(t, l, v) ' + el0, rset, fowl0), isPersistFO(n, FO(t1) ' + fowl0), ¬ absloc(W(t, l, v) ' + el0, rset, (FO(t1) ' + fowl0) -p n), ∀ t0, l0, v0, el, rset0, n0. ¬ absloc(W(t0, l0, v0) ' + el, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(W(t0, l0, v0) ' + el, rset0, fowl0 -p n0) ∨ ¬(∀ rset0, fowl0, n0. ¬ absloc(el, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(el, rset0, fowl0 -p n0) ∨ el ≠ [] ∧ el.head.R?), ∀ rset0, fowl0, n0. ¬ absloc(el0, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(el0, rset0, fowl0 -p n0) ∨ el0 ≠ [] ∧ el0.head.R? ⊦ |
fowl0[n1].tid ≠ t1, absloc(W(t, l, v) ' + el0, rset, fowl0), isPersistFO(n1, fowl0), ¬ absloc(W(t, l, v) ' + el0, rset, fowl0 -p n1), ∀ rset0, fowl0, n0. ¬ absloc(el0, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(el0, rset0, fowl0 -p n0) ∨ el0 ≠ [] ∧ el0.head.R?, ∀ t0, l0, v0, el, rset0, n0. ¬ absloc(W(t0, l0, v0) ' + el, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(W(t0, l0, v0) ' + el, rset0, fowl0 -p n0) ∨ ¬(∀ rset0, fowl0, n0. ¬ absloc(el, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(el, rset0, fowl0 -p n0) ∨ el ≠ [] ∧ el.head.R?) ⊦
Used simplifier rules: absloc-recW-FO: ⊦ absloc(W(t, l, v) ' + el, rset, FO(t0) ' + fowl) ↔ absloc(W(t, l, v) ' + el, rset, fowl); 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 = a ' + x; (s) ⊦ (a ' + x) -p (n + 1) = a + (x -p n); (s) ⊦ m +1 = m + 1; (s) ⊦ FO(tid).tid = tid; (s) ⊦ FO(tid).FO?; (s) ⊦ isPersistFO(n + 1, fow ' + fowl) ↔ isPersistFO(n, fowl) ∧ fow.FO? ∧ fowl[n].tid ≠ fow.tid; (s)
| fowl0[n1].tid ≠ t1, absloc(W(t, l, v) ' + el0, rset, fowl0), isPersistFO(n1, fowl0), ¬ absloc(W(t, l, v) ' + el0, rset, fowl0 -p n1), ∀ rset0, fowl0, n0. ¬ absloc(el0, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(el0, rset0, fowl0 -p n0) ∨ el0 ≠ [] ∧ el0.head.R?, ∀ t0, l0, v0, el, rset0, n0. ¬ absloc(W(t0, l0, v0) ' + el, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(W(t0, l0, v0) ' + el, rset0, fowl0 -p n0) ∨ ¬(∀ rset0, fowl0, n0. ¬ absloc(el, rset0, fowl0) ∨ ¬ isPersistFO(n0, fowl0) ∨ absloc(el, rset0, fowl0 -p n0) ∨ el ≠ [] ∧ el.head.R?) ⊦ |
Used terms: t, l, v, el0, rset, n1
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.