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