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