| ⊦ reorder(l, fowl0, FO(t) ' + fowl1, rfo) ∧ isPersistFO(n, fowl0) ∧ fowl0[n] = FO(t) → reorder(l, fowl0 -p n, fowl1, rfo) |
fowl0[n] = FO(t), isPersistFO(n, fowl0), reorder(l, fowl0, FO(t) ' + fowl1, rfo), ¬ reorder(l, fowl0 -p n, fowl1, rfo) ⊦
| fowl0[n] = FO(t), isPersistFO(n, fowl0), reorder(l, fowl0, FO(t) ' + fowl1, rfo), ¬ reorder(l, fowl0 -p n, fowl1, rfo) ⊦ |
(fow + fowl)[n] = FO(t), isPersistFO(n, fow + fowl), reorder(l, fow + fowl, FO(t) ' + fowl1, rfo), ¬ reorder(l, (fow + fowl) -p n, fowl1, rfo), ∀ n, t, l, fowl1, rfo. ¬(fowl[n] = FO(t) ∧ isPersistFO(n, fowl) ∧ reorder(l, fowl, FO(t) ' + fowl1, rfo) ∧ ¬ reorder(l, fowl -p n, 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
| (fow + fowl)[n] = FO(t), isPersistFO(n, fow + fowl), reorder(l, fow + fowl, FO(t) ' + fowl1, rfo), ¬ reorder(l, (fow + fowl) -p n, fowl1, rfo), ∀ n, t, l, fowl1, rfo. ¬(fowl[n] = FO(t) ∧ isPersistFO(n, fowl) ∧ reorder(l, fowl, FO(t) ' + fowl1, rfo) ∧ ¬ reorder(l, fowl -p n, fowl1, rfo)) ⊦ |
(fow ' + fowl)[n] = FO(t), isPersistFO(n, fow ' + fowl), reorder(l, fow ' + fowl, FO(t) ' + fowl1, rfo), ¬ reorder(l, (fow ' + fowl) -p n, fowl1, rfo), ∀ n0, t0, l0, fowl0, rfo0. fowl[n0] ≠ FO(t0) ∨ ¬ isPersistFO(n0, fowl) ∨ ¬ reorder(l0, fowl, FO(t0) ' + fowl0, rfo0) ∨ reorder(l0, fowl -p n0, fowl0, rfo0) ⊦
Used simplifier rules: ⊦ a + x = a ' + x; (s)
| (fow ' + fowl)[n] = FO(t), isPersistFO(n, fow ' + fowl), reorder(l, fow ' + fowl, FO(t) ' + fowl1, rfo), ¬ reorder(l, (fow ' + fowl) -p n, fowl1, rfo), ∀ n0, t0, l0, fowl0, rfo0. fowl[n0] ≠ FO(t0) ∨ ¬ isPersistFO(n0, fowl) ∨ ¬ reorder(l0, fowl, FO(t0) ' + fowl0, rfo0) ∨ reorder(l0, fowl -p n0, fowl0, rfo0) ⊦ |
(fow ' + fowl)[n] = FO(t), n = 0, isPersistFO(n, fow ' + fowl), reorder(l, fow ' + fowl, FO(t) ' + fowl1, rfo), ¬ reorder(l, (fow ' + fowl) -p n, fowl1, rfo), ∀ n0, t0, l0, fowl0, rfo0. fowl[n0] ≠ FO(t0) ∨ ¬ isPersistFO(n0, fowl) ∨ ¬ reorder(l0, fowl, FO(t0) ' + fowl0, rfo0) ∨ reorder(l0, fowl -p n0, fowl0, rfo0) ⊦
(fow ' + fowl)[n] = FO(t), n = n1 +1, isPersistFO(n, fow ' + fowl), reorder(l, fow ' + fowl, FO(t) ' + fowl1, rfo), ¬ reorder(l, (fow ' + fowl) -p n, fowl1, rfo), ∀ n0, t0, l0, fowl0, rfo0. fowl[n0] ≠ FO(t0) ∨ ¬ isPersistFO(n0, fowl) ∨ ¬ reorder(l0, fowl, FO(t0) ' + fowl0, rfo0) ∨ reorder(l0, fowl -p n0, fowl0, rfo0) ⊦
Used simplifier rules: Nat freely generated by 0, +1;;
| (fow ' + fowl)[n] = FO(t), n = 0, isPersistFO(n, fow ' + fowl), reorder(l, fow ' + fowl, FO(t) ' + fowl1, rfo), ¬ reorder(l, (fow ' + fowl) -p n, fowl1, rfo), ∀ n0, t0, l0, fowl0, rfo0. fowl[n0] ≠ FO(t0) ∨ ¬ isPersistFO(n0, fowl) ∨ ¬ reorder(l0, fowl, FO(t0) ' + fowl0, rfo0) ∨ reorder(l0, fowl -p n0, fowl0, rfo0) ⊦ |
FO(t) ' + fowl1 = fowl2 + FO(t) ' + fowl3, fowl2 | t = [], isPersistFO(0, FO(t) ' + fowl), reorder(l, fowl, fowl2 + fowl3, rfo), ¬ reorder(l, fowl, fowl1, rfo), ∀ n0, t0, l0, fowl0, rfo0. fowl[n0] ≠ FO(t0) ∨ ¬ isPersistFO(n0, fowl) ∨ ¬ reorder(l0, fowl, FO(t0) ' + fowl0, rfo0) ∨ reorder(l0, fowl -p n0, fowl0, rfo0) ⊦
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 ∈ 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 ⊦ 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 ' + x) -p 0 = x; (s) ⊦ (a ' + x)[0] = a; (s)
| FO(t) ' + fowl1 = fowl2 + FO(t) ' + fowl3, fowl2 | t = [], isPersistFO(0, FO(t) ' + fowl), reorder(l, fowl, fowl2 + fowl3, rfo), ¬ reorder(l, fowl, fowl1, rfo), ∀ n0, t0, l0, fowl0, rfo0. fowl[n0] ≠ FO(t0) ∨ ¬ isPersistFO(n0, fowl) ∨ ¬ reorder(l0, fowl, FO(t0) ' + fowl0, rfo0) ∨ reorder(l0, fowl -p n0, fowl0, rfo0) ⊦ |
Used simplifier rules: List('a) freely generated by [], +;; ⊦ fowl + fowl0 | t = (fowl | t) + (fowl0 | t); (s) ⊦ fow ' | t = (t = fow.tid ⊃ fow ';[]); (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ a ' ≠ []; (s) ⊦ a ' + x = a0 ' + y ↔ a = a0 ∧ x = y; (ws) ⊦ a + x = a ' + x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ FO(tid).tid = tid; (s) ⊦ [] | t = []; (s) ⊦ # x = # z → (x + y = z + y0 ↔ x = z ∧ y = y0); (ws) ⊦ [] + x = x; (s)
| (fow ' + fowl)[n] = FO(t), n = n1 +1, isPersistFO(n, fow ' + fowl), reorder(l, fow ' + fowl, FO(t) ' + fowl1, rfo), ¬ reorder(l, (fow ' + fowl) -p n, fowl1, rfo), ∀ n0, t0, l0, fowl0, rfo0. fowl[n0] ≠ FO(t0) ∨ ¬ isPersistFO(n0, fowl) ∨ ¬ reorder(l0, fowl, FO(t0) ' + fowl0, rfo0) ∨ reorder(l0, fowl -p n0, fowl0, rfo0) ⊦ |
fowl[n1] = FO(t), t ≠ fow.tid, fow.FO?, isPersistFO(n1, fowl), reorder(l, fow ' + fowl, FO(t) ' + fowl1, rfo), ¬ reorder(l, fow ' + (fowl -p n1), fowl1, rfo), ∀ n0, t0, l0, fowl0, rfo0. fowl[n0] ≠ FO(t0) ∨ ¬ isPersistFO(n0, fowl) ∨ ¬ reorder(l0, fowl, FO(t0) ' + fowl0, rfo0) ∨ reorder(l0, fowl -p n0, fowl0, rfo0) ⊦
Used simplifier rules: ⊦ FO(tid).tid = tid; (s) 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) ⊦ isPersistFO(n + 1, fow ' + fowl) ↔ isPersistFO(n, fowl) ∧ fow.FO? ∧ fowl[n].tid ≠ fow.tid; (s) ⊦ (a ' + x)[n + 1] = x[n]; (s)
| fowl[n1] = FO(t), t ≠ fow.tid, fow.FO?, isPersistFO(n1, fowl), reorder(l, fow ' + fowl, FO(t) ' + fowl1, rfo), ¬ reorder(l, fow ' + (fowl -p n1), fowl1, rfo), ∀ n0, t0, l0, fowl0, rfo0. fowl[n0] ≠ FO(t0) ∨ ¬ isPersistFO(n0, fowl) ∨ ¬ reorder(l0, fowl, FO(t0) ' + fowl0, rfo0) ∨ reorder(l0, fowl -p n0, fowl0, rfo0) ⊦ |
fowl[n1] = FO(t), fow = FO(t1), t ≠ t1, fow.FO?, isPersistFO(n1, fowl), reorder(l, fow ' + fowl, FO(t) ' + fowl1, rfo), ¬ reorder(l, fow ' + (fowl -p n1), fowl1, rfo), ∀ n0, t0, l0, fowl0, rfo0. fowl[n0] ≠ FO(t0) ∨ ¬ isPersistFO(n0, fowl) ∨ ¬ reorder(l0, fowl, FO(t0) ' + fowl0, rfo0) ∨ reorder(l0, fowl -p n0, fowl0, rfo0) ⊦
Used simplifier rules: ⊦ fow.FO? → (tid = fow.tid ↔ fow = FO(tid)); (elim) Used terms: fow, t1
| fowl[n1] = FO(t), fow = FO(t1), t ≠ t1, fow.FO?, isPersistFO(n1, fowl), reorder(l, fow ' + fowl, FO(t) ' + fowl1, rfo), ¬ reorder(l, fow ' + (fowl -p n1), fowl1, rfo), ∀ n0, t0, l0, fowl0, rfo0. fowl[n0] ≠ FO(t0) ∨ ¬ isPersistFO(n0, fowl) ∨ ¬ reorder(l0, fowl, FO(t0) ' + fowl0, rfo0) ∨ reorder(l0, fowl -p n0, fowl0, rfo0) ⊦ |
fowl[n1] = FO(t), t ≠ t1, isPersistFO(n1, fowl), ∀ n0, t0, l0, fowl0, rfo0. fowl[n0] ≠ FO(t0) ∨ ¬ isPersistFO(n0, fowl) ∨ ¬ reorder(l0, fowl, FO(t0) ' + fowl0, rfo0) ∨ reorder(l0, fowl -p n0, fowl0, rfo0), FO(t) ' + fowl1 = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl, fowl2 + fowl3, rfo) ∨ fowl1 | t1 = [] ∧ FO(l) ∈ rfo(t1) ∧ reorder(l, fowl, FO(t) ' + fowl1, rfo(t1 := rfo(t1) -1l FO(l))) ⊦ ∃ fowl2, fowl3. fowl1 = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl -p n1, fowl2 + fowl3, rfo), fowl1 | t1 = [] ∧ FO(l) ∈ rfo(t1) ∧ reorder(l, fowl -p n1, 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 ⊦ FO(tid).FO?; (s) ⊦ [] + x = x; (s) ⊦ FO(tid).tid = tid; (s) ⊦ fow ' | t = (t = fow.tid ⊃ fow ';[]); (s) ⊦ fowl + fowl0 | t = (fowl | t) + (fowl0 | t); (s)
| fowl[n1] = FO(t), t ≠ t1, isPersistFO(n1, fowl), ∀ n0, t0, l0, fowl0, rfo0. fowl[n0] ≠ FO(t0) ∨ ¬ isPersistFO(n0, fowl) ∨ ¬ reorder(l0, fowl, FO(t0) ' + fowl0, rfo0) ∨ reorder(l0, fowl -p n0, fowl0, rfo0), FO(t) ' + fowl1 = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl, fowl2 + fowl3, rfo) ∨ fowl1 | t1 = [] ∧ FO(l) ∈ rfo(t1) ∧ reorder(l, fowl, FO(t) ' + fowl1, rfo(t1 := rfo(t1) -1l FO(l))) ⊦ ∃ fowl2, fowl3. fowl1 = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl -p n1, fowl2 + fowl3, rfo), fowl1 | t1 = [] ∧ FO(l) ∈ rfo(t1) ∧ reorder(l, fowl -p n1, fowl1, rfo(t1 := rfo(t1) -1l FO(l))) |
FO(t) ' + fowl1 = fowl2 + FO(t1) ' + fowl3, fowl[n1] = FO(t), fowl2 | t1 = [], t ≠ t1, isPersistFO(n1, fowl), reorder(l, fowl, fowl2 + fowl3, rfo), ∀ n0, t0, l0, fowl0, rfo0. fowl[n0] ≠ FO(t0) ∨ ¬ isPersistFO(n0, fowl) ∨ ¬ reorder(l0, fowl, FO(t0) ' + fowl0, rfo0) ∨ reorder(l0, fowl -p n0, fowl0, rfo0) ⊦ ∃ fowl2, fowl3. fowl1 = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl -p n1, fowl2 + fowl3, rfo), fowl1 | t1 = [] ∧ FO(l) ∈ rfo(t1) ∧ reorder(l, fowl -p n1, fowl1, rfo(t1 := rfo(t1) -1l FO(l)))
fowl[n1] = FO(t), fowl1 | t1 = [], t ≠ t1, isPersistFO(n1, fowl), reorder(l, fowl, FO(t) ' + fowl1, rfo(t1 := rfo(t1) -1l FO(l))), FO(l) ∈ rfo(t1), ∀ n0, t0, l0, fowl0, rfo0. fowl[n0] ≠ FO(t0) ∨ ¬ isPersistFO(n0, fowl) ∨ ¬ reorder(l0, fowl, FO(t0) ' + fowl0, rfo0) ∨ reorder(l0, fowl -p n0, fowl0, rfo0) ⊦ ∃ fowl2, fowl3. fowl1 = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl -p n1, fowl2 + fowl3, rfo), fowl1 | t1 = [] ∧ FO(l) ∈ rfo(t1) ∧ reorder(l, fowl -p n1, fowl1, rfo(t1 := rfo(t1) -1l FO(l)))
| FO(t) ' + fowl1 = fowl2 + FO(t1) ' + fowl3, fowl[n1] = FO(t), fowl2 | t1 = [], t ≠ t1, isPersistFO(n1, fowl), reorder(l, fowl, fowl2 + fowl3, rfo), ∀ n0, t0, l0, fowl0, rfo0. fowl[n0] ≠ FO(t0) ∨ ¬ isPersistFO(n0, fowl) ∨ ¬ reorder(l0, fowl, FO(t0) ' + fowl0, rfo0) ∨ reorder(l0, fowl -p n0, fowl0, rfo0) ⊦ ∃ fowl2, fowl3. fowl1 = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl -p n1, fowl2 + fowl3, rfo), fowl1 | t1 = [] ∧ FO(l) ∈ rfo(t1) ∧ reorder(l, fowl -p n1, fowl1, rfo(t1 := rfo(t1) -1l FO(l))) |
FO(t) ' + fowl1 = fowl2 + FO(t1) ' + fowl3, fowl[n1] = FO(t), fowl2 | t1 = [], t ≠ t1, isPersistFO(n1, fowl), reorder(l, fowl, fowl2 + fowl3, rfo), FO(t) ∈ fowl2, ∀ n0, t0, l0, fowl0, rfo0. fowl[n0] ≠ FO(t0) ∨ ¬ isPersistFO(n0, fowl) ∨ ¬ reorder(l0, fowl, FO(t0) ' + fowl0, rfo0) ∨ reorder(l0, fowl -p n0, fowl0, rfo0) ⊦ ∃ fowl2, fowl3. fowl1 = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl -p n1, fowl2 + fowl3, rfo), fowl1 | t1 = [] ∧ FO(l) ∈ rfo(t1) ∧ reorder(l, fowl -p n1, fowl1, rfo(t1 := rfo(t1) -1l FO(l)))
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ FO(tid) = FO(tid0) ↔ tid = 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
| FO(t) ' + fowl1 = fowl2 + FO(t1) ' + fowl3, fowl[n1] = FO(t), fowl2 | t1 = [], t ≠ t1, isPersistFO(n1, fowl), reorder(l, fowl, fowl2 + fowl3, rfo), FO(t) ∈ fowl2, ∀ n0, t0, l0, fowl0, rfo0. fowl[n0] ≠ FO(t0) ∨ ¬ isPersistFO(n0, fowl) ∨ ¬ reorder(l0, fowl, FO(t0) ' + fowl0, rfo0) ∨ reorder(l0, fowl -p n0, fowl0, rfo0) ⊦ ∃ fowl2, fowl3. fowl1 = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl -p n1, fowl2 + fowl3, rfo), fowl1 | t1 = [] ∧ FO(l) ∈ rfo(t1) ∧ reorder(l, fowl -p n1, fowl1, rfo(t1 := rfo(t1) -1l FO(l))) |
⊦ a ∈ x ↔ (∃ y, z. x = y + a ' + z ∧ ¬ a ∈ y)
FO(t) ' + fowl1 = fowl2 + FO(t1) ' + fowl3, fowl[n1] = FO(t), fowl2 | t1 = [], t ≠ t1, isPersistFO(n1, fowl), reorder(l, fowl, fowl2 + fowl3, rfo), ∀ n0, t0, l0, fowl0, rfo0. fowl[n0] ≠ FO(t0) ∨ ¬ isPersistFO(n0, fowl) ∨ ¬ reorder(l0, fowl, FO(t0) ' + fowl0, rfo0) ∨ reorder(l0, fowl -p n0, fowl0, rfo0), ∃ y, z. fowl2 = y + FO(t) ' + z ∧ ¬ FO(t) ∈ y ⊦ ∃ fowl2, fowl3. fowl1 = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl -p n1, fowl2 + fowl3, rfo), fowl1 | t1 = [] ∧ FO(l) ∈ rfo(t1) ∧ reorder(l, fowl -p n1, fowl1, rfo(t1 := rfo(t1) -1l FO(l)))
Used terms: FO(t), fowl2
| ⊦ a ∈ x ↔ (∃ y, z. x = y + a ' + z ∧ ¬ a ∈ y) |
| FO(t) ' + fowl1 = fowl2 + FO(t1) ' + fowl3, fowl[n1] = FO(t), fowl2 | t1 = [], t ≠ t1, isPersistFO(n1, fowl), reorder(l, fowl, fowl2 + fowl3, rfo), ∀ n0, t0, l0, fowl0, rfo0. fowl[n0] ≠ FO(t0) ∨ ¬ isPersistFO(n0, fowl) ∨ ¬ reorder(l0, fowl, FO(t0) ' + fowl0, rfo0) ∨ reorder(l0, fowl -p n0, fowl0, rfo0), ∃ y, z. fowl2 = y + FO(t) ' + z ∧ ¬ FO(t) ∈ y ⊦ ∃ fowl2, fowl3. fowl1 = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl -p n1, fowl2 + fowl3, rfo), fowl1 | t1 = [] ∧ FO(l) ∈ rfo(t1) ∧ reorder(l, fowl -p n1, fowl1, rfo(t1 := rfo(t1) -1l FO(l))) |
fowl[n1] = FO(t), fowl4 | t1 = [], t ≠ t1, isPersistFO(n1, fowl), reorder(l, fowl, FO(t) ' + fowl4 + fowl3, rfo), ∀ n0, t0, l0, fowl0, rfo0. fowl[n0] ≠ FO(t0) ∨ ¬ isPersistFO(n0, fowl) ∨ ¬ reorder(l0, fowl, FO(t0) ' + fowl0, rfo0) ∨ reorder(l0, fowl -p n0, fowl0, rfo0) ⊦ ∃ fowl2, fowl0. fowl4 + FO(t1) ' + fowl3 = fowl2 + FO(t1) ' + fowl0 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl -p n1, 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)
| fowl[n1] = FO(t), fowl4 | t1 = [], t ≠ t1, isPersistFO(n1, fowl), reorder(l, fowl, FO(t) ' + fowl4 + fowl3, rfo), ∀ n0, t0, l0, fowl0, rfo0. fowl[n0] ≠ FO(t0) ∨ ¬ isPersistFO(n0, fowl) ∨ ¬ reorder(l0, fowl, FO(t0) ' + fowl0, rfo0) ∨ reorder(l0, fowl -p n0, fowl0, rfo0) ⊦ ∃ fowl2, fowl0. fowl4 + FO(t1) ' + fowl3 = fowl2 + FO(t1) ' + fowl0 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl -p n1, fowl2 + fowl0, rfo) |
fowl[n1] = FO(t), fowl4 | t1 = [], t ≠ t1, isPersistFO(n1, fowl), reorder(l, fowl, FO(t) ' + fowl4 + fowl3, rfo), ∀ n0, t0, l0, fowl0, rfo0. fowl[n0] ≠ FO(t0) ∨ ¬ isPersistFO(n0, fowl) ∨ ¬ reorder(l0, fowl, FO(t0) ' + fowl0, rfo0) ∨ reorder(l0, fowl -p n0, fowl0, rfo0), fowl[n1] ≠ FO(t) ∨ ¬ isPersistFO(n1, fowl) ∨ ¬ reorder(l, fowl, FO(t) ' + fowl4 + fowl3, rfo) ∨ reorder(l, fowl -p n1, fowl4 + fowl3, rfo) ⊦ ∃ fowl2, fowl0. fowl4 + FO(t1) ' + fowl3 = fowl2 + FO(t1) ' + fowl0 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl -p n1, fowl2 + fowl0, rfo)
Used terms: n1, t, l, fowl4 + fowl3, rfo
| fowl[n1] = FO(t), fowl4 | t1 = [], t ≠ t1, isPersistFO(n1, fowl), reorder(l, fowl, FO(t) ' + fowl4 + fowl3, rfo), ∀ n0, t0, l0, fowl0, rfo0. fowl[n0] ≠ FO(t0) ∨ ¬ isPersistFO(n0, fowl) ∨ ¬ reorder(l0, fowl, FO(t0) ' + fowl0, rfo0) ∨ reorder(l0, fowl -p n0, fowl0, rfo0), fowl[n1] ≠ FO(t) ∨ ¬ isPersistFO(n1, fowl) ∨ ¬ reorder(l, fowl, FO(t) ' + fowl4 + fowl3, rfo) ∨ reorder(l, fowl -p n1, fowl4 + fowl3, rfo) ⊦ ∃ fowl2, fowl0. fowl4 + FO(t1) ' + fowl3 = fowl2 + FO(t1) ' + fowl0 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl -p n1, fowl2 + fowl0, rfo) |
fowl[n1] = FO(t), fowl4 | t1 = [], t ≠ t1, isPersistFO(n1, fowl), reorder(l, fowl, FO(t) ' + fowl4 + fowl3, rfo), reorder(l, fowl -p n1, fowl4 + fowl3, rfo), ∀ n0, t0, l0, fowl0, rfo0. fowl[n0] ≠ FO(t0) ∨ ¬ isPersistFO(n0, fowl) ∨ ¬ reorder(l0, fowl, FO(t0) ' + fowl0, rfo0) ∨ reorder(l0, fowl -p n0, fowl0, rfo0) ⊦ ∃ fowl2, fowl0. fowl4 + FO(t1) ' + fowl3 = fowl2 + FO(t1) ' + fowl0 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl -p n1, fowl2 + fowl0, rfo)
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list
| fowl[n1] = FO(t), fowl4 | t1 = [], t ≠ t1, isPersistFO(n1, fowl), reorder(l, fowl, FO(t) ' + fowl4 + fowl3, rfo), reorder(l, fowl -p n1, fowl4 + fowl3, rfo), ∀ n0, t0, l0, fowl0, rfo0. fowl[n0] ≠ FO(t0) ∨ ¬ isPersistFO(n0, fowl) ∨ ¬ reorder(l0, fowl, FO(t0) ' + fowl0, rfo0) ∨ reorder(l0, fowl -p n0, fowl0, rfo0) ⊦ ∃ fowl2, fowl0. fowl4 + FO(t1) ' + fowl3 = fowl2 + FO(t1) ' + fowl0 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl -p n1, fowl2 + fowl0, rfo) |
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: fowl4, fowl3
| fowl[n1] = FO(t), fowl1 | t1 = [], t ≠ t1, isPersistFO(n1, fowl), reorder(l, fowl, FO(t) ' + fowl1, rfo(t1 := rfo(t1) -1l FO(l))), FO(l) ∈ rfo(t1), ∀ n0, t0, l0, fowl0, rfo0. fowl[n0] ≠ FO(t0) ∨ ¬ isPersistFO(n0, fowl) ∨ ¬ reorder(l0, fowl, FO(t0) ' + fowl0, rfo0) ∨ reorder(l0, fowl -p n0, fowl0, rfo0) ⊦ ∃ fowl2, fowl3. fowl1 = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl -p n1, fowl2 + fowl3, rfo), fowl1 | t1 = [] ∧ FO(l) ∈ rfo(t1) ∧ reorder(l, fowl -p n1, fowl1, rfo(t1 := rfo(t1) -1l FO(l))) |
fowl[n1] = FO(t), fowl1 | t1 = [], t ≠ t1, isPersistFO(n1, fowl), reorder(l, fowl, FO(t) ' + fowl1, rfo(t1 := rfo(t1) -1l FO(l))), FO(l) ∈ rfo(t1), ¬ reorder(l, fowl -p n1, fowl1, rfo(t1 := rfo(t1) -1l FO(l))), ∀ n0, t0, l0, fowl0, rfo0. fowl[n0] ≠ FO(t0) ∨ ¬ isPersistFO(n0, fowl) ∨ ¬ reorder(l0, fowl, FO(t0) ' + fowl0, rfo0) ∨ reorder(l0, fowl -p n0, fowl0, rfo0) ⊦ ∃ fowl2, fowl3. fowl1 = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl -p n1, fowl2 + fowl3, rfo)
| fowl[n1] = FO(t), fowl1 | t1 = [], t ≠ t1, isPersistFO(n1, fowl), reorder(l, fowl, FO(t) ' + fowl1, rfo(t1 := rfo(t1) -1l FO(l))), FO(l) ∈ rfo(t1), ¬ reorder(l, fowl -p n1, fowl1, rfo(t1 := rfo(t1) -1l FO(l))), ∀ n0, t0, l0, fowl0, rfo0. fowl[n0] ≠ FO(t0) ∨ ¬ isPersistFO(n0, fowl) ∨ ¬ reorder(l0, fowl, FO(t0) ' + fowl0, rfo0) ∨ reorder(l0, fowl -p n0, fowl0, rfo0) ⊦ ∃ fowl2, fowl3. fowl1 = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl -p n1, fowl2 + fowl3, rfo) |
Used terms: n1, 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.