| c0 < #c mx0 ⊦ countevn(mx0[c0]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) ≤ #dirtyrows(mx0, i) /↑ 2 |
c0 < #c mx0, ¬ countevn(mx0[c0]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) ≤ #dirtyrows(mx0, i) /↑ 2 ⊦
| c0 < #c mx0, ¬ countevn(mx0[c0]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) ≤ #dirtyrows(mx0, i) /↑ 2 ⊦ |
#dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), c0 < #c mx0 ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m ≤ n ↔ ¬ n < m; (ss)
| #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), c0 < #c mx0 ⊦ |
⊦ #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx
#dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, c0 < #c mx0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) ⊦
Used terms: mx0, i
| ⊦ #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx |
| #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, c0 < #c mx0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) ⊦ |
m ≤ n, n ≤ n0, n0 ≤ # a ⊦ countevn(a, m, n, p) + countevn(a, n, n0, p) = countevn(a, m, n0, p)
#dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #r mx0 - #clean1rows(mx0, i), λ j. j < i) + countevn(mx0[c0]c, #r mx0 - #clean1rows(mx0, i), #r mx0, λ j. j < i), c0 < #c mx0, #clean0rows(mx0, i) ≤ #r mx0 - #clean1rows(mx0, i), #r mx0 - #clean1rows(mx0, i) ≤ #r mx0, #r mx0 ≤ # mx0[c0]c ⊦
Used simplifier rules: clean1rows-bounded: ⊦ ¬ #r mx < #clean1rows(mx, i); clean0-plus-clean1-bounded: #c mx ≠ 0 ⊦ ¬ #r mx < #clean0rows(mx, i) + #clean1rows(mx, i); n0 ≤ n ⊦ m ≤ n - n0 ↔ m + n0 ≤ n; (s) n0 ≤ n ⊦ n - n0 ≤ m ↔ n ≤ m + n0; (s) ⊦ m ≤ m + n; (s) ⊦ # mx[c]c = #r mx; (s) ⊦ m ≤ m; (s) ⊦ m ≤ n ↔ ¬ n < m; (ss) ⊦ m < n → n ≠ 0; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: #r mx0, λ j. j < i, mx0[c0]c, #r mx0 - #clean1rows(mx0, i), #clean0rows(mx0, i)
| m ≤ n, n ≤ n0, n0 ≤ # a ⊦ countevn(a, m, n, p) + countevn(a, n, n0, p) = countevn(a, m, n0, p) |
| #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #r mx0 - #clean1rows(mx0, i), λ j. j < i) + countevn(mx0[c0]c, #r mx0 - #clean1rows(mx0, i), #r mx0, λ j. j < i), c0 < #c mx0, #clean0rows(mx0, i) ≤ #r mx0 - #clean1rows(mx0, i), #r mx0 - #clean1rows(mx0, i) ≤ #r mx0, #r mx0 ≤ # mx0[c0]c ⊦ |
∀ r. m ≤ r ∧ r < n ∧ even(r) → ¬ p(a[r]), m ≤ n, n ≤ # a ⊦ countevn(a, m, n, p) = 0
#dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, c0 < #c mx0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #r mx0 - #clean1rows(mx0, i), λ j. j < i) + countevn(mx0[c0]c, #r mx0 - #clean1rows(mx0, i), #r mx0, λ j. j < i), #r mx0 ≤ # mx0[c0]c, #r mx0 - #clean1rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) ≤ #r mx0 - #clean1rows(mx0, i) ⊦ (∀ r. #r mx0 - #clean1rows(mx0, i) ≤ r ∧ r < #r mx0 ∧ even(r) → ¬ mx0[c0]c[r] < i) ∧ #r mx0 - #clean1rows(mx0, i) ≤ #r mx0 ∧ #r mx0 ≤ # mx0[c0]c
#dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, c0 < #c mx0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #r mx0 - #clean1rows(mx0, i), λ j. j < i) + 0, #clean0rows(mx0, i) ≤ #r mx0 - #clean1rows(mx0, i), #r mx0 - #clean1rows(mx0, i) ≤ #r mx0, #r mx0 ≤ # mx0[c0]c, ∀ r. #r mx0 - #clean1rows(mx0, i) ≤ r ∧ r < #r mx0 ∧ even(r) → ¬ mx0[c0]c[r] < i ⊦
Used terms: mx0[c0]c, #r mx0 - #clean1rows(mx0, i), #r mx0, λ j. j < i
| ∀ r. m ≤ r ∧ r < n ∧ even(r) → ¬ p(a[r]), m ≤ n, n ≤ # a ⊦ countevn(a, m, n, p) = 0 |
| #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, c0 < #c mx0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #r mx0 - #clean1rows(mx0, i), λ j. j < i) + countevn(mx0[c0]c, #r mx0 - #clean1rows(mx0, i), #r mx0, λ j. j < i), #r mx0 ≤ # mx0[c0]c, #r mx0 - #clean1rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) ≤ #r mx0 - #clean1rows(mx0, i) ⊦ (∀ r. #r mx0 - #clean1rows(mx0, i) ≤ r ∧ r < #r mx0 ∧ even(r) → ¬ mx0[c0]c[r] < i) ∧ #r mx0 - #clean1rows(mx0, i) ≤ #r mx0 ∧ #r mx0 ≤ # mx0[c0]c |
#dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #clean1rows(mx0, i) ≠ 0, #dirtyrows(mx0, i) + #clean1rows(mx0, i) ≠ 0, #clean0rows(mx0, i) < #r mx0, c0 < #c mx0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), mx0[r, c0] < i, r < #r mx0, #clean0rows(mx0, i) < r + #clean1rows(mx0, i), even(r), #clean0rows(mx0, i) ≤ r, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #r mx0 ≤ r + #clean1rows(mx0, i) ⊦
Used simplifier rules: countevn-append-ind: m ≤ n, n ≤ n0, n0 ≤ # a ⊦ countevn(a, m, n, p) + countevn(a, n, n0, p) = countevn(a, m, n0, p); clean1rows-bounded: ⊦ ¬ #r mx < #clean1rows(mx, i); ⊦ 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 ⊦ m < m + n ↔ n ≠ 0; (s) fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat ⊦ m + n ≤ m + n0 ↔ n ≤ n0; (s) let: ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1; (forward) from specification nat ⊦ m ≤ m; (s) ⊦ # mx[c]c = #r mx; (s) ⊦ m ≤ m + n; (s) n0 ≤ n ⊦ n - n0 ≤ m ↔ n ≤ m + n0; (s) ⊦ m ≤ n ↔ ¬ n < m; (ss) ⊦ mx[c]c[r] = mx[r, c]; (s) n0 ≤ n ⊦ m ≤ n - n0 ↔ m + n0 ≤ n; (s)
| #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #clean1rows(mx0, i) ≠ 0, #dirtyrows(mx0, i) + #clean1rows(mx0, i) ≠ 0, #clean0rows(mx0, i) < #r mx0, c0 < #c mx0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), mx0[r, c0] < i, r < #r mx0, #clean0rows(mx0, i) < r + #clean1rows(mx0, i), even(r), #clean0rows(mx0, i) ≤ r, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #r mx0 ≤ r + #clean1rows(mx0, i) ⊦ |
⊦ #r mx ≤ #clean1rows(mx, i) + r ∧ r < #r mx → count(mx[r]r, λ j. j < i) = 0
#dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #clean1rows(mx0, i) ≠ 0, #dirtyrows(mx0, i) + #clean1rows(mx0, i) ≠ 0, #clean0rows(mx0, i) < r + #clean1rows(mx0, i), r < #r mx0, mx0[r, c0] < i, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), c0 < #c mx0, #clean0rows(mx0, i) < #r mx0, even(r), #r mx0 ≤ r + #clean1rows(mx0, i), #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) ≤ r, #r mx0 ≤ #clean1rows(mx0, i) + r ∧ r < #r mx0 → count(mx0[r]r, λ j. j < i) = 0 ⊦
Used terms: mx0, i, r
| ⊦ #r mx ≤ #clean1rows(mx, i) + r ∧ r < #r mx → count(mx[r]r, λ j. j < i) = 0 |
| #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #clean1rows(mx0, i) ≠ 0, #dirtyrows(mx0, i) + #clean1rows(mx0, i) ≠ 0, #clean0rows(mx0, i) < r + #clean1rows(mx0, i), r < #r mx0, mx0[r, c0] < i, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), c0 < #c mx0, #clean0rows(mx0, i) < #r mx0, even(r), #r mx0 ≤ r + #clean1rows(mx0, i), #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) ≤ r, #r mx0 ≤ #clean1rows(mx0, i) + r ∧ r < #r mx0 → count(mx0[r]r, λ j. j < i) = 0 ⊦ |
#dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, count(mx0[r]r, λ j. j < i) = 0, #clean1rows(mx0, i) ≠ 0, #dirtyrows(mx0, i) + #clean1rows(mx0, i) ≠ 0, #clean0rows(mx0, i) < #r mx0, c0 < #c mx0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), mx0[r, c0] < i, r < #r mx0, #clean0rows(mx0, i) < r + #clean1rows(mx0, i), even(r), #clean0rows(mx0, i) ≤ r, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #r mx0 ≤ r + #clean1rows(mx0, i) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic
| #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, count(mx0[r]r, λ j. j < i) = 0, #clean1rows(mx0, i) ≠ 0, #dirtyrows(mx0, i) + #clean1rows(mx0, i) ≠ 0, #clean0rows(mx0, i) < #r mx0, c0 < #c mx0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), mx0[r, c0] < i, r < #r mx0, #clean0rows(mx0, i) < r + #clean1rows(mx0, i), even(r), #clean0rows(mx0, i) ≤ r, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #r mx0 ≤ r + #clean1rows(mx0, i) ⊦ |
⊦ count(x, p) = 0 ↔ (∀ n. n < # x → ¬ p(x[n]))
#dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #clean1rows(mx0, i) ≠ 0, #dirtyrows(mx0, i) + #clean1rows(mx0, i) ≠ 0, #clean0rows(mx0, i) < r + #clean1rows(mx0, i), r < #r mx0, mx0[r, c0] < i, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), c0 < #c mx0, #clean0rows(mx0, i) < #r mx0, even(r), #r mx0 ≤ r + #clean1rows(mx0, i), #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) ≤ r, ∀ n. n < # mx0[r]r → ¬ mx0[r]r[n] < i ⊦
Used terms: mx0[r]r, λ j. j < i
| ⊦ count(x, p) = 0 ↔ (∀ n. n < # x → ¬ p(x[n])) |
| #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #clean1rows(mx0, i) ≠ 0, #dirtyrows(mx0, i) + #clean1rows(mx0, i) ≠ 0, #clean0rows(mx0, i) < r + #clean1rows(mx0, i), r < #r mx0, mx0[r, c0] < i, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), c0 < #c mx0, #clean0rows(mx0, i) < #r mx0, even(r), #r mx0 ≤ r + #clean1rows(mx0, i), #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) ≤ r, ∀ n. n < # mx0[r]r → ¬ mx0[r]r[n] < i ⊦ |
#dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #clean1rows(mx0, i) ≠ 0, #dirtyrows(mx0, i) + #clean1rows(mx0, i) ≠ 0, #clean0rows(mx0, i) < #r mx0, c0 < #c mx0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), mx0[r, c0] < i, r < #r mx0, #clean0rows(mx0, i) < r + #clean1rows(mx0, i), even(r), #clean0rows(mx0, i) ≤ r, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #r mx0 ≤ r + #clean1rows(mx0, i), ∀ n. n < #c mx0 → ¬ mx0[r, n] < i ⊦
Used simplifier rules: ⊦ mx[r]r[c] = mx[r, c]; (s) ⊦ # mx[r]r = #c mx; (s)
| #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #clean1rows(mx0, i) ≠ 0, #dirtyrows(mx0, i) + #clean1rows(mx0, i) ≠ 0, #clean0rows(mx0, i) < #r mx0, c0 < #c mx0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), mx0[r, c0] < i, r < #r mx0, #clean0rows(mx0, i) < r + #clean1rows(mx0, i), even(r), #clean0rows(mx0, i) ≤ r, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #r mx0 ≤ r + #clean1rows(mx0, i), ∀ n. n < #c mx0 → ¬ mx0[r, n] < i ⊦ |
Used terms: c0
| #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, c0 < #c mx0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #r mx0 - #clean1rows(mx0, i), λ j. j < i) + 0, #clean0rows(mx0, i) ≤ #r mx0 - #clean1rows(mx0, i), #r mx0 - #clean1rows(mx0, i) ≤ #r mx0, #r mx0 ≤ # mx0[c0]c, ∀ r. #r mx0 - #clean1rows(mx0, i) ≤ r ∧ r < #r mx0 ∧ even(r) → ¬ mx0[c0]c[r] < i ⊦ |
#dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #r mx0 - #clean1rows(mx0, i), λ j. j < i), c0 < #c mx0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦
Used simplifier rules: clean1rows-bounded: ⊦ ¬ #r mx < #clean1rows(mx, i); ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ mx[c]c[r] = mx[r, c]; (s) n0 ≤ n ⊦ n - n0 ≤ m ↔ n ≤ m + n0; (s) ⊦ 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 ⊦ n + 0 = n; (s) n0 ≤ n ⊦ m ≤ n - n0 ↔ m + n0 ≤ n; (s) ⊦ m ≤ m + n; (s) ⊦ m ≤ m; (s) ⊦ # mx[c]c = #r mx; (s)
| #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #r mx0 - #clean1rows(mx0, i), λ j. j < i), c0 < #c mx0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦ |
#r mx0 = n0 + #clean1rows(mx0, i), #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, c0 < #c mx0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), n0, λ j. j < i), #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ #r mx0, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦
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 mx0, #clean1rows(mx0, i), n0
| #r mx0 = n0 + #clean1rows(mx0, i), #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, c0 < #c mx0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), n0, λ j. j < i), #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ #r mx0, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦ |
#dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), c0 < #c mx0, #clean1rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < 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 eqs: ⊦ m = n + n0 ∧ m = n + n1 → n0 = n1; (forward) from specification nat-basic
| #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), c0 < #c mx0, #clean1rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦ |
m ≤ n, n ≤ # a ⊦ countevn(a, m, n, p) ≤ (even(m) ⊃ (n + 1 - m) / 2;(n - m) / 2)
#dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, c0 < #c mx0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ #r mx0, countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) ≤ (even(#clean0rows(mx0, i)) ⊃ ((#clean0rows(mx0, i) + #dirtyrows(mx0, i)) + 1 - #clean0rows(mx0, i)) / 2 ;(#clean0rows(mx0, i) + #dirtyrows(mx0, i) - #clean0rows(mx0, i)) / 2 ), ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦
Used simplifier rules: ⊦ m ≤ m + n; (s) ⊦ # mx[c]c = #r mx; (s) ⊦ m ≤ n ↔ ¬ n < m; (ss) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat ⊦ m < n → n ≠ 0; (s) ⊦ m + n < m + n0 ↔ n < n0; (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 Used terms: #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), mx0[c0]c, λ j. j < i
| m ≤ n, n ≤ # a ⊦ countevn(a, m, n, p) ≤ (even(m) ⊃ (n + 1 - m) / 2;(n - m) / 2) |
| #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, c0 < #c mx0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ #r mx0, countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) ≤ (even(#clean0rows(mx0, i)) ⊃ ((#clean0rows(mx0, i) + #dirtyrows(mx0, i)) + 1 - #clean0rows(mx0, i)) / 2 ;(#clean0rows(mx0, i) + #dirtyrows(mx0, i) - #clean0rows(mx0, i)) / 2 ), ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦ |
#dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), c0 < #c mx0, #dirtyrows(mx0, i) /↑ 2 < (even(#clean0rows(mx0, i)) ⊃ (#dirtyrows(mx0, i) + 1) / 2;#dirtyrows(mx0, i) / 2), #clean1rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) ≤ (even(#clean0rows(mx0, i)) ⊃ (#dirtyrows(mx0, i) + 1) / 2;#dirtyrows(mx0, i) / 2), ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < 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 c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + n - m = n; (s)
| #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), c0 < #c mx0, #dirtyrows(mx0, i) /↑ 2 < (even(#clean0rows(mx0, i)) ⊃ (#dirtyrows(mx0, i) + 1) / 2;#dirtyrows(mx0, i) / 2), #clean1rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) ≤ (even(#clean0rows(mx0, i)) ⊃ (#dirtyrows(mx0, i) + 1) / 2;#dirtyrows(mx0, i) / 2), ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦ |
#dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, c0 < #c mx0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), #dirtyrows(mx0, i) /↑ 2 < (#dirtyrows(mx0, i) + 1) / 2, even(#clean0rows(mx0, i)), countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) ≤ (even(#clean0rows(mx0, i)) ⊃ (#dirtyrows(mx0, i) + 1) / 2;#dirtyrows(mx0, i) / 2), #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ #r mx0, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦
#dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, c0 < #c mx0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), #dirtyrows(mx0, i) /↑ 2 < #dirtyrows(mx0, i) / 2, countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) ≤ (even(#clean0rows(mx0, i)) ⊃ (#dirtyrows(mx0, i) + 1) / 2;#dirtyrows(mx0, i) / 2), #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ #r mx0, ¬ even(#clean0rows(mx0, i)), ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦
| #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, c0 < #c mx0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), #dirtyrows(mx0, i) /↑ 2 < (#dirtyrows(mx0, i) + 1) / 2, even(#clean0rows(mx0, i)), countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) ≤ (even(#clean0rows(mx0, i)) ⊃ (#dirtyrows(mx0, i) + 1) / 2;#dirtyrows(mx0, i) / 2), #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ #r mx0, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦ |
#dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) ≠ 0, c0 < #c mx0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), #dirtyrows(mx0, i) /↑ 2 < (#dirtyrows(mx0, i) + 1) / 2, even(#clean0rows(mx0, i)), countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ #dirtyrows(mx0, i) + 1, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ #r mx0, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦
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 + 1 ↔ m = 0; (s) ⊦ m + 1 ≠ 0; (s) ⊦ m / 2 = 0 ↔ m = 0 ∨ m = 1; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic m0 ≠ 0 ⊦ n ≤ m / m0 ↔ n * m0 ≤ m; (s)
| #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) ≠ 0, c0 < #c mx0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), #dirtyrows(mx0, i) /↑ 2 < (#dirtyrows(mx0, i) + 1) / 2, even(#clean0rows(mx0, i)), countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ #dirtyrows(mx0, i) + 1, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ #r mx0, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦ |
#dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) + 1 = m0 * 2 + n0, #dirtyrows(mx0, i) ≠ 0, 2 ≠ 0, #dirtyrows(mx0, i) /↑ 2 < m0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), c0 < #c mx0, n0 < 2, even(#clean0rows(mx0, i)), #clean1rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ #dirtyrows(mx0, i) + 1, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦
Used simplifier rules: n ≠ 0 ⊦ m0 = m / n ∧ n0 = m % n ↔ m = m0 * n + n0 ∧ n0 < n; (elim) Used terms: #dirtyrows(mx0, i) + 1, 2, m0, n0
| #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) + 1 = m0 * 2 + n0, #dirtyrows(mx0, i) ≠ 0, 2 ≠ 0, #dirtyrows(mx0, i) /↑ 2 < m0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), c0 < #c mx0, n0 < 2, even(#clean0rows(mx0, i)), #clean1rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ #dirtyrows(mx0, i) + 1, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦ |
#dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) + 1 = m0 * 2 + n0, #dirtyrows(mx0, i) ≠ 0, #dirtyrows(mx0, i) /↑ 2 < m0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), c0 < #c mx0, n0 < 2, even(#clean0rows(mx0, i)), #clean1rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ m0 * 2 + n0, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) + 1 = m0 * 2 + n0, #dirtyrows(mx0, i) ≠ 0, #dirtyrows(mx0, i) /↑ 2 < m0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), c0 < #c mx0, n0 < 2, even(#clean0rows(mx0, i)), #clean1rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ m0 * 2 + n0, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦ |
⊦ m /↑ n = (∃ n0. m = n0 * n ⊃ m / n;m / n + 1)
#dirtyrows(mx0, i) + 1 = m0 * 2 + n0, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) ≠ 0, n0 < 2, c0 < #c mx0, even(#clean0rows(mx0, i)), countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ m0 * 2 + n0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ #r mx0, (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ #dirtyrows(mx0, i) / 2;#dirtyrows(mx0, i) / 2 + 1) < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ #dirtyrows(mx0, i) / 2;#dirtyrows(mx0, i) / 2 + 1) < m0, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦
Used terms: #dirtyrows(mx0, i), 2
| ⊦ m /↑ n = (∃ n0. m = n0 * n ⊃ m / n;m / n + 1) |
| #dirtyrows(mx0, i) + 1 = m0 * 2 + n0, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) ≠ 0, n0 < 2, c0 < #c mx0, even(#clean0rows(mx0, i)), countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ m0 * 2 + n0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ #r mx0, (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ #dirtyrows(mx0, i) / 2;#dirtyrows(mx0, i) / 2 + 1) < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ #dirtyrows(mx0, i) / 2;#dirtyrows(mx0, i) / 2 + 1) < m0, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦ |
#dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) + 1 = m0 * 2 + n0, #dirtyrows(mx0, i) ≠ 0, c0 < #c mx0, n0 < 2, #dirtyrows(mx0, i) / 2 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), even(#clean0rows(mx0, i)), #clean1rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ m0 * 2 + n0, (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ #dirtyrows(mx0, i) / 2;#dirtyrows(mx0, i) / 2 + 1) < m0, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2 ⊦
Used simplifier rules: f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ n0 < n ∧ n1 < n → (m * n + n0 = m0 * n + n1 ↔ m = m0 ∧ n0 = n1); (ws) ⊦ m < n → n ≠ 0; (s) ⊦ 2 * m = 0 ↔ m = 0; (s) ⊦ (2 * m) / 2 = m; (s) lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic ⊦ 2 * n ≤ 2 * m + 1 ↔ n ≤ m; (s) ⊦ 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 mult-a: ⊦ m0 * m * n = (m0 * m) * n; from specification nat-mult mult-c: ⊦ m * n = n * m; from specification nat-mult
| #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) + 1 = m0 * 2 + n0, #dirtyrows(mx0, i) ≠ 0, c0 < #c mx0, n0 < 2, #dirtyrows(mx0, i) / 2 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), even(#clean0rows(mx0, i)), #clean1rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ m0 * 2 + n0, (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ #dirtyrows(mx0, i) / 2;#dirtyrows(mx0, i) / 2 + 1) < m0, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2 ⊦ |
#dirtyrows(mx0, i) = m1 * 2 + n1, #dirtyrows(mx0, i) + 1 = m0 * 2 + n0, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) ≠ 0, 2 ≠ 0, m1 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), n0 < 2, c0 < #c mx0, n1 < 2, even(#clean0rows(mx0, i)), countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ m0 * 2 + n0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ #r mx0, (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ m1;m1 + 1) < m0, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦
Used simplifier rules: n ≠ 0 ⊦ m0 = m / n ∧ n0 = m % n ↔ m = m0 * n + n0 ∧ n0 < n; (elim) Used terms: #dirtyrows(mx0, i), 2, m, n
| #dirtyrows(mx0, i) = m1 * 2 + n1, #dirtyrows(mx0, i) + 1 = m0 * 2 + n0, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) ≠ 0, 2 ≠ 0, m1 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), n0 < 2, c0 < #c mx0, n1 < 2, even(#clean0rows(mx0, i)), countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ m0 * 2 + n0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ #r mx0, (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ m1;m1 + 1) < m0, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦ |
#dirtyrows(mx0, i) = m1 * 2 + n1, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) + 1 = m0 * 2 + n0, #dirtyrows(mx0, i) ≠ 0, n1 < 2, c0 < #c mx0, n0 < 2, m1 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), even(#clean0rows(mx0, i)), #clean1rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ m0 * 2 + n0, (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ m1;m1 + 1) < m0, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2 ⊦
| #dirtyrows(mx0, i) = m1 * 2 + n1, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) + 1 = m0 * 2 + n0, #dirtyrows(mx0, i) ≠ 0, n1 < 2, c0 < #c mx0, n0 < 2, m1 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), even(#clean0rows(mx0, i)), #clean1rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ m0 * 2 + n0, (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ m1;m1 + 1) < m0, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2 ⊦ |
#dirtyrows(mx0, i) = m1 * 2 + n1, #dirtyrows(mx0, i) + 1 = m0 * 2 + n0, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, n0 = 0, #dirtyrows(mx0, i) ≠ 0, m1 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), n0 < 2, c0 < #c mx0, n1 < 2, even(#clean0rows(mx0, i)), countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ m0 * 2 + n0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ #r mx0, (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ m1;m1 + 1) < m0, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦
Used simplifier rules: nat freely generated by 0, +1;; ⊦ m + n = m + n0 ↔ n = n0; (s) ⊦ m +1 = m + 1; (s) n < n0 ⊦ m + (* n) < (* n0) ↔ m < n0 - n; (s) ⊦ m < 1 ↔ m = 0; (s) ⊦ n + 0 = n; (s) ⊦ 2 * n ≤ 2 * m + 1 ↔ n ≤ m; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat ⊦ n0 < n → (m * n + n0 = m0 * n ↔ m = m0 ∧ n0 = 0); (ws) ⊦ 2 * m = 0 ↔ m = 0; (s) ⊦ m < n → n ≠ 0; (s) mult-a: ⊦ m0 * m * n = (m0 * m) * n; from specification nat-mult mult-c: ⊦ m * n = n * m; from specification nat-mult 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 ⊦ 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
| #dirtyrows(mx0, i) = m1 * 2 + n1, #dirtyrows(mx0, i) + 1 = m0 * 2 + n0, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, n0 = 0, #dirtyrows(mx0, i) ≠ 0, m1 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), n0 < 2, c0 < #c mx0, n1 < 2, even(#clean0rows(mx0, i)), countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ m0 * 2 + n0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ #r mx0, (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ m1;m1 + 1) < m0, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦ |
#dirtyrows(mx0, i) = m1 * 2 + n1, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) + 1 = m0 * 2, #dirtyrows(mx0, i) ≠ 0, n1 < 2, c0 < #c mx0, m1 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), m1 + 1 < m0, even(#clean0rows(mx0, i)), #clean1rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) ≤ m0, (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ m1;m1 + 1) < m0, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2 ⊦
Used simplifier rules: fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat mult-c: ⊦ m * n = n * m; from specification nat-mult mult-a: ⊦ m0 * m * n = (m0 * m) * n; from specification nat-mult 0 ≠ m ⊦ (* m) * n ≤ m * n0 ↔ n ≤ n0; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ n + 0 = n; (s)
| #dirtyrows(mx0, i) = m1 * 2 + n1, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) + 1 = m0 * 2, #dirtyrows(mx0, i) ≠ 0, n1 < 2, c0 < #c mx0, m1 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), m1 + 1 < m0, even(#clean0rows(mx0, i)), #clean1rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) ≤ m0, (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ m1;m1 + 1) < m0, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2 ⊦ |
#dirtyrows(mx0, i) = m1 * 2 + n1, #dirtyrows(mx0, i) + 1 = m0 * 2, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, n1 = n2 +1, #dirtyrows(mx0, i) ≠ 0, m1 + 1 < m0, m1 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), c0 < #c mx0, n1 < 2, even(#clean0rows(mx0, i)), countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) ≤ m0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ #r mx0, (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ m1;m1 + 1) < m0, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦
Used simplifier rules: nat freely generated by 0, +1;; ⊦ n + 0 = n; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ n0 < n → (m * n + n0 = m0 * n ↔ m = m0 ∧ n0 = 0); (ws) mult-a: ⊦ m0 * m * n = (m0 * m) * n; from specification nat-mult mult-c: ⊦ m * n = n * m; from specification nat-mult a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
| #dirtyrows(mx0, i) = m1 * 2 + n1, #dirtyrows(mx0, i) + 1 = m0 * 2, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, n1 = n2 +1, #dirtyrows(mx0, i) ≠ 0, m1 + 1 < m0, m1 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), c0 < #c mx0, n1 < 2, even(#clean0rows(mx0, i)), countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) ≤ m0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ #r mx0, (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ m1;m1 + 1) < m0, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦ |
#dirtyrows(mx0, i) = 1 + m1 * 2, #dirtyrows(mx0, i) + 1 = m0 * 2, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) ≠ 0, m1 + 1 < m0, m1 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), c0 < #c mx0, even(#clean0rows(mx0, i)), countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) ≤ m0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ #r mx0, (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ m1;m1 + 1) < m0, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦
Used simplifier rules: a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ m < 1 ↔ m = 0; (s) n < n0 ⊦ m + (* n) < (* n0) ↔ m < n0 - n; (s) ⊦ m +1 = m + 1; (s)
| #dirtyrows(mx0, i) = 1 + m1 * 2, #dirtyrows(mx0, i) + 1 = m0 * 2, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) ≠ 0, m1 + 1 < m0, m1 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), c0 < #c mx0, even(#clean0rows(mx0, i)), countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) ≤ m0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ #r mx0, (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ m1;m1 + 1) < m0, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦ |
#dirtyrows(mx0, i) = 1 + m1 * 2, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) + 1 = m0 * 2, m0 = m +1, #dirtyrows(mx0, i) ≠ 0, c0 < #c mx0, m1 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), m1 + 1 < m0, even(#clean0rows(mx0, i)), #clean1rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) ≤ m0, (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ m1;m1 + 1) < m0, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2 ⊦
Used simplifier rules: nat freely generated by 0, +1;; mult-a: ⊦ m0 * m * n = (m0 * m) * n; from specification nat-mult mult-c: ⊦ m * n = n * m; from specification nat-mult ⊦ m + n = 0 ↔ m = 0 ∧ n = 0; (ws) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
| #dirtyrows(mx0, i) = 1 + m1 * 2, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) + 1 = m0 * 2, m0 = m +1, #dirtyrows(mx0, i) ≠ 0, c0 < #c mx0, m1 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), m1 + 1 < m0, even(#clean0rows(mx0, i)), #clean1rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) ≤ m0, (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ m1;m1 + 1) < m0, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2 ⊦ |
#dirtyrows(mx0, i) = m1 * 2 + 1, 2 * m = m1 * 2, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) ≠ 0, c0 < #c mx0, m1 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), m1 < m, even(#clean0rows(mx0, i)), #clean1rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) ≤ m + 1, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2, (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ m1;m1 + 1) ≤ m ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic eqs: ⊦ m = n + n0 ∧ m = n + n1 → n0 = n1; (forward) from specification nat-basic ⊦ m + n < m + n0 ↔ n < n0; (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 ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ m +1 = m + 1; (s) n < n0 ⊦ m + (* n) = m0 + (* n0) ↔ m = m0 + (n0 - n); (s) mult-c: ⊦ m * n = n * m; from specification nat-mult mult-a: ⊦ m0 * m * n = (m0 * m) * n; from specification nat-mult ⊦ m * (n + 1) = m * n + m; (s)
| #dirtyrows(mx0, i) = m1 * 2 + 1, 2 * m = m1 * 2, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) ≠ 0, c0 < #c mx0, m1 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), m1 < m, even(#clean0rows(mx0, i)), #clean1rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) ≤ m + 1, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2, (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ m1;m1 + 1) ≤ m ⊦ |
⊦ m * n = n * m
#dirtyrows(mx0, i) = 2 * m1 + 1, 2 * m = 2 * m1, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) ≠ 0, m1 < m, m1 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), c0 < #c mx0, even(#clean0rows(mx0, i)), countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) ≤ m + 1, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ #r mx0, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i, (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ m1;m1 + 1) ≤ m ⊦
Used terms: m1, 2
| ⊦ m * n = n * m |
| #dirtyrows(mx0, i) = 2 * m1 + 1, 2 * m = 2 * m1, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) ≠ 0, m1 < m, m1 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), c0 < #c mx0, even(#clean0rows(mx0, i)), countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) ≤ m + 1, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ #r mx0, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i, (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ m1;m1 + 1) ≤ m ⊦ |
⊦ m * n = m * n0 ↔ m = 0 ∨ n = n0
Used simplifier rules: 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 ⊦ m < n → ¬ n < m; (s) Used terms: 2, m, m1
| ⊦ m * n = m * n0 ↔ m = 0 ∨ n = n0 |
| #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, c0 < #c mx0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), #dirtyrows(mx0, i) /↑ 2 < #dirtyrows(mx0, i) / 2, countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) ≤ (even(#clean0rows(mx0, i)) ⊃ (#dirtyrows(mx0, i) + 1) / 2;#dirtyrows(mx0, i) / 2), #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ #r mx0, ¬ even(#clean0rows(mx0, i)), ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦ |
#dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) ≠ 0, #dirtyrows(mx0, i) ≠ 1, c0 < #c mx0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), #dirtyrows(mx0, i) /↑ 2 < #dirtyrows(mx0, i) / 2, odd(#clean0rows(mx0, i)), countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ #dirtyrows(mx0, i), #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ #r mx0, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦
Used simplifier rules: ⊦ m / 2 = 0 ↔ m = 0 ∨ m = 1; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ even(n) ↔ ¬ odd(n); (ss) m0 ≠ 0 ⊦ n ≤ m / m0 ↔ n * m0 ≤ m; (s)
| #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) ≠ 0, #dirtyrows(mx0, i) ≠ 1, c0 < #c mx0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), #dirtyrows(mx0, i) /↑ 2 < #dirtyrows(mx0, i) / 2, odd(#clean0rows(mx0, i)), countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ #dirtyrows(mx0, i), #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ #r mx0, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦ |
#dirtyrows(mx0, i) = m0 * 2 + n0, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) ≠ 0, #dirtyrows(mx0, i) ≠ 1, 2 ≠ 0, #dirtyrows(mx0, i) /↑ 2 < m0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), c0 < #c mx0, n0 < 2, odd(#clean0rows(mx0, i)), #clean1rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ #dirtyrows(mx0, i), ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦
Used simplifier rules: n ≠ 0 ⊦ m0 = m / n ∧ n0 = m % n ↔ m = m0 * n + n0 ∧ n0 < n; (elim) Used terms: #dirtyrows(mx0, i), 2, m0, n0
| #dirtyrows(mx0, i) = m0 * 2 + n0, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) ≠ 0, #dirtyrows(mx0, i) ≠ 1, 2 ≠ 0, #dirtyrows(mx0, i) /↑ 2 < m0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), c0 < #c mx0, n0 < 2, odd(#clean0rows(mx0, i)), #clean1rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ #dirtyrows(mx0, i), ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦ |
#dirtyrows(mx0, i) = m0 * 2 + n0, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) ≠ 1, #dirtyrows(mx0, i) ≠ 0, #dirtyrows(mx0, i) /↑ 2 < m0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), c0 < #c mx0, n0 < 2, odd(#clean0rows(mx0, i)), #clean1rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ #dirtyrows(mx0, i), ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| #dirtyrows(mx0, i) = m0 * 2 + n0, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) ≠ 1, #dirtyrows(mx0, i) ≠ 0, #dirtyrows(mx0, i) /↑ 2 < m0, #dirtyrows(mx0, i) /↑ 2 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), c0 < #c mx0, n0 < 2, odd(#clean0rows(mx0, i)), #clean1rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ #dirtyrows(mx0, i), ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦ |
⊦ m /↑ n = (∃ n0. m = n0 * n ⊃ m / n;m / n + 1)
#dirtyrows(mx0, i) = m0 * 2 + n0, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) ≠ 1, #dirtyrows(mx0, i) ≠ 0, n0 < 2, c0 < #c mx0, odd(#clean0rows(mx0, i)), countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ #dirtyrows(mx0, i), #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ #r mx0, (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ #dirtyrows(mx0, i) / 2;#dirtyrows(mx0, i) / 2 + 1) < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ #dirtyrows(mx0, i) / 2;#dirtyrows(mx0, i) / 2 + 1) < m0, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦
Used terms: #dirtyrows(mx0, i), 2
| ⊦ m /↑ n = (∃ n0. m = n0 * n ⊃ m / n;m / n + 1) |
| #dirtyrows(mx0, i) = m0 * 2 + n0, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) ≠ 1, #dirtyrows(mx0, i) ≠ 0, n0 < 2, c0 < #c mx0, odd(#clean0rows(mx0, i)), countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ #dirtyrows(mx0, i), #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ #r mx0, (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ #dirtyrows(mx0, i) / 2;#dirtyrows(mx0, i) / 2 + 1) < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ #dirtyrows(mx0, i) / 2;#dirtyrows(mx0, i) / 2 + 1) < m0, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦ |
#dirtyrows(mx0, i) = m0 * 2 + n0, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) ≠ 1, #dirtyrows(mx0, i) ≠ 0, c0 < #c mx0, n0 < 2, #dirtyrows(mx0, i) / 2 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), odd(#clean0rows(mx0, i)), #clean1rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ #dirtyrows(mx0, i), (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ #dirtyrows(mx0, i) / 2;#dirtyrows(mx0, i) / 2 + 1) < m0, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2 ⊦
Used simplifier rules: f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ n0 < n → (m * n + n0 = m0 * n ↔ m = m0 ∧ n0 = 0); (ws) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ m < n → n ≠ 0; (s) ⊦ 2 * m = 0 ↔ m = 0; (s) ⊦ 2 * m ≠ 1; (s) ⊦ (2 * m) / 2 = m; (s) 0 ≠ m ⊦ (* m) * n ≤ m * n0 ↔ n ≤ n0; (s) ⊦ m < n → (n ≤ m ↔ false); (s) mult-a: ⊦ m0 * m * n = (m0 * m) * n; from specification nat-mult mult-c: ⊦ m * n = n * m; from specification nat-mult
| #dirtyrows(mx0, i) = m0 * 2 + n0, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) ≠ 1, #dirtyrows(mx0, i) ≠ 0, c0 < #c mx0, n0 < 2, #dirtyrows(mx0, i) / 2 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), odd(#clean0rows(mx0, i)), #clean1rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ #dirtyrows(mx0, i), (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ #dirtyrows(mx0, i) / 2;#dirtyrows(mx0, i) / 2 + 1) < m0, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2 ⊦ |
#dirtyrows(mx0, i) = m0 * 2 + n0, #dirtyrows(mx0, i) = m1 * 2 + n1, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) ≠ 1, #dirtyrows(mx0, i) ≠ 0, 2 ≠ 0, m1 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), n0 < 2, c0 < #c mx0, n1 < 2, odd(#clean0rows(mx0, i)), countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ #dirtyrows(mx0, i), #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ #r mx0, (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ m1;m1 + 1) < m0, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦
Used simplifier rules: n ≠ 0 ⊦ m0 = m / n ∧ n0 = m % n ↔ m = m0 * n + n0 ∧ n0 < n; (elim) Used terms: #dirtyrows(mx0, i), 2, m, n
| #dirtyrows(mx0, i) = m0 * 2 + n0, #dirtyrows(mx0, i) = m1 * 2 + n1, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) ≠ 1, #dirtyrows(mx0, i) ≠ 0, 2 ≠ 0, m1 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), n0 < 2, c0 < #c mx0, n1 < 2, odd(#clean0rows(mx0, i)), countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ #dirtyrows(mx0, i), #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ #r mx0, (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ m1;m1 + 1) < m0, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦ |
#dirtyrows(mx0, i) = m1 * 2 + n1, #dirtyrows(mx0, i) = m0 * 2 + n0, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) ≠ 1, #dirtyrows(mx0, i) ≠ 0, n1 < 2, c0 < #c mx0, n0 < 2, m1 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), odd(#clean0rows(mx0, i)), #clean1rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ #dirtyrows(mx0, i), (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ m1;m1 + 1) < m0, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2 ⊦
| #dirtyrows(mx0, i) = m1 * 2 + n1, #dirtyrows(mx0, i) = m0 * 2 + n0, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) ≠ 1, #dirtyrows(mx0, i) ≠ 0, n1 < 2, c0 < #c mx0, n0 < 2, m1 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), odd(#clean0rows(mx0, i)), #clean1rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ #dirtyrows(mx0, i), (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ m1;m1 + 1) < m0, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2 ⊦ |
#dirtyrows(mx0, i) = m0 * 2 + n0, #dirtyrows(mx0, i) = m1 * 2 + n1, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, n0 = n +1, #dirtyrows(mx0, i) ≠ 1, #dirtyrows(mx0, i) ≠ 0, m1 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), n0 < 2, c0 < #c mx0, n1 < 2, odd(#clean0rows(mx0, i)), countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ #dirtyrows(mx0, i), #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ #r mx0, (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ m1;m1 + 1) < m0, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦
Used simplifier rules: nat freely generated by 0, +1;; ⊦ n + 0 = n; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ n0 < n → (m * n + n0 = m0 * n ↔ m = m0 ∧ n0 = 0); (ws) ⊦ 2 * m = 0 ↔ m = 0; (s) ⊦ 2 * m ≠ 1; (s) 0 ≠ m ⊦ (* m) * n ≤ m * n0 ↔ n ≤ n0; (s) mult-a: ⊦ m0 * m * n = (m0 * m) * n; from specification nat-mult mult-c: ⊦ m * n = n * m; from specification nat-mult lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat ⊦ 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
| #dirtyrows(mx0, i) = m0 * 2 + n0, #dirtyrows(mx0, i) = m1 * 2 + n1, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, n0 = n +1, #dirtyrows(mx0, i) ≠ 1, #dirtyrows(mx0, i) ≠ 0, m1 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), n0 < 2, c0 < #c mx0, n1 < 2, odd(#clean0rows(mx0, i)), countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ #dirtyrows(mx0, i), #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ #r mx0, (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ m1;m1 + 1) < m0, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦ |
#dirtyrows(mx0, i) = m1 * 2 + n1, #dirtyrows(mx0, i) = 1 + m0 * 2, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) ≠ 0, #dirtyrows(mx0, i) ≠ 1, c0 < #c mx0, n1 < 2, m1 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), odd(#clean0rows(mx0, i)), countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ #dirtyrows(mx0, i), #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ #r mx0, (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ m1;m1 + 1) < m0, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦
Used simplifier rules: a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ m < 1 ↔ m = 0; (s) n < n0 ⊦ m + (* n) < (* n0) ↔ m < n0 - n; (s) ⊦ m +1 = m + 1; (s)
| #dirtyrows(mx0, i) = m1 * 2 + n1, #dirtyrows(mx0, i) = 1 + m0 * 2, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) ≠ 0, #dirtyrows(mx0, i) ≠ 1, c0 < #c mx0, n1 < 2, m1 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), odd(#clean0rows(mx0, i)), countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ #dirtyrows(mx0, i), #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ #r mx0, (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ m1;m1 + 1) < m0, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦ |
#dirtyrows(mx0, i) = 1 + m0 * 2, #dirtyrows(mx0, i) = m1 * 2 + n1, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, n1 = n2 +1, #dirtyrows(mx0, i) ≠ 0, #dirtyrows(mx0, i) ≠ 1, m1 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), n1 < 2, c0 < #c mx0, odd(#clean0rows(mx0, i)), #clean1rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ #dirtyrows(mx0, i), (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ m1;m1 + 1) < m0, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2 ⊦
Used simplifier rules: nat freely generated by 0, +1;; ⊦ n + 0 = n; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ n0 < n → (m * n + n0 = m0 * n ↔ m = m0 ∧ n0 = 0); (ws) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic mult-a: ⊦ m0 * m * n = (m0 * m) * n; from specification nat-mult mult-c: ⊦ m * n = n * m; from specification nat-mult
| #dirtyrows(mx0, i) = 1 + m0 * 2, #dirtyrows(mx0, i) = m1 * 2 + n1, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, n1 = n2 +1, #dirtyrows(mx0, i) ≠ 0, #dirtyrows(mx0, i) ≠ 1, m1 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), n1 < 2, c0 < #c mx0, odd(#clean0rows(mx0, i)), #clean1rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ #dirtyrows(mx0, i), (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ m1;m1 + 1) < m0, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2 ⊦ |
#dirtyrows(mx0, i) = 1 + m0 * 2, m1 * 2 = m0 * 2, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) ≠ 0, #dirtyrows(mx0, i) ≠ 1, m1 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), c0 < #c mx0, odd(#clean0rows(mx0, i)), countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ #dirtyrows(mx0, i), #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ #r mx0, (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ m1;m1 + 1) < m0, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦
Used simplifier rules: a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ n + 0 = n; (s) eqs: ⊦ m = n + n0 ∧ m = n + n1 → n0 = n1; (forward) from specification nat-basic ⊦ m < 1 ↔ m = 0; (s) n < n0 ⊦ m + (* n) < (* n0) ↔ m < n0 - n; (s) ⊦ m +1 = m + 1; (s)
| #dirtyrows(mx0, i) = 1 + m0 * 2, m1 * 2 = m0 * 2, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) ≠ 0, #dirtyrows(mx0, i) ≠ 1, m1 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), c0 < #c mx0, odd(#clean0rows(mx0, i)), countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ #dirtyrows(mx0, i), #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ #r mx0, (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ m1;m1 + 1) < m0, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦ |
⊦ m0 ≠ 0 → (m * m0 = n * m0 ↔ m = n)
#dirtyrows(mx0, i) = 1 + m0 * 2, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, m1 = m0, #dirtyrows(mx0, i) ≠ 0, #dirtyrows(mx0, i) ≠ 1, 2 ≠ 0, c0 < #c mx0, m1 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), odd(#clean0rows(mx0, i)), #clean1rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ #dirtyrows(mx0, i), (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ m1;m1 + 1) < m0, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2 ⊦
Used terms: m1, 2, m0
| ⊦ m0 ≠ 0 → (m * m0 = n * m0 ↔ m = n) |
| #dirtyrows(mx0, i) = 1 + m0 * 2, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, m1 = m0, #dirtyrows(mx0, i) ≠ 0, #dirtyrows(mx0, i) ≠ 1, 2 ≠ 0, c0 < #c mx0, m1 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), odd(#clean0rows(mx0, i)), #clean1rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ #dirtyrows(mx0, i), (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ m1;m1 + 1) < m0, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2 ⊦ |
#dirtyrows(mx0, i) = 1 + m0 * 2, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) ≠ 0, #dirtyrows(mx0, i) ≠ 1, m0 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), c0 < #c mx0, odd(#clean0rows(mx0, i)), countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ #dirtyrows(mx0, i), #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ #r mx0, (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ m0;m0 + 1) < m0, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦
| #dirtyrows(mx0, i) = 1 + m0 * 2, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) ≠ 0, #dirtyrows(mx0, i) ≠ 1, m0 + 1 < countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i), c0 < #c mx0, odd(#clean0rows(mx0, i)), countevn(mx0[c0]c, #clean0rows(mx0, i), #clean0rows(mx0, i) + #dirtyrows(mx0, i), λ j. j < i) * 2 ≤ #dirtyrows(mx0, i), #clean0rows(mx0, i) + #clean1rows(mx0, i) ≤ #r mx0, #clean1rows(mx0, i) ≤ #r mx0, (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ m0;m0 + 1) < m0, ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2, ∀ r. #r mx0 ≤ r + #clean1rows(mx0, i) ∧ r < #r mx0 ∧ even(r) → ¬ mx0[r, c0] < i ⊦ |
Used simplifier rules: ⊦ ¬ m + n < m; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ ¬ n < n; (s)
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.