| ⊦ reorder(l, fowl, fowl0, rfo) ∧ fowl0 = W(v, t) ' + fowl1 → fowl[firstPersistW(fowl)] = W(v, t) |
fowl0 = W(v, t) ' + fowl1, fowl[firstPersistW(fowl)] ≠ W(v, t), reorder(l, fowl, fowl0, rfo) ⊦
| fowl0 = W(v, t) ' + fowl1, fowl[firstPersistW(fowl)] ≠ W(v, t), reorder(l, fowl, fowl0, rfo) ⊦ |
fowl[firstPersistW(fowl)] ≠ W(v, t), reorder(l, fowl, W(v, t) ' + fowl1, rfo) ⊦
| fowl[firstPersistW(fowl)] ≠ W(v, t), reorder(l, fowl, W(v, t) ' + fowl1, rfo) ⊦ |
(fow + fowl0)[firstPersistW(fow + fowl0)] ≠ W(v, t), reorder(l, fow + fowl0, W(v, t) ' + fowl1, rfo), ∀ v, t, l, fowl1, rfo. ¬(fowl0[firstPersistW(fowl0)] ≠ W(v, t) ∧ reorder(l, fowl0, W(v, t) ' + fowl1, rfo)) ⊦
Used simplifier rules: reorder-base: ⊦ reorder(l, [], fowl0, rfo) ↔ fowl0 = [] ∧ (∀ t. propFOs(t, l, rfo(t)) = []); List('a) freely generated by [], +;; ⊦ firstPersistW([]) = 0; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ a ' ≠ []; (s) a: ⊦ (x + y) + z = x + y + z; from specification list
| (fow + fowl0)[firstPersistW(fow + fowl0)] ≠ W(v, t), reorder(l, fow + fowl0, W(v, t) ' + fowl1, rfo), ∀ v, t, l, fowl1, rfo. ¬(fowl0[firstPersistW(fowl0)] ≠ W(v, t) ∧ reorder(l, fowl0, W(v, t) ' + fowl1, rfo)) ⊦ |
(fow ' + fowl0)[firstPersistW(fow ' + fowl0)] ≠ W(v, t), reorder(l, fow ' + fowl0, W(v, t) ' + fowl1, rfo), ∀ v0, t0, l0, fowl, rfo0. fowl0[firstPersistW(fowl0)] = W(v0, t0) ∨ ¬ reorder(l0, fowl0, W(v0, t0) ' + fowl, rfo0) ⊦
Used simplifier rules: ⊦ a + x = a ' + x; (s)
| (fow ' + fowl0)[firstPersistW(fow ' + fowl0)] ≠ W(v, t), reorder(l, fow ' + fowl0, W(v, t) ' + fowl1, rfo), ∀ v0, t0, l0, fowl, rfo0. fowl0[firstPersistW(fowl0)] = W(v0, t0) ∨ ¬ reorder(l0, fowl0, W(v0, t0) ' + fowl, rfo0) ⊦ |
fow = FO(t1), (fow ' + fowl0)[firstPersistW(fow ' + fowl0)] ≠ W(v, t), reorder(l, fow ' + fowl0, W(v, t) ' + fowl1, rfo), ∀ v0, t0, l0, fowl, rfo0. fowl0[firstPersistW(fowl0)] = W(v0, t0) ∨ ¬ reorder(l0, fowl0, W(v0, t0) ' + fowl, rfo0) ⊦
Used simplifier rules: reorder-rec-W: ⊦ reorder(l, W(v, t) ' + fowl0, fowl1, rfo) ↔ fowl1 ≠ [] ∧ fowl1.head = W(v, t) ∧ reorder(l, fowl0, fowl1.tail, rfo); FOW freely generated by FO, W;; ⊦ firstPersistW(W(v, t) ' + fowl) = 0; (s) ⊦ (a ' + x)[0] = a; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ a ' ≠ []; (s) ⊦ (a ' + x).head = a; (s) a: ⊦ (x + y) + z = x + y + z; from specification list
| fow = FO(t1), (fow ' + fowl0)[firstPersistW(fow ' + fowl0)] ≠ W(v, t), reorder(l, fow ' + fowl0, W(v, t) ' + fowl1, rfo), ∀ v0, t0, l0, fowl, rfo0. fowl0[firstPersistW(fowl0)] = W(v0, t0) ∨ ¬ reorder(l0, fowl0, W(v0, t0) ' + fowl, rfo0) ⊦ |
fowl0[firstPersistW(fowl0)] ≠ W(v, t), ∀ v0, t0, l0, fowl, rfo0. fowl0[firstPersistW(fowl0)] = W(v0, t0) ∨ ¬ reorder(l0, fowl0, W(v0, t0) ' + fowl, rfo0), W(v, t) ' + fowl1 = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl0, fowl2 + fowl3, rfo) ∨ t1 ≠ t ∧ fowl1 | t1 = [] ∧ FO(l) ∈ rfo(t1) ∧ reorder(l, fowl0, W(v, t) ' + fowl1, rfo(t1 := rfo(t1) -1l FO(l))) ⊦
Used simplifier rules: reorder-rec-FO: ⊦ reorder(l, FO(t) ' + fowl, fowl0, rfo) ↔ (∃ fowl1, fowl2. fowl0 = fowl1 + FO(t) ' + fowl2 ∧ fowl1 | t = [] ∧ reorder(l, fowl, fowl1 + fowl2, rfo)) ∨ fowl0 | t = [] ∧ FO(l) ∈ rfo(t) ∧ reorder(l, fowl, fowl0, rfo(t := rfo(t) -1l FO(l))); a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ W(v, tid).tid = tid; (s) ⊦ fow ' | t = (t = fow.tid ⊃ fow ';[]); (s) ⊦ fowl + fowl0 | t = (fowl | t) + (fowl0 | t); (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) ⊦ firstPersistW(FO(t) ' + fowl) = firstPersistW(fowl) + 1; (s)
| fowl0[firstPersistW(fowl0)] ≠ W(v, t), ∀ v0, t0, l0, fowl, rfo0. fowl0[firstPersistW(fowl0)] = W(v0, t0) ∨ ¬ reorder(l0, fowl0, W(v0, t0) ' + fowl, rfo0), W(v, t) ' + fowl1 = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl0, fowl2 + fowl3, rfo) ∨ t1 ≠ t ∧ fowl1 | t1 = [] ∧ FO(l) ∈ rfo(t1) ∧ reorder(l, fowl0, W(v, t) ' + fowl1, rfo(t1 := rfo(t1) -1l FO(l))) ⊦ |
W(v, t) ' + fowl1 = fowl2 + FO(t1) ' + fowl3, fowl2 | t1 = [], fowl0[firstPersistW(fowl0)] ≠ W(v, t), reorder(l, fowl0, fowl2 + fowl3, rfo), ∀ v0, t0, l0, fowl, rfo0. fowl0[firstPersistW(fowl0)] = W(v0, t0) ∨ ¬ reorder(l0, fowl0, W(v0, t0) ' + fowl, rfo0) ⊦
fowl1 | t1 = [], fowl0[firstPersistW(fowl0)] ≠ W(v, t), t1 ≠ t, reorder(l, fowl0, W(v, t) ' + fowl1, rfo(t1 := rfo(t1) -1l FO(l))), FO(l) ∈ rfo(t1), ∀ v0, t0, l0, fowl, rfo0. fowl0[firstPersistW(fowl0)] = W(v0, t0) ∨ ¬ reorder(l0, fowl0, W(v0, t0) ' + fowl, rfo0) ⊦
| W(v, t) ' + fowl1 = fowl2 + FO(t1) ' + fowl3, fowl2 | t1 = [], fowl0[firstPersistW(fowl0)] ≠ W(v, t), reorder(l, fowl0, fowl2 + fowl3, rfo), ∀ v0, t0, l0, fowl, rfo0. fowl0[firstPersistW(fowl0)] = W(v0, t0) ∨ ¬ reorder(l0, fowl0, W(v0, t0) ' + fowl, rfo0) ⊦ |
W(v, t) ' + fowl1 = fowl2 + FO(t1) ' + fowl3, fowl2 | t1 = [], fowl0[firstPersistW(fowl0)] ≠ W(v, t), reorder(l, fowl0, fowl2 + fowl3, rfo), W(v, t) ∈ fowl2, ∀ v0, t0, l0, fowl, rfo0. fowl0[firstPersistW(fowl0)] = W(v0, t0) ∨ ¬ reorder(l0, fowl0, W(v0, t0) ' + fowl, rfo0) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ FO(tid) ≠ W(v, tid0); (s) ⊦ ¬ a ∈ y → (y + a0 ' + z = a ' + z0 ↔ y = [] ∧ a0 = a ∧ z = z0); (ws) ⊦ a ∈ a0 ' + x ↔ a = a0 ∨ a ∈ x; (s) ⊦ a ∈ x + y ↔ a ∈ x ∨ a ∈ y; (s) in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list
| W(v, t) ' + fowl1 = fowl2 + FO(t1) ' + fowl3, fowl2 | t1 = [], fowl0[firstPersistW(fowl0)] ≠ W(v, t), reorder(l, fowl0, fowl2 + fowl3, rfo), W(v, t) ∈ fowl2, ∀ v0, t0, l0, fowl, rfo0. fowl0[firstPersistW(fowl0)] = W(v0, t0) ∨ ¬ reorder(l0, fowl0, W(v0, t0) ' + fowl, rfo0) ⊦ |
⊦ a ∈ x ↔ (∃ y, z. x = y + a ' + z ∧ ¬ a ∈ y)
W(v, t) ' + fowl1 = fowl2 + FO(t1) ' + fowl3, fowl2 | t1 = [], fowl0[firstPersistW(fowl0)] ≠ W(v, t), reorder(l, fowl0, fowl2 + fowl3, rfo), ∀ v0, t0, l0, fowl, rfo0. fowl0[firstPersistW(fowl0)] = W(v0, t0) ∨ ¬ reorder(l0, fowl0, W(v0, t0) ' + fowl, rfo0), ∃ y, z. fowl2 = y + W(v, t) ' + z ∧ ¬ W(v, t) ∈ y ⊦
Used terms: W(v, t), fowl2
| ⊦ a ∈ x ↔ (∃ y, z. x = y + a ' + z ∧ ¬ a ∈ y) |
| W(v, t) ' + fowl1 = fowl2 + FO(t1) ' + fowl3, fowl2 | t1 = [], fowl0[firstPersistW(fowl0)] ≠ W(v, t), reorder(l, fowl0, fowl2 + fowl3, rfo), ∀ v0, t0, l0, fowl, rfo0. fowl0[firstPersistW(fowl0)] = W(v0, t0) ∨ ¬ reorder(l0, fowl0, W(v0, t0) ' + fowl, rfo0), ∃ y, z. fowl2 = y + W(v, t) ' + z ∧ ¬ W(v, t) ∈ y ⊦ |
fowl4 | t1 = [], fowl0[firstPersistW(fowl0)] ≠ W(v, t), t1 ≠ t, reorder(l, fowl0, W(v, t) ' + fowl4 + fowl3, rfo), ∀ v0, t0, l0, fowl, rfo0. fowl0[firstPersistW(fowl0)] = W(v0, t0) ∨ ¬ reorder(l0, fowl0, W(v0, t0) ' + fowl, rfo0) ⊦
Used simplifier rules: ⊦ ¬ a ∈ []; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s) ⊦ [] | t = []; (s) ⊦ ¬ a ∈ y → (y + a0 ' + z = a ' + z0 ↔ y = [] ∧ a0 = a ∧ z = z0); (ws) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ W(v, tid).tid = tid; (s) ⊦ fow ' | t = (t = fow.tid ⊃ fow ';[]); (s) ⊦ fowl + fowl0 | t = (fowl | t) + (fowl0 | t); (s)
| fowl4 | t1 = [], fowl0[firstPersistW(fowl0)] ≠ W(v, t), t1 ≠ t, reorder(l, fowl0, W(v, t) ' + fowl4 + fowl3, rfo), ∀ v0, t0, l0, fowl, rfo0. fowl0[firstPersistW(fowl0)] = W(v0, t0) ∨ ¬ reorder(l0, fowl0, W(v0, t0) ' + fowl, rfo0) ⊦ |
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: v, t, l, fowl4 + fowl3, rfo
| fowl1 | t1 = [], fowl0[firstPersistW(fowl0)] ≠ W(v, t), t1 ≠ t, reorder(l, fowl0, W(v, t) ' + fowl1, rfo(t1 := rfo(t1) -1l FO(l))), FO(l) ∈ rfo(t1), ∀ v0, t0, l0, fowl, rfo0. fowl0[firstPersistW(fowl0)] = W(v0, t0) ∨ ¬ reorder(l0, fowl0, W(v0, t0) ' + fowl, rfo0) ⊦ |
Used terms: v, t, l, fowl1, rfo(t1 := rfo(t1) -1l FO(l))
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.