| c < #c mx ⊦ m ≤ #clean1rows(mx, i) → count(mx[c]c, #r mx - #clean1rows(mx, i), (#r mx - #clean1rows(mx, i)) + m, λ j. ¬ j < i) = m |
count(mx[c]c, #r mx - #clean1rows(mx, i), (#r mx - #clean1rows(mx, i)) + m, λ j. ¬ j < i) ≠ m, c < #c mx, m ≤ #clean1rows(mx, i) ⊦
| count(mx[c]c, #r mx - #clean1rows(mx, i), (#r mx - #clean1rows(mx, i)) + m, λ j. ¬ j < i) ≠ m, c < #c mx, m ≤ #clean1rows(mx, i) ⊦ |
#r mx = n0 + #clean1rows(mx, i), count(mx[c]c, n0, n0 + m, λ j. ¬ j < i) ≠ m, c < #c mx, m ≤ #clean1rows(mx, i), #clean1rows(mx, i) ≤ #r mx ⊦
Used simplifier rules: clean1rows-bounded: ⊦ ¬ #r mx < #clean1rows(mx, i); ⊦ m ≤ n ↔ ¬ n < m; (ss) n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: #r mx, #clean1rows(mx, i), n0
| #r mx = n0 + #clean1rows(mx, i), count(mx[c]c, n0, n0 + m, λ j. ¬ j < i) ≠ m, c < #c mx, m ≤ #clean1rows(mx, i), #clean1rows(mx, i) ≤ #r mx ⊦ |
#r mx = n0 + #clean1rows(mx, i), count(mx[c]c, n0, n0 + m, λ j. ¬ j < i) ≠ m, c < #c mx, m ≤ #r mx, m ≤ #clean1rows(mx, i), #clean1rows(mx, i) ≤ #r mx ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) let: ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1; (forward) from specification nat f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| #r mx = n0 + #clean1rows(mx, i), count(mx[c]c, n0, n0 + m, λ j. ¬ j < i) ≠ m, c < #c mx, m ≤ #r mx, m ≤ #clean1rows(mx, i), #clean1rows(mx, i) ≤ #r mx ⊦ |
#r mx = n0 + #clean1rows(mx, i), count(mx[c]c, n0, n0 + m0 +1, λ j. ¬ j < i) ≠ m0 +1, c < #c mx, #clean1rows(mx, i) ≤ #r mx, m0 +1 ≤ #clean1rows(mx, i), m0 +1 ≤ #r mx, ∀ mx, n0, i, c. ¬ ( #r mx = n0 + #clean1rows(mx, i) ∧ count(mx[c]c, n0, n0 + m0, λ j. ¬ j < i) ≠ m0 ∧ c < #c mx ∧ m0 ≤ #r mx ∧ m0 ≤ #clean1rows(mx, i) ∧ #clean1rows(mx, i) ≤ #r mx) ⊦
Used simplifier rules: nat freely generated by 0, +1;; ⊦ n + 0 = n; (s) ⊦ # mx[c]c = #r mx; (s) ⊦ m ≤ n ↔ ¬ n < m; (ss) ⊦ 0 ≤ m; (s) fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic ⊦ m < n → n ≠ 0; (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 m ≤ # x ⊦ count(x, m, m, p) = 0; (s)
| #r mx = n0 + #clean1rows(mx, i), count(mx[c]c, n0, n0 + m0 +1, λ j. ¬ j < i) ≠ m0 +1, c < #c mx, #clean1rows(mx, i) ≤ #r mx, m0 +1 ≤ #clean1rows(mx, i), m0 +1 ≤ #r mx, ∀ mx, n0, i, c. ¬ ( #r mx = n0 + #clean1rows(mx, i) ∧ count(mx[c]c, n0, n0 + m0, λ j. ¬ j < i) ≠ m0 ∧ c < #c mx ∧ m0 ≤ #r mx ∧ m0 ≤ #clean1rows(mx, i) ∧ #clean1rows(mx, i) ≤ #r mx) ⊦ |
#r mx = n0 + #clean1rows(mx, i), count(mx[c]c, n0, n0 + m0, λ j. ¬ j < i) + (¬ mx[n0 + m0, c] < i ⊃ 1;0) ≠ m0 + 1, m0 < #clean1rows(mx, i), m0 < #r mx, c < #c mx, #clean1rows(mx, i) ≤ #r mx, ∀ mx0, n, i0, c0. #r mx0 ≠ n + #clean1rows(mx0, i0) ∨ count(mx0[c0]c, n, n + m0, λ j. ¬ j < i0) = m0 ∨ ¬ c0 < #c mx0 ∨ ¬ m0 ≤ #r mx0 ∨ ¬ m0 ≤ #clean1rows(mx0, i0) ∨ ¬ #clean1rows(mx0, i0) ≤ #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 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) ⊦ m +1 = m + 1; (s) ⊦ mx[c]c[r] = mx[r, c]; (s) m ≤ n, n ≤ # x ⊦ count(x, m, n + 1, p) = count(x, m, n, p) + (p(x[n]) ⊃ 1;0); (s) ⊦ m = m0 + n0 ∧ n < n0 → ¬ m < m0 + n; (s) ⊦ m ≤ n ↔ ¬ n < m; (ss) ⊦ # mx[c]c = #r mx; (s) ⊦ m ≤ m + n; (s)
| #r mx = n0 + #clean1rows(mx, i), count(mx[c]c, n0, n0 + m0, λ j. ¬ j < i) + (¬ mx[n0 + m0, c] < i ⊃ 1;0) ≠ m0 + 1, m0 < #clean1rows(mx, i), m0 < #r mx, c < #c mx, #clean1rows(mx, i) ≤ #r mx, ∀ mx0, n, i0, c0. #r mx0 ≠ n + #clean1rows(mx0, i0) ∨ count(mx0[c0]c, n, n + m0, λ j. ¬ j < i0) = m0 ∨ ¬ c0 < #c mx0 ∨ ¬ m0 ≤ #r mx0 ∨ ¬ m0 ≤ #clean1rows(mx0, i0) ∨ ¬ #clean1rows(mx0, i0) ≤ #r mx0 ⊦ |
#r mx = n0 + #clean1rows(mx, i), count(mx[c]c, n0, n0 + m0, λ j. ¬ j < i) + 1 ≠ m0 + 1, c < #c mx, m0 < #r mx, m0 < #clean1rows(mx, i), #clean1rows(mx, i) ≤ #r mx, ¬ mx[n0 + m0, c] < i, ∀ mx0, n, i0, c0. #r mx0 ≠ n + #clean1rows(mx0, i0) ∨ count(mx0[c0]c, n, n + m0, λ j. ¬ j < i0) = m0 ∨ ¬ c0 < #c mx0 ∨ ¬ m0 ≤ #r mx0 ∨ ¬ m0 ≤ #clean1rows(mx0, i0) ∨ ¬ #clean1rows(mx0, i0) ≤ #r mx0 ⊦
#r mx = n0 + #clean1rows(mx, i), count(mx[c]c, n0, n0 + m0, λ j. ¬ j < i) + 0 ≠ m0 + 1, c < #c mx, m0 < #r mx, m0 < #clean1rows(mx, i), mx[n0 + m0, c] < i, #clean1rows(mx, i) ≤ #r mx, ∀ mx0, n, i0, c0. #r mx0 ≠ n + #clean1rows(mx0, i0) ∨ count(mx0[c0]c, n, n + m0, λ j. ¬ j < i0) = m0 ∨ ¬ c0 < #c mx0 ∨ ¬ m0 ≤ #r mx0 ∨ ¬ m0 ≤ #clean1rows(mx0, i0) ∨ ¬ #clean1rows(mx0, i0) ≤ #r mx0 ⊦
| #r mx = n0 + #clean1rows(mx, i), count(mx[c]c, n0, n0 + m0, λ j. ¬ j < i) + 1 ≠ m0 + 1, c < #c mx, m0 < #r mx, m0 < #clean1rows(mx, i), #clean1rows(mx, i) ≤ #r mx, ¬ mx[n0 + m0, c] < i, ∀ mx0, n, i0, c0. #r mx0 ≠ n + #clean1rows(mx0, i0) ∨ count(mx0[c0]c, n, n + m0, λ j. ¬ j < i0) = m0 ∨ ¬ c0 < #c mx0 ∨ ¬ m0 ≤ #r mx0 ∨ ¬ m0 ≤ #clean1rows(mx0, i0) ∨ ¬ #clean1rows(mx0, i0) ≤ #r mx0 ⊦ |
#r mx = n0 + #clean1rows(mx, i), count(mx[c]c, n0, n0 + m0, λ j. ¬ j < i) ≠ m0, m0 < #clean1rows(mx, i), m0 < #r mx, c < #c mx, #clean1rows(mx, i) ≤ #r mx, ¬ mx[n0 + m0, c] < i, ∀ mx0, n, i0, c0. #r mx0 ≠ n + #clean1rows(mx0, i0) ∨ count(mx0[c0]c, n, n + m0, λ j. ¬ j < i0) = m0 ∨ ¬ c0 < #c mx0 ∨ ¬ m0 ≤ #r mx0 ∨ ¬ m0 ≤ #clean1rows(mx0, i0) ∨ ¬ #clean1rows(mx0, i0) ≤ #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 + n0 ↔ n = n0; (s)
| #r mx = n0 + #clean1rows(mx, i), count(mx[c]c, n0, n0 + m0, λ j. ¬ j < i) ≠ m0, m0 < #clean1rows(mx, i), m0 < #r mx, c < #c mx, #clean1rows(mx, i) ≤ #r mx, ¬ mx[n0 + m0, c] < i, ∀ mx0, n, i0, c0. #r mx0 ≠ n + #clean1rows(mx0, i0) ∨ count(mx0[c0]c, n, n + m0, λ j. ¬ j < i0) = m0 ∨ ¬ c0 < #c mx0 ∨ ¬ m0 ≤ #r mx0 ∨ ¬ m0 ≤ #clean1rows(mx0, i0) ∨ ¬ #clean1rows(mx0, i0) ≤ #r mx0 ⊦ |
Used simplifier rules: ⊦ m < n → m ≤ n; (s) Used terms: mx, n0, i, c
| #r mx = n0 + #clean1rows(mx, i), count(mx[c]c, n0, n0 + m0, λ j. ¬ j < i) + 0 ≠ m0 + 1, c < #c mx, m0 < #r mx, m0 < #clean1rows(mx, i), mx[n0 + m0, c] < i, #clean1rows(mx, i) ≤ #r mx, ∀ mx0, n, i0, c0. #r mx0 ≠ n + #clean1rows(mx0, i0) ∨ count(mx0[c0]c, n, n + m0, λ j. ¬ j < i0) = m0 ∨ ¬ c0 < #c mx0 ∨ ¬ m0 ≤ #r mx0 ∨ ¬ m0 ≤ #clean1rows(mx0, i0) ∨ ¬ #clean1rows(mx0, i0) ≤ #r mx0 ⊦ |
#r mx = n0 + #clean1rows(mx, i), count(mx[c]c, n0, n0 + m0, λ j. ¬ j < i) ≠ m0 + 1, mx[n0 + m0, c] < i, m0 < #clean1rows(mx, i), m0 < #r mx, c < #c mx, #clean1rows(mx, i) ≤ #r mx, ∀ mx0, n, i0, c0. #r mx0 ≠ n + #clean1rows(mx0, i0) ∨ count(mx0[c0]c, n, n + m0, λ j. ¬ j < i0) = m0 ∨ ¬ c0 < #c mx0 ∨ ¬ m0 ≤ #r mx0 ∨ ¬ m0 ≤ #clean1rows(mx0, i0) ∨ ¬ #clean1rows(mx0, i0) ≤ #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 + 0 = n; (s)
| #r mx = n0 + #clean1rows(mx, i), count(mx[c]c, n0, n0 + m0, λ j. ¬ j < i) ≠ m0 + 1, mx[n0 + m0, c] < i, m0 < #clean1rows(mx, i), m0 < #r mx, c < #c mx, #clean1rows(mx, i) ≤ #r mx, ∀ mx0, n, i0, c0. #r mx0 ≠ n + #clean1rows(mx0, i0) ∨ count(mx0[c0]c, n, n + m0, λ j. ¬ j < i0) = m0 ∨ ¬ c0 < #c mx0 ∨ ¬ m0 ≤ #r mx0 ∨ ¬ m0 ≤ #clean1rows(mx0, i0) ∨ ¬ #clean1rows(mx0, i0) ≤ #r mx0 ⊦ |
⊦ #r mx ≤ #clean1rows(mx, i) + r ∧ r < #r mx → count(mx[r]r, λ j. j < i) = 0
#r mx = n0 + #clean1rows(mx, i), count(mx[c]c, n0, n0 + m0, λ j. ¬ j < i) ≠ m0 + 1, c < #c mx, m0 < #r mx, m0 < #clean1rows(mx, i), mx[n0 + m0, c] < i, #clean1rows(mx, i) ≤ #r mx, #r mx ≤ #clean1rows(mx, i) + n0 + m0 ∧ n0 + m0 < #r mx → count(mx[n0 + m0]r, λ j. j < i) = 0, ∀ mx0, n, i0, c0. #r mx0 ≠ n + #clean1rows(mx0, i0) ∨ count(mx0[c0]c, n, n + m0, λ j. ¬ j < i0) = m0 ∨ ¬ c0 < #c mx0 ∨ ¬ m0 ≤ #r mx0 ∨ ¬ m0 ≤ #clean1rows(mx0, i0) ∨ ¬ #clean1rows(mx0, i0) ≤ #r mx0 ⊦
Used terms: mx, i, n0 + m0
| ⊦ #r mx ≤ #clean1rows(mx, i) + r ∧ r < #r mx → count(mx[r]r, λ j. j < i) = 0 |
| #r mx = n0 + #clean1rows(mx, i), count(mx[c]c, n0, n0 + m0, λ j. ¬ j < i) ≠ m0 + 1, c < #c mx, m0 < #r mx, m0 < #clean1rows(mx, i), mx[n0 + m0, c] < i, #clean1rows(mx, i) ≤ #r mx, #r mx ≤ #clean1rows(mx, i) + n0 + m0 ∧ n0 + m0 < #r mx → count(mx[n0 + m0]r, λ j. j < i) = 0, ∀ mx0, n, i0, c0. #r mx0 ≠ n + #clean1rows(mx0, i0) ∨ count(mx0[c0]c, n, n + m0, λ j. ¬ j < i0) = m0 ∨ ¬ c0 < #c mx0 ∨ ¬ m0 ≤ #r mx0 ∨ ¬ m0 ≤ #clean1rows(mx0, i0) ∨ ¬ #clean1rows(mx0, i0) ≤ #r mx0 ⊦ |
#r mx = n0 + #clean1rows(mx, i), count(mx[n0 + m0]r, λ j. j < i) = 0, count(mx[c]c, n0, n0 + m0, λ j. ¬ j < i) ≠ m0 + 1, c < #c mx, m0 < #r mx, m0 < #clean1rows(mx, i), mx[n0 + m0, c] < i, #clean1rows(mx, i) ≤ #r mx, #r mx ≤ #clean1rows(mx, i) + n0 + m0, ∀ mx0, n, i0, c0. #r mx0 ≠ n + #clean1rows(mx0, i0) ∨ count(mx0[c0]c, n, n + m0, λ j. ¬ j < i0) = m0 ∨ ¬ c0 < #c mx0 ∨ ¬ m0 ≤ #r mx0 ∨ ¬ m0 ≤ #clean1rows(mx0, i0) ∨ ¬ #clean1rows(mx0, i0) ≤ #r mx0 ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) 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 ≤ m + n; (s) fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat let: ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1; (forward) from specification nat ⊦ ¬ m + n < m; (s) ⊦ m + n < m + n0 ↔ n < n0; (s) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic ⊦ m ≤ n ↔ ¬ n < m; (ss) ⊦ m = m0 + n0 ∧ n < n0 → m0 + n < m; (s)
| #r mx = n0 + #clean1rows(mx, i), count(mx[n0 + m0]r, λ j. j < i) = 0, count(mx[c]c, n0, n0 + m0, λ j. ¬ j < i) ≠ m0 + 1, c < #c mx, m0 < #r mx, m0 < #clean1rows(mx, i), mx[n0 + m0, c] < i, #clean1rows(mx, i) ≤ #r mx, #r mx ≤ #clean1rows(mx, i) + n0 + m0, ∀ mx0, n, i0, c0. #r mx0 ≠ n + #clean1rows(mx0, i0) ∨ count(mx0[c0]c, n, n + m0, λ j. ¬ j < i0) = m0 ∨ ¬ c0 < #c mx0 ∨ ¬ m0 ≤ #r mx0 ∨ ¬ m0 ≤ #clean1rows(mx0, i0) ∨ ¬ #clean1rows(mx0, i0) ≤ #r mx0 ⊦ |
⊦ count(x, p) = 0 ↔ (∀ n. n < # x → ¬ p(x[n]))
#r mx = n0 + #clean1rows(mx, i), count(mx[c]c, n0, n0 + m0, λ j. ¬ j < i) ≠ m0 + 1, mx[n0 + m0, c] < i, m0 < #clean1rows(mx, i), m0 < #r mx, c < #c mx, #r mx ≤ #clean1rows(mx, i) + n0 + m0, #clean1rows(mx, i) ≤ #r mx, ∀ mx0, n, i0, c0. #r mx0 ≠ n + #clean1rows(mx0, i0) ∨ count(mx0[c0]c, n, n + m0, λ j. ¬ j < i0) = m0 ∨ ¬ c0 < #c mx0 ∨ ¬ m0 ≤ #r mx0 ∨ ¬ m0 ≤ #clean1rows(mx0, i0) ∨ ¬ #clean1rows(mx0, i0) ≤ #r mx0, ∀ n. n < # mx[n0 + m0]r → ¬ mx[n0 + m0]r[n] < i ⊦
Used terms: mx[n0 + m0]r, λ j. j < i
| ⊦ count(x, p) = 0 ↔ (∀ n. n < # x → ¬ p(x[n])) |
| #r mx = n0 + #clean1rows(mx, i), count(mx[c]c, n0, n0 + m0, λ j. ¬ j < i) ≠ m0 + 1, mx[n0 + m0, c] < i, m0 < #clean1rows(mx, i), m0 < #r mx, c < #c mx, #r mx ≤ #clean1rows(mx, i) + n0 + m0, #clean1rows(mx, i) ≤ #r mx, ∀ mx0, n, i0, c0. #r mx0 ≠ n + #clean1rows(mx0, i0) ∨ count(mx0[c0]c, n, n + m0, λ j. ¬ j < i0) = m0 ∨ ¬ c0 < #c mx0 ∨ ¬ m0 ≤ #r mx0 ∨ ¬ m0 ≤ #clean1rows(mx0, i0) ∨ ¬ #clean1rows(mx0, i0) ≤ #r mx0, ∀ n. n < # mx[n0 + m0]r → ¬ mx[n0 + m0]r[n] < i ⊦ |
#r mx = n0 + #clean1rows(mx, i), count(mx[c]c, n0, n0 + m0, λ j. ¬ j < i) ≠ m0 + 1, c < #c mx, m0 < #r mx, m0 < #clean1rows(mx, i), mx[n0 + m0, c] < i, #clean1rows(mx, i) ≤ #r mx, #r mx ≤ #clean1rows(mx, i) + n0 + m0, ∀ mx0, n, i0, c0. #r mx0 ≠ n + #clean1rows(mx0, i0) ∨ count(mx0[c0]c, n, n + m0, λ j. ¬ j < i0) = m0 ∨ ¬ c0 < #c mx0 ∨ ¬ m0 ≤ #r mx0 ∨ ¬ m0 ≤ #clean1rows(mx0, i0) ∨ ¬ #clean1rows(mx0, i0) ≤ #r mx0, ∀ n. n < #c mx → ¬ mx[n0 + m0, n] < i ⊦
Used simplifier rules: ⊦ mx[r]r[c] = mx[r, c]; (s) ⊦ # mx[r]r = #c mx; (s)
| #r mx = n0 + #clean1rows(mx, i), count(mx[c]c, n0, n0 + m0, λ j. ¬ j < i) ≠ m0 + 1, c < #c mx, m0 < #r mx, m0 < #clean1rows(mx, i), mx[n0 + m0, c] < i, #clean1rows(mx, i) ≤ #r mx, #r mx ≤ #clean1rows(mx, i) + n0 + m0, ∀ mx0, n, i0, c0. #r mx0 ≠ n + #clean1rows(mx0, i0) ∨ count(mx0[c0]c, n, n + m0, λ j. ¬ j < i0) = m0 ∨ ¬ c0 < #c mx0 ∨ ¬ m0 ≤ #r mx0 ∨ ¬ m0 ≤ #clean1rows(mx0, i0) ∨ ¬ #clean1rows(mx0, i0) ≤ #r mx0, ∀ n. n < #c mx → ¬ mx[n0 + m0, n] < i ⊦ |
Used terms: c
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.