| ⊦ reorder(l, fowl0, fowl1, rfo) ∧ isPropFO(n, l, rfo(t)) → reorder(l, fowl0, fowl1 + FO(t) ', rfo(t := rfo(t) -p n)) |
isPropFO(n, l, rfo(t)), reorder(l, fowl0, fowl1, rfo), ¬ reorder(l, fowl0, fowl1 + FO(t) ', rfo(t := rfo(t) -p n)) ⊦
| isPropFO(n, l, rfo(t)), reorder(l, fowl0, fowl1, rfo), ¬ reorder(l, fowl0, fowl1 + FO(t) ', rfo(t := rfo(t) -p n)) ⊦ |
isPropFO(n, l, rfo(t)), reorder(l, [], fowl1, rfo), ¬ reorder(l, [], fowl1 + FO(t) ', rfo(t := rfo(t) -p n)) ⊦
isPropFO(n, l, rfo(t)), reorder(l, fow + fowl, fowl1, rfo), ¬ reorder(l, fow + fowl, fowl1 + FO(t) ', rfo(t := rfo(t) -p n)), ∀ n, l, rfo, t, fowl1. ¬(isPropFO(n, l, rfo(t)) ∧ reorder(l, fowl, fowl1, rfo) ∧ ¬ reorder(l, fowl, fowl1 + FO(t) ', rfo(t := rfo(t) -p n))) ⊦
Used simplifier rules: List('a) freely generated by [], +;;
| isPropFO(n, l, rfo(t)), reorder(l, [], fowl1, rfo), ¬ reorder(l, [], fowl1 + FO(t) ', rfo(t := rfo(t) -p n)) ⊦ |
isPropFO(n, l, rfo(t)), ∀ t. propFOs(t, l, rfo(t)) = [] ⊦
Used simplifier rules: reorder-base: ⊦ reorder(l, [], fowl0, rfo) ↔ fowl0 = [] ∧ (∀ t. propFOs(t, l, rfo(t)) = []); a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s)
| isPropFO(n, l, rfo(t)), ∀ t. propFOs(t, l, rfo(t)) = [] ⊦ |
propFOs(t, l, rfo(t)) = [], isPropFO(n, l, rfo(t)) ⊦
Used terms: t
| propFOs(t, l, rfo(t)) = [], isPropFO(n, l, rfo(t)) ⊦ |
⊦ FO(l) ∈ bel → propFOs(t, l, bel) = FO(t) ' + propFOs(t, l, bel -1l FO(l))
propFOs(t, l, rfo(t)) = [], isPropFO(n, l, rfo(t)), ¬ FO(l) ∈ rfo(t) ⊦
Used simplifier rules: isPropFO-delpos-eq-delfirst: ⊦ isPropFO(n, l, bel) → bel -1l FO(l) = bel -p n; ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ a ' ≠ []; (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: t, l, rfo(t)
| ⊦ FO(l) ∈ bel → propFOs(t, l, bel) = FO(t) ' + propFOs(t, l, bel -1l FO(l)) |
| propFOs(t, l, rfo(t)) = [], isPropFO(n, l, rfo(t)), ¬ FO(l) ∈ rfo(t) ⊦ |
⊦ isPropFO(n, l, bel) ↔ n < # bel ∧ bel[n] = FO(l) ∧ (∀ m. m < n → bel[m] ≠ SF ∧ (bel[m].W? ∨ bel[m].FO? → bel[m].l ≠ l))
rfo(t)[n] = FO(l), propFOs(t, l, rfo(t)) = [], n < # rfo(t), ¬ FO(l) ∈ rfo(t), ∀ m. m < n → rfo(t)[m] ≠ SF ∧ (rfo(t)[m].W? ∨ rfo(t)[m].FO? → rfo(t)[m].l ≠ l) ⊦
Used terms: n, l, rfo(t)
| ⊦ isPropFO(n, l, bel) ↔ n < # bel ∧ bel[n] = FO(l) ∧ (∀ m. m < n → bel[m] ≠ SF ∧ (bel[m].W? ∨ bel[m].FO? → bel[m].l ≠ l)) |
| rfo(t)[n] = FO(l), propFOs(t, l, rfo(t)) = [], n < # rfo(t), ¬ FO(l) ∈ rfo(t), ∀ m. m < n → rfo(t)[m] ≠ SF ∧ (rfo(t)[m].W? ∨ rfo(t)[m].FO? → rfo(t)[m].l ≠ l) ⊦ |
rfo(t)[n] = FO(l), propFOs(t, l, rfo(t)) = [], rfo(t) ≠ [], n < # rfo(t), ¬ FO(l) ∈ rfo(t), ∀ m. m < n → rfo(t)[m] ≠ SF ∧ (rfo(t)[m].W? ∨ rfo(t)[m].FO? → rfo(t)[m].l ≠ l) ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| rfo(t)[n] = FO(l), propFOs(t, l, rfo(t)) = [], rfo(t) ≠ [], n < # rfo(t), ¬ FO(l) ∈ rfo(t), ∀ m. m < n → rfo(t)[m] ≠ SF ∧ (rfo(t)[m].W? ∨ rfo(t)[m].FO? → rfo(t)[m].l ≠ l) ⊦ |
⊦ a ∈ x ↔ (∃ n. n < # x ∧ x[n] = a)
rfo(t)[n] = FO(l), propFOs(t, l, rfo(t)) = [], rfo(t) ≠ [], n < # rfo(t), ∀ m. m < n → rfo(t)[m] ≠ SF ∧ (rfo(t)[m].W? ∨ rfo(t)[m].FO? → rfo(t)[m].l ≠ l), ∀ n. ¬(n < # rfo(t) ∧ rfo(t)[n] = FO(l)) ⊦
Used terms: FO(l), rfo(t)
| ⊦ a ∈ x ↔ (∃ n. n < # x ∧ x[n] = a) |
| rfo(t)[n] = FO(l), propFOs(t, l, rfo(t)) = [], rfo(t) ≠ [], n < # rfo(t), ∀ m. m < n → rfo(t)[m] ≠ SF ∧ (rfo(t)[m].W? ∨ rfo(t)[m].FO? → rfo(t)[m].l ≠ l), ∀ n. ¬(n < # rfo(t) ∧ rfo(t)[n] = FO(l)) ⊦ |
rfo(t)[n] = FO(l), propFOs(t, l, rfo(t)) = [], rfo(t) ≠ [], n < # rfo(t), ∀ m. m < n → rfo(t)[m] ≠ SF ∧ (rfo(t)[m].W? ∨ rfo(t)[m].FO? → rfo(t)[m].l ≠ l), ∀ n0. ¬ n0 < # rfo(t) ∨ rfo(t)[n0] ≠ FO(l) ⊦
| rfo(t)[n] = FO(l), propFOs(t, l, rfo(t)) = [], rfo(t) ≠ [], n < # rfo(t), ∀ m. m < n → rfo(t)[m] ≠ SF ∧ (rfo(t)[m].W? ∨ rfo(t)[m].FO? → rfo(t)[m].l ≠ l), ∀ n0. ¬ n0 < # rfo(t) ∨ rfo(t)[n0] ≠ FO(l) ⊦ |
Used terms: n
| isPropFO(n, l, rfo(t)), reorder(l, fow + fowl, fowl1, rfo), ¬ reorder(l, fow + fowl, fowl1 + FO(t) ', rfo(t := rfo(t) -p n)), ∀ n, l, rfo, t, fowl1. ¬(isPropFO(n, l, rfo(t)) ∧ reorder(l, fowl, fowl1, rfo) ∧ ¬ reorder(l, fowl, fowl1 + FO(t) ', rfo(t := rfo(t) -p n))) ⊦ |
isPropFO(n, l, rfo(t)), reorder(l, fow ' + fowl, fowl1, rfo), ¬ reorder(l, fow ' + fowl, fowl1 + FO(t) ', rfo(t := rfo(t) -p n)), ∀ n0, l0, rfo0, t0, fowl0. ¬ isPropFO(n0, l0, rfo0(t0)) ∨ ¬ reorder(l0, fowl, fowl0, rfo0) ∨ reorder(l0, fowl, fowl0 + FO(t0) ', rfo0(t0 := rfo0(t0) -p n0)) ⊦
Used simplifier rules: ⊦ a + x = a ' + x; (s)
| isPropFO(n, l, rfo(t)), reorder(l, fow ' + fowl, fowl1, rfo), ¬ reorder(l, fow ' + fowl, fowl1 + FO(t) ', rfo(t := rfo(t) -p n)), ∀ n0, l0, rfo0, t0, fowl0. ¬ isPropFO(n0, l0, rfo0(t0)) ∨ ¬ reorder(l0, fowl, fowl0, rfo0) ∨ reorder(l0, fowl, fowl0 + FO(t0) ', rfo0(t0 := rfo0(t0) -p n0)) ⊦ |
fow = FO(t1), isPropFO(n, l, rfo(t)), reorder(l, fow ' + fowl, fowl1, rfo), ¬ reorder(l, fow ' + fowl, fowl1 + FO(t) ', rfo(t := rfo(t) -p n)), ∀ n0, l0, rfo0, t0, fowl0. ¬ isPropFO(n0, l0, rfo0(t0)) ∨ ¬ reorder(l0, fowl, fowl0, rfo0) ∨ reorder(l0, fowl, fowl0 + FO(t0) ', rfo0(t0 := rfo0(t0) -p n0)) ⊦
fow = W(v, t1), isPropFO(n, l, rfo(t)), reorder(l, fow ' + fowl, fowl1, rfo), ¬ reorder(l, fow ' + fowl, fowl1 + FO(t) ', rfo(t := rfo(t) -p n)), ∀ n0, l0, rfo0, t0, fowl0. ¬ isPropFO(n0, l0, rfo0(t0)) ∨ ¬ reorder(l0, fowl, fowl0, rfo0) ∨ reorder(l0, fowl, fowl0 + FO(t0) ', rfo0(t0 := rfo0(t0) -p n0)) ⊦
Used simplifier rules: FOW freely generated by FO, W;;
| fow = FO(t1), isPropFO(n, l, rfo(t)), reorder(l, fow ' + fowl, fowl1, rfo), ¬ reorder(l, fow ' + fowl, fowl1 + FO(t) ', rfo(t := rfo(t) -p n)), ∀ n0, l0, rfo0, t0, fowl0. ¬ isPropFO(n0, l0, rfo0(t0)) ∨ ¬ reorder(l0, fowl, fowl0, rfo0) ∨ reorder(l0, fowl, fowl0 + FO(t0) ', rfo0(t0 := rfo0(t0) -p n0)) ⊦ |
isPropFO(n, l, rfo(t)), ∀ n0, l0, rfo0, t0, fowl0. ¬ isPropFO(n0, l0, rfo0(t0)) ∨ ¬ reorder(l0, fowl, fowl0, rfo0) ∨ reorder(l0, fowl, fowl0 + FO(t0) ', rfo0(t0 := rfo0(t0) -p n0)), fowl1 = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl, fowl2 + fowl3, rfo) ∨ fowl1 | t1 = [] ∧ FO(l) ∈ rfo(t1) ∧ reorder(l, fowl, fowl1, rfo(t1 := rfo(t1) -1l FO(l))) ⊦ ∃ fowl2, fowl3. fowl1 + FO(t) ' = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl, fowl2 + fowl3, rfo(t := rfo(t) -p n)), fowl1 | t1 = [] ∧ t1 ≠ t ∧ FO(l) ∈ rfo(t1) ∧ reorder(l, fowl, fowl1 + FO(t) ', rfo(t := rfo(t) -p n)(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) ⊦ FO(tid).tid = tid; (s) ⊦ fow ' | t = (t = fow.tid ⊃ fow ';[]); (s) ⊦ fowl + fowl0 | t = (fowl | t) + (fowl0 | t); (s)
| isPropFO(n, l, rfo(t)), ∀ n0, l0, rfo0, t0, fowl0. ¬ isPropFO(n0, l0, rfo0(t0)) ∨ ¬ reorder(l0, fowl, fowl0, rfo0) ∨ reorder(l0, fowl, fowl0 + FO(t0) ', rfo0(t0 := rfo0(t0) -p n0)), fowl1 = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl, fowl2 + fowl3, rfo) ∨ fowl1 | t1 = [] ∧ FO(l) ∈ rfo(t1) ∧ reorder(l, fowl, fowl1, rfo(t1 := rfo(t1) -1l FO(l))) ⊦ ∃ fowl2, fowl3. fowl1 + FO(t) ' = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl, fowl2 + fowl3, rfo(t := rfo(t) -p n)), fowl1 | t1 = [] ∧ t1 ≠ t ∧ FO(l) ∈ rfo(t1) ∧ reorder(l, fowl, fowl1 + FO(t) ', rfo(t := rfo(t) -p n)(t1 := rfo(t1) -1l FO(l))) |
fowl1 = fowl2 + FO(t1) ' + fowl3, fowl2 | t1 = [], isPropFO(n, l, rfo(t)), reorder(l, fowl, fowl2 + fowl3, rfo), ∀ n0, l0, rfo0, t0, fowl0. ¬ isPropFO(n0, l0, rfo0(t0)) ∨ ¬ reorder(l0, fowl, fowl0, rfo0) ∨ reorder(l0, fowl, fowl0 + FO(t0) ', rfo0(t0 := rfo0(t0) -p n0)) ⊦ ∃ fowl2, fowl3. fowl1 + FO(t) ' = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl, fowl2 + fowl3, rfo(t := rfo(t) -p n)), fowl1 | t1 = [] ∧ t1 ≠ t ∧ FO(l) ∈ rfo(t1) ∧ reorder(l, fowl, fowl1 + FO(t) ', rfo(t := rfo(t) -p n)(t1 := rfo(t1) -1l FO(l)))
fowl1 | t1 = [], isPropFO(n, l, rfo(t)), reorder(l, fowl, fowl1, rfo(t1 := rfo(t1) -1l FO(l))), FO(l) ∈ rfo(t1), ∀ n0, l0, rfo0, t0, fowl0. ¬ isPropFO(n0, l0, rfo0(t0)) ∨ ¬ reorder(l0, fowl, fowl0, rfo0) ∨ reorder(l0, fowl, fowl0 + FO(t0) ', rfo0(t0 := rfo0(t0) -p n0)) ⊦ ∃ fowl2, fowl3. fowl1 + FO(t) ' = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl, fowl2 + fowl3, rfo(t := rfo(t) -p n)), fowl1 | t1 = [] ∧ t1 ≠ t ∧ FO(l) ∈ rfo(t1) ∧ reorder(l, fowl, fowl1 + FO(t) ', rfo(t := rfo(t) -p n)(t1 := rfo(t1) -1l FO(l)))
| fowl1 = fowl2 + FO(t1) ' + fowl3, fowl2 | t1 = [], isPropFO(n, l, rfo(t)), reorder(l, fowl, fowl2 + fowl3, rfo), ∀ n0, l0, rfo0, t0, fowl0. ¬ isPropFO(n0, l0, rfo0(t0)) ∨ ¬ reorder(l0, fowl, fowl0, rfo0) ∨ reorder(l0, fowl, fowl0 + FO(t0) ', rfo0(t0 := rfo0(t0) -p n0)) ⊦ ∃ fowl2, fowl3. fowl1 + FO(t) ' = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl, fowl2 + fowl3, rfo(t := rfo(t) -p n)), fowl1 | t1 = [] ∧ t1 ≠ t ∧ FO(l) ∈ rfo(t1) ∧ reorder(l, fowl, fowl1 + FO(t) ', rfo(t := rfo(t) -p n)(t1 := rfo(t1) -1l FO(l))) |
fowl2 | t1 = [], isPropFO(n, l, rfo(t)), reorder(l, fowl, fowl2 + fowl3, rfo), ∀ n0, l0, rfo0, t0, fowl0. ¬ isPropFO(n0, l0, rfo0(t0)) ∨ ¬ reorder(l0, fowl, fowl0, rfo0) ∨ reorder(l0, fowl, fowl0 + FO(t0) ', rfo0(t0 := rfo0(t0) -p n0)) ⊦ ∃ fowl0, fowl4. (fowl2 + FO(t1) ' + fowl3) + FO(t) ' = fowl0 + FO(t1) ' + fowl4 ∧ fowl0 | t1 = [] ∧ reorder(l, fowl, fowl0 + fowl4, rfo(t := rfo(t) -p n))
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)
| fowl2 | t1 = [], isPropFO(n, l, rfo(t)), reorder(l, fowl, fowl2 + fowl3, rfo), ∀ n0, l0, rfo0, t0, fowl0. ¬ isPropFO(n0, l0, rfo0(t0)) ∨ ¬ reorder(l0, fowl, fowl0, rfo0) ∨ reorder(l0, fowl, fowl0 + FO(t0) ', rfo0(t0 := rfo0(t0) -p n0)) ⊦ ∃ fowl0, fowl4. (fowl2 + FO(t1) ' + fowl3) + FO(t) ' = fowl0 + FO(t1) ' + fowl4 ∧ fowl0 | t1 = [] ∧ reorder(l, fowl, fowl0 + fowl4, rfo(t := rfo(t) -p n)) |
fowl2 | t1 = [], isPropFO(n, l, rfo(t)), reorder(l, fowl, fowl2 + fowl3, rfo), ∀ n0, l0, rfo0, t0, fowl0. ¬ isPropFO(n0, l0, rfo0(t0)) ∨ ¬ reorder(l0, fowl, fowl0, rfo0) ∨ reorder(l0, fowl, fowl0 + FO(t0) ', rfo0(t0 := rfo0(t0) -p n0)), ¬ isPropFO(n, l, rfo(t)) ∨ ¬ reorder(l, fowl, fowl2 + fowl3, rfo) ∨ reorder(l, fowl, (fowl2 + fowl3) + FO(t) ', rfo(t := rfo(t) -p n)) ⊦ ∃ fowl0, fowl4. (fowl2 + FO(t1) ' + fowl3) + FO(t) ' = fowl0 + FO(t1) ' + fowl4 ∧ fowl0 | t1 = [] ∧ reorder(l, fowl, fowl0 + fowl4, rfo(t := rfo(t) -p n))
Used terms: n, l, rfo, t, fowl2 + fowl3
| fowl2 | t1 = [], isPropFO(n, l, rfo(t)), reorder(l, fowl, fowl2 + fowl3, rfo), ∀ n0, l0, rfo0, t0, fowl0. ¬ isPropFO(n0, l0, rfo0(t0)) ∨ ¬ reorder(l0, fowl, fowl0, rfo0) ∨ reorder(l0, fowl, fowl0 + FO(t0) ', rfo0(t0 := rfo0(t0) -p n0)), ¬ isPropFO(n, l, rfo(t)) ∨ ¬ reorder(l, fowl, fowl2 + fowl3, rfo) ∨ reorder(l, fowl, (fowl2 + fowl3) + FO(t) ', rfo(t := rfo(t) -p n)) ⊦ ∃ fowl0, fowl4. (fowl2 + FO(t1) ' + fowl3) + FO(t) ' = fowl0 + FO(t1) ' + fowl4 ∧ fowl0 | t1 = [] ∧ reorder(l, fowl, fowl0 + fowl4, rfo(t := rfo(t) -p n)) |
fowl2 | t1 = [], isPropFO(n, l, rfo(t)), reorder(l, fowl, fowl2 + fowl3, rfo), reorder(l, fowl, (fowl2 + fowl3) + FO(t) ', rfo(t := rfo(t) -p n)), ∀ n0, l0, rfo0, t0, fowl0. ¬ isPropFO(n0, l0, rfo0(t0)) ∨ ¬ reorder(l0, fowl, fowl0, rfo0) ∨ reorder(l0, fowl, fowl0 + FO(t0) ', rfo0(t0 := rfo0(t0) -p n0)) ⊦ ∃ fowl0, fowl4. (fowl2 + FO(t1) ' + fowl3) + FO(t) ' = fowl0 + FO(t1) ' + fowl4 ∧ fowl0 | t1 = [] ∧ reorder(l, fowl, fowl0 + fowl4, rfo(t := rfo(t) -p n))
| fowl2 | t1 = [], isPropFO(n, l, rfo(t)), reorder(l, fowl, fowl2 + fowl3, rfo), reorder(l, fowl, (fowl2 + fowl3) + FO(t) ', rfo(t := rfo(t) -p n)), ∀ n0, l0, rfo0, t0, fowl0. ¬ isPropFO(n0, l0, rfo0(t0)) ∨ ¬ reorder(l0, fowl, fowl0, rfo0) ∨ reorder(l0, fowl, fowl0 + FO(t0) ', rfo0(t0 := rfo0(t0) -p n0)) ⊦ ∃ fowl0, fowl4. (fowl2 + FO(t1) ' + fowl3) + FO(t) ' = fowl0 + FO(t1) ' + fowl4 ∧ fowl0 | t1 = [] ∧ reorder(l, fowl, fowl0 + fowl4, rfo(t := rfo(t) -p n)) |
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: fowl2, fowl3 + FO(t) '
| fowl1 | t1 = [], isPropFO(n, l, rfo(t)), reorder(l, fowl, fowl1, rfo(t1 := rfo(t1) -1l FO(l))), FO(l) ∈ rfo(t1), ∀ n0, l0, rfo0, t0, fowl0. ¬ isPropFO(n0, l0, rfo0(t0)) ∨ ¬ reorder(l0, fowl, fowl0, rfo0) ∨ reorder(l0, fowl, fowl0 + FO(t0) ', rfo0(t0 := rfo0(t0) -p n0)) ⊦ ∃ fowl2, fowl3. fowl1 + FO(t) ' = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl, fowl2 + fowl3, rfo(t := rfo(t) -p n)), fowl1 | t1 = [] ∧ t1 ≠ t ∧ FO(l) ∈ rfo(t1) ∧ reorder(l, fowl, fowl1 + FO(t) ', rfo(t := rfo(t) -p n)(t1 := rfo(t1) -1l FO(l))) |
fowl1 | t1 = [], isPropFO(n, l, rfo(t)), reorder(l, fowl, fowl1, rfo(t1 := rfo(t1) -1l FO(l))), FO(l) ∈ rfo(t1), ∀ n0, l0, rfo0, t0, fowl0. ¬ isPropFO(n0, l0, rfo0(t0)) ∨ ¬ reorder(l0, fowl, fowl0, rfo0) ∨ reorder(l0, fowl, fowl0 + FO(t0) ', rfo0(t0 := rfo0(t0) -p n0)) ⊦ ∃ fowl2, fowl3. fowl1 + FO(t) ' = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl, fowl2 + fowl3, rfo(t := rfo(t) -p n)), t1 ≠ t ∧ reorder(l, fowl, fowl1 + FO(t) ', rfo(t := rfo(t) -p n)(t1 := rfo(t1) -1l FO(l)))
| fowl1 | t1 = [], isPropFO(n, l, rfo(t)), reorder(l, fowl, fowl1, rfo(t1 := rfo(t1) -1l FO(l))), FO(l) ∈ rfo(t1), ∀ n0, l0, rfo0, t0, fowl0. ¬ isPropFO(n0, l0, rfo0(t0)) ∨ ¬ reorder(l0, fowl, fowl0, rfo0) ∨ reorder(l0, fowl, fowl0 + FO(t0) ', rfo0(t0 := rfo0(t0) -p n0)) ⊦ ∃ fowl2, fowl3. fowl1 + FO(t) ' = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl, fowl2 + fowl3, rfo(t := rfo(t) -p n)), t1 ≠ t ∧ reorder(l, fowl, fowl1 + FO(t) ', rfo(t := rfo(t) -p n)(t1 := rfo(t1) -1l FO(l))) |
t = t1, fowl1 | t1 = [], isPropFO(n, l, rfo(t)), reorder(l, fowl, fowl1, rfo(t1 := rfo(t1) -1l FO(l))), FO(l) ∈ rfo(t1), ∀ n0, l0, rfo0, t0, fowl0. ¬ isPropFO(n0, l0, rfo0(t0)) ∨ ¬ reorder(l0, fowl, fowl0, rfo0) ∨ reorder(l0, fowl, fowl0 + FO(t0) ', rfo0(t0 := rfo0(t0) -p n0)) ⊦ ∃ fowl2, fowl3. fowl1 + FO(t) ' = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl, fowl2 + fowl3, rfo(t := rfo(t) -p n)), t1 ≠ t ∧ reorder(l, fowl, fowl1 + FO(t) ', rfo(t := rfo(t) -p n)(t1 := rfo(t1) -1l FO(l)))
fowl1 | t1 = [], t ≠ t1, isPropFO(n, l, rfo(t)), reorder(l, fowl, fowl1, rfo(t1 := rfo(t1) -1l FO(l))), FO(l) ∈ rfo(t1), ∀ n0, l0, rfo0, t0, fowl0. ¬ isPropFO(n0, l0, rfo0(t0)) ∨ ¬ reorder(l0, fowl, fowl0, rfo0) ∨ reorder(l0, fowl, fowl0 + FO(t0) ', rfo0(t0 := rfo0(t0) -p n0)) ⊦ ∃ fowl2, fowl3. fowl1 + FO(t) ' = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl, fowl2 + fowl3, rfo(t := rfo(t) -p n)), t1 ≠ t ∧ reorder(l, fowl, fowl1 + FO(t) ', rfo(t := rfo(t) -p n)(t1 := rfo(t1) -1l FO(l)))
Used formulas: t = t1
| t = t1, fowl1 | t1 = [], isPropFO(n, l, rfo(t)), reorder(l, fowl, fowl1, rfo(t1 := rfo(t1) -1l FO(l))), FO(l) ∈ rfo(t1), ∀ n0, l0, rfo0, t0, fowl0. ¬ isPropFO(n0, l0, rfo0(t0)) ∨ ¬ reorder(l0, fowl, fowl0, rfo0) ∨ reorder(l0, fowl, fowl0 + FO(t0) ', rfo0(t0 := rfo0(t0) -p n0)) ⊦ ∃ fowl2, fowl3. fowl1 + FO(t) ' = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl, fowl2 + fowl3, rfo(t := rfo(t) -p n)), t1 ≠ t ∧ reorder(l, fowl, fowl1 + FO(t) ', rfo(t := rfo(t) -p n)(t1 := rfo(t1) -1l FO(l))) |
fowl1 | t1 = [], isPropFO(n, l, rfo(t1)), reorder(l, fowl, fowl1, rfo(t1 := rfo(t1) -p n)), FO(l) ∈ rfo(t1), ∀ n0, l0, rfo0, t0, fowl0. ¬ isPropFO(n0, l0, rfo0(t0)) ∨ ¬ reorder(l0, fowl, fowl0, rfo0) ∨ reorder(l0, fowl, fowl0 + FO(t0) ', rfo0(t0 := rfo0(t0) -p n0)) ⊦ ∃ fowl2, fowl3. fowl1 + FO(t1) ' = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl, fowl2 + fowl3, rfo(t1 := rfo(t1) -p n))
Used simplifier rules: isPropFO-delpos-eq-delfirst: ⊦ isPropFO(n, l, bel) → bel -1l FO(l) = bel -p n;
| fowl1 | t1 = [], isPropFO(n, l, rfo(t1)), reorder(l, fowl, fowl1, rfo(t1 := rfo(t1) -p n)), FO(l) ∈ rfo(t1), ∀ n0, l0, rfo0, t0, fowl0. ¬ isPropFO(n0, l0, rfo0(t0)) ∨ ¬ reorder(l0, fowl, fowl0, rfo0) ∨ reorder(l0, fowl, fowl0 + FO(t0) ', rfo0(t0 := rfo0(t0) -p n0)) ⊦ ∃ fowl2, fowl3. fowl1 + FO(t1) ' = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl, fowl2 + fowl3, rfo(t1 := rfo(t1) -p n)) |
Used simplifier rules: ⊦ # x = # z → (x + y = z + y0 ↔ x = z ∧ y = y0); (ws) ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: fowl1, []
| fowl1 | t1 = [], t ≠ t1, isPropFO(n, l, rfo(t)), reorder(l, fowl, fowl1, rfo(t1 := rfo(t1) -1l FO(l))), FO(l) ∈ rfo(t1), ∀ n0, l0, rfo0, t0, fowl0. ¬ isPropFO(n0, l0, rfo0(t0)) ∨ ¬ reorder(l0, fowl, fowl0, rfo0) ∨ reorder(l0, fowl, fowl0 + FO(t0) ', rfo0(t0 := rfo0(t0) -p n0)) ⊦ ∃ fowl2, fowl3. fowl1 + FO(t) ' = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl, fowl2 + fowl3, rfo(t := rfo(t) -p n)), t1 ≠ t ∧ reorder(l, fowl, fowl1 + FO(t) ', rfo(t := rfo(t) -p n)(t1 := rfo(t1) -1l FO(l))) |
fowl1 | t1 = [], t ≠ t1, isPropFO(n, l, rfo(t)), reorder(l, fowl, fowl1, rfo(t1 := rfo(t1) -1l FO(l))), FO(l) ∈ rfo(t1), ¬ reorder(l, fowl, fowl1 + FO(t) ', rfo(t := rfo(t) -p n)(t1 := rfo(t1) -1l FO(l))), ∀ n0, l0, rfo0, t0, fowl0. ¬ isPropFO(n0, l0, rfo0(t0)) ∨ ¬ reorder(l0, fowl, fowl0, rfo0) ∨ reorder(l0, fowl, fowl0 + FO(t0) ', rfo0(t0 := rfo0(t0) -p n0)) ⊦ ∃ fowl2, fowl3. fowl1 + FO(t) ' = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl, fowl2 + fowl3, rfo(t := rfo(t) -p n))
| fowl1 | t1 = [], t ≠ t1, isPropFO(n, l, rfo(t)), reorder(l, fowl, fowl1, rfo(t1 := rfo(t1) -1l FO(l))), FO(l) ∈ rfo(t1), ¬ reorder(l, fowl, fowl1 + FO(t) ', rfo(t := rfo(t) -p n)(t1 := rfo(t1) -1l FO(l))), ∀ n0, l0, rfo0, t0, fowl0. ¬ isPropFO(n0, l0, rfo0(t0)) ∨ ¬ reorder(l0, fowl, fowl0, rfo0) ∨ reorder(l0, fowl, fowl0 + FO(t0) ', rfo0(t0 := rfo0(t0) -p n0)) ⊦ ∃ fowl2, fowl3. fowl1 + FO(t) ' = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl, fowl2 + fowl3, rfo(t := rfo(t) -p n)) |
fowl1 | t1 = [], t ≠ t1, isPropFO(n, l, rfo(t)), reorder(l, fowl, fowl1, rfo(t1 := rfo(t1) -1l FO(l))), FO(l) ∈ rfo(t1), ¬ reorder(l, fowl, fowl1 + FO(t) ', rfo(t := rfo(t) -p n)(t1 := rfo(t1) -1l FO(l))), ¬ isPropFO(n, l, rfo(t1 := rfo(t1) -1l FO(l))(t)) ∨ ¬ reorder(l, fowl, fowl1, rfo(t1 := rfo(t1) -1l FO(l))) ∨ reorder(l, fowl, fowl1 + FO(t) ', rfo(t1 := rfo(t1) -1l FO(l))(t := rfo(t1 := rfo(t1) -1l FO(l))(t) -p n)) ⊦ ∃ fowl2, fowl3. fowl1 + FO(t) ' = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl, fowl2 + fowl3, rfo(t := rfo(t) -p n))
Used terms: n, l, rfo(t1 := rfo(t1) -1l FO(l)), t, fowl1
| fowl1 | t1 = [], t ≠ t1, isPropFO(n, l, rfo(t)), reorder(l, fowl, fowl1, rfo(t1 := rfo(t1) -1l FO(l))), FO(l) ∈ rfo(t1), ¬ reorder(l, fowl, fowl1 + FO(t) ', rfo(t := rfo(t) -p n)(t1 := rfo(t1) -1l FO(l))), ¬ isPropFO(n, l, rfo(t1 := rfo(t1) -1l FO(l))(t)) ∨ ¬ reorder(l, fowl, fowl1, rfo(t1 := rfo(t1) -1l FO(l))) ∨ reorder(l, fowl, fowl1 + FO(t) ', rfo(t1 := rfo(t1) -1l FO(l))(t := rfo(t1 := rfo(t1) -1l FO(l))(t) -p n)) ⊦ ∃ fowl2, fowl3. fowl1 + FO(t) ' = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl, fowl2 + fowl3, rfo(t := rfo(t) -p n)) |
fowl1 | t1 = [], t ≠ t1, isPropFO(n, l, rfo(t)), reorder(l, fowl, fowl1, rfo(t1 := rfo(t1) -1l FO(l))), reorder(l, fowl, fowl1 + FO(t) ', rfo(t1 := rfo(t1) -1l FO(l))(t := rfo(t) -p n)), FO(l) ∈ rfo(t1), ¬ reorder(l, fowl, fowl1 + FO(t) ', rfo(t := rfo(t) -p n)(t1 := rfo(t1) -1l FO(l))) ⊦ ∃ fowl2, fowl3. fowl1 + FO(t) ' = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl, fowl2 + fowl3, rfo(t := rfo(t) -p n))
| fowl1 | t1 = [], t ≠ t1, isPropFO(n, l, rfo(t)), reorder(l, fowl, fowl1, rfo(t1 := rfo(t1) -1l FO(l))), reorder(l, fowl, fowl1 + FO(t) ', rfo(t1 := rfo(t1) -1l FO(l))(t := rfo(t) -p n)), FO(l) ∈ rfo(t1), ¬ reorder(l, fowl, fowl1 + FO(t) ', rfo(t := rfo(t) -p n)(t1 := rfo(t1) -1l FO(l))) ⊦ ∃ fowl2, fowl3. fowl1 + FO(t) ' = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl, fowl2 + fowl3, rfo(t := rfo(t) -p n)) |
fowl1 | t1 = [], rfo(t1 := rfo(t1) -1l FO(l))(t := rfo(t) -p n) ≠ rfo(t := rfo(t) -p n)(t1 := rfo(t1) -1l FO(l)), t ≠ t1, isPropFO(n, l, rfo(t)), reorder(l, fowl, fowl1 + FO(t) ', rfo(t1 := rfo(t1) -1l FO(l))(t := rfo(t) -p n)), reorder(l, fowl, fowl1, rfo(t1 := rfo(t1) -1l FO(l))), FO(l) ∈ rfo(t1), ¬ reorder(l, fowl, fowl1 + FO(t) ', rfo(t := rfo(t) -p n)(t1 := rfo(t1) -1l FO(l))) ⊦ ∃ fowl2, fowl3. fowl1 + FO(t) ' = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl, fowl2 + fowl3, rfo(t := rfo(t) -p n))
Used formulas: rfo(t1 := rfo(t1) -1l FO(l))(t := rfo(t) -p n) = rfo(t := rfo(t) -p n)(t1 := rfo(t1) -1l FO(l))
| fowl1 | t1 = [], rfo(t1 := rfo(t1) -1l FO(l))(t := rfo(t) -p n) ≠ rfo(t := rfo(t) -p n)(t1 := rfo(t1) -1l FO(l)), t ≠ t1, isPropFO(n, l, rfo(t)), reorder(l, fowl, fowl1 + FO(t) ', rfo(t1 := rfo(t1) -1l FO(l))(t := rfo(t) -p n)), reorder(l, fowl, fowl1, rfo(t1 := rfo(t1) -1l FO(l))), FO(l) ∈ rfo(t1), ¬ reorder(l, fowl, fowl1 + FO(t) ', rfo(t := rfo(t) -p n)(t1 := rfo(t1) -1l FO(l))) ⊦ ∃ fowl2, fowl3. fowl1 + FO(t) ' = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl, fowl2 + fowl3, rfo(t := rfo(t) -p n)) |
fowl1 | t1 = [], rfo(t1 := rfo(t1) -1l FO(l))(t := rfo(t) -p n)(t0) ≠ rfo(t := rfo(t) -p n)(t1 := rfo(t1) -1l FO(l))(t0), t ≠ t1, isPropFO(n, l, rfo(t)), reorder(l, fowl, fowl1, rfo(t1 := rfo(t1) -1l FO(l))), reorder(l, fowl, fowl1 + FO(t) ', rfo(t1 := rfo(t1) -1l FO(l))(t := rfo(t) -p n)), FO(l) ∈ rfo(t1), ¬ reorder(l, fowl, fowl1 + FO(t) ', rfo(t := rfo(t) -p n)(t1 := rfo(t1) -1l FO(l))) ⊦ ∃ fowl2, fowl3. fowl1 + FO(t) ' = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl, fowl2 + fowl3, rfo(t := rfo(t) -p n))
| fowl1 | t1 = [], rfo(t1 := rfo(t1) -1l FO(l))(t := rfo(t) -p n)(t0) ≠ rfo(t := rfo(t) -p n)(t1 := rfo(t1) -1l FO(l))(t0), t ≠ t1, isPropFO(n, l, rfo(t)), reorder(l, fowl, fowl1, rfo(t1 := rfo(t1) -1l FO(l))), reorder(l, fowl, fowl1 + FO(t) ', rfo(t1 := rfo(t1) -1l FO(l))(t := rfo(t) -p n)), FO(l) ∈ rfo(t1), ¬ reorder(l, fowl, fowl1 + FO(t) ', rfo(t := rfo(t) -p n)(t1 := rfo(t1) -1l FO(l))) ⊦ ∃ fowl2, fowl3. fowl1 + FO(t) ' = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl, fowl2 + fowl3, rfo(t := rfo(t) -p n)) |
fowl1 | t1 = [], (t = t0 ⊃ rfo(t0) -p n;(t1 = t0 ⊃ rfo(t0) -1l FO(l);rfo(t0))) ≠ (t1 = t0 ⊃ rfo(t0) -1l FO(l);(t = t0 ⊃ rfo(t0) -p n;rfo(t0))), t ≠ t1, isPropFO(n, l, rfo(t)), reorder(l, fowl, fowl1 + FO(t) ', rfo(t1 := rfo(t1) -1l FO(l))(t := rfo(t) -p n)), reorder(l, fowl, fowl1, rfo(t1 := rfo(t1) -1l FO(l))), FO(l) ∈ rfo(t1), ¬ reorder(l, fowl, fowl1 + FO(t) ', rfo(t := rfo(t) -p n)(t1 := rfo(t1) -1l FO(l))) ⊦ ∃ fowl2, fowl3. fowl1 + FO(t) ' = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl, fowl2 + fowl3, rfo(t := rfo(t) -p n))
| fowl1 | t1 = [], (t = t0 ⊃ rfo(t0) -p n;(t1 = t0 ⊃ rfo(t0) -1l FO(l);rfo(t0))) ≠ (t1 = t0 ⊃ rfo(t0) -1l FO(l);(t = t0 ⊃ rfo(t0) -p n;rfo(t0))), t ≠ t1, isPropFO(n, l, rfo(t)), reorder(l, fowl, fowl1 + FO(t) ', rfo(t1 := rfo(t1) -1l FO(l))(t := rfo(t) -p n)), reorder(l, fowl, fowl1, rfo(t1 := rfo(t1) -1l FO(l))), FO(l) ∈ rfo(t1), ¬ reorder(l, fowl, fowl1 + FO(t) ', rfo(t := rfo(t) -p n)(t1 := rfo(t1) -1l FO(l))) ⊦ ∃ fowl2, fowl3. fowl1 + FO(t) ' = fowl2 + FO(t1) ' + fowl3 ∧ fowl2 | t1 = [] ∧ reorder(l, fowl, fowl2 + fowl3, rfo(t := rfo(t) -p n)) |
Used formulas: t = t0
| fow = W(v, t1), isPropFO(n, l, rfo(t)), reorder(l, fow ' + fowl, fowl1, rfo), ¬ reorder(l, fow ' + fowl, fowl1 + FO(t) ', rfo(t := rfo(t) -p n)), ∀ n0, l0, rfo0, t0, fowl0. ¬ isPropFO(n0, l0, rfo0(t0)) ∨ ¬ reorder(l0, fowl, fowl0, rfo0) ∨ reorder(l0, fowl, fowl0 + FO(t0) ', rfo0(t0 := rfo0(t0) -p n0)) ⊦ |
fowl1.head = W(v, t1), fowl1 ≠ [], isPropFO(n, l, rfo(t)), reorder(l, fowl, fowl1.tail, rfo), ¬ reorder(l, fowl, fowl1.tail + FO(t) ', rfo(t := rfo(t) -p n)), ∀ n0, l0, rfo0, t0, fowl0. ¬ isPropFO(n0, l0, rfo0(t0)) ∨ ¬ reorder(l0, fowl, fowl0, rfo0) ∨ reorder(l0, fowl, fowl0 + FO(t0) ', rfo0(t0 := rfo0(t0) -p n0)) ⊦
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); a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x ≠ [] → (x + y).tail = x.tail + y; (s) ⊦ x ≠ [] → (x + y).head = x.head; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s)
| fowl1.head = W(v, t1), fowl1 ≠ [], isPropFO(n, l, rfo(t)), reorder(l, fowl, fowl1.tail, rfo), ¬ reorder(l, fowl, fowl1.tail + FO(t) ', rfo(t := rfo(t) -p n)), ∀ n0, l0, rfo0, t0, fowl0. ¬ isPropFO(n0, l0, rfo0(t0)) ∨ ¬ reorder(l0, fowl, fowl0, rfo0) ∨ reorder(l0, fowl, fowl0 + FO(t0) ', rfo0(t0 := rfo0(t0) -p n0)) ⊦ |
fow = W(v, t1), fowl1 = fow + fowl2, fowl1 ≠ [], isPropFO(n, l, rfo(t)), reorder(l, fowl, fowl2, rfo), ¬ reorder(l, fowl, fowl2 + FO(t) ', rfo(t := rfo(t) -p n)), ∀ n0, l0, rfo0, t0, fowl0. ¬ isPropFO(n0, l0, rfo0(t0)) ∨ ¬ reorder(l0, fowl, fowl0, rfo0) ∨ reorder(l0, fowl, fowl0 + FO(t0) ', rfo0(t0 := rfo0(t0) -p n0)) ⊦
Used simplifier rules: ⊦ x ≠ [] → (head = x.head ∧ tail = x.tail ↔ x = head + tail); (elim) Used terms: fowl1, fow, fowl2
| fow = W(v, t1), fowl1 = fow + fowl2, fowl1 ≠ [], isPropFO(n, l, rfo(t)), reorder(l, fowl, fowl2, rfo), ¬ reorder(l, fowl, fowl2 + FO(t) ', rfo(t := rfo(t) -p n)), ∀ n0, l0, rfo0, t0, fowl0. ¬ isPropFO(n0, l0, rfo0(t0)) ∨ ¬ reorder(l0, fowl, fowl0, rfo0) ∨ reorder(l0, fowl, fowl0 + FO(t0) ', rfo0(t0 := rfo0(t0) -p n0)) ⊦ |
isPropFO(n, l, rfo(t)), reorder(l, fowl, fowl2, rfo), ¬ reorder(l, fowl, fowl2 + FO(t) ', rfo(t := rfo(t) -p n)), ∀ n0, l0, rfo0, t0, fowl0. ¬ isPropFO(n0, l0, rfo0(t0)) ∨ ¬ reorder(l0, fowl, fowl0, rfo0) ∨ reorder(l0, fowl, fowl0 + FO(t0) ', rfo0(t0 := rfo0(t0) -p n0)) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ a + x = a ' + x; (s)
| isPropFO(n, l, rfo(t)), reorder(l, fowl, fowl2, rfo), ¬ reorder(l, fowl, fowl2 + FO(t) ', rfo(t := rfo(t) -p n)), ∀ n0, l0, rfo0, t0, fowl0. ¬ isPropFO(n0, l0, rfo0(t0)) ∨ ¬ reorder(l0, fowl, fowl0, rfo0) ∨ reorder(l0, fowl, fowl0 + FO(t0) ', rfo0(t0 := rfo0(t0) -p n0)) ⊦ |
Used terms: n, l, rfo, t, fowl2
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.