| ⊦ isPersistFO(n, p(l)) → rely(t, p, p(l := p(l) -p n)) |
isPersistFO(n, p(l)), ¬ rely(t, p, p(l := p(l) -p n)) ⊦
| isPersistFO(n, p(l)), ¬ rely(t, p, p(l := p(l) -p n)) ⊦ |
p(l) ≠ [], p(l)[n].FO?, n < # p(l), ∀ m. m < n → p(l)[m].tid ≠ p(l)[n].tid ∧ p(l)[m].FO? ⊦ ∃ fowl1, fowl2. (∃ fowl2, fowl3, fowl4, fowl5. p(l0) = fowl2 + fowl3 + fowl4 ∧ fowl5 ⊆ fowl3 |FO ∧ fowl1 = fowl5 + fowl4) ∧ (l = l0 ⊃ p(l0) -p n;p(l0)) = fowl1 + fowl2 ∧ fowl2 | t = []
Used simplifier rules: isPersistFO: ⊦ isPersistFO(n, fowl) ↔ n < # fowl ∧ fowl[n].FO? ∧ (∀ m. m < n → fowl[m].tid ≠ fowl[n].tid ∧ fowl[m].FO?); 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); ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| p(l) ≠ [], p(l)[n].FO?, n < # p(l), ∀ m. m < n → p(l)[m].tid ≠ p(l)[n].tid ∧ p(l)[m].FO? ⊦ ∃ fowl1, fowl2. (∃ fowl2, fowl3, fowl4, fowl5. p(l0) = fowl2 + fowl3 + fowl4 ∧ fowl5 ⊆ fowl3 |FO ∧ fowl1 = fowl5 + fowl4) ∧ (l = l0 ⊃ p(l0) -p n;p(l0)) = fowl1 + fowl2 ∧ fowl2 | t = [] |
l = l0, p(l) ≠ [], p(l)[n].FO?, n < # p(l), ∀ m. m < n → p(l)[m].tid ≠ p(l)[n].tid ∧ p(l)[m].FO? ⊦ ∃ fowl1, fowl2. (∃ fowl2, fowl3, fowl4, fowl5. p(l0) = fowl2 + fowl3 + fowl4 ∧ fowl5 ⊆ fowl3 |FO ∧ fowl1 = fowl5 + fowl4) ∧ (l = l0 ⊃ p(l0) -p n;p(l0)) = fowl1 + fowl2 ∧ fowl2 | t = []
l ≠ l0, p(l) ≠ [], p(l)[n].FO?, n < # p(l), ∀ m. m < n → p(l)[m].tid ≠ p(l)[n].tid ∧ p(l)[m].FO? ⊦ ∃ fowl1, fowl2. (∃ fowl2, fowl3, fowl4, fowl5. p(l0) = fowl2 + fowl3 + fowl4 ∧ fowl5 ⊆ fowl3 |FO ∧ fowl1 = fowl5 + fowl4) ∧ (l = l0 ⊃ p(l0) -p n;p(l0)) = fowl1 + fowl2 ∧ fowl2 | t = []
Used formulas: l = l0
| l = l0, p(l) ≠ [], p(l)[n].FO?, n < # p(l), ∀ m. m < n → p(l)[m].tid ≠ p(l)[n].tid ∧ p(l)[m].FO? ⊦ ∃ fowl1, fowl2. (∃ fowl2, fowl3, fowl4, fowl5. p(l0) = fowl2 + fowl3 + fowl4 ∧ fowl5 ⊆ fowl3 |FO ∧ fowl1 = fowl5 + fowl4) ∧ (l = l0 ⊃ p(l0) -p n;p(l0)) = fowl1 + fowl2 ∧ fowl2 | t = [] |
p(l0) ≠ [], p(l0)[n].FO?, n < # p(l0), ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦ ∃ fowl1, fowl2. (∃ fowl2, fowl3, fowl4, fowl5. p(l0) = fowl2 + fowl3 + fowl4 ∧ fowl5 ⊆ fowl3 |FO ∧ fowl1 = fowl5 + fowl4) ∧ p(l0) -p n = fowl1 + fowl2 ∧ fowl2 | t = []
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| p(l0) ≠ [], p(l0)[n].FO?, n < # p(l0), ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦ ∃ fowl1, fowl2. (∃ fowl2, fowl3, fowl4, fowl5. p(l0) = fowl2 + fowl3 + fowl4 ∧ fowl5 ⊆ fowl3 |FO ∧ fowl1 = fowl5 + fowl4) ∧ p(l0) -p n = fowl1 + fowl2 ∧ fowl2 | t = [] |
p(l0) ≠ [], p(l0)[n].FO?, n < # p(l0), ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦ (∃ fowl2, fowl3, fowl4, fowl5. p(l0) = fowl2 + fowl3 + fowl4 ∧ fowl5 ⊆ fowl3 |FO ∧ p(l0) -p n = fowl5 + fowl4) ∧ p(l0) -p n = (p(l0) -p n) + [] ∧ [] | t = []
Used terms: p(l0) -p n, []
| p(l0) ≠ [], p(l0)[n].FO?, n < # p(l0), ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦ (∃ fowl2, fowl3, fowl4, fowl5. p(l0) = fowl2 + fowl3 + fowl4 ∧ fowl5 ⊆ fowl3 |FO ∧ p(l0) -p n = fowl5 + fowl4) ∧ p(l0) -p n = (p(l0) -p n) + [] ∧ [] | t = [] |
p(l0) ≠ [], p(l0)[n].FO?, n < # p(l0), ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦ ∃ fowl2, fowl3, fowl4, fowl5. p(l0) = fowl2 + fowl3 + fowl4 ∧ fowl5 ⊆ fowl3 |FO ∧ p(l0) -p n = fowl5 + fowl4
Used simplifier rules: ⊦ [] | t = []; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x + [] = x; (s)
| p(l0) ≠ [], p(l0)[n].FO?, n < # p(l0), ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦ ∃ fowl2, fowl3, fowl4, fowl5. p(l0) = fowl2 + fowl3 + fowl4 ∧ fowl5 ⊆ fowl3 |FO ∧ p(l0) -p n = fowl5 + fowl4 |
p(l0) ≠ [], p(l0)[n].FO?, n < # p(l0), ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦ p(l0) = [] + p(l0).take(n + 1) + p(l0).drop(n + 1) ∧ p(l0).take(n) ⊆ (p(l0).take(n + 1))|FO ∧ p(l0) -p n = p(l0).take(n) + p(l0).drop(n + 1)
Used terms: [], p(l0).take(n + 1), p(l0).drop(n + 1), p(l0).take(n)
| p(l0) ≠ [], p(l0)[n].FO?, n < # p(l0), ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦ p(l0) = [] + p(l0).take(n + 1) + p(l0).drop(n + 1) ∧ p(l0).take(n) ⊆ (p(l0).take(n + 1))|FO ∧ p(l0) -p n = p(l0).take(n) + p(l0).drop(n + 1) |
p(l0) ≠ [], p(l0)[n].FO?, n < # p(l0), ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦ p(l0) = p(l0).take(n + 1) + p(l0).drop(n + 1) ∧ p(l0).take(n) ⊆ (p(l0).take(n + 1))|FO ∧ p(l0) -p n = p(l0).take(n) + p(l0).drop(n + 1)
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s)
| p(l0) ≠ [], p(l0)[n].FO?, n < # p(l0), ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦ p(l0) = p(l0).take(n + 1) + p(l0).drop(n + 1) ∧ p(l0).take(n) ⊆ (p(l0).take(n + 1))|FO ∧ p(l0) -p n = p(l0).take(n) + p(l0).drop(n + 1) |
⊦ n ≤ # x → x.take(n) + x.drop(n) = x
p(l0) ≠ [], p(l0)[n].FO?, n < # p(l0), n + 1 ≤ # p(l0), ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦ p(l0) = p(l0) ∧ p(l0).take(n) ⊆ (p(l0).take(n + 1))|FO ∧ p(l0) -p n = p(l0).take(n) + p(l0).drop(n + 1)
Used simplifier rules: ⊦ m + 1 ≤ n ↔ m < n; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m < n → (n ≤ m ↔ false); (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: p(l0), n + 1
| ⊦ n ≤ # x → x.take(n) + x.drop(n) = x |
| p(l0) ≠ [], p(l0)[n].FO?, n < # p(l0), n + 1 ≤ # p(l0), ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦ p(l0) = p(l0) ∧ p(l0).take(n) ⊆ (p(l0).take(n + 1))|FO ∧ p(l0) -p n = p(l0).take(n) + p(l0).drop(n + 1) |
p(l0) ≠ [], p(l0)[n].FO?, n < # p(l0), ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦ p(l0).take(n) ⊆ (p(l0).take(n + 1))|FO ∧ p(l0) -p n = p(l0).take(n) + p(l0).drop(n + 1)
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + 1 ≤ n ↔ m < n; (s)
| p(l0) ≠ [], p(l0)[n].FO?, n < # p(l0), ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦ p(l0).take(n) ⊆ (p(l0).take(n + 1))|FO ∧ p(l0) -p n = p(l0).take(n) + p(l0).drop(n + 1) |
⊦ n < # x → x -p n = x.take(n) + x.drop(n + 1)
p(l0) ≠ [], p(l0)[n].FO?, n < # p(l0), ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦ p(l0).take(n) ⊆ (p(l0).take(n + 1))|FO ∧ p(l0).take(n) + p(l0).drop(n + 1) = p(l0).take(n) + p(l0).drop(n + 1)
Used terms: p(l0), n
| ⊦ n < # x → x -p n = x.take(n) + x.drop(n + 1) |
| p(l0) ≠ [], p(l0)[n].FO?, n < # p(l0), ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦ p(l0).take(n) ⊆ (p(l0).take(n + 1))|FO ∧ p(l0).take(n) + p(l0).drop(n + 1) = p(l0).take(n) + p(l0).drop(n + 1) |
p(l0) ≠ [], p(l0)[n].FO?, n < # p(l0), ¬ p(l0).take(n) ⊆ (p(l0).take(n + 1))|FO, ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦
| p(l0) ≠ [], p(l0)[n].FO?, n < # p(l0), ¬ p(l0).take(n) ⊆ (p(l0).take(n + 1))|FO, ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦ |
⊦ n ≠ 0 ∧ n ≤ # x → x.take(n) = x.take(n -1) + x[n -1]
n + 1 ≠ 0, p(l0) ≠ [], p(l0)[n].FO?, n < # p(l0), n + 1 ≤ # p(l0), ¬ p(l0).take(n) ⊆ (p(l0).take((n + 1)-1) + p(l0)[(n + 1)-1])|FO, ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦
Used simplifier rules: ⊦ m + 1 ≠ 0; (s) ⊦ m + 1 ≤ n ↔ m < n; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: p(l0), n + 1
| ⊦ n ≠ 0 ∧ n ≤ # x → x.take(n) = x.take(n -1) + x[n -1] |
| n + 1 ≠ 0, p(l0) ≠ [], p(l0)[n].FO?, n < # p(l0), n + 1 ≤ # p(l0), ¬ p(l0).take(n) ⊆ (p(l0).take((n + 1)-1) + p(l0)[(n + 1)-1])|FO, ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦ |
p(l0) ≠ [], p(l0)[n].FO?, n < # p(l0), ¬ p(l0).take(n) ⊆ (p(l0).take(n))|FO + p(l0)[n] ' |FO, ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (fowl + fowl0)|FO = fowl |FO + fowl0 |FO; (s) ⊦ x + a = x + a '; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ (m + 1)-1 = m; (s) ⊦ m + 1 ≤ n ↔ m < n; (s) ⊦ m + 1 ≠ 0; (s)
| p(l0) ≠ [], p(l0)[n].FO?, n < # p(l0), ¬ p(l0).take(n) ⊆ (p(l0).take(n))|FO + p(l0)[n] ' |FO, ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦ |
⊦ fowl |FO = fowl.filter(λ fow. fow.FO?)
p(l0) ≠ [], p(l0)[n].FO?, n < # p(l0), ¬ p(l0).take(n) ⊆ p(l0).take(n).filter(λ fow. fow.FO?) + p(l0)[n] ' |FO, ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦
Used terms: p(l0).take(n)
| ⊦ fowl |FO = fowl.filter(λ fow. fow.FO?) |
| p(l0) ≠ [], p(l0)[n].FO?, n < # p(l0), ¬ p(l0).take(n) ⊆ p(l0).take(n).filter(λ fow. fow.FO?) + p(l0)[n] ' |FO, ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦ |
p(l0) ≠ [], p(l0)[n].FO?, n < # p(l0), ¬ p(l0).take(n) ⊆ p(l0).take(n).filter(.FO?) + p(l0)[n] ' |FO, ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦
| p(l0) ≠ [], p(l0)[n].FO?, n < # p(l0), ¬ p(l0).take(n) ⊆ p(l0).take(n).filter(.FO?) + p(l0)[n] ' |FO, ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦ |
⊦ fowl |FO = fowl.filter(λ fow. fow.FO?)
p(l0) ≠ [], p(l0)[n].FO?, n < # p(l0), ¬ p(l0).take(n) ⊆ p(l0).take(n).filter(.FO?) + p(l0)[n] '.filter(λ fow. fow.FO?), ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦
Used terms: p(l0)[n] '
| ⊦ fowl |FO = fowl.filter(λ fow. fow.FO?) |
| p(l0) ≠ [], p(l0)[n].FO?, n < # p(l0), ¬ p(l0).take(n) ⊆ p(l0).take(n).filter(.FO?) + p(l0)[n] '.filter(λ fow. fow.FO?), ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦ |
p(l0) ≠ [], p(l0)[n].FO?, n < # p(l0), ¬ p(l0).take(n) ⊆ p(l0).take(n).filter(.FO?) + p(l0)[n] ', ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦
Used simplifier rules: ⊦ a '.filter(p) = (p(a) ⊃ a ';[]); (s)
| p(l0) ≠ [], p(l0)[n].FO?, n < # p(l0), ¬ p(l0).take(n) ⊆ p(l0).take(n).filter(.FO?) + p(l0)[n] ', ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦ |
⊦ x.forall(p) → x.filter(p) = x
p(l0) ≠ [], p(l0)[n].FO?, n < # p(l0), ¬ p(l0).take(n).forall(.FO?), ¬ p(l0).take(n) ⊆ p(l0).take(n).filter(.FO?) + p(l0)[n] ', ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦
Used simplifier rules: ⊦ x ⊆ x + y; (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: p(l0).take(n), .FO?
| ⊦ x.forall(p) → x.filter(p) = x |
| p(l0) ≠ [], p(l0)[n].FO?, n < # p(l0), ¬ p(l0).take(n).forall(.FO?), ¬ p(l0).take(n) ⊆ p(l0).take(n).filter(.FO?) + p(l0)[n] ', ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦ |
⊦ x.forall(p) ↔ (∀ n. n < # x → p(x[n]))
p(l0) ≠ [], p(l0)[n].FO?, n < # p(l0), ¬ p(l0).take(n) ⊆ p(l0).take(n).filter(.FO?) + p(l0)[n] ', ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO?, ∃ n0. ¬(n0 < # p(l0).take(n) → p(l0).take(n)[n0].FO?) ⊦
Used terms: p(l0).take(n), .FO?
| ⊦ x.forall(p) ↔ (∀ n. n < # x → p(x[n])) |
| p(l0) ≠ [], p(l0)[n].FO?, n < # p(l0), ¬ p(l0).take(n) ⊆ p(l0).take(n).filter(.FO?) + p(l0)[n] ', ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO?, ∃ n0. ¬(n0 < # p(l0).take(n) → p(l0).take(n)[n0].FO?) ⊦ |
p(l0) ≠ [], p(l0)[n].FO?, n0 < # p(l0), n0 < n, n < # p(l0), n0 + 1 < # p(l0), ¬ p(l0).take(n)[n0].FO?, ¬ p(l0).take(n) ⊆ p(l0).take(n).filter(.FO?) + p(l0)[n] ', ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦
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 ⊦ n < # x → # x.take(n) = n; (s)
| p(l0) ≠ [], p(l0)[n].FO?, n0 < # p(l0), n0 < n, n < # p(l0), n0 + 1 < # p(l0), ¬ p(l0).take(n)[n0].FO?, ¬ p(l0).take(n) ⊆ p(l0).take(n).filter(.FO?) + p(l0)[n] ', ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦ |
⊦ n < m ∧ m ≤ # x → x.take(m)[n] = x[n]
p(l0) ≠ [], p(l0)[n].FO?, n0 + 1 < # p(l0), n < # p(l0), n0 < # p(l0), n0 < n, n ≤ # p(l0), ¬ p(l0)[n0].FO?, ¬ p(l0).take(n) ⊆ p(l0).take(n).filter(.FO?) + p(l0)[n] ', ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦
Used simplifier rules: ⊦ m < n → m ≤ n; (s) Used terms: p(l0), n, n0
| ⊦ n < m ∧ m ≤ # x → x.take(m)[n] = x[n] |
| p(l0) ≠ [], p(l0)[n].FO?, n0 + 1 < # p(l0), n < # p(l0), n0 < # p(l0), n0 < n, n ≤ # p(l0), ¬ p(l0)[n0].FO?, ¬ p(l0).take(n) ⊆ p(l0).take(n).filter(.FO?) + p(l0)[n] ', ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦ |
p(l0) ≠ [], p(l0)[n].FO?, n0 < n, n0 < # p(l0), n < # p(l0), n0 + 1 < # p(l0), ¬ p(l0)[n0].FO?, ¬ p(l0).take(n) ⊆ p(l0).take(n).filter(.FO?) + p(l0)[n] ', ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦
Used simplifier rules: ⊦ m < n → m ≤ n; (s)
| p(l0) ≠ [], p(l0)[n].FO?, n0 < n, n0 < # p(l0), n < # p(l0), n0 + 1 < # p(l0), ¬ p(l0)[n0].FO?, ¬ p(l0).take(n) ⊆ p(l0).take(n).filter(.FO?) + p(l0)[n] ', ∀ m. m < n → p(l0)[m].tid ≠ p(l0)[n].tid ∧ p(l0)[m].FO? ⊦ |
Used terms: n0
| l ≠ l0, p(l) ≠ [], p(l)[n].FO?, n < # p(l), ∀ m. m < n → p(l)[m].tid ≠ p(l)[n].tid ∧ p(l)[m].FO? ⊦ ∃ fowl1, fowl2. (∃ fowl2, fowl3, fowl4, fowl5. p(l0) = fowl2 + fowl3 + fowl4 ∧ fowl5 ⊆ fowl3 |FO ∧ fowl1 = fowl5 + fowl4) ∧ (l = l0 ⊃ p(l0) -p n;p(l0)) = fowl1 + fowl2 ∧ fowl2 | t = [] |
l ≠ l0, p(l) ≠ [], p(l)[n].FO?, n < # p(l), ∀ m. m < n → p(l)[m].tid ≠ p(l)[n].tid ∧ p(l)[m].FO? ⊦ ∃ fowl1, fowl2. (∃ fowl2, fowl3, fowl4, fowl5. p(l0) = fowl2 + fowl3 + fowl4 ∧ fowl5 ⊆ fowl3 |FO ∧ fowl1 = fowl5 + fowl4) ∧ p(l0) = fowl1 + fowl2 ∧ fowl2 | t = []
| l ≠ l0, p(l) ≠ [], p(l)[n].FO?, n < # p(l), ∀ m. m < n → p(l)[m].tid ≠ p(l)[n].tid ∧ p(l)[m].FO? ⊦ ∃ fowl1, fowl2. (∃ fowl2, fowl3, fowl4, fowl5. p(l0) = fowl2 + fowl3 + fowl4 ∧ fowl5 ⊆ fowl3 |FO ∧ fowl1 = fowl5 + fowl4) ∧ p(l0) = fowl1 + fowl2 ∧ fowl2 | t = [] |
l ≠ l0, p(l) ≠ [], p(l)[n].FO?, n < # p(l), ∀ m. m < n → p(l)[m].tid ≠ p(l)[n].tid ∧ p(l)[m].FO? ⊦ (∃ fowl2, fowl3, fowl4, fowl5. p(l0) = fowl2 + fowl3 + fowl4 ∧ fowl5 ⊆ fowl3 |FO ∧ p(l0) = fowl5 + fowl4) ∧ p(l0) = p(l0) + [] ∧ [] | t = []
Used terms: p(l0), []
| l ≠ l0, p(l) ≠ [], p(l)[n].FO?, n < # p(l), ∀ m. m < n → p(l)[m].tid ≠ p(l)[n].tid ∧ p(l)[m].FO? ⊦ (∃ fowl2, fowl3, fowl4, fowl5. p(l0) = fowl2 + fowl3 + fowl4 ∧ fowl5 ⊆ fowl3 |FO ∧ p(l0) = fowl5 + fowl4) ∧ p(l0) = p(l0) + [] ∧ [] | t = [] |
l ≠ l0, p(l) ≠ [], p(l)[n].FO?, n < # p(l), ∀ m. m < n → p(l)[m].tid ≠ p(l)[n].tid ∧ p(l)[m].FO? ⊦ ∃ fowl2, fowl3, fowl4, fowl5. p(l0) = fowl2 + fowl3 + fowl4 ∧ fowl5 ⊆ fowl3 |FO ∧ p(l0) = fowl5 + fowl4
Used simplifier rules: ⊦ [] | t = []; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x + [] = x; (s)
| l ≠ l0, p(l) ≠ [], p(l)[n].FO?, n < # p(l), ∀ m. m < n → p(l)[m].tid ≠ p(l)[n].tid ∧ p(l)[m].FO? ⊦ ∃ fowl2, fowl3, fowl4, fowl5. p(l0) = fowl2 + fowl3 + fowl4 ∧ fowl5 ⊆ fowl3 |FO ∧ p(l0) = fowl5 + fowl4 |
Used simplifier rules: ⊦ [] |FO = []; (s) ⊦ [] ⊆ x; (s) ⊦ [] + x = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: [], [], p(l0), []
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.