| #c mx ≠ 0, #r mx = #r mx0, #c mx = #c mx0 ⊦ scolsorted(mx, #c mx0, mx0) → ¬ #clean1rows(mx, i) < #clean1rows(mx0, i) |
#c mx = #c mx0, #r mx = #r mx0, #c mx ≠ 0, #clean1rows(mx, i) < #clean1rows(mx0, i), scolsorted(mx, #c mx0, mx0) ⊦
| #c mx = #c mx0, #r mx = #r mx0, #c mx ≠ 0, #clean1rows(mx, i) < #clean1rows(mx0, i), scolsorted(mx, #c mx0, mx0) ⊦ |
#c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, #clean1rows(mx, i) < #clean1rows(mx0, i), scolsorted(mx, #c mx0, mx0) ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| #c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, #clean1rows(mx, i) < #clean1rows(mx0, i), scolsorted(mx, #c mx0, mx0) ⊦ |
⊦ ¬ #r mx < #clean1rows(mx, i)
#c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, #clean1rows(mx, i) < #clean1rows(mx0, i), scolsorted(mx, #c mx0, mx0), ¬ #r mx0 < #clean1rows(mx0, i) ⊦
Used terms: i, mx0
| ⊦ ¬ #r mx < #clean1rows(mx, i) |
| #c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, #clean1rows(mx, i) < #clean1rows(mx0, i), scolsorted(mx, #c mx0, mx0), ¬ #r mx0 < #clean1rows(mx0, i) ⊦ |
#c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, #clean1rows(mx, i) < #clean1rows(mx0, i), #clean1rows(mx, i) < #r mx0, scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ #r mx0 ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat ⊦ m < n ↔ ¬ n ≤ m; (ss)
| #c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, #clean1rows(mx, i) < #clean1rows(mx0, i), #clean1rows(mx, i) < #r mx0, scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ #r mx0 ⊦ |
⊦ #clean1rows(mx, i) + r + 1 = #r mx → count(mx[r]r, λ j. j < i) ≠ 0
#c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, #clean1rows(mx, i) < #r mx0, #clean1rows(mx, i) < #clean1rows(mx0, i), scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx, i) + (#r mx - #clean1rows(mx, i) + 1) + 1 = #r mx → count(mx[#r mx - #clean1rows(mx, i) + 1]r, λ j. j < i) ≠ 0 ⊦
Used terms: mx, i, #r mx - #clean1rows(mx, i) + 1
| ⊦ #clean1rows(mx, i) + r + 1 = #r mx → count(mx[r]r, λ j. j < i) ≠ 0 |
| #c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, #clean1rows(mx, i) < #r mx0, #clean1rows(mx, i) < #clean1rows(mx0, i), scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx, i) + (#r mx - #clean1rows(mx, i) + 1) + 1 = #r mx → count(mx[#r mx - #clean1rows(mx, i) + 1]r, λ j. j < i) ≠ 0 ⊦ |
#c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, count(mx[#r mx0 - #clean1rows(mx, i) + 1]r, λ j. j < i) ≠ 0, #clean1rows(mx, i) < #clean1rows(mx0, i), #clean1rows(mx, i) < #r mx0, scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ #r mx0 ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic n ≤ m ⊦ (m - n) + n0 = n1 ↔ m + n0 = n + n1; (s) ⊦ m < n → (n ≤ m ↔ false); (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m + 1 ≤ n ↔ m < n; (s)
| #c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, count(mx[#r mx0 - #clean1rows(mx, i) + 1]r, λ j. j < i) ≠ 0, #clean1rows(mx, i) < #clean1rows(mx0, i), #clean1rows(mx, i) < #r mx0, scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ #r mx0 ⊦ |
#c mx = #c mx0, #r mx = #r mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #c mx0 ≠ 0, count(mx[n0]r, λ j. j < i) ≠ 0, #clean1rows(mx, i) < #r mx0, #clean1rows(mx, i) < #clean1rows(mx0, i), scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx, i) + 1 ≤ #r mx0 ⊦
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 n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: #r mx0, #clean1rows(mx, i) + 1, n0
| #c mx = #c mx0, #r mx = #r mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #c mx0 ≠ 0, count(mx[n0]r, λ j. j < i) ≠ 0, #clean1rows(mx, i) < #r mx0, #clean1rows(mx, i) < #clean1rows(mx0, i), scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx, i) + 1 ≤ #r mx0 ⊦ |
#c mx = #c mx0, #r mx = #r mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #c mx0 ≠ 0, count(mx[n0]r, λ j. j < i) ≠ 0, #clean1rows(mx, i) < #r mx0, #clean1rows(mx, i) < #clean1rows(mx0, i), scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ #r mx0 ⊦
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; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic ⊦ m + 1 ≤ n ↔ m < n; (s)
| #c mx = #c mx0, #r mx = #r mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #c mx0 ≠ 0, count(mx[n0]r, λ j. j < i) ≠ 0, #clean1rows(mx, i) < #r mx0, #clean1rows(mx, i) < #clean1rows(mx0, i), scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ #r mx0 ⊦ |
⊦ count(x, p) = 0 ↔ (∀ n. n < # x → ¬ p(x[n]))
#c mx = #c mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #r mx = #r mx0, #c mx0 ≠ 0, #clean1rows(mx, i) < #clean1rows(mx0, i), #clean1rows(mx, i) < #r mx0, scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ #r mx0, ∃ n. ¬(n < # mx[n0]r → ¬ mx[n0]r[n] < i) ⊦
Used terms: mx[n0]r, λ j. j < i
| ⊦ count(x, p) = 0 ↔ (∀ n. n < # x → ¬ p(x[n])) |
| #c mx = #c mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #r mx = #r mx0, #c mx0 ≠ 0, #clean1rows(mx, i) < #clean1rows(mx0, i), #clean1rows(mx, i) < #r mx0, scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ #r mx0, ∃ n. ¬(n < # mx[n0]r → ¬ mx[n0]r[n] < i) ⊦ |
#c mx = #c mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #r mx = #r mx0, n < #c mx0, mx[n0, n] < i, #clean1rows(mx, i) < #clean1rows(mx0, i), #clean1rows(mx, i) < #r mx0, scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ #r mx0 ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ # mx[r]r = #c mx; (s) ⊦ mx[r]r[c] = mx[r, c]; (s)
| #c mx = #c mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #r mx = #r mx0, n < #c mx0, mx[n0, n] < i, #clean1rows(mx, i) < #clean1rows(mx0, i), #clean1rows(mx, i) < #r mx0, scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ #r mx0 ⊦ |
c < #c mx ⊦ #clean1rows(mx, i) ≤ count(mx[c]c, λ j. ¬ j < i)
#c mx = #c mx0, #r mx = #r mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #clean1rows(mx, i) < #r mx0, #clean1rows(mx, i) < #clean1rows(mx0, i), mx[n0, n] < i, n < #c mx0, scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ count(mx0[n]c, λ j. ¬ j < i) ⊦
Used terms: n, mx0, i
| c < #c mx ⊦ #clean1rows(mx, i) ≤ count(mx[c]c, λ j. ¬ j < i) |
| #c mx = #c mx0, #r mx = #r mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #clean1rows(mx, i) < #r mx0, #clean1rows(mx, i) < #clean1rows(mx0, i), mx[n0, n] < i, n < #c mx0, scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ count(mx0[n]c, λ j. ¬ j < i) ⊦ |
#c mx = #c mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #r mx = #r mx0, n < #c mx0, mx[n0, n] < i, #clean1rows(mx, i) < #clean1rows(mx0, i), #clean1rows(mx, i) < #r mx0, #clean1rows(mx, i) < count(mx0[n]c, λ j. ¬ j < i), scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ count(mx0[n]c, λ j. ¬ j < i), #clean1rows(mx0, i) ≤ #r mx0 ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat
| #c mx = #c mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #r mx = #r mx0, n < #c mx0, mx[n0, n] < i, #clean1rows(mx, i) < #clean1rows(mx0, i), #clean1rows(mx, i) < #r mx0, #clean1rows(mx, i) < count(mx0[n]c, λ j. ¬ j < i), scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ count(mx0[n]c, λ j. ¬ j < i), #clean1rows(mx0, i) ≤ #r mx0 ⊦ |
⊦ perm(x, y) → count(x, p) = count(y, p)
#c mx = #c mx0, #r mx = #r mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #clean1rows(mx, i) < count(mx[n]c, λ j. ¬ j < i), #clean1rows(mx, i) < #r mx0, #clean1rows(mx, i) < #clean1rows(mx0, i), mx[n0, n] < i, n < #c mx0, perm(mx0[n]c, mx[n]c), scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ count(mx[n]c, λ j. ¬ j < i) ⊦
Used simplifier rules: scolsorted-permcol: #c mx = #c mx0, c < #c mx ⊦ scolsorted(mx, #c mx0, mx0) → perm(mx0[c]c, mx[c]c); Used terms: mx[n]c, mx0[n]c, λ j. ¬ j < i
| ⊦ perm(x, y) → count(x, p) = count(y, p) |
| #c mx = #c mx0, #r mx = #r mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #clean1rows(mx, i) < count(mx[n]c, λ j. ¬ j < i), #clean1rows(mx, i) < #r mx0, #clean1rows(mx, i) < #clean1rows(mx0, i), mx[n0, n] < i, n < #c mx0, perm(mx0[n]c, mx[n]c), scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ count(mx[n]c, λ j. ¬ j < i) ⊦ |
ordered≤(x), n < # x ⊦ n < count(x, λ b. b < a) ↔ x[n] < a
#c mx = #c mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #r mx = #r mx0, n < #c mx0, mx[n0, n] < i, #clean1rows(mx, i) < #clean1rows(mx0, i), #clean1rows(mx, i) < #r mx0, #clean1rows(mx, i) < count(mx[n]c, λ j. ¬ j < i), perm(mx0[n]c, mx[n]c), scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ count(mx[n]c, λ j. ¬ j < i), #clean1rows(mx0, i) ≤ #r mx0 ⊦ ordered≤(mx[n]c) ∧ n0 < # mx[n]c
#c mx = #c mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #r mx = #r mx0, n0 < count(mx[n]c, λ b. b < i) ↔ mx[n]c[n0] < i, n < #c mx0, mx[n0, n] < i, #clean1rows(mx, i) < #clean1rows(mx0, i), #clean1rows(mx, i) < #r mx0, #clean1rows(mx, i) < count(mx[n]c, λ j. ¬ j < i), perm(mx0[n]c, mx[n]c), scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ count(mx[n]c, λ j. ¬ j < i), #clean1rows(mx0, i) ≤ #r mx0 ⊦
Used terms: mx[n]c, n0, i
| ordered≤(x), n < # x ⊦ n < count(x, λ b. b < a) ↔ x[n] < a |
| #c mx = #c mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #r mx = #r mx0, n < #c mx0, mx[n0, n] < i, #clean1rows(mx, i) < #clean1rows(mx0, i), #clean1rows(mx, i) < #r mx0, #clean1rows(mx, i) < count(mx[n]c, λ j. ¬ j < i), perm(mx0[n]c, mx[n]c), scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ count(mx[n]c, λ j. ¬ j < i), #clean1rows(mx0, i) ≤ #r mx0 ⊦ ordered≤(mx[n]c) ∧ n0 < # mx[n]c |
#c mx = #c mx0, #r mx = #r mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #clean1rows(mx, i) < #r mx0, #clean1rows(mx, i) < #clean1rows(mx0, i), mx[n0, n] < i, n < #c mx0, #clean1rows(mx, i) < n0, #clean1rows(mx, i) < count(mx[n]c, λ j. ¬ j < i), perm(mx0[n]c, mx[n]c), scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ count(mx[n]c, λ j. ¬ j < i), #r mx0 ≤ n0, #clean1rows(mx0, i) ≤ n0 ⊦
Used simplifier rules: scolsorted-colordered: #c mx = #c mx0, c < #c mx ⊦ scolsorted(mx, #c mx0, mx0) → ordered≤(mx[c]c); ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic let: ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1; (forward) from specification nat fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ # mx[c]c = #r mx; (s)
| #c mx = #c mx0, #r mx = #r mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #clean1rows(mx, i) < #r mx0, #clean1rows(mx, i) < #clean1rows(mx0, i), mx[n0, n] < i, n < #c mx0, #clean1rows(mx, i) < n0, #clean1rows(mx, i) < count(mx[n]c, λ j. ¬ j < i), perm(mx0[n]c, mx[n]c), scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ count(mx[n]c, λ j. ¬ j < i), #r mx0 ≤ n0, #clean1rows(mx0, i) ≤ n0 ⊦ |
⊦ m ≤ #c mx → ( scolsorted(mx, m, mx0) ↔ #r mx = #r mx0 ∧ #c mx = #c mx0 ∧ (∀ c. c < #c mx → (c < m ⊃ perm(mx0[c]c, mx[c]c) ∧ ordered≤(mx[c]c);mx0[c]c = mx[c]c)))
#c mx = #c mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #r mx = #r mx0, #clean1rows(mx, i) < count(mx[n]c, λ j. ¬ j < i), #clean1rows(mx, i) < n0, n < #c mx0, mx[n0, n] < i, #clean1rows(mx, i) < #clean1rows(mx0, i), #clean1rows(mx, i) < #r mx0, perm(mx0[n]c, mx[n]c), #clean1rows(mx0, i) ≤ n0, #r mx0 ≤ n0, #clean1rows(mx0, i) ≤ count(mx[n]c, λ j. ¬ j < i), #clean1rows(mx0, i) ≤ #r mx0, #c mx0 ≤ #c mx, ∀ c. c < #c mx → (c < #c mx0 ⊃ perm(mx0[c]c, mx[c]c) ∧ ordered≤(mx[c]c);mx0[c]c = mx[c]c) ⊦
Used simplifier rules: ⊦ m ≤ n ↔ ¬ n < m; (ss) lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic lf-01: ⊦ m < n ∧ n = n0 → m < n0; (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 ⊦ m < n → ¬ n < m; (s) Used terms: mx, #c mx0, mx0
| ⊦ m ≤ #c mx → ( scolsorted(mx, m, mx0) ↔ #r mx = #r mx0 ∧ #c mx = #c mx0 ∧ (∀ c. c < #c mx → (c < m ⊃ perm(mx0[c]c, mx[c]c) ∧ ordered≤(mx[c]c);mx0[c]c = mx[c]c))) |
| #c mx = #c mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #r mx = #r mx0, #clean1rows(mx, i) < count(mx[n]c, λ j. ¬ j < i), #clean1rows(mx, i) < n0, n < #c mx0, mx[n0, n] < i, #clean1rows(mx, i) < #clean1rows(mx0, i), #clean1rows(mx, i) < #r mx0, perm(mx0[n]c, mx[n]c), #clean1rows(mx0, i) ≤ n0, #r mx0 ≤ n0, #clean1rows(mx0, i) ≤ count(mx[n]c, λ j. ¬ j < i), #clean1rows(mx0, i) ≤ #r mx0, #c mx0 ≤ #c mx, ∀ c. c < #c mx → (c < #c mx0 ⊃ perm(mx0[c]c, mx[c]c) ∧ ordered≤(mx[c]c);mx0[c]c = mx[c]c) ⊦ |
#c mx = #c mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #r mx = #r mx0, #clean1rows(mx, i) < count(mx[n]c, λ j. ¬ j < i), #clean1rows(mx, i) < n0, n < #c mx0, mx[n0, n] < i, #clean1rows(mx, i) < #clean1rows(mx0, i), #clean1rows(mx, i) < #r mx0, perm(mx0[n]c, mx[n]c), #clean1rows(mx0, i) ≤ n0, #r mx0 ≤ n0, #clean1rows(mx0, i) ≤ count(mx[n]c, λ j. ¬ j < i), #clean1rows(mx0, i) ≤ #r mx0, ∀ c. c < #c mx0 → perm(mx0[c]c, mx[c]c) ∧ ordered≤(mx[c]c) ⊦
Used simplifier rules: ⊦ m ≤ m; (s) fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat
| #c mx = #c mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #r mx = #r mx0, #clean1rows(mx, i) < count(mx[n]c, λ j. ¬ j < i), #clean1rows(mx, i) < n0, n < #c mx0, mx[n0, n] < i, #clean1rows(mx, i) < #clean1rows(mx0, i), #clean1rows(mx, i) < #r mx0, perm(mx0[n]c, mx[n]c), #clean1rows(mx0, i) ≤ n0, #r mx0 ≤ n0, #clean1rows(mx0, i) ≤ count(mx[n]c, λ j. ¬ j < i), #clean1rows(mx0, i) ≤ #r mx0, ∀ c. c < #c mx0 → perm(mx0[c]c, mx[c]c) ∧ ordered≤(mx[c]c) ⊦ |
#c mx = #c mx0, #r mx = #r mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #clean1rows(mx, i) < #r mx0, #clean1rows(mx, i) < #clean1rows(mx0, i), mx[n0, n] < i, n < #c mx0, #clean1rows(mx, i) < n0, #clean1rows(mx, i) < count(mx[n]c, λ j. ¬ j < i), perm(mx0[n]c, mx[n]c), #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ count(mx[n]c, λ j. ¬ j < i), #r mx0 ≤ n0, #clean1rows(mx0, i) ≤ n0, n < #c mx0 → perm(mx0[n]c, mx[n]c) ∧ ordered≤(mx[n]c) ⊦
Used terms: n
| #c mx = #c mx0, #r mx = #r mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #clean1rows(mx, i) < #r mx0, #clean1rows(mx, i) < #clean1rows(mx0, i), mx[n0, n] < i, n < #c mx0, #clean1rows(mx, i) < n0, #clean1rows(mx, i) < count(mx[n]c, λ j. ¬ j < i), perm(mx0[n]c, mx[n]c), #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ count(mx[n]c, λ j. ¬ j < i), #r mx0 ≤ n0, #clean1rows(mx0, i) ≤ n0, n < #c mx0 → perm(mx0[n]c, mx[n]c) ∧ ordered≤(mx[n]c) ⊦ |
#c mx = #c mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #r mx = #r mx0, #clean1rows(mx, i) < count(mx[n]c, λ j. ¬ j < i), #clean1rows(mx, i) < n0, n < #c mx0, mx[n0, n] < i, #clean1rows(mx, i) < #clean1rows(mx0, i), #clean1rows(mx, i) < #r mx0, ordered≤(mx[n]c), perm(mx0[n]c, mx[n]c), #clean1rows(mx0, i) ≤ n0, #r mx0 ≤ n0, #clean1rows(mx0, i) ≤ count(mx[n]c, λ j. ¬ j < i), #clean1rows(mx0, i) ≤ #r mx0 ⊦
| #c mx = #c mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #r mx = #r mx0, #clean1rows(mx, i) < count(mx[n]c, λ j. ¬ j < i), #clean1rows(mx, i) < n0, n < #c mx0, mx[n0, n] < i, #clean1rows(mx, i) < #clean1rows(mx0, i), #clean1rows(mx, i) < #r mx0, ordered≤(mx[n]c), perm(mx0[n]c, mx[n]c), #clean1rows(mx0, i) ≤ n0, #r mx0 ≤ n0, #clean1rows(mx0, i) ≤ count(mx[n]c, λ j. ¬ j < i), #clean1rows(mx0, i) ≤ #r mx0 ⊦ |
Used simplifier rules: ⊦ m + 1 ≤ n ↔ m < n; (s) ⊦ ¬ m + n < m; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
| #c mx = #c mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #r mx = #r mx0, n0 < count(mx[n]c, λ b. b < i) ↔ mx[n]c[n0] < i, n < #c mx0, mx[n0, n] < i, #clean1rows(mx, i) < #clean1rows(mx0, i), #clean1rows(mx, i) < #r mx0, #clean1rows(mx, i) < count(mx[n]c, λ j. ¬ j < i), perm(mx0[n]c, mx[n]c), scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ count(mx[n]c, λ j. ¬ j < i), #clean1rows(mx0, i) ≤ #r mx0 ⊦ |
#c mx = #c mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #r mx = #r mx0, #clean1rows(mx, i) < count(mx[n]c, λ j. ¬ j < i), n0 < count(mx[n]c, λ b. b < i), n < #c mx0, mx[n0, n] < i, #clean1rows(mx, i) < #clean1rows(mx0, i), #clean1rows(mx, i) < #r mx0, perm(mx0[n]c, mx[n]c), scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ count(mx[n]c, λ j. ¬ j < i), #clean1rows(mx0, i) ≤ #r mx0 ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat ⊦ mx[c]c[r] = mx[r, c]; (s)
| #c mx = #c mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #r mx = #r mx0, #clean1rows(mx, i) < count(mx[n]c, λ j. ¬ j < i), n0 < count(mx[n]c, λ b. b < i), n < #c mx0, mx[n0, n] < i, #clean1rows(mx, i) < #clean1rows(mx0, i), #clean1rows(mx, i) < #r mx0, perm(mx0[n]c, mx[n]c), scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ count(mx[n]c, λ j. ¬ j < i), #clean1rows(mx0, i) ≤ #r mx0 ⊦ |
∀ n. n < # x → ¬(p(x[n]) ∧ p0(x[n])) ⊦ count(x, p) + count(x, p0) = count(x, λ a. p(a) ∨ p0(a))
#c mx = #c mx0, #r mx = #r mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, count(mx[n]c, λ j. j < i) + count(mx[n]c, λ j. ¬ j < i) = count(mx[n]c, λ i0. i0 < i ∨ ¬ i0 < i), #clean1rows(mx, i) < #r mx0, #clean1rows(mx, i) < #clean1rows(mx0, i), mx[n0, n] < i, n < #c mx0, n0 < count(mx[n]c, λ b. b < i), #clean1rows(mx, i) < count(mx[n]c, λ j. ¬ j < i), perm(mx0[n]c, mx[n]c), scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ count(mx[n]c, λ j. ¬ j < i) ⊦
Used terms: mx[n]c, λ j. j < i, λ j. ¬ j < i
| ∀ n. n < # x → ¬(p(x[n]) ∧ p0(x[n])) ⊦ count(x, p) + count(x, p0) = count(x, λ a. p(a) ∨ p0(a)) |
| #c mx = #c mx0, #r mx = #r mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, count(mx[n]c, λ j. j < i) + count(mx[n]c, λ j. ¬ j < i) = count(mx[n]c, λ i0. i0 < i ∨ ¬ i0 < i), #clean1rows(mx, i) < #r mx0, #clean1rows(mx, i) < #clean1rows(mx0, i), mx[n0, n] < i, n < #c mx0, n0 < count(mx[n]c, λ b. b < i), #clean1rows(mx, i) < count(mx[n]c, λ j. ¬ j < i), perm(mx0[n]c, mx[n]c), scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ count(mx[n]c, λ j. ¬ j < i) ⊦ |
#c mx = #c mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #r mx = #r mx0, count(mx[n]c, λ j. j < i) + count(mx[n]c, λ j. ¬ j < i) = count(mx[n]c, λ i0. true), #clean1rows(mx, i) < count(mx[n]c, λ j. ¬ j < i), n0 < count(mx[n]c, λ b. b < i), n < #c mx0, mx[n0, n] < i, #clean1rows(mx, i) < #clean1rows(mx0, i), #clean1rows(mx, i) < #r mx0, perm(mx0[n]c, mx[n]c), scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ count(mx[n]c, λ j. ¬ j < i), #clean1rows(mx0, i) ≤ #r mx0 ⊦
| #c mx = #c mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #r mx = #r mx0, count(mx[n]c, λ j. j < i) + count(mx[n]c, λ j. ¬ j < i) = count(mx[n]c, λ i0. true), #clean1rows(mx, i) < count(mx[n]c, λ j. ¬ j < i), n0 < count(mx[n]c, λ b. b < i), n < #c mx0, mx[n0, n] < i, #clean1rows(mx, i) < #clean1rows(mx0, i), #clean1rows(mx, i) < #r mx0, perm(mx0[n]c, mx[n]c), scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ count(mx[n]c, λ j. ¬ j < i), #clean1rows(mx0, i) ≤ #r mx0 ⊦ |
⊦ count(x, p) = count(x, 0, # x, p)
#c mx = #c mx0, #r mx = #r mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, count(mx[n]c, λ j. j < i) + count(mx[n]c, λ j. ¬ j < i) = count(mx[n]c, 0, # mx[n]c, λ i0. true), #clean1rows(mx, i) < #r mx0, #clean1rows(mx, i) < #clean1rows(mx0, i), mx[n0, n] < i, n < #c mx0, n0 < count(mx[n]c, λ b. b < i), #clean1rows(mx, i) < count(mx[n]c, λ j. ¬ j < i), perm(mx0[n]c, mx[n]c), scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ count(mx[n]c, λ j. ¬ j < i) ⊦
Used terms: mx[n]c, λ i0. true
| ⊦ count(x, p) = count(x, 0, # x, p) |
| #c mx = #c mx0, #r mx = #r mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, count(mx[n]c, λ j. j < i) + count(mx[n]c, λ j. ¬ j < i) = count(mx[n]c, 0, # mx[n]c, λ i0. true), #clean1rows(mx, i) < #r mx0, #clean1rows(mx, i) < #clean1rows(mx0, i), mx[n0, n] < i, n < #c mx0, n0 < count(mx[n]c, λ b. b < i), #clean1rows(mx, i) < count(mx[n]c, λ j. ¬ j < i), perm(mx0[n]c, mx[n]c), scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ count(mx[n]c, λ j. ¬ j < i) ⊦ |
#c mx = #c mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #r mx = #r mx0, count(mx[n]c, λ j. j < i) + count(mx[n]c, λ j. ¬ j < i) = count(mx[n]c, 0, #r mx0, λ i0. true), #clean1rows(mx, i) < count(mx[n]c, λ j. ¬ j < i), n0 < count(mx[n]c, λ b. b < i), n < #c mx0, mx[n0, n] < i, #clean1rows(mx, i) < #clean1rows(mx0, i), #clean1rows(mx, i) < #r mx0, perm(mx0[n]c, mx[n]c), scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ count(mx[n]c, λ j. ¬ j < i), #clean1rows(mx0, i) ≤ #r mx0 ⊦
Used simplifier rules: ⊦ # mx[c]c = #r mx; (s)
| #c mx = #c mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #r mx = #r mx0, count(mx[n]c, λ j. j < i) + count(mx[n]c, λ j. ¬ j < i) = count(mx[n]c, 0, #r mx0, λ i0. true), #clean1rows(mx, i) < count(mx[n]c, λ j. ¬ j < i), n0 < count(mx[n]c, λ b. b < i), n < #c mx0, mx[n0, n] < i, #clean1rows(mx, i) < #clean1rows(mx0, i), #clean1rows(mx, i) < #r mx0, perm(mx0[n]c, mx[n]c), scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ count(mx[n]c, λ j. ¬ j < i), #clean1rows(mx0, i) ≤ #r mx0 ⊦ |
m ≤ # x ⊦ count(x, 0, m, λ a. true) = m
#c mx = #c mx0, #r mx = #r mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, count(mx[n]c, λ j. j < i) + count(mx[n]c, λ j. ¬ j < i) = #r mx0, #clean1rows(mx, i) < #r mx0, #clean1rows(mx, i) < #clean1rows(mx0, i), mx[n0, n] < i, n < #c mx0, n0 < count(mx[n]c, λ b. b < i), #clean1rows(mx, i) < count(mx[n]c, λ j. ¬ j < i), perm(mx0[n]c, mx[n]c), scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ count(mx[n]c, λ j. ¬ j < i), #r mx0 ≤ # mx[n]c ⊦
Used simplifier rules: ⊦ # mx[c]c = #r mx; (s) ⊦ m ≤ n ↔ ¬ n < m; (ss) lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat ⊦ m < n → ¬ n < m; (s) Used terms: mx[n]c, #r mx0
| m ≤ # x ⊦ count(x, 0, m, λ a. true) = m |
| #c mx = #c mx0, #r mx = #r mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, count(mx[n]c, λ j. j < i) + count(mx[n]c, λ j. ¬ j < i) = #r mx0, #clean1rows(mx, i) < #r mx0, #clean1rows(mx, i) < #clean1rows(mx0, i), mx[n0, n] < i, n < #c mx0, n0 < count(mx[n]c, λ b. b < i), #clean1rows(mx, i) < count(mx[n]c, λ j. ¬ j < i), perm(mx0[n]c, mx[n]c), scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ count(mx[n]c, λ j. ¬ j < i), #r mx0 ≤ # mx[n]c ⊦ |
#c mx = #c mx0, #r mx = #r mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, count(mx[n]c, λ j. j < i) + count(mx[n]c, λ j. ¬ j < i) = #r mx0, #clean1rows(mx, i) < #r mx0, #clean1rows(mx, i) < #clean1rows(mx0, i), mx[n0, n] < i, n < #c mx0, n0 < count(mx[n]c, λ b. b < i), #clean1rows(mx, i) < count(mx[n]c, λ j. ¬ j < i), perm(mx0[n]c, mx[n]c), scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ count(mx[n]c, λ j. ¬ j < i) ⊦
Used simplifier rules: ⊦ m ≤ m; (s) let: ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1; (forward) from specification nat lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic ⊦ # mx[c]c = #r mx; (s)
| #c mx = #c mx0, #r mx = #r mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, count(mx[n]c, λ j. j < i) + count(mx[n]c, λ j. ¬ j < i) = #r mx0, #clean1rows(mx, i) < #r mx0, #clean1rows(mx, i) < #clean1rows(mx0, i), mx[n0, n] < i, n < #c mx0, n0 < count(mx[n]c, λ b. b < i), #clean1rows(mx, i) < count(mx[n]c, λ j. ¬ j < i), perm(mx0[n]c, mx[n]c), scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ count(mx[n]c, λ j. ¬ j < i) ⊦ |
⊦ m ≤ n ↔ (∃ n0. m + n0 = n)
#c mx = #c mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #r mx = #r mx0, count(mx[n]c, λ j. j < i) + count(mx[n]c, λ j. ¬ j < i) = #r mx0, #clean1rows(mx, i) < count(mx[n]c, λ j. ¬ j < i), n0 < count(mx[n]c, λ b. b < i), n < #c mx0, mx[n0, n] < i, #clean1rows(mx, i) < #clean1rows(mx0, i), #clean1rows(mx, i) < #r mx0, perm(mx0[n]c, mx[n]c), scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ count(mx[n]c, λ j. ¬ j < i), ∃ n0. #clean1rows(mx0, i) + n0 = #r mx0 ⊦
Used terms: #clean1rows(mx0, i), #r mx0
| ⊦ m ≤ n ↔ (∃ n0. m + n0 = n) |
| #c mx = #c mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #r mx = #r mx0, count(mx[n]c, λ j. j < i) + count(mx[n]c, λ j. ¬ j < i) = #r mx0, #clean1rows(mx, i) < count(mx[n]c, λ j. ¬ j < i), n0 < count(mx[n]c, λ b. b < i), n < #c mx0, mx[n0, n] < i, #clean1rows(mx, i) < #clean1rows(mx0, i), #clean1rows(mx, i) < #r mx0, perm(mx0[n]c, mx[n]c), scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ count(mx[n]c, λ j. ¬ j < i), ∃ n0. #clean1rows(mx0, i) + n0 = #r mx0 ⊦ |
#c mx = #c mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #r mx = #r mx0, count(mx[n]c, λ j. j < i) + count(mx[n]c, λ j. ¬ j < i) = #r mx0, #clean1rows(mx0, i) + n1 = #r mx0, #clean1rows(mx, i) < count(mx[n]c, λ j. ¬ j < i), n0 < count(mx[n]c, λ b. b < i), n < #c mx0, mx[n0, n] < i, #clean1rows(mx, i) < #clean1rows(mx0, i), #clean1rows(mx, i) < #r mx0, perm(mx0[n]c, mx[n]c), scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ count(mx[n]c, λ j. ¬ j < i) ⊦
Used simplifier rules: lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic
| #c mx = #c mx0, #r mx0 = n0 + #clean1rows(mx, i) + 1, #r mx = #r mx0, count(mx[n]c, λ j. j < i) + count(mx[n]c, λ j. ¬ j < i) = #r mx0, #clean1rows(mx0, i) + n1 = #r mx0, #clean1rows(mx, i) < count(mx[n]c, λ j. ¬ j < i), n0 < count(mx[n]c, λ b. b < i), n < #c mx0, mx[n0, n] < i, #clean1rows(mx, i) < #clean1rows(mx0, i), #clean1rows(mx, i) < #r mx0, perm(mx0[n]c, mx[n]c), scolsorted(mx, #c mx0, mx0), #clean1rows(mx0, i) ≤ count(mx[n]c, λ j. ¬ j < i) ⊦ |
⊦ m < n ↔ (∃ m0. m + m0 = n ∧ m0 ≠ 0)
Used simplifier rules: eqs: ⊦ m = n + n0 ∧ m = n + n1 → n0 = n1; (forward) from specification nat-basic lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic eqle-one: ⊦ m = n + 1 ∧ n < n0 → m ≤ n0; (forward) from specification nat ⊦ m + m0 ≤ m ↔ m0 = 0; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: n0, count(mx[n]c, λ j. j < i)
| ⊦ m < n ↔ (∃ m0. m + m0 = n ∧ m0 ≠ 0) |
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.