| ⊦ FOFollowsW(t, p0(l)) ∧ rely(t, p0, p1) → FOFollowsW(t, p1(l)) |
FOFollowsW(t, p0(l)), rely(t, p0, p1), ¬ FOFollowsW(t, p1(l)) ⊦
| FOFollowsW(t, p0(l)), rely(t, p0, p1), ¬ FOFollowsW(t, p1(l)) ⊦ |
FOFollowsW(t, p0(l)), ¬ FOFollowsW(t, p1(l)), ∀ l0. ∃ fowl1, fowl2. (∃ fowl2, fowl3, fowl4, fowl5. p0(l0) = fowl2 + fowl3 + fowl4 ∧ fowl5 ⊆ fowl3 |FO ∧ fowl1 = fowl5 + fowl4) ∧ p1(l0) = fowl1 + fowl2 ∧ fowl2 | t = [] ⊦
Used simplifier rules: allrely-def: ⊦ rely(t, p, p0) ↔ (∀ l. rely(t, p(l), p0(l))); rely-def: ⊦ rely(t, fowl, fowl0) ↔ (∃ fowl1, fowl2. fowl ⊒W fowl1 ∧ fowl0 = fowl1 + fowl2 ∧ fowl2 | t = []); weak-write-postfix: ⊦ fowl0 ⊒W fowl1 ↔ (∃ fowl2, fowl3, fowl4, fowl5. fowl0 = fowl2 + fowl3 + fowl4 ∧ fowl5 ⊆ fowl3 |FO ∧ fowl1 = fowl5 + fowl4);
| FOFollowsW(t, p0(l)), ¬ FOFollowsW(t, p1(l)), ∀ l0. ∃ fowl1, fowl2. (∃ fowl2, fowl3, fowl4, fowl5. p0(l0) = fowl2 + fowl3 + fowl4 ∧ fowl5 ⊆ fowl3 |FO ∧ fowl1 = fowl5 + fowl4) ∧ p1(l0) = fowl1 + fowl2 ∧ fowl2 | t = [] ⊦ |
FOFollowsW(t, p0(l)), ¬ FOFollowsW(t, p1(l)), ∃ fowl1, fowl2. (∃ fowl2, fowl3, fowl4, fowl5. p0(l) = fowl2 + fowl3 + fowl4 ∧ fowl5 ⊆ fowl3 |FO ∧ fowl1 = fowl5 + fowl4) ∧ p1(l) = fowl1 + fowl2 ∧ fowl2 | t = [] ⊦
Used terms: l
| FOFollowsW(t, p0(l)), ¬ FOFollowsW(t, p1(l)), ∃ fowl1, fowl2. (∃ fowl2, fowl3, fowl4, fowl5. p0(l) = fowl2 + fowl3 + fowl4 ∧ fowl5 ⊆ fowl3 |FO ∧ fowl1 = fowl5 + fowl4) ∧ p1(l) = fowl1 + fowl2 ∧ fowl2 | t = [] ⊦ |
p0(l) = fowl + fowl3 + fowl4, p1(l) = (fowl5 + fowl4) + fowl2, fowl2 | t = [], FOFollowsW(t, p0(l)), fowl5 ⊆ fowl3 |FO, ¬ FOFollowsW(t, p1(l)) ⊦
| p0(l) = fowl + fowl3 + fowl4, p1(l) = (fowl5 + fowl4) + fowl2, fowl2 | t = [], FOFollowsW(t, p0(l)), fowl5 ⊆ fowl3 |FO, ¬ FOFollowsW(t, p1(l)) ⊦ |
⊦ FOFollowsW(t, fowl) ↔ (∀ n. n < # fowl ∧ fowl[n].W? ∧ fowl[n].tid = t → (∃ n0. n < n0 ∧ n0 < # fowl ∧ fowl[n0] = FO(t)))
p0(l) = fowl + fowl3 + fowl4, p1(l) = (fowl5 + fowl4) + fowl2, fowl2 | t = [], fowl5 ⊆ fowl3 |FO, ¬ FOFollowsW(t, p1(l)), ∀ n. n < # p0(l) ∧ p0(l)[n].W? ∧ p0(l)[n].tid = t → (∃ n0. n < n0 ∧ n0 < # p0(l) ∧ p0(l)[n0] = FO(t)) ⊦
Used terms: t, p0(l)
| ⊦ FOFollowsW(t, fowl) ↔ (∀ n. n < # fowl ∧ fowl[n].W? ∧ fowl[n].tid = t → (∃ n0. n < n0 ∧ n0 < # fowl ∧ fowl[n0] = FO(t))) |
| p0(l) = fowl + fowl3 + fowl4, p1(l) = (fowl5 + fowl4) + fowl2, fowl2 | t = [], fowl5 ⊆ fowl3 |FO, ¬ FOFollowsW(t, p1(l)), ∀ n. n < # p0(l) ∧ p0(l)[n].W? ∧ p0(l)[n].tid = t → (∃ n0. n < n0 ∧ n0 < # p0(l) ∧ p0(l)[n0] = FO(t)) ⊦ |
p0(l) = fowl + fowl3 + fowl4, p1(l) = (fowl5 + fowl4) + fowl2, fowl2 | t = [], fowl5 ⊆ fowl3 |FO, ¬ FOFollowsW(t, p1(l)), ∀ n. n < # p0(l) ∧ p0(l)[n].W? ∧ p0(l)[n].tid = t → (∃ n0. n < n0 ∧ n0 < # p0(l) ∧ p0(l)[n0] = FO(p0(l)[n].tid)) ⊦
| p0(l) = fowl + fowl3 + fowl4, p1(l) = (fowl5 + fowl4) + fowl2, fowl2 | t = [], fowl5 ⊆ fowl3 |FO, ¬ FOFollowsW(t, p1(l)), ∀ n. n < # p0(l) ∧ p0(l)[n].W? ∧ p0(l)[n].tid = t → (∃ n0. n < n0 ∧ n0 < # p0(l) ∧ p0(l)[n0] = FO(p0(l)[n].tid)) ⊦ |
⊦ FOFollowsW(t, fowl) ↔ (∀ n. n < # fowl ∧ fowl[n].W? ∧ fowl[n].tid = t → (∃ n0. n < n0 ∧ n0 < # fowl ∧ fowl[n0] = FO(t)))
p0(l) = fowl + fowl3 + fowl4, p1(l) = (fowl5 + fowl4) + fowl2, fowl2 | t = [], fowl5 ⊆ fowl3 |FO, ∀ n. n < # p0(l) ∧ p0(l)[n].W? ∧ p0(l)[n].tid = t → (∃ n0. n < n0 ∧ n0 < # p0(l) ∧ p0(l)[n0] = FO(p0(l)[n].tid)), ∃ n. ¬(n < # p1(l) ∧ p1(l)[n].W? ∧ p1(l)[n].tid = t → (∃ n0. n < n0 ∧ n0 < # p1(l) ∧ p1(l)[n0] = FO(t))) ⊦
Used terms: t, p1(l)
| ⊦ FOFollowsW(t, fowl) ↔ (∀ n. n < # fowl ∧ fowl[n].W? ∧ fowl[n].tid = t → (∃ n0. n < n0 ∧ n0 < # fowl ∧ fowl[n0] = FO(t))) |
| p0(l) = fowl + fowl3 + fowl4, p1(l) = (fowl5 + fowl4) + fowl2, fowl2 | t = [], fowl5 ⊆ fowl3 |FO, ∀ n. n < # p0(l) ∧ p0(l)[n].W? ∧ p0(l)[n].tid = t → (∃ n0. n < n0 ∧ n0 < # p0(l) ∧ p0(l)[n0] = FO(p0(l)[n].tid)), ∃ n. ¬(n < # p1(l) ∧ p1(l)[n].W? ∧ p1(l)[n].tid = t → (∃ n0. n < n0 ∧ n0 < # p1(l) ∧ p1(l)[n0] = FO(t))) ⊦ |
p0(l) = fowl + fowl3 + fowl4, p1(l) = (fowl5 + fowl4) + fowl2, fowl2 | p1(l)[n].tid = [], p1(l) ≠ [], p1(l)[n].W?, n < # p1(l), fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = p1(l)[n].tid → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n < n0 ∧ n0 < # p1(l) ∧ p1(l)[n0] = FO(p1(l)[n].tid)
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| p0(l) = fowl + fowl3 + fowl4, p1(l) = (fowl5 + fowl4) + fowl2, fowl2 | p1(l)[n].tid = [], p1(l) ≠ [], p1(l)[n].W?, n < # p1(l), fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = p1(l)[n].tid → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n < n0 ∧ n0 < # p1(l) ∧ p1(l)[n0] = FO(p1(l)[n].tid) |
p1(l)[n] = W(v, t), p0(l) = fowl + fowl3 + fowl4, p1(l) = (fowl5 + fowl4) + fowl2, fowl2 | t = [], p1(l) ≠ [], p1(l)[n].W?, n < # p1(l), fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n < n0 ∧ n0 < # p1(l) ∧ p1(l)[n0] = FO(t)
Used simplifier rules: ⊦ fow.W? → (val = fow.val ∧ tid = fow.tid ↔ fow = W(val, tid)); (elim) Used terms: p1(l)[n], v, t
| p1(l)[n] = W(v, t), p0(l) = fowl + fowl3 + fowl4, p1(l) = (fowl5 + fowl4) + fowl2, fowl2 | t = [], p1(l) ≠ [], p1(l)[n].W?, n < # p1(l), fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n < n0 ∧ n0 < # p1(l) ∧ p1(l)[n0] = FO(t) |
p1(l)[n] = W(v, t), p0(l) = fowl + fowl3 + fowl4, p1(l) = (fowl5 + fowl4) + fowl2, fowl2 | t = [], p1(l) ≠ [], n < # p1(l), fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n < n0 ∧ n0 < # p1(l) ∧ p1(l)[n0] = FO(t)
Used simplifier rules: ⊦ W(v, tid).W?; (s)
| p1(l)[n] = W(v, t), p0(l) = fowl + fowl3 + fowl4, p1(l) = (fowl5 + fowl4) + fowl2, fowl2 | t = [], p1(l) ≠ [], n < # p1(l), fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n < n0 ∧ n0 < # p1(l) ∧ p1(l)[n0] = FO(t) |
((fowl5 + fowl4) + fowl2)[n] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], (fowl5 + fowl4) + fowl2 ≠ [], n < #((fowl5 + fowl4) + fowl2), fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n < n0 ∧ n0 < #((fowl5 + fowl4) + fowl2) ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t)
| ((fowl5 + fowl4) + fowl2)[n] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], (fowl5 + fowl4) + fowl2 ≠ [], n < #((fowl5 + fowl4) + fowl2), fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n < n0 ∧ n0 < #((fowl5 + fowl4) + fowl2) ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t) |
((fowl5 + fowl4) + fowl2)[n] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], n < # fowl5 + # fowl4 + # fowl2, fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t), fowl5 = [] ∧ fowl4 = [] ∧ fowl2 = []
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ #(x + y) = # x + # y; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s)
| ((fowl5 + fowl4) + fowl2)[n] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], n < # fowl5 + # fowl4 + # fowl2, fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t), fowl5 = [] ∧ fowl4 = [] ∧ fowl2 = [] |
⊦ n < # x → (x + y)[n] = x[n]
((fowl5 + fowl4) + fowl2)[n] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], n < # fowl5 + # fowl4 + # fowl2, fowl5 ⊆ fowl3 |FO, ¬ n < #(fowl5 + fowl4), ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t), fowl5 = [] ∧ fowl4 = [] ∧ fowl2 = []
(fowl5 + fowl4)[n] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], n < # fowl5 + # fowl4 + # fowl2, n < #(fowl5 + fowl4), fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t), fowl5 = [] ∧ fowl4 = [] ∧ fowl2 = []
Used terms: fowl5 + fowl4, fowl2, n
| ⊦ n < # x → (x + y)[n] = x[n] |
| ((fowl5 + fowl4) + fowl2)[n] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], n < # fowl5 + # fowl4 + # fowl2, fowl5 ⊆ fowl3 |FO, ¬ n < #(fowl5 + fowl4), ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t), fowl5 = [] ∧ fowl4 = [] ∧ fowl2 = [] |
fowl2[n - # fowl5 + # fowl4] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], fowl2 ≠ [], n < # fowl5 + # fowl4 + # fowl2, # fowl5 + # fowl4 ≤ n, fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t)
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ # x = 0 ↔ x = []; (s) ⊦ m < m + n ↔ n ≠ 0; (s) ⊦ m + n < m + n0 ↔ n < n0; (s) fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat ⊦ m < n ↔ ¬ n ≤ m; (ss) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ #(x + y) = # x + # y; (s) ⊦ ¬ n < # x → (x + y)[n] = y[n - # x]; (s)
| fowl2[n - # fowl5 + # fowl4] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], fowl2 ≠ [], n < # fowl5 + # fowl4 + # fowl2, # fowl5 + # fowl4 ≤ n, fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t) |
fowl2[n2] = W(v, t), n = n2 + # fowl5 + # fowl4, p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], fowl2 ≠ [], n < # fowl5 + # fowl4 + # fowl2, # fowl5 + # fowl4 ≤ n, fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t)
Used simplifier rules: n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: n, # fowl5 + # fowl4, n2
| fowl2[n2] = W(v, t), n = n2 + # fowl5 + # fowl4, p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], fowl2 ≠ [], n < # fowl5 + # fowl4 + # fowl2, # fowl5 + # fowl4 ≤ n, fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t) |
fowl2[n2] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], fowl2 ≠ [], n2 < # fowl2, fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n2 + # fowl5 + # fowl4 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t)
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ m ≤ m + n; (s) ⊦ m + n ≤ m + n0 ↔ n ≤ n0; (s)
| fowl2[n2] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], fowl2 ≠ [], n2 < # fowl2, fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n2 + # fowl5 + # fowl4 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t) |
⊦ x = [] ↔ ¬(∃ a. a ∈ x)
fowl2[n2] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 ≠ [], n2 < # fowl2, fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)), ∀ a. ¬ a ∈ fowl2 | t ⊦ ∃ n0. n2 + # fowl5 + # fowl4 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t)
Used terms: fowl2 | t
| ⊦ x = [] ↔ ¬(∃ a. a ∈ x) |
| fowl2[n2] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 ≠ [], n2 < # fowl2, fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)), ∀ a. ¬ a ∈ fowl2 | t ⊦ ∃ n0. n2 + # fowl5 + # fowl4 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t) |
fowl2[n2] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 ≠ [], n2 < # fowl2, fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)), ∀ a. ¬ a ∈ fowl2 ∨ a.tid ≠ t ⊦ ∃ n0. n2 + # fowl5 + # fowl4 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t)
Used simplifier rules: ⊦ fow ∈ fowl | t ↔ fow ∈ fowl ∧ fow.tid = t; (s)
| fowl2[n2] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 ≠ [], n2 < # fowl2, fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)), ∀ a. ¬ a ∈ fowl2 ∨ a.tid ≠ t ⊦ ∃ n0. n2 + # fowl5 + # fowl4 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t) |
fowl2[n2] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 ≠ [], n2 < # fowl2, fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)), ¬ W(v, t) ∈ fowl2 ∨ W(v, t).tid ≠ t ⊦ ∃ n0. n2 + # fowl5 + # fowl4 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t)
Used terms: W(v, t)
| fowl2[n2] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 ≠ [], n2 < # fowl2, fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)), ¬ W(v, t) ∈ fowl2 ∨ W(v, t).tid ≠ t ⊦ ∃ n0. n2 + # fowl5 + # fowl4 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t) |
fowl2[n2] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 ≠ [], n2 < # fowl2, fowl5 ⊆ fowl3 |FO, ¬ W(v, t) ∈ fowl2, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n2 + # fowl5 + # fowl4 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t)
Used simplifier rules: ⊦ W(v, tid).tid = tid; (s)
| fowl2[n2] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 ≠ [], n2 < # fowl2, fowl5 ⊆ fowl3 |FO, ¬ W(v, t) ∈ fowl2, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n2 + # fowl5 + # fowl4 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t) |
⊦ a ∈ x ↔ (∃ n. n < # x ∧ x[n] = a)
fowl2[n2] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 ≠ [], n2 < # fowl2, fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)), ∀ n. ¬(n < # fowl2 ∧ fowl2[n] = W(v, t)) ⊦ ∃ n0. n2 + # fowl5 + # fowl4 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t)
Used terms: W(v, t), fowl2
| ⊦ a ∈ x ↔ (∃ n. n < # x ∧ x[n] = a) |
| fowl2[n2] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 ≠ [], n2 < # fowl2, fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)), ∀ n. ¬(n < # fowl2 ∧ fowl2[n] = W(v, t)) ⊦ ∃ n0. n2 + # fowl5 + # fowl4 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t) |
fowl2[n2] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 ≠ [], n2 < # fowl2, fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)), ∀ n. ¬ n < # fowl2 ∨ fowl2[n] ≠ W(v, t) ⊦ ∃ n0. n2 + # fowl5 + # fowl4 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t)
| fowl2[n2] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 ≠ [], n2 < # fowl2, fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)), ∀ n. ¬ n < # fowl2 ∨ fowl2[n] ≠ W(v, t) ⊦ ∃ n0. n2 + # fowl5 + # fowl4 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t) |
Used terms: n2
| (fowl5 + fowl4)[n] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], n < # fowl5 + # fowl4 + # fowl2, n < #(fowl5 + fowl4), fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t), fowl5 = [] ∧ fowl4 = [] ∧ fowl2 = [] |
(fowl5 + fowl4)[n] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], n < # fowl5 + # fowl4, n < # fowl5 + # fowl4 + # fowl2, fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t), fowl5 = [] ∧ fowl4 = [] ∧ fowl2 = []
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ #(x + y) = # x + # y; (s)
| (fowl5 + fowl4)[n] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], n < # fowl5 + # fowl4, n < # fowl5 + # fowl4 + # fowl2, fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t), fowl5 = [] ∧ fowl4 = [] ∧ fowl2 = [] |
⊦ n < # x → (x + y)[n] = x[n]
(fowl5 + fowl4)[n] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], n < # fowl5 + # fowl4 + # fowl2, n < # fowl5 + # fowl4, fowl5 ⊆ fowl3 |FO, ¬ n < # fowl5, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t), fowl5 = [] ∧ fowl4 = [] ∧ fowl2 = []
fowl5[n] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], n < # fowl5 + # fowl4 + # fowl2, n < # fowl5 + # fowl4, n < # fowl5, fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t), fowl5 = [] ∧ fowl4 = [] ∧ fowl2 = []
Used terms: fowl5, fowl4, n
| ⊦ n < # x → (x + y)[n] = x[n] |
| (fowl5 + fowl4)[n] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], n < # fowl5 + # fowl4 + # fowl2, n < # fowl5 + # fowl4, fowl5 ⊆ fowl3 |FO, ¬ n < # fowl5, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t), fowl5 = [] ∧ fowl4 = [] ∧ fowl2 = [] |
fowl4[n - # fowl5] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], # fowl4 + # fowl2 ≠ 0, fowl4 ≠ [], n < # fowl5 + # fowl4 + # fowl2, n < # fowl5 + # fowl4, # fowl5 ≤ n, fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t)
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ # x = 0 ↔ x = []; (s) ⊦ m < m + n ↔ n ≠ 0; (s) fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat ⊦ m < n ↔ ¬ n ≤ m; (ss) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ¬ n < # x → (x + y)[n] = y[n - # x]; (s)
| fowl4[n - # fowl5] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], # fowl4 + # fowl2 ≠ 0, fowl4 ≠ [], n < # fowl5 + # fowl4 + # fowl2, n < # fowl5 + # fowl4, # fowl5 ≤ n, fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t) |
fowl4[n2] = W(v, t), n = n2 + # fowl5, p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], # fowl4 + # fowl2 ≠ 0, fowl4 ≠ [], n < # fowl5 + # fowl4, n < # fowl5 + # fowl4 + # fowl2, # fowl5 ≤ n, fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t)
Used simplifier rules: n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: n, # fowl5, n2
| fowl4[n2] = W(v, t), n = n2 + # fowl5, p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], # fowl4 + # fowl2 ≠ 0, fowl4 ≠ [], n < # fowl5 + # fowl4, n < # fowl5 + # fowl4 + # fowl2, # fowl5 ≤ n, fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t) |
fowl4[n2] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], # fowl4 + # fowl2 ≠ 0, fowl4 ≠ [], n2 < # fowl4, fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n2 + # fowl5 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t)
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ m + n < m0 → m + n < m0 + n0; (s) ⊦ m ≤ m + n; (s)
| fowl4[n2] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], # fowl4 + # fowl2 ≠ 0, fowl4 ≠ [], n2 < # fowl4, fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n2 + # fowl5 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t) |
fowl4[n2] = W(v, t), fowl2 | t = [], # fowl4 + # fowl2 ≠ 0, fowl4 ≠ [], n2 < # fowl4, fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < #(fowl + fowl3 + fowl4) ∧ (fowl + fowl3 + fowl4)[n0].W? ∧ (fowl + fowl3 + fowl4)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < #(fowl + fowl3 + fowl4) ∧ (fowl + fowl3 + fowl4)[n1] = FO((fowl + fowl3 + fowl4)[n0].tid)) ⊦ ∃ n0. n2 + # fowl5 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t)
| fowl4[n2] = W(v, t), fowl2 | t = [], # fowl4 + # fowl2 ≠ 0, fowl4 ≠ [], n2 < # fowl4, fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < #(fowl + fowl3 + fowl4) ∧ (fowl + fowl3 + fowl4)[n0].W? ∧ (fowl + fowl3 + fowl4)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < #(fowl + fowl3 + fowl4) ∧ (fowl + fowl3 + fowl4)[n1] = FO((fowl + fowl3 + fowl4)[n0].tid)) ⊦ ∃ n0. n2 + # fowl5 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t) |
fowl4[n2] = W(v, t), fowl2 | t = [], # fowl4 + # fowl2 ≠ 0, fowl4 ≠ [], n2 < # fowl4, fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # fowl + # fowl3 + # fowl4 ∧ (fowl + fowl3 + fowl4)[n0].W? ∧ (fowl + fowl3 + fowl4)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # fowl + # fowl3 + # fowl4 ∧ (fowl + fowl3 + fowl4)[n1] = FO((fowl + fowl3 + fowl4)[n0].tid)) ⊦ ∃ n0. n2 + # fowl5 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t)
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ #(x + y) = # x + # y; (s)
| fowl4[n2] = W(v, t), fowl2 | t = [], # fowl4 + # fowl2 ≠ 0, fowl4 ≠ [], n2 < # fowl4, fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # fowl + # fowl3 + # fowl4 ∧ (fowl + fowl3 + fowl4)[n0].W? ∧ (fowl + fowl3 + fowl4)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # fowl + # fowl3 + # fowl4 ∧ (fowl + fowl3 + fowl4)[n1] = FO((fowl + fowl3 + fowl4)[n0].tid)) ⊦ ∃ n0. n2 + # fowl5 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t) |
fowl4[n2] = W(v, t), fowl2 | t = [], # fowl4 + # fowl2 ≠ 0, fowl4 ≠ [], n2 < # fowl4, fowl5 ⊆ fowl3 |FO, # fowl + # fowl3 + n2 < # fowl + # fowl3 + # fowl4 ∧ (fowl + fowl3 + fowl4)[# fowl + # fowl3 + n2].W? ∧ (fowl + fowl3 + fowl4)[# fowl + # fowl3 + n2].tid = t → (∃ n1. # fowl + # fowl3 + n2 < n1 ∧ n1 < # fowl + # fowl3 + # fowl4 ∧ (fowl + fowl3 + fowl4)[n1] = FO((fowl + fowl3 + fowl4)[# fowl + # fowl3 + n2].tid)) ⊦ ∃ n0. n2 + # fowl5 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t)
Used terms: # fowl + # fowl3 + n2
| fowl4[n2] = W(v, t), fowl2 | t = [], # fowl4 + # fowl2 ≠ 0, fowl4 ≠ [], n2 < # fowl4, fowl5 ⊆ fowl3 |FO, # fowl + # fowl3 + n2 < # fowl + # fowl3 + # fowl4 ∧ (fowl + fowl3 + fowl4)[# fowl + # fowl3 + n2].W? ∧ (fowl + fowl3 + fowl4)[# fowl + # fowl3 + n2].tid = t → (∃ n1. # fowl + # fowl3 + n2 < n1 ∧ n1 < # fowl + # fowl3 + # fowl4 ∧ (fowl + fowl3 + fowl4)[n1] = FO((fowl + fowl3 + fowl4)[# fowl + # fowl3 + n2].tid)) ⊦ ∃ n0. n2 + # fowl5 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t) |
(fowl + fowl3 + fowl4)[n1] = FO(t), fowl4[n2] = W(v, t), fowl2 | t = [], # fowl4 + # fowl2 ≠ 0, fowl4 ≠ [], n1 < # fowl + # fowl3 + # fowl4, # fowl + # fowl3 + n2 < n1, n2 + 1 < # fowl4, n2 < # fowl4, fowl5 ⊆ fowl3 |FO ⊦ ∃ n0. n2 + # fowl5 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t)
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ m +1 = m + 1; (s) ⊦ m < n → n ≠ 0; (s) trans-Nat: ⊦ n < n0 ∧ n0 < n1 → n < n1; (forward) from specification nat-basic lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ W(v, tid).tid = tid; (s) ⊦ W(v, tid).W?; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (x + y)[n + # x] = y[n]; (s)
| (fowl + fowl3 + fowl4)[n1] = FO(t), fowl4[n2] = W(v, t), fowl2 | t = [], # fowl4 + # fowl2 ≠ 0, fowl4 ≠ [], n1 < # fowl + # fowl3 + # fowl4, # fowl + # fowl3 + n2 < n1, n2 + 1 < # fowl4, n2 < # fowl4, fowl5 ⊆ fowl3 |FO ⊦ ∃ n0. n2 + # fowl5 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t) |
⊦ ¬ n < # x → (x + y)[n] = y[n - # x]
fowl4[n2] = W(v, t), (fowl3 + fowl4)[n1 - # fowl] = FO(t), fowl2 | t = [], # fowl4 + # fowl2 ≠ 0, fowl4 ≠ [], n2 < # fowl4, n2 + 1 < # fowl4, # fowl + # fowl3 + n2 < n1, n1 < # fowl + # fowl3 + # fowl4, fowl5 ⊆ fowl3 |FO, ¬ n1 < # fowl ⊦ ∃ n0. n2 + # fowl5 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t)
Used simplifier rules: ⊦ n < # x → (x + y)[n] = x[n]; (s) a: ⊦ (x + y) + z = x + y + z; from specification list f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic trans-Nat: ⊦ n < n0 ∧ n0 < n1 → n < n1; (forward) from specification nat-basic ⊦ # x = 0 ↔ x = []; (s) ⊦ m +1 = m + 1; (s) ⊦ m + m0 < n → ¬ n + n0 < m; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: n1, fowl, fowl3 + fowl4
| ⊦ ¬ n < # x → (x + y)[n] = y[n - # x] |
| fowl4[n2] = W(v, t), (fowl3 + fowl4)[n1 - # fowl] = FO(t), fowl2 | t = [], # fowl4 + # fowl2 ≠ 0, fowl4 ≠ [], n2 < # fowl4, n2 + 1 < # fowl4, # fowl + # fowl3 + n2 < n1, n1 < # fowl + # fowl3 + # fowl4, fowl5 ⊆ fowl3 |FO, ¬ n1 < # fowl ⊦ ∃ n0. n2 + # fowl5 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t) |
fowl4[n2] = W(v, t), (fowl3 + fowl4)[n1 - # fowl] = FO(t), fowl2 | t = [], # fowl4 + # fowl2 ≠ 0, # fowl3 + # fowl4 ≠ 0, fowl4 ≠ [], n2 < # fowl4, n2 + 1 < # fowl4, # fowl + # fowl3 + n2 < n1, n1 < # fowl + # fowl3 + # fowl4, # fowl ≤ n1, fowl5 ⊆ fowl3 |FO ⊦ ∃ n0. n2 + # fowl5 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t)
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m < m + n ↔ n ≠ 0; (s) fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat ⊦ m < n ↔ ¬ n ≤ m; (ss)
| fowl4[n2] = W(v, t), (fowl3 + fowl4)[n1 - # fowl] = FO(t), fowl2 | t = [], # fowl4 + # fowl2 ≠ 0, # fowl3 + # fowl4 ≠ 0, fowl4 ≠ [], n2 < # fowl4, n2 + 1 < # fowl4, # fowl + # fowl3 + n2 < n1, n1 < # fowl + # fowl3 + # fowl4, # fowl ≤ n1, fowl5 ⊆ fowl3 |FO ⊦ ∃ n0. n2 + # fowl5 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t) |
(fowl3 + fowl4)[n3] = FO(t), fowl4[n2] = W(v, t), n1 = n3 + # fowl, fowl2 | t = [], # fowl4 + # fowl2 ≠ 0, # fowl3 + # fowl4 ≠ 0, fowl4 ≠ [], n1 < # fowl + # fowl3 + # fowl4, # fowl + # fowl3 + n2 < n1, n2 + 1 < # fowl4, n2 < # fowl4, # fowl ≤ n1, fowl5 ⊆ fowl3 |FO ⊦ ∃ n0. n2 + # fowl5 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t)
Used simplifier rules: n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: n1, # fowl, n3
| (fowl3 + fowl4)[n3] = FO(t), fowl4[n2] = W(v, t), n1 = n3 + # fowl, fowl2 | t = [], # fowl4 + # fowl2 ≠ 0, # fowl3 + # fowl4 ≠ 0, fowl4 ≠ [], n1 < # fowl + # fowl3 + # fowl4, # fowl + # fowl3 + n2 < n1, n2 + 1 < # fowl4, n2 < # fowl4, # fowl ≤ n1, fowl5 ⊆ fowl3 |FO ⊦ ∃ n0. n2 + # fowl5 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t) |
(fowl3 + fowl4)[n3] = FO(t), fowl4[n2] = W(v, t), fowl2 | t = [], # fowl4 + # fowl2 ≠ 0, fowl4 ≠ [], n3 < # fowl3 + # fowl4, # fowl3 + n2 < n3, n2 + 1 < # fowl4, n2 < # fowl4, fowl5 ⊆ fowl3 |FO ⊦ ∃ n0. n2 + # fowl5 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t)
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ m +1 = m + 1; (s) ⊦ m < n → n ≠ 0; (s) trans-Nat: ⊦ n < n0 ∧ n0 < n1 → n < n1; (forward) from specification nat-basic lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m ≤ m + n; (s)
| (fowl3 + fowl4)[n3] = FO(t), fowl4[n2] = W(v, t), fowl2 | t = [], # fowl4 + # fowl2 ≠ 0, fowl4 ≠ [], n3 < # fowl3 + # fowl4, # fowl3 + n2 < n3, n2 + 1 < # fowl4, n2 < # fowl4, fowl5 ⊆ fowl3 |FO ⊦ ∃ n0. n2 + # fowl5 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t) |
⊦ ¬ n < # x → (x + y)[n] = y[n - # x]
fowl4[n2] = W(v, t), fowl4[n3 - # fowl3] = FO(t), fowl2 | t = [], # fowl4 + # fowl2 ≠ 0, fowl4 ≠ [], n2 < # fowl4, n2 + 1 < # fowl4, # fowl3 + n2 < n3, n3 < # fowl3 + # fowl4, fowl5 ⊆ fowl3 |FO, ¬ n3 < # fowl3 ⊦ ∃ n0. n2 + # fowl5 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t)
Used simplifier rules: ⊦ n < # x → (x + y)[n] = x[n]; (s) a: ⊦ (x + y) + z = x + y + z; from specification list f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic trans-Nat: ⊦ n < n0 ∧ n0 < n1 → n < n1; (forward) from specification nat-basic ⊦ # x = 0 ↔ x = []; (s) ⊦ m +1 = m + 1; (s) ⊦ m + m0 < n → ¬ n + n0 < m; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: n3, fowl3, fowl4
| ⊦ ¬ n < # x → (x + y)[n] = y[n - # x] |
| fowl4[n2] = W(v, t), fowl4[n3 - # fowl3] = FO(t), fowl2 | t = [], # fowl4 + # fowl2 ≠ 0, fowl4 ≠ [], n2 < # fowl4, n2 + 1 < # fowl4, # fowl3 + n2 < n3, n3 < # fowl3 + # fowl4, fowl5 ⊆ fowl3 |FO, ¬ n3 < # fowl3 ⊦ ∃ n0. n2 + # fowl5 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t) |
fowl4[n2] = W(v, t), fowl4[n3 - # fowl3] = FO(t), fowl2 | t = [], # fowl4 + # fowl2 ≠ 0, fowl4 ≠ [], n2 < # fowl4, n2 + 1 < # fowl4, # fowl3 + n2 < n3, n3 < # fowl3 + # fowl4, # fowl3 ≤ n3, fowl5 ⊆ fowl3 |FO ⊦ ∃ n0. n2 + # fowl5 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t)
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ # x = 0 ↔ x = []; (s) ⊦ m < m + n ↔ n ≠ 0; (s) fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat ⊦ m < n ↔ ¬ n ≤ m; (ss)
| fowl4[n2] = W(v, t), fowl4[n3 - # fowl3] = FO(t), fowl2 | t = [], # fowl4 + # fowl2 ≠ 0, fowl4 ≠ [], n2 < # fowl4, n2 + 1 < # fowl4, # fowl3 + n2 < n3, n3 < # fowl3 + # fowl4, # fowl3 ≤ n3, fowl5 ⊆ fowl3 |FO ⊦ ∃ n0. n2 + # fowl5 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t) |
fowl4[n1] = FO(t), fowl4[n2] = W(v, t), n3 = n1 + # fowl3, fowl2 | t = [], # fowl4 + # fowl2 ≠ 0, fowl4 ≠ [], n3 < # fowl3 + # fowl4, # fowl3 + n2 < n3, n2 + 1 < # fowl4, n2 < # fowl4, # fowl3 ≤ n3, fowl5 ⊆ fowl3 |FO ⊦ ∃ n0. n2 + # fowl5 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t)
Used simplifier rules: n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: n3, # fowl3, n1
| fowl4[n1] = FO(t), fowl4[n2] = W(v, t), n3 = n1 + # fowl3, fowl2 | t = [], # fowl4 + # fowl2 ≠ 0, fowl4 ≠ [], n3 < # fowl3 + # fowl4, # fowl3 + n2 < n3, n2 + 1 < # fowl4, n2 < # fowl4, # fowl3 ≤ n3, fowl5 ⊆ fowl3 |FO ⊦ ∃ n0. n2 + # fowl5 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t) |
fowl4[n1] = FO(t), fowl4[n2] = W(v, t), fowl2 | t = [], # fowl4 + # fowl2 ≠ 0, fowl4 ≠ [], n2 < # fowl4, n1 < # fowl4, n2 < n1, n2 + 1 < # fowl4, fowl5 ⊆ fowl3 |FO ⊦ ∃ n0. n2 + # fowl5 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t)
Used simplifier rules: ⊦ m +1 = m + 1; (s) ⊦ m < n → n ≠ 0; (s) trans-Nat: ⊦ n < n0 ∧ n0 < n1 → n < n1; (forward) from specification nat-basic lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ m ≤ m + n; (s)
| fowl4[n1] = FO(t), fowl4[n2] = W(v, t), fowl2 | t = [], # fowl4 + # fowl2 ≠ 0, fowl4 ≠ [], n2 < # fowl4, n1 < # fowl4, n2 < n1, n2 + 1 < # fowl4, fowl5 ⊆ fowl3 |FO ⊦ ∃ n0. n2 + # fowl5 < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t) |
Used simplifier rules: ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ (x + y)[n + # x] = y[n]; (s) ⊦ n < # x → (x + y)[n] = x[n]; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ m < n ↔ ¬ n ≤ m; (ss) fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat ⊦ ¬ m + n < m; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: # fowl5 + n1
| fowl5[n] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], n < # fowl5 + # fowl4 + # fowl2, n < # fowl5 + # fowl4, n < # fowl5, fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t), fowl5 = [] ∧ fowl4 = [] ∧ fowl2 = [] |
fowl5[n] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], fowl5 ≠ [], n < # fowl5 + # fowl4 + # fowl2, n < # fowl5 + # fowl4, n < # fowl5, fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t)
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| fowl5[n] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], fowl5 ≠ [], n < # fowl5 + # fowl4 + # fowl2, n < # fowl5 + # fowl4, n < # fowl5, fowl5 ⊆ fowl3 |FO, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t) |
⊦ x ⊆ y ↔ (∀ a. a ∈ x → a ∈ y)
fowl5[n] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], fowl5 ≠ [], n < # fowl5, n < # fowl5 + # fowl4, n < # fowl5 + # fowl4 + # fowl2, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)), ∀ a. a ∈ fowl5 → a ∈ fowl3 |FO ⊦ ∃ n0. n < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t)
Used terms: fowl5, fowl3 |FO
| ⊦ x ⊆ y ↔ (∀ a. a ∈ x → a ∈ y) |
| fowl5[n] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], fowl5 ≠ [], n < # fowl5, n < # fowl5 + # fowl4, n < # fowl5 + # fowl4 + # fowl2, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)), ∀ a. a ∈ fowl5 → a ∈ fowl3 |FO ⊦ ∃ n0. n < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t) |
fowl5[n] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], fowl5 ≠ [], n < # fowl5 + # fowl4 + # fowl2, n < # fowl5 + # fowl4, n < # fowl5, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)), ∀ a. a ∈ fowl5 → a ∈ fowl3 ∧ a.FO? ⊦ ∃ n0. n < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t)
Used simplifier rules: ⊦ fow ∈ fowl |FO ↔ fow ∈ fowl ∧ fow.FO?; (s)
| fowl5[n] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], fowl5 ≠ [], n < # fowl5 + # fowl4 + # fowl2, n < # fowl5 + # fowl4, n < # fowl5, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)), ∀ a. a ∈ fowl5 → a ∈ fowl3 ∧ a.FO? ⊦ ∃ n0. n < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t) |
fowl5[n] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], fowl5 ≠ [], n < # fowl5, n < # fowl5 + # fowl4, n < # fowl5 + # fowl4 + # fowl2, W(v, t) ∈ fowl5 → W(v, t) ∈ fowl3 ∧ W(v, t).FO?, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t)
Used terms: W(v, t)
| fowl5[n] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], fowl5 ≠ [], n < # fowl5, n < # fowl5 + # fowl4, n < # fowl5 + # fowl4 + # fowl2, W(v, t) ∈ fowl5 → W(v, t) ∈ fowl3 ∧ W(v, t).FO?, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t) |
fowl5[n] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], fowl5 ≠ [], n < # fowl5 + # fowl4 + # fowl2, n < # fowl5 + # fowl4, n < # fowl5, ¬ W(v, t) ∈ fowl5, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t)
Used simplifier rules: ⊦ ¬ W(v, tid).FO?; (s)
| fowl5[n] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], fowl5 ≠ [], n < # fowl5 + # fowl4 + # fowl2, n < # fowl5 + # fowl4, n < # fowl5, ¬ W(v, t) ∈ fowl5, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)) ⊦ ∃ n0. n < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t) |
⊦ a ∈ x ↔ (∃ n. n < # x ∧ x[n] = a)
fowl5[n] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], fowl5 ≠ [], n < # fowl5, n < # fowl5 + # fowl4, n < # fowl5 + # fowl4 + # fowl2, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)), ∀ n. ¬(n < # fowl5 ∧ fowl5[n] = W(v, t)) ⊦ ∃ n0. n < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t)
Used terms: W(v, t), fowl5
| ⊦ a ∈ x ↔ (∃ n. n < # x ∧ x[n] = a) |
| fowl5[n] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], fowl5 ≠ [], n < # fowl5, n < # fowl5 + # fowl4, n < # fowl5 + # fowl4 + # fowl2, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)), ∀ n. ¬(n < # fowl5 ∧ fowl5[n] = W(v, t)) ⊦ ∃ n0. n < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t) |
fowl5[n] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], fowl5 ≠ [], n < # fowl5 + # fowl4 + # fowl2, n < # fowl5 + # fowl4, n < # fowl5, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)), ∀ n0. ¬ n0 < # fowl5 ∨ fowl5[n0] ≠ W(v, t) ⊦ ∃ n0. n < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t)
| fowl5[n] = W(v, t), p0(l) = fowl + fowl3 + fowl4, fowl2 | t = [], fowl5 ≠ [], n < # fowl5 + # fowl4 + # fowl2, n < # fowl5 + # fowl4, n < # fowl5, ∀ n0. n0 < # p0(l) ∧ p0(l)[n0].W? ∧ p0(l)[n0].tid = t → (∃ n1. n0 < n1 ∧ n1 < # p0(l) ∧ p0(l)[n1] = FO(p0(l)[n0].tid)), ∀ n0. ¬ n0 < # fowl5 ∨ fowl5[n0] ≠ W(v, t) ⊦ ∃ n0. n < n0 ∧ n0 < # fowl5 + # fowl4 + # fowl2 ∧ ((fowl5 + fowl4) + fowl2)[n0] = FO(t) |
Used terms: n
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.