| c0 < #c mx, ∀ c. c < #c mx → ordered≤(mx[c]c), ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i) ⊦ #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) = #r mx |
#clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, c0 < #c mx, ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i), ∀ c. c < #c mx → ordered≤(mx[c]c) ⊦
| #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, c0 < #c mx, ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i), ∀ c. c < #c mx → ordered≤(mx[c]c) ⊦ |
⊦ ¬ #r mx < #clean1rows(mx, i)
#clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, c0 < #c mx, ¬ #r mx < #clean1rows(mx, i), ∀ c. c < #c mx → ordered≤(mx[c]c), ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i) ⊦
Used terms: mx, i
| ⊦ ¬ #r mx < #clean1rows(mx, i) |
| #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, c0 < #c mx, ¬ #r mx < #clean1rows(mx, i), ∀ c. c < #c mx → ordered≤(mx[c]c), ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i) ⊦ |
#clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, c0 < #c mx, #clean1rows(mx, i) ≤ #r mx, ∀ c. c < #c mx → ordered≤(mx[c]c), ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i) ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m < n ↔ ¬ n ≤ m; (ss)
| #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, c0 < #c mx, #clean1rows(mx, i) ≤ #r mx, ∀ c. c < #c mx → ordered≤(mx[c]c), ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i) ⊦ |
#clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, c0 < #c mx, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) < #r mx, #clean1rows(mx, i) ≤ #r mx, ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i), ∀ c. c < #c mx → ordered≤(mx[c]c) ⊦
#clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, c0 < #c mx, #clean1rows(mx, i) ≤ #r mx, ¬ #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) < #r mx, ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i), ∀ c. c < #c mx → ordered≤(mx[c]c) ⊦
Used formulas: #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) < #r mx
| #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, c0 < #c mx, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) < #r mx, #clean1rows(mx, i) ≤ #r mx, ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i), ∀ c. c < #c mx → ordered≤(mx[c]c) ⊦ |
⊦ #clean1rows(mx, i) + r + 1 = #r mx → count(mx[r]r, λ j. j < i) ≠ 0
#clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) < #r mx, c0 < #c mx, #clean1rows(mx, i) ≤ #r mx, #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. c < #c mx → ordered≤(mx[c]c), ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i) ⊦
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 |
| #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) < #r mx, c0 < #c mx, #clean1rows(mx, i) ≤ #r mx, #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. c < #c mx → ordered≤(mx[c]c), ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i) ⊦ |
#clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, count(mx[#r mx - #clean1rows(mx, i) + 1]r, λ j. j < i) ≠ 0, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) < #r mx, c0 < #c mx, #clean1rows(mx, i) ≤ #r mx, ∀ c. c < #c mx → ordered≤(mx[c]c), ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i) ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (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 n ≤ m ⊦ (m - n) + n0 = n1 ↔ m + n0 = n + n1; (s) ⊦ ¬ m + n < m; (s) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic ⊦ m ≤ n → (n ≤ m ↔ m = n); (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m + 1 ≤ n ↔ m < n; (s)
| #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, count(mx[#r mx - #clean1rows(mx, i) + 1]r, λ j. j < i) ≠ 0, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) < #r mx, c0 < #c mx, #clean1rows(mx, i) ≤ #r mx, ∀ c. c < #c mx → ordered≤(mx[c]c), ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i) ⊦ |
#r mx = n0 + #clean1rows(mx, i) + 1, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, count(mx[n0]r, λ j. j < i) ≠ 0, c0 < #c mx, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) < #r mx, #clean1rows(mx, i) ≤ #r mx, #clean1rows(mx, i) + 1 ≤ #r mx, ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i), ∀ c. c < #c mx → ordered≤(mx[c]c) ⊦
Used simplifier rules: ⊦ m + 1 ≤ n ↔ m < n; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m ≤ n → (n ≤ m ↔ m = n); (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat ⊦ m < n → n ≠ 0; (s) ⊦ m = m + n ↔ n = 0; (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 n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: #r mx, #clean1rows(mx, i) + 1, n0
| #r mx = n0 + #clean1rows(mx, i) + 1, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, count(mx[n0]r, λ j. j < i) ≠ 0, c0 < #c mx, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) < #r mx, #clean1rows(mx, i) ≤ #r mx, #clean1rows(mx, i) + 1 ≤ #r mx, ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i), ∀ c. c < #c mx → ordered≤(mx[c]c) ⊦ |
#r mx = n0 + #clean1rows(mx, i) + 1, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, count(mx[n0]r, λ j. j < i) ≠ 0, #clean1rows(mx, i) < #r mx, c0 < #c mx, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) < #r mx, count(mx[c0]c, λ j. j < i) ≤ n0, ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i), ∀ c. c < #c mx → ordered≤(mx[c]c) ⊦
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ ¬ m + n < m; (s) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic ⊦ m < n → m ≤ n; (s) ⊦ m + 1 ≤ n ↔ m < n; (s)
| #r mx = n0 + #clean1rows(mx, i) + 1, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, count(mx[n0]r, λ j. j < i) ≠ 0, #clean1rows(mx, i) < #r mx, c0 < #c mx, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) < #r mx, count(mx[c0]c, λ j. j < i) ≤ n0, ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i), ∀ c. c < #c mx → ordered≤(mx[c]c) ⊦ |
⊦ count(x, p) = 0 ↔ (∀ n. n < # x → ¬ p(x[n]))
#r mx = n0 + #clean1rows(mx, i) + 1, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) < #r mx, c0 < #c mx, #clean1rows(mx, i) < #r mx, count(mx[c0]c, λ j. j < i) ≤ n0, ∀ c. c < #c mx → ordered≤(mx[c]c), ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i), ∃ 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])) |
| #r mx = n0 + #clean1rows(mx, i) + 1, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) < #r mx, c0 < #c mx, #clean1rows(mx, i) < #r mx, count(mx[c0]c, λ j. j < i) ≤ n0, ∀ c. c < #c mx → ordered≤(mx[c]c), ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i), ∃ n. ¬(n < # mx[n0]r → ¬ mx[n0]r[n] < i) ⊦ |
#r mx = n0 + #clean1rows(mx, i) + 1, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, #clean1rows(mx, i) < #r mx, c0 < #c mx, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) < #r mx, mx[n0, n] < i, n < #c mx, count(mx[c0]c, λ j. j < i) ≤ n0, ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i), ∀ c. c < #c mx → ordered≤(mx[c]c) ⊦
Used simplifier rules: ⊦ # mx[r]r = #c mx; (s) ⊦ mx[r]r[c] = mx[r, c]; (s)
| #r mx = n0 + #clean1rows(mx, i) + 1, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, #clean1rows(mx, i) < #r mx, c0 < #c mx, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) < #r mx, mx[n0, n] < i, n < #c mx, count(mx[c0]c, λ j. j < i) ≤ n0, ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i), ∀ c. c < #c mx → ordered≤(mx[c]c) ⊦ |
#r mx = n0 + #clean1rows(mx, i) + 1, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, n < #c mx, mx[n0, n] < i, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) < #r mx, c0 < #c mx, #clean1rows(mx, i) < #r mx, count(mx[c0]c, λ j. j < i) ≤ n0, n < #c mx → count(mx[n]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i), ∀ c. c < #c mx → ordered≤(mx[c]c), ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i) ⊦
Used terms: n
| #r mx = n0 + #clean1rows(mx, i) + 1, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, n < #c mx, mx[n0, n] < i, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) < #r mx, c0 < #c mx, #clean1rows(mx, i) < #r mx, count(mx[c0]c, λ j. j < i) ≤ n0, n < #c mx → count(mx[n]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i), ∀ c. c < #c mx → ordered≤(mx[c]c), ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i) ⊦ |
#r mx = n0 + #clean1rows(mx, i) + 1, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, #clean1rows(mx, i) < #r mx, c0 < #c mx, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) < #r mx, mx[n0, n] < i, n < #c mx, count(mx[c0]c, λ j. j < i) ≤ n0, count(mx[n]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i), count(mx[n]c, λ j. j < i) ≤ n0, ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i), ∀ c. c < #c mx → ordered≤(mx[c]c) ⊦
Used simplifier rules: let: ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1; (forward) from specification nat
| #r mx = n0 + #clean1rows(mx, i) + 1, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, #clean1rows(mx, i) < #r mx, c0 < #c mx, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) < #r mx, mx[n0, n] < i, n < #c mx, count(mx[c0]c, λ j. j < i) ≤ n0, count(mx[n]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i), count(mx[n]c, λ j. j < i) ≤ n0, ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i), ∀ c. c < #c mx → ordered≤(mx[c]c) ⊦ |
perm(a0, a), ordered≤(a), # a0 = # a, n < # a ⊦ a[n] < i ↔ n < count(a0, λ j. j < i)
#r mx = n0 + #clean1rows(mx, i) + 1, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, n < #c mx, mx[n0, n] < i, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) < #r mx, c0 < #c mx, #clean1rows(mx, i) < #r mx, count(mx[n]c, λ j. j < i) ≤ n0, count(mx[n]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i), count(mx[c0]c, λ j. j < i) ≤ n0, ∀ c. c < #c mx → ordered≤(mx[c]c), ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i) ⊦ perm(mx[n]c, mx[n]c) ∧ ordered≤(mx[n]c) ∧ # mx[n]c = # mx[n]c ∧ n0 < # mx[n]c
Used simplifier rules: ⊦ mx[c]c[r] = mx[r, c]; (s) ⊦ m ≤ n → (n < m ↔ false); (s) Used terms: mx[n]c, mx[n]c, n0, i
| perm(a0, a), ordered≤(a), # a0 = # a, n < # a ⊦ a[n] < i ↔ n < count(a0, λ j. j < i) |
| #r mx = n0 + #clean1rows(mx, i) + 1, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, n < #c mx, mx[n0, n] < i, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) < #r mx, c0 < #c mx, #clean1rows(mx, i) < #r mx, count(mx[n]c, λ j. j < i) ≤ n0, count(mx[n]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i), count(mx[c0]c, λ j. j < i) ≤ n0, ∀ c. c < #c mx → ordered≤(mx[c]c), ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i) ⊦ perm(mx[n]c, mx[n]c) ∧ ordered≤(mx[n]c) ∧ # mx[n]c = # mx[n]c ∧ n0 < # mx[n]c |
#r mx = n0 + #clean1rows(mx, i) + 1, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, #clean1rows(mx, i) < #r mx, c0 < #c mx, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) < #r mx, mx[n0, n] < i, n < #c mx, count(mx[c0]c, λ j. j < i) ≤ n0, count(mx[n]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i), count(mx[n]c, λ j. j < i) ≤ n0, ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i), ∀ c. c < #c mx → ordered≤(mx[c]c) ⊦ ordered≤(mx[n]c) ∧ n0 < #r mx
Used simplifier rules: ⊦ # mx[c]c = #r mx; (s) ⊦ perm(x, x); (s)
| #r mx = n0 + #clean1rows(mx, i) + 1, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, #clean1rows(mx, i) < #r mx, c0 < #c mx, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) < #r mx, mx[n0, n] < i, n < #c mx, count(mx[c0]c, λ j. j < i) ≤ n0, count(mx[n]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i), count(mx[n]c, λ j. j < i) ≤ n0, ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i), ∀ c. c < #c mx → ordered≤(mx[c]c) ⊦ ordered≤(mx[n]c) ∧ n0 < #r mx |
#r mx = n0 + #clean1rows(mx, i) + 1, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, n < #c mx, mx[n0, n] < i, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) < #r mx, c0 < #c mx, #clean1rows(mx, i) < #r mx, count(mx[n]c, λ j. j < i) ≤ n0, count(mx[n]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i), count(mx[c0]c, λ j. j < i) ≤ n0, n < #c mx → ordered≤(mx[n]c), ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i) ⊦ ordered≤(mx[n]c) ∧ n0 < #r mx
Used terms: n
| #r mx = n0 + #clean1rows(mx, i) + 1, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, n < #c mx, mx[n0, n] < i, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) < #r mx, c0 < #c mx, #clean1rows(mx, i) < #r mx, count(mx[n]c, λ j. j < i) ≤ n0, count(mx[n]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i), count(mx[c0]c, λ j. j < i) ≤ n0, n < #c mx → ordered≤(mx[n]c), ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i) ⊦ ordered≤(mx[n]c) ∧ n0 < #r mx |
#r mx = n0 + #clean1rows(mx, i) + 1, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, #clean1rows(mx, i) < #r mx, c0 < #c mx, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) < #r mx, mx[n0, n] < i, n < #c mx, #clean1rows(mx, i) < n0, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) < n0, ordered≤(mx[n]c), count(mx[c0]c, λ j. j < i) ≤ n0, count(mx[n]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i), count(mx[n]c, λ j. j < i) ≤ n0, #r mx ≤ n0, ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i) ⊦
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 ⊦ m < n ↔ ¬ n ≤ m; (ss)
| #r mx = n0 + #clean1rows(mx, i) + 1, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, #clean1rows(mx, i) < #r mx, c0 < #c mx, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) < #r mx, mx[n0, n] < i, n < #c mx, #clean1rows(mx, i) < n0, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) < n0, ordered≤(mx[n]c), count(mx[c0]c, λ j. j < i) ≤ n0, count(mx[n]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i), count(mx[n]c, λ j. j < i) ≤ n0, #r mx ≤ n0, ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i) ⊦ |
Used simplifier rules: ⊦ m + n = m + n0 ↔ n = n0; (s) ⊦ 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
| #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, c0 < #c mx, #clean1rows(mx, i) ≤ #r mx, ¬ #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) < #r mx, ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i), ∀ c. c < #c mx → ordered≤(mx[c]c) ⊦ |
#clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, count(mx[c0]c, λ j. j < i) ≠ 0, #r mx < #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i), c0 < #c mx, #clean1rows(mx, i) ≤ #r mx, ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i), ∀ c. c < #c mx → ordered≤(mx[c]c) ⊦
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) ⊦ m < n → n ≠ 0; (s) fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m ≠ n → (m < n ↔ ¬ n < m); (ss)
| #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, count(mx[c0]c, λ j. j < i) ≠ 0, #r mx < #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i), c0 < #c mx, #clean1rows(mx, i) ≤ #r mx, ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i), ∀ c. c < #c mx → ordered≤(mx[c]c) ⊦ |
#clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, count(mx[c0]c, λ j. j < i) ≠ 0, c0 < #c mx, #r mx < #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i), #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) > #r mx, #clean1rows(mx, i) ≤ #r mx, ∀ c. c < #c mx → ordered≤(mx[c]c), ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i) ⊦
Used simplifier rules: ⊦ m > n ↔ n < m; (s) ⊦ m ≠ n → (m < n ↔ ¬ n < m); (ss) ⊦ m < n → ¬ n < m; (s) Used formulas: #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) > #r mx
| #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, count(mx[c0]c, λ j. j < i) ≠ 0, c0 < #c mx, #r mx < #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i), #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) > #r mx, #clean1rows(mx, i) ≤ #r mx, ∀ c. c < #c mx → ordered≤(mx[c]c), ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i) ⊦ |
#clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, count(mx[c0]c, λ j. j < i) ≠ 0, c0 < #c mx, #r mx < #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i), #clean1rows(mx, i) ≤ #r mx, ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i), ∀ c. c < #c mx → ordered≤(mx[c]c) ⊦
Used simplifier rules: ⊦ m > n ↔ n < m; (s)
| #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, count(mx[c0]c, λ j. j < i) ≠ 0, c0 < #c mx, #r mx < #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i), #clean1rows(mx, i) ≤ #r mx, ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i), ∀ c. c < #c mx → ordered≤(mx[c]c) ⊦ |
⊦ #r mx ≤ #clean1rows(mx, i) + r ∧ r < #r mx → count(mx[r]r, λ j. j < i) = 0
#clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, count(mx[c0]c, λ j. j < i) ≠ 0, #r mx < #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i), c0 < #c mx, #clean1rows(mx, i) ≤ #r mx, #r mx ≤ #clean1rows(mx, i) + (count(mx[c0]c, λ j. j < i) - 1) ∧ count(mx[c0]c, λ j. j < i) - 1 < #r mx → count(mx[count(mx[c0]c, λ j. j < i) - 1]r, λ j. j < i) = 0, ∀ c. c < #c mx → ordered≤(mx[c]c), ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i) ⊦
Used terms: mx, i, count(mx[c0]c, λ j. j < i) - 1
| ⊦ #r mx ≤ #clean1rows(mx, i) + r ∧ r < #r mx → count(mx[r]r, λ j. j < i) = 0 |
| #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, count(mx[c0]c, λ j. j < i) ≠ 0, #r mx < #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i), c0 < #c mx, #clean1rows(mx, i) ≤ #r mx, #r mx ≤ #clean1rows(mx, i) + (count(mx[c0]c, λ j. j < i) - 1) ∧ count(mx[c0]c, λ j. j < i) - 1 < #r mx → count(mx[count(mx[c0]c, λ j. j < i) - 1]r, λ j. j < i) = 0, ∀ c. c < #c mx → ordered≤(mx[c]c), ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i) ⊦ |
#clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, count(mx[c0]c, λ j. j < i) ≠ 0, c0 < #c mx, #r mx < #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i), #clean1rows(mx, i) ≤ #r mx, #r mx ≤ #clean1rows(mx, i) + (count(mx[c0]c, λ j. j < i) - 1) ∧ ¬ #r mx < count(mx[c0]c, λ j. j < i) → count(mx[count(mx[c0]c, λ j. j < i) - 1]r, λ j. j < i) = 0, ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i), ∀ c. c < #c mx → ordered≤(mx[c]c) ⊦
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 + 1 ↔ ¬ n < m; (s) n0 ≤ n ⊦ n - n0 < m ↔ n < m + n0; (s) ⊦ m < 1 ↔ m = 0; (s) ⊦ m ≤ n ↔ ¬ n < m; (ss)
| #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, count(mx[c0]c, λ j. j < i) ≠ 0, c0 < #c mx, #r mx < #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i), #clean1rows(mx, i) ≤ #r mx, #r mx ≤ #clean1rows(mx, i) + (count(mx[c0]c, λ j. j < i) - 1) ∧ ¬ #r mx < count(mx[c0]c, λ j. j < i) → count(mx[count(mx[c0]c, λ j. j < i) - 1]r, λ j. j < i) = 0, ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i), ∀ c. c < #c mx → ordered≤(mx[c]c) ⊦ |
count(mx[c0]c, λ j. j < i) = m + 1, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, count(mx[c0]c, λ j. j < i) ≠ 0, #r mx < #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i), c0 < #c mx, #clean1rows(mx, i) ≤ #r mx, #r mx ≤ #clean1rows(mx, i) + m ∧ ¬ #r mx < count(mx[c0]c, λ j. j < i) → count(mx[m]r, λ j. j < i) = 0, ∀ c. c < #c mx → ordered≤(mx[c]c), ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i) ⊦
Used simplifier rules: n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: count(mx[c0]c, λ j. j < i), m
| count(mx[c0]c, λ j. j < i) = m + 1, #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) ≠ #r mx, count(mx[c0]c, λ j. j < i) ≠ 0, #r mx < #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i), c0 < #c mx, #clean1rows(mx, i) ≤ #r mx, #r mx ≤ #clean1rows(mx, i) + m ∧ ¬ #r mx < count(mx[c0]c, λ j. j < i) → count(mx[m]r, λ j. j < i) = 0, ∀ c. c < #c mx → ordered≤(mx[c]c), ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i) ⊦ |
count(mx[c0]c, λ j. j < i) = m + 1, #clean1rows(mx, i) + m + 1 ≠ #r mx, c0 < #c mx, #r mx ≤ #clean1rows(mx, i) + m, #clean1rows(mx, i) ≤ #r mx, m < #r mx → count(mx[m]r, λ j. j < i) = 0, ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ m + 1, ∀ c. c < #c mx → ordered≤(mx[c]c) ⊦
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; (s) let: ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1; (forward) from specification nat ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ ¬ m + n < m; (s) ⊦ m + 1 ≠ 0; (s) fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| count(mx[c0]c, λ j. j < i) = m + 1, #clean1rows(mx, i) + m + 1 ≠ #r mx, c0 < #c mx, #r mx ≤ #clean1rows(mx, i) + m, #clean1rows(mx, i) ≤ #r mx, m < #r mx → count(mx[m]r, λ j. j < i) = 0, ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ m + 1, ∀ c. c < #c mx → ordered≤(mx[c]c) ⊦ |
⊦ ¬ # x < count(x, p)
count(mx[c0]c, λ j. j < i) = m + 1, #clean1rows(mx, i) + m + 1 ≠ #r mx, c0 < #c mx, #clean1rows(mx, i) ≤ #r mx, #r mx ≤ #clean1rows(mx, i) + m, ¬ # mx[c0]c < count(mx[c0]c, λ j. j < i), m < #r mx → count(mx[m]r, λ j. j < i) = 0, ∀ c. c < #c mx → ordered≤(mx[c]c), ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ m + 1 ⊦
Used terms: mx[c0]c, λ j. j < i
| ⊦ ¬ # x < count(x, p) |
| count(mx[c0]c, λ j. j < i) = m + 1, #clean1rows(mx, i) + m + 1 ≠ #r mx, c0 < #c mx, #clean1rows(mx, i) ≤ #r mx, #r mx ≤ #clean1rows(mx, i) + m, ¬ # mx[c0]c < count(mx[c0]c, λ j. j < i), m < #r mx → count(mx[m]r, λ j. j < i) = 0, ∀ c. c < #c mx → ordered≤(mx[c]c), ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ m + 1 ⊦ |
count(mx[c0]c, λ j. j < i) = m + 1, count(mx[m]r, λ j. j < i) = 0, #clean1rows(mx, i) ≠ 0, #clean1rows(mx, i) + m + 1 ≠ #r mx, #clean1rows(mx, i) + m ≠ 0, c0 < #c mx, m < #r mx, 1 ≤ #clean1rows(mx, i) + m, #clean1rows(mx, i) ≤ #r mx, #r mx ≤ #clean1rows(mx, i) + m, 1 ≤ #clean1rows(mx, i), 1 ≤ #r mx, ∀ c. c < #c mx → ordered≤(mx[c]c), ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ m + 1 ⊦
Used simplifier rules: not-zero: 0 < n ⊦ (* n) ≤ m → m ≠ 0; (forward) from specification nat 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) let: ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1; (forward) from specification nat ⊦ m < m + n ↔ n ≠ 0; (s) ⊦ m < n → n ≠ 0; (s) fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic eqle-one: ⊦ m = n + 1 ∧ n < n0 → m ≤ n0; (forward) from specification nat ⊦ m + n ≤ m + n0 ↔ n ≤ n0; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ # mx[c]c = #r mx; (s)
| count(mx[c0]c, λ j. j < i) = m + 1, count(mx[m]r, λ j. j < i) = 0, #clean1rows(mx, i) ≠ 0, #clean1rows(mx, i) + m + 1 ≠ #r mx, #clean1rows(mx, i) + m ≠ 0, c0 < #c mx, m < #r mx, 1 ≤ #clean1rows(mx, i) + m, #clean1rows(mx, i) ≤ #r mx, #r mx ≤ #clean1rows(mx, i) + m, 1 ≤ #clean1rows(mx, i), 1 ≤ #r mx, ∀ c. c < #c mx → ordered≤(mx[c]c), ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ m + 1 ⊦ |
⊦ count(x, p) = 0 ↔ (∀ n. n < # x → ¬ p(x[n]))
count(mx[c0]c, λ j. j < i) = m + 1, #clean1rows(mx, i) ≠ 0, #clean1rows(mx, i) + m + 1 ≠ #r mx, #clean1rows(mx, i) + m ≠ 0, m < #r mx, c0 < #c mx, 1 ≤ #r mx, 1 ≤ #clean1rows(mx, i), #r mx ≤ #clean1rows(mx, i) + m, #clean1rows(mx, i) ≤ #r mx, 1 ≤ #clean1rows(mx, i) + m, ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ m + 1, ∀ c. c < #c mx → ordered≤(mx[c]c), ∀ n. n < # mx[m]r → ¬ mx[m]r[n] < i ⊦
Used terms: mx[m]r, λ j. j < i
| ⊦ count(x, p) = 0 ↔ (∀ n. n < # x → ¬ p(x[n])) |
| count(mx[c0]c, λ j. j < i) = m + 1, #clean1rows(mx, i) ≠ 0, #clean1rows(mx, i) + m + 1 ≠ #r mx, #clean1rows(mx, i) + m ≠ 0, m < #r mx, c0 < #c mx, 1 ≤ #r mx, 1 ≤ #clean1rows(mx, i), #r mx ≤ #clean1rows(mx, i) + m, #clean1rows(mx, i) ≤ #r mx, 1 ≤ #clean1rows(mx, i) + m, ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ m + 1, ∀ c. c < #c mx → ordered≤(mx[c]c), ∀ n. n < # mx[m]r → ¬ mx[m]r[n] < i ⊦ |
count(mx[c0]c, λ j. j < i) = m + 1, #clean1rows(mx, i) ≠ 0, #clean1rows(mx, i) + m + 1 ≠ #r mx, #clean1rows(mx, i) + m ≠ 0, c0 < #c mx, m < #r mx, 1 ≤ #clean1rows(mx, i) + m, #clean1rows(mx, i) ≤ #r mx, #r mx ≤ #clean1rows(mx, i) + m, 1 ≤ #clean1rows(mx, i), 1 ≤ #r mx, ∀ c. c < #c mx → ordered≤(mx[c]c), ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ m + 1, ∀ n. n < #c mx → ¬ mx[m, n] < i ⊦
Used simplifier rules: ⊦ mx[r]r[c] = mx[r, c]; (s) ⊦ # mx[r]r = #c mx; (s)
| count(mx[c0]c, λ j. j < i) = m + 1, #clean1rows(mx, i) ≠ 0, #clean1rows(mx, i) + m + 1 ≠ #r mx, #clean1rows(mx, i) + m ≠ 0, c0 < #c mx, m < #r mx, 1 ≤ #clean1rows(mx, i) + m, #clean1rows(mx, i) ≤ #r mx, #r mx ≤ #clean1rows(mx, i) + m, 1 ≤ #clean1rows(mx, i), 1 ≤ #r mx, ∀ c. c < #c mx → ordered≤(mx[c]c), ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ m + 1, ∀ n. n < #c mx → ¬ mx[m, n] < i ⊦ |
perm(a0, a), ordered≤(a), # a0 = # a, n < # a ⊦ a[n] < i ↔ n < count(a0, λ j. j < i)
count(mx[c0]c, λ j. j < i) = m + 1, #clean1rows(mx, i) ≠ 0, #clean1rows(mx, i) + m + 1 ≠ #r mx, #clean1rows(mx, i) + m ≠ 0, m < #r mx, c0 < #c mx, 1 ≤ #r mx, 1 ≤ #clean1rows(mx, i), #r mx ≤ #clean1rows(mx, i) + m, #clean1rows(mx, i) ≤ #r mx, 1 ≤ #clean1rows(mx, i) + m, ∀ n. n < #c mx → ¬ mx[m, n] < i, ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ m + 1, ∀ c. c < #c mx → ordered≤(mx[c]c) ⊦ perm(mx[c0]c, mx[c0]c) ∧ ordered≤(mx[c0]c) ∧ # mx[c0]c = # mx[c0]c ∧ count(mx[c0]c, λ j. j < i) - 1 < # mx[c0]c
mx[c0]c[count(mx[c0]c, λ j. j < i) - 1] < i ↔ count(mx[c0]c, λ j. j < i) - 1 < count(mx[c0]c, λ j. j < i), count(mx[c0]c, λ j. j < i) = m + 1, #clean1rows(mx, i) ≠ 0, #clean1rows(mx, i) + m + 1 ≠ #r mx, #clean1rows(mx, i) + m ≠ 0, m < #r mx, c0 < #c mx, 1 ≤ #r mx, 1 ≤ #clean1rows(mx, i), #r mx ≤ #clean1rows(mx, i) + m, #clean1rows(mx, i) ≤ #r mx, 1 ≤ #clean1rows(mx, i) + m, ∀ n. n < #c mx → ¬ mx[m, n] < i, ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ m + 1, ∀ c. c < #c mx → ordered≤(mx[c]c) ⊦
Used terms: mx[c0]c, mx[c0]c, count(mx[c0]c, λ j. j < i) - 1, i
| perm(a0, a), ordered≤(a), # a0 = # a, n < # a ⊦ a[n] < i ↔ n < count(a0, λ j. j < i) |
| count(mx[c0]c, λ j. j < i) = m + 1, #clean1rows(mx, i) ≠ 0, #clean1rows(mx, i) + m + 1 ≠ #r mx, #clean1rows(mx, i) + m ≠ 0, m < #r mx, c0 < #c mx, 1 ≤ #r mx, 1 ≤ #clean1rows(mx, i), #r mx ≤ #clean1rows(mx, i) + m, #clean1rows(mx, i) ≤ #r mx, 1 ≤ #clean1rows(mx, i) + m, ∀ n. n < #c mx → ¬ mx[m, n] < i, ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ m + 1, ∀ c. c < #c mx → ordered≤(mx[c]c) ⊦ perm(mx[c0]c, mx[c0]c) ∧ ordered≤(mx[c0]c) ∧ # mx[c0]c = # mx[c0]c ∧ count(mx[c0]c, λ j. j < i) - 1 < # mx[c0]c |
count(mx[c0]c, λ j. j < i) = m + 1, #clean1rows(mx, i) ≠ 0, #clean1rows(mx, i) + m ≠ 0, #clean1rows(mx, i) + m + 1 ≠ #r mx, m < #r mx, c0 < #c mx, 1 ≤ #r mx, 1 ≤ #clean1rows(mx, i), #r mx ≤ #clean1rows(mx, i) + m, #clean1rows(mx, i) ≤ #r mx, 1 ≤ #clean1rows(mx, i) + m, ¬ ordered≤(mx[c0]c), ∀ n. n < #c mx → ¬ mx[m, n] < i, ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ m + 1, ∀ c. c < #c mx → ordered≤(mx[c]c) ⊦
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 + 1 ↔ ¬ n < m; (s) n0 ≤ n ⊦ n - n0 < m ↔ n < m + n0; (s) ⊦ ¬ m < n → ¬ m + m0 < n; (s) ⊦ m ≤ n ↔ ¬ n < m; (ss) ⊦ # mx[c]c = #r mx; (s) ⊦ perm(x, x); (s)
| count(mx[c0]c, λ j. j < i) = m + 1, #clean1rows(mx, i) ≠ 0, #clean1rows(mx, i) + m ≠ 0, #clean1rows(mx, i) + m + 1 ≠ #r mx, m < #r mx, c0 < #c mx, 1 ≤ #r mx, 1 ≤ #clean1rows(mx, i), #r mx ≤ #clean1rows(mx, i) + m, #clean1rows(mx, i) ≤ #r mx, 1 ≤ #clean1rows(mx, i) + m, ¬ ordered≤(mx[c0]c), ∀ n. n < #c mx → ¬ mx[m, n] < i, ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ m + 1, ∀ c. c < #c mx → ordered≤(mx[c]c) ⊦ |
Used terms: c0
| mx[c0]c[count(mx[c0]c, λ j. j < i) - 1] < i ↔ count(mx[c0]c, λ j. j < i) - 1 < count(mx[c0]c, λ j. j < i), count(mx[c0]c, λ j. j < i) = m + 1, #clean1rows(mx, i) ≠ 0, #clean1rows(mx, i) + m + 1 ≠ #r mx, #clean1rows(mx, i) + m ≠ 0, m < #r mx, c0 < #c mx, 1 ≤ #r mx, 1 ≤ #clean1rows(mx, i), #r mx ≤ #clean1rows(mx, i) + m, #clean1rows(mx, i) ≤ #r mx, 1 ≤ #clean1rows(mx, i) + m, ∀ n. n < #c mx → ¬ mx[m, n] < i, ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ m + 1, ∀ c. c < #c mx → ordered≤(mx[c]c) ⊦ |
count(mx[c0]c, λ j. j < i) = m + 1, #clean1rows(mx, i) ≠ 0, #clean1rows(mx, i) + m ≠ 0, #clean1rows(mx, i) + m + 1 ≠ #r mx, m < #r mx, c0 < #c mx, mx[m, c0] < i, 1 ≤ #r mx, 1 ≤ #clean1rows(mx, i), #r mx ≤ #clean1rows(mx, i) + m, #clean1rows(mx, i) ≤ #r mx, 1 ≤ #clean1rows(mx, i) + m, ∀ n. n < #c mx → ¬ mx[m, n] < i, ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ m + 1, ∀ c. c < #c mx → ordered≤(mx[c]c) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ n + 0 = n; (s) ⊦ n ≤ m → m + n0 - n = (m - n) + n0; (s) ⊦ mx[c]c[r] = mx[r, c]; (s) ⊦ ¬ n < n; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) n0 ≤ n ⊦ n - n0 < m ↔ n < m + n0; (s) ⊦ ¬ m < n → ¬ m + m0 < n; (s) ⊦ m ≤ n ↔ ¬ n < m; (ss)
| count(mx[c0]c, λ j. j < i) = m + 1, #clean1rows(mx, i) ≠ 0, #clean1rows(mx, i) + m ≠ 0, #clean1rows(mx, i) + m + 1 ≠ #r mx, m < #r mx, c0 < #c mx, mx[m, c0] < i, 1 ≤ #r mx, 1 ≤ #clean1rows(mx, i), #r mx ≤ #clean1rows(mx, i) + m, #clean1rows(mx, i) ≤ #r mx, 1 ≤ #clean1rows(mx, i) + m, ∀ n. n < #c mx → ¬ mx[m, n] < i, ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ m + 1, ∀ c. c < #c mx → ordered≤(mx[c]c) ⊦ |
Used terms: c0
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.