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