| #r mx0 = #r mx, #c mx0 = #c mx, #c mx ≠ 0 ⊦ scolsorted(mx, #c mx, mx0) ∧ mx0.dirtyrows≤(bound) ∧ srowsorted(mx0, #r mx0, mx0) → mx.dirtyrows≤(bound /↑ 2) |
#c mx0 = #c mx, #r mx0 = #r mx, #c mx ≠ 0, mx0.dirtyrows≤(bound), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx0, mx0), ¬ mx.dirtyrows≤(bound /↑ 2) ⊦
| #c mx0 = #c mx, #r mx0 = #r mx, #c mx ≠ 0, mx0.dirtyrows≤(bound), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx0, mx0), ¬ mx.dirtyrows≤(bound /↑ 2) ⊦ |
⊦ mx.dirtyrows≤(bound) ↔ (∀ i. #dirtyrows(mx, i) ≤ bound)
#c mx0 = #c mx, #r mx0 = #r mx, #c mx ≠ 0, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx0, mx0), ¬ mx.dirtyrows≤(bound /↑ 2), ∀ i. #dirtyrows(mx0, i) ≤ bound ⊦
Used terms: mx0, bound
| ⊦ mx.dirtyrows≤(bound) ↔ (∀ i. #dirtyrows(mx, i) ≤ bound) |
| #c mx0 = #c mx, #r mx0 = #r mx, #c mx ≠ 0, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx0, mx0), ¬ mx.dirtyrows≤(bound /↑ 2), ∀ i. #dirtyrows(mx0, i) ≤ bound ⊦ |
#c mx0 = #c mx, #r mx0 = #r mx, #c mx ≠ 0, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), ¬ mx.dirtyrows≤(bound /↑ 2), ∀ i. #dirtyrows(mx0, i) ≤ bound ⊦
| #c mx0 = #c mx, #r mx0 = #r mx, #c mx ≠ 0, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), ¬ mx.dirtyrows≤(bound /↑ 2), ∀ i. #dirtyrows(mx0, i) ≤ bound ⊦ |
⊦ mx.dirtyrows≤(bound) ↔ (∀ i. #dirtyrows(mx, i) ≤ bound)
#c mx0 = #c mx, #r mx0 = #r mx, #c mx ≠ 0, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), ∀ i. #dirtyrows(mx0, i) ≤ bound, ∃ i. ¬ #dirtyrows(mx, i) ≤ bound /↑ 2 ⊦
Used terms: mx, bound /↑ 2
| ⊦ mx.dirtyrows≤(bound) ↔ (∀ i. #dirtyrows(mx, i) ≤ bound) |
| #c mx0 = #c mx, #r mx0 = #r mx, #c mx ≠ 0, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), ∀ i. #dirtyrows(mx0, i) ≤ bound, ∃ i. ¬ #dirtyrows(mx, i) ≤ bound /↑ 2 ⊦ |
#c mx0 = #c mx, #r mx0 = #r mx, #c mx ≠ 0, bound /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), ∀ i. #dirtyrows(mx0, i) ≤ bound ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m ≤ n ↔ ¬ n < m; (ss)
| #c mx0 = #c mx, #r mx0 = #r mx, #c mx ≠ 0, bound /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), ∀ i. #dirtyrows(mx0, i) ≤ bound ⊦ |
#c mx0 = #c mx, #r mx0 = #r mx, #c mx ≠ 0, bound /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ bound ⊦
Used terms: i
| #c mx0 = #c mx, #r mx0 = #r mx, #c mx ≠ 0, bound /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ bound ⊦ |
⊦ #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx
#c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, bound /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ bound ⊦
Used terms: i, mx
| ⊦ #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx |
| #c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, bound /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ bound ⊦ |
⊦ #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx
#c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #c mx ≠ 0, bound /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ bound ⊦
Used terms: i, mx0
| ⊦ #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx |
| #c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #c mx ≠ 0, bound /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ bound ⊦ |
#c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, bound /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ bound ⊦
| #c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, bound /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ bound ⊦ |
#c mx ≠ 0 ⊦ ∃ c. c < #c mx ∧ (∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i))
#c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #c mx ≠ 0, bound /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ bound, ∃ c. c < #c mx ∧ (∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i)) ⊦
Used terms: mx, i
| #c mx ≠ 0 ⊦ ∃ c. c < #c mx ∧ (∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i)) |
| #c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #c mx ≠ 0, bound /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ bound, ∃ c. c < #c mx ∧ (∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i)) ⊦ |
#c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, bound /↑ 2 < #dirtyrows(mx, i), c < #c mx, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ bound, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i) ⊦
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
| #c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, bound /↑ 2 < #dirtyrows(mx, i), c < #c mx, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ bound, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i) ⊦ |
#r mx = #r mx0, #c mx = #c mx0, c0 < #c mx, srowsorted(mx0, #r mx0, mx0), scolsorted(mx, #c mx, mx0), ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i) ⊦ #clean0rows(mx, i) ≥ #clean0rows(mx0, i) + min (countevn(mx0[c0]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c0]c, #clean0rows(mx0, i), #r mx, λ j. j < i))
#c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, c < #c mx, bound /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ bound, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i) ⊦ #r mx = #r mx0 ∧ #c mx = #c mx0 ∧ srowsorted(mx0, #r mx0, mx0) ∧ (∀ c1. c1 < #c mx → count(mx[c1]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i))
#c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, c < #c mx, bound /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ bound, #clean0rows(mx, i) ≥ #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i) ⊦
Used terms: mx, mx0, c, i
| #r mx = #r mx0, #c mx = #c mx0, c0 < #c mx, srowsorted(mx0, #r mx0, mx0), scolsorted(mx, #c mx, mx0), ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i) ⊦ #clean0rows(mx, i) ≥ #clean0rows(mx0, i) + min (countevn(mx0[c0]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c0]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) |
| #c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, c < #c mx, bound /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ bound, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i) ⊦ #r mx = #r mx0 ∧ #c mx = #c mx0 ∧ srowsorted(mx0, #r mx0, mx0) ∧ (∀ c1. c1 < #c mx → count(mx[c1]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i)) |
#c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, count(mx[c]c, λ j. j < i) < count(mx[c1]c, λ j. j < i), c1 < #c mx, bound /↑ 2 < #dirtyrows(mx, i), c < #c mx, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ bound, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i) ⊦
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 ⊦ m ≤ n ↔ ¬ n < m; (ss)
| #c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, count(mx[c]c, λ j. j < i) < count(mx[c1]c, λ j. j < i), c1 < #c mx, bound /↑ 2 < #dirtyrows(mx, i), c < #c mx, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ bound, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i) ⊦ |
Used simplifier rules: ⊦ m < n → (n ≤ m ↔ false); (s) Used terms: c1
| #c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, c < #c mx, bound /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ bound, #clean0rows(mx, i) ≥ #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i) ⊦ |
#c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, bound /↑ 2 < #dirtyrows(mx, i), c < #c mx, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ bound, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i) ⊦
Used simplifier rules: ⊦ n ≥ m ↔ m ≤ n; (s)
| #c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, bound /↑ 2 < #dirtyrows(mx, i), c < #c mx, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ bound, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i) ⊦ |
c0 < #c mx, ∀ c. c < #c mx → ordered≤(mx[c]c), ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i) ⊦ #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) = #r mx
#c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, c < #c mx, bound /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), #dirtyrows(mx0, i) ≤ bound, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i) ⊦ (∀ c. c < #c mx → ordered≤(mx[c]c)) ∧ (∀ c1. c1 < #c mx → count(mx[c1]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i))
#c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #clean1rows(mx, i) + count(mx[c]c, λ j. j < i) = #r mx, c < #c mx, bound /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), #dirtyrows(mx0, i) ≤ bound, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i) ⊦
Used terms: c, mx, i
| c0 < #c mx, ∀ c. c < #c mx → ordered≤(mx[c]c), ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i) ⊦ #clean1rows(mx, i) + count(mx[c0]c, λ j. j < i) = #r mx |
| #c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, c < #c mx, bound /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), #dirtyrows(mx0, i) ≤ bound, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i) ⊦ (∀ c. c < #c mx → ordered≤(mx[c]c)) ∧ (∀ c1. c1 < #c mx → count(mx[c1]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i)) |
#c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, bound /↑ 2 < #dirtyrows(mx, i), c < #c mx, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ bound, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i) ⊦ (c0 < #c mx → ordered≤(mx[c0]c)) ∧ (c1 < #c mx → count(mx[c1]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i))
| #c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, bound /↑ 2 < #dirtyrows(mx, i), c < #c mx, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ bound, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i) ⊦ (c0 < #c mx → ordered≤(mx[c0]c)) ∧ (c1 < #c mx → count(mx[c1]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i)) |
#c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, c0 < #c mx, c < #c mx, bound /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), #dirtyrows(mx0, i) ≤ bound, ¬ ordered≤(mx[c0]c), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i) ⊦
#c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, c1 < #c mx, c < #c mx, bound /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), #dirtyrows(mx0, i) ≤ bound, ¬ count(mx[c1]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i) ⊦
| #c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, c0 < #c mx, c < #c mx, bound /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), #dirtyrows(mx0, i) ≤ bound, ¬ ordered≤(mx[c0]c), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i) ⊦ |
⊦ m ≤ #c mx → ( scolsorted(mx, m, mx0) ↔ #r mx = #r mx0 ∧ #c mx = #c mx0 ∧ (∀ c. c < #c mx → (c < m ⊃ perm(mx0[c]c, mx[c]c) ∧ ordered≤(mx[c]c);mx0[c]c = mx[c]c)))
#c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, bound /↑ 2 < #dirtyrows(mx, i), c < #c mx, c0 < #c mx, srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ bound, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), #c mx ≤ #c mx, ¬ ordered≤(mx[c0]c), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i), ∀ c. c < #c mx → (c < #c mx ⊃ perm(mx0[c]c, mx[c]c) ∧ ordered≤(mx[c]c);mx0[c]c = mx[c]c) ⊦
Used simplifier rules: ⊦ m ≤ n ↔ ¬ n < m; (ss) ⊦ ¬ n < n; (s) Used terms: mx, #c mx, mx0
| ⊦ m ≤ #c mx → ( scolsorted(mx, m, mx0) ↔ #r mx = #r mx0 ∧ #c mx = #c mx0 ∧ (∀ c. c < #c mx → (c < m ⊃ perm(mx0[c]c, mx[c]c) ∧ ordered≤(mx[c]c);mx0[c]c = mx[c]c))) |
| #c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, bound /↑ 2 < #dirtyrows(mx, i), c < #c mx, c0 < #c mx, srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ bound, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), #c mx ≤ #c mx, ¬ ordered≤(mx[c0]c), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i), ∀ c. c < #c mx → (c < #c mx ⊃ perm(mx0[c]c, mx[c]c) ∧ ordered≤(mx[c]c);mx0[c]c = mx[c]c) ⊦ |
#c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, bound /↑ 2 < #dirtyrows(mx, i), c < #c mx, c0 < #c mx, srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ bound, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), ¬ ordered≤(mx[c0]c), ∀ c1. c1 < #c mx → perm(mx0[c1]c, mx[c1]c) ∧ ordered≤(mx[c1]c), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i) ⊦
Used simplifier rules: lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic ⊦ m ≤ m; (s)
| #c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, bound /↑ 2 < #dirtyrows(mx, i), c < #c mx, c0 < #c mx, srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ bound, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), ¬ ordered≤(mx[c0]c), ∀ c1. c1 < #c mx → perm(mx0[c1]c, mx[c1]c) ∧ ordered≤(mx[c1]c), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i) ⊦ |
Used terms: c0
| #c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, c1 < #c mx, c < #c mx, bound /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), #dirtyrows(mx0, i) ≤ bound, ¬ count(mx[c1]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i) ⊦ |
#c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, count(mx[c]c, λ j. j < i) < count(mx[c1]c, λ j. j < i), c1 < #c mx, c < #c mx, bound /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), #dirtyrows(mx0, i) ≤ bound, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i) ⊦
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 ⊦ m ≤ n ↔ ¬ n < m; (ss)
| #c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, count(mx[c]c, λ j. j < i) < count(mx[c1]c, λ j. j < i), c1 < #c mx, c < #c mx, bound /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), #dirtyrows(mx0, i) ≤ bound, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i) ⊦ |
Used simplifier rules: ⊦ m < n → (n ≤ m ↔ false); (s) Used terms: c1
| #c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #clean1rows(mx, i) + count(mx[c]c, λ j. j < i) = #r mx, c < #c mx, bound /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), #dirtyrows(mx0, i) ≤ bound, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i) ⊦ |
#c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, c < #c mx, bound /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), #dirtyrows(mx0, i) ≤ bound, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(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 eqs: ⊦ m = n + n0 ∧ m = n + n1 → n0 = n1; (forward) from specification nat-basic
| #c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, c < #c mx, bound /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), #dirtyrows(mx0, i) ≤ bound, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i) ⊦ |
#c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), bound /↑ 2 < #dirtyrows(mx, i), c < #c mx, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ bound, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), #dirtyrows(mx, i) ≤ #dirtyrows(mx0, i) /↑ 2, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i) ⊦
#c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), bound /↑ 2 < #dirtyrows(mx, i), c < #c mx, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ bound, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), ¬ #dirtyrows(mx, i) ≤ #dirtyrows(mx0, i) /↑ 2, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i) ⊦
Used formulas: #dirtyrows(mx, i) ≤ #dirtyrows(mx0, i) /↑ 2
| #c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), bound /↑ 2 < #dirtyrows(mx, i), c < #c mx, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ bound, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), #dirtyrows(mx, i) ≤ #dirtyrows(mx0, i) /↑ 2, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i) ⊦ |
#c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, c < #c mx, bound /↑ 2 < #dirtyrows(mx, i), bound /↑ 2 < #dirtyrows(mx0, i) /↑ 2, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx, i) ≤ #dirtyrows(mx0, i) /↑ 2, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), #dirtyrows(mx0, i) ≤ bound, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, 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 mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, c < #c mx, bound /↑ 2 < #dirtyrows(mx, i), bound /↑ 2 < #dirtyrows(mx0, i) /↑ 2, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx, i) ≤ #dirtyrows(mx0, i) /↑ 2, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), #dirtyrows(mx0, i) ≤ bound, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i) ⊦ |
⊦ m /↑ n = (∃ n0. m = n0 * n ⊃ m / n;m / n + 1)
#c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), c < #c mx, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ bound, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), #dirtyrows(mx, i) ≤ #dirtyrows(mx0, i) /↑ 2, (∃ n0. bound = n0 * 2 ⊃ bound / 2;bound / 2 + 1) < #dirtyrows(mx0, i) /↑ 2, (∃ n0. bound = n0 * 2 ⊃ bound / 2;bound / 2 + 1) < #dirtyrows(mx, i), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i) ⊦
Used terms: bound, 2
| ⊦ m /↑ n = (∃ n0. m = n0 * n ⊃ m / n;m / n + 1) |
| #c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), c < #c mx, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ bound, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), #dirtyrows(mx, i) ≤ #dirtyrows(mx0, i) /↑ 2, (∃ n0. bound = n0 * 2 ⊃ bound / 2;bound / 2 + 1) < #dirtyrows(mx0, i) /↑ 2, (∃ n0. bound = n0 * 2 ⊃ bound / 2;bound / 2 + 1) < #dirtyrows(mx, i), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i) ⊦ |
⊦ m /↑ n = (∃ n0. m = n0 * n ⊃ m / n;m / n + 1)
#c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, c < #c mx, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), #dirtyrows(mx0, i) ≤ bound, (∃ n0. bound = n0 * 2 ⊃ bound / 2;bound / 2 + 1) < #dirtyrows(mx, i), (∃ n0. bound = n0 * 2 ⊃ bound / 2;bound / 2 + 1) < (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ #dirtyrows(mx0, i) / 2;#dirtyrows(mx0, i) / 2 + 1), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), #dirtyrows(mx, i) ≤ (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ #dirtyrows(mx0, i) / 2;#dirtyrows(mx0, i) / 2 + 1) ⊦
Used terms: #dirtyrows(mx0, i), 2
| ⊦ m /↑ n = (∃ n0. m = n0 * n ⊃ m / n;m / n + 1) |
| #c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, c < #c mx, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), #dirtyrows(mx0, i) ≤ bound, (∃ n0. bound = n0 * 2 ⊃ bound / 2;bound / 2 + 1) < #dirtyrows(mx, i), (∃ n0. bound = n0 * 2 ⊃ bound / 2;bound / 2 + 1) < (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ #dirtyrows(mx0, i) / 2;#dirtyrows(mx0, i) / 2 + 1), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), #dirtyrows(mx, i) ≤ (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ #dirtyrows(mx0, i) / 2;#dirtyrows(mx0, i) / 2 + 1) ⊦ |
#c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), c < #c mx, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ bound, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), (∃ n0. bound = n0 * 2 ⊃ bound / 2;bound / 2 + 1) < #dirtyrows(mx, i), bound / 2 < (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ #dirtyrows(mx0, i) / 2;#dirtyrows(mx0, i) / 2 + 1), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∃ n0. bound = n0 * 2, #dirtyrows(mx, i) ≤ (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ #dirtyrows(mx0, i) / 2;#dirtyrows(mx0, i) / 2 + 1) ⊦
#c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), c < #c mx, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ bound, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), (∃ n0. bound = n0 * 2 ⊃ bound / 2;bound / 2 + 1) < #dirtyrows(mx, i), bound / 2 + 1 < (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ #dirtyrows(mx0, i) / 2;#dirtyrows(mx0, i) / 2 + 1), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∀ n0. bound ≠ n0 * 2, #dirtyrows(mx, i) ≤ (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ #dirtyrows(mx0, i) / 2;#dirtyrows(mx0, i) / 2 + 1) ⊦
| #c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), c < #c mx, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ bound, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), (∃ n0. bound = n0 * 2 ⊃ bound / 2;bound / 2 + 1) < #dirtyrows(mx, i), bound / 2 < (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ #dirtyrows(mx0, i) / 2;#dirtyrows(mx0, i) / 2 + 1), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∃ n0. bound = n0 * 2, #dirtyrows(mx, i) ≤ (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ #dirtyrows(mx0, i) / 2;#dirtyrows(mx0, i) / 2 + 1) ⊦ |
#c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, c < #c mx, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), #dirtyrows(mx0, i) ≤ n0 * 2, n0 < (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ #dirtyrows(mx0, i) / 2;#dirtyrows(mx0, i) / 2 + 1), (∃ n. n0 * 2 = n * 2 ⊃ n0;n0 + 1) < #dirtyrows(mx, i), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), #dirtyrows(mx, i) ≤ (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ #dirtyrows(mx0, i) / 2;#dirtyrows(mx0, i) / 2 + 1) ⊦
Used simplifier rules: mult-c: ⊦ m * n = n * m; from specification nat-mult mult-a: ⊦ m0 * m * n = (m0 * m) * n; from specification nat-mult ⊦ (2 * m) / 2 = m; (s)
| #c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, c < #c mx, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), #dirtyrows(mx0, i) ≤ n0 * 2, n0 < (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ #dirtyrows(mx0, i) / 2;#dirtyrows(mx0, i) / 2 + 1), (∃ n. n0 * 2 = n * 2 ⊃ n0;n0 + 1) < #dirtyrows(mx, i), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), #dirtyrows(mx, i) ≤ (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ #dirtyrows(mx0, i) / 2;#dirtyrows(mx0, i) / 2 + 1) ⊦ |
#c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), c < #c mx, n0 < #dirtyrows(mx0, i) / 2 + 1, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ n0 * 2, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), (∃ n. n0 * 2 = n * 2 ⊃ n0;n0 + 1) < #dirtyrows(mx, i), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2, #dirtyrows(mx, i) ≤ (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ #dirtyrows(mx0, i) / 2;#dirtyrows(mx0, i) / 2 + 1) ⊦
Used simplifier rules: f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ (2 * m) / 2 = m; (s) ⊦ m < n → n ≠ 0; (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
| #c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), c < #c mx, n0 < #dirtyrows(mx0, i) / 2 + 1, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ n0 * 2, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), (∃ n. n0 * 2 = n * 2 ⊃ n0;n0 + 1) < #dirtyrows(mx, i), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2, #dirtyrows(mx, i) ≤ (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ #dirtyrows(mx0, i) / 2;#dirtyrows(mx0, i) / 2 + 1) ⊦ |
#c mx0 = #c mx, #dirtyrows(mx0, i) = n0 * 2, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, n0 * 2 + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), c < #c mx, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), (∃ n. n0 * 2 = n * 2 ⊃ n0;n0 + 1) < #dirtyrows(mx, i), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2, #dirtyrows(mx, i) ≤ (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ n0;n0 + 1) ⊦
Used simplifier rules: mult-c: ⊦ m * n = n * m; from specification nat-mult mult-a: ⊦ m0 * m * n = (m0 * m) * n; from specification nat-mult ⊦ (2 * m) / 2 = m; (s) ⊦ m ≤ m; (s) 0 ≠ m ⊦ (* m) * n ≤ m * n0 ↔ n ≤ n0; (s) ⊦ m ≤ n → (n ≤ m ↔ m = n); (s) m0 ≠ 0 ⊦ n ≤ m / m0 ↔ n * m0 ≤ m; (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 ⊦ m < n + 1 ↔ ¬ n < m; (s)
| #c mx0 = #c mx, #dirtyrows(mx0, i) = n0 * 2, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, n0 * 2 + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), c < #c mx, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), (∃ n. n0 * 2 = n * 2 ⊃ n0;n0 + 1) < #dirtyrows(mx, i), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2, #dirtyrows(mx, i) ≤ (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ n0;n0 + 1) ⊦ |
Used terms: n0
| #c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), c < #c mx, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ bound, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), (∃ n0. bound = n0 * 2 ⊃ bound / 2;bound / 2 + 1) < #dirtyrows(mx, i), bound / 2 + 1 < (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ #dirtyrows(mx0, i) / 2;#dirtyrows(mx0, i) / 2 + 1), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∀ n0. bound ≠ n0 * 2, #dirtyrows(mx, i) ≤ (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ #dirtyrows(mx0, i) / 2;#dirtyrows(mx0, i) / 2 + 1) ⊦ |
#c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, c < #c mx, bound / 2 + 1 < #dirtyrows(mx0, i) / 2, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), #dirtyrows(mx0, i) ≤ bound, (∃ n0. bound = n0 * 2 ⊃ bound / 2;bound / 2 + 1) < #dirtyrows(mx, i), ∀ n0. bound ≠ n0 * 2, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∃ n0. #dirtyrows(mx0, i) = n0 * 2, #dirtyrows(mx, i) ≤ (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ #dirtyrows(mx0, i) / 2;#dirtyrows(mx0, i) / 2 + 1) ⊦
Used simplifier rules: ⊦ m + n < m + n0 ↔ n < n0; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ls-02: n ≠ 0 ⊦ m / n < m0 / n → m < m0; (forward) from specification nat-div f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m / 2 = 0 ↔ m = 0 ∨ m = 1; (s) ⊦ m < n → n ≠ 0; (s) ⊦ m ≤ n → (n < m ↔ false); (s)
| #c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, c < #c mx, bound / 2 + 1 < #dirtyrows(mx0, i) / 2, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), #dirtyrows(mx0, i) ≤ bound, (∃ n0. bound = n0 * 2 ⊃ bound / 2;bound / 2 + 1) < #dirtyrows(mx, i), ∀ n0. bound ≠ n0 * 2, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∃ n0. #dirtyrows(mx0, i) = n0 * 2, #dirtyrows(mx, i) ≤ (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ #dirtyrows(mx0, i) / 2;#dirtyrows(mx0, i) / 2 + 1) ⊦ |
#c mx0 = #c mx, #dirtyrows(mx0, i) = n0 * 2, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, n0 * 2 + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), bound / 2 + 1 < n0, c < #c mx, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), n0 * 2 ≤ bound, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), (∃ n0. bound = n0 * 2 ⊃ bound / 2;bound / 2 + 1) < #dirtyrows(mx, i), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∀ n0. bound ≠ n0 * 2, #dirtyrows(mx, i) ≤ (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ n0;n0 + 1) ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic mult-c: ⊦ m * n = n * m; from specification nat-mult mult-a: ⊦ m0 * m * n = (m0 * m) * n; from specification nat-mult ⊦ (2 * m) / 2 = m; (s)
| #c mx0 = #c mx, #dirtyrows(mx0, i) = n0 * 2, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, n0 * 2 + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), bound / 2 + 1 < n0, c < #c mx, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), n0 * 2 ≤ bound, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), (∃ n0. bound = n0 * 2 ⊃ bound / 2;bound / 2 + 1) < #dirtyrows(mx, i), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∀ n0. bound ≠ n0 * 2, #dirtyrows(mx, i) ≤ (∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊃ n0;n0 + 1) ⊦ |
#c mx0 = #c mx, #dirtyrows(mx0, i) = n0 * 2, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), n0 * 2 + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, c < #c mx, bound / 2 + 1 < n0, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), n0 * 2 ≤ bound, #dirtyrows(mx, i) ≤ n0, (∃ n0. bound = n0 * 2 ⊃ bound / 2;bound / 2 + 1) < #dirtyrows(mx, i), ∀ n0. bound ≠ n0 * 2, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊦
#c mx0 = #c mx, #dirtyrows(mx0, i) = n0 * 2, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), n0 * 2 + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, c < #c mx, bound / 2 + 1 < n0, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), n0 * 2 ≤ bound, #dirtyrows(mx, i) ≤ n0 + 1, (∃ n0. bound = n0 * 2 ⊃ bound / 2;bound / 2 + 1) < #dirtyrows(mx, i), ∀ n0. bound ≠ n0 * 2, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2 ⊦
| #c mx0 = #c mx, #dirtyrows(mx0, i) = n0 * 2, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), n0 * 2 + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, c < #c mx, bound / 2 + 1 < n0, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), n0 * 2 ≤ bound, #dirtyrows(mx, i) ≤ n0, (∃ n0. bound = n0 * 2 ⊃ bound / 2;bound / 2 + 1) < #dirtyrows(mx, i), ∀ n0. bound ≠ n0 * 2, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∃ n0. #dirtyrows(mx0, i) = n0 * 2 ⊦ |
#c mx0 = #c mx, #dirtyrows(mx0, i) = n * 2, #r mx0 = #r mx, n0 * 2 = n * 2, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, n * 2 + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), bound / 2 + 1 < n0, c < #c mx, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx, i) ≤ n0, n * 2 ≤ bound, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), (∃ n0. bound = n0 * 2 ⊃ bound / 2;bound / 2 + 1) < #dirtyrows(mx, i), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∀ n0. bound ≠ n0 * 2 ⊦
| #c mx0 = #c mx, #dirtyrows(mx0, i) = n * 2, #r mx0 = #r mx, n0 * 2 = n * 2, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, n * 2 + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), bound / 2 + 1 < n0, c < #c mx, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx, i) ≤ n0, n * 2 ≤ bound, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), (∃ n0. bound = n0 * 2 ⊃ bound / 2;bound / 2 + 1) < #dirtyrows(mx, i), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∀ n0. bound ≠ n0 * 2 ⊦ |
#c mx0 = #c mx, #dirtyrows(mx0, i) = n * 2, #r mx0 = #r mx, n0 * 2 = n * 2, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), n * 2 + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, c < #c mx, bound / 2 + 1 < n0, bound / 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), n * 2 ≤ bound, #dirtyrows(mx, i) ≤ n0, ∀ n0. bound ≠ n0 * 2, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∃ n0. bound = n0 * 2 ⊦
#c mx0 = #c mx, #dirtyrows(mx0, i) = n * 2, #r mx0 = #r mx, n0 * 2 = n * 2, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), n * 2 + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, c < #c mx, bound / 2 + 1 < n0, bound / 2 + 1 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), n * 2 ≤ bound, #dirtyrows(mx, i) ≤ n0, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∀ n0. bound ≠ n0 * 2 ⊦
| #c mx0 = #c mx, #dirtyrows(mx0, i) = n * 2, #r mx0 = #r mx, n0 * 2 = n * 2, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), n * 2 + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, c < #c mx, bound / 2 + 1 < n0, bound / 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), n * 2 ≤ bound, #dirtyrows(mx, i) ≤ n0, ∀ n0. bound ≠ n0 * 2, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∃ n0. bound = n0 * 2 ⊦ |
#c mx0 = #c mx, #dirtyrows(mx0, i) = n * 2, #r mx0 = #r mx, n0 * 2 = n * 2, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), n * 2 + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, n1 < n0, n < #dirtyrows(mx, i), n1 + 1 < n0, n1 < #dirtyrows(mx, i), c < #c mx, n < n0, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), n ≤ n1, #dirtyrows(mx, i) ≤ n0, ∀ n0. n1 * 2 ≠ n0 * 2, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i) ⊦
Used simplifier rules: fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat 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 ⊦ (2 * m) / 2 = m; (s) 0 ≠ m ⊦ (* m) * n ≤ m * n0 ↔ n ≤ n0; (s)
| #c mx0 = #c mx, #dirtyrows(mx0, i) = n * 2, #r mx0 = #r mx, n0 * 2 = n * 2, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), n * 2 + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, n1 < n0, n < #dirtyrows(mx, i), n1 + 1 < n0, n1 < #dirtyrows(mx, i), c < #c mx, n < n0, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), n ≤ n1, #dirtyrows(mx, i) ≤ n0, ∀ n0. n1 * 2 ≠ n0 * 2, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i) ⊦ |
Used terms: n1
| #c mx0 = #c mx, #dirtyrows(mx0, i) = n * 2, #r mx0 = #r mx, n0 * 2 = n * 2, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), n * 2 + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, c < #c mx, bound / 2 + 1 < n0, bound / 2 + 1 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), n * 2 ≤ bound, #dirtyrows(mx, i) ≤ n0, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∀ n0. bound ≠ n0 * 2 ⊦ |
⊦ m0 ≠ 0 → (m * m0 = n * m0 ↔ m = n)
#c mx0 = #c mx, #dirtyrows(mx0, i) = n * 2, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, n * 2 + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), n0 = n, 2 ≠ 0, bound / 2 + 1 < #dirtyrows(mx, i), bound / 2 + 1 < n0, c < #c mx, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx, i) ≤ n0, n * 2 ≤ bound, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), ∀ n0. bound ≠ n0 * 2, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i) ⊦
Used terms: n0, 2, n
| ⊦ m0 ≠ 0 → (m * m0 = n * m0 ↔ m = n) |
| #c mx0 = #c mx, #dirtyrows(mx0, i) = n * 2, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, n * 2 + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), n0 = n, 2 ≠ 0, bound / 2 + 1 < #dirtyrows(mx, i), bound / 2 + 1 < n0, c < #c mx, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx, i) ≤ n0, n * 2 ≤ bound, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), ∀ n0. bound ≠ n0 * 2, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i) ⊦ |
#c mx0 = #c mx, #dirtyrows(mx0, i) = n * 2, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, n * 2 + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), bound / 2 + 1 < #dirtyrows(mx, i), bound / 2 + 1 < n, c < #c mx, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx, i) ≤ n, n * 2 ≤ bound, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), ∀ n0. bound ≠ n0 * 2, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, 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 mx0 = #c mx, #dirtyrows(mx0, i) = n * 2, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, n * 2 + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), bound / 2 + 1 < #dirtyrows(mx, i), bound / 2 + 1 < n, c < #c mx, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx, i) ≤ n, n * 2 ≤ bound, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), ∀ n0. bound ≠ n0 * 2, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i) ⊦ |
#c mx0 = #c mx, #dirtyrows(mx0, i) = n * 2, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), n * 2 + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, bound = m0 * 2 + n1, 2 ≠ 0, c < #c mx, m0 + 1 < n, m0 + 1 < #dirtyrows(mx, i), n1 < 2, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), n * 2 ≤ bound, #dirtyrows(mx, i) ≤ n, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∀ n0. bound ≠ n0 * 2 ⊦
Used simplifier rules: n ≠ 0 ⊦ m0 = m / n ∧ n0 = m % n ↔ m = m0 * n + n0 ∧ n0 < n; (elim) Used terms: bound, 2, m0, n1
| #c mx0 = #c mx, #dirtyrows(mx0, i) = n * 2, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), n * 2 + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, bound = m0 * 2 + n1, 2 ≠ 0, c < #c mx, m0 + 1 < n, m0 + 1 < #dirtyrows(mx, i), n1 < 2, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), n * 2 ≤ bound, #dirtyrows(mx, i) ≤ n, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∀ n0. bound ≠ n0 * 2 ⊦ |
#c mx0 = #c mx, #dirtyrows(mx0, i) = n * 2, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, n * 2 + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), n1 < 2, m0 + 1 < #dirtyrows(mx, i), c < #c mx, m0 + 1 < n, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx, i) ≤ n, n * 2 ≤ m0 * 2 + n1, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), ∀ n0. m0 * 2 + n1 ≠ n0 * 2, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i) ⊦
Used simplifier rules: f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat
| #c mx0 = #c mx, #dirtyrows(mx0, i) = n * 2, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, n * 2 + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), n1 < 2, m0 + 1 < #dirtyrows(mx, i), c < #c mx, m0 + 1 < n, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx, i) ≤ n, n * 2 ≤ m0 * 2 + n1, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), ∀ n0. m0 * 2 + n1 ≠ n0 * 2, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i) ⊦ |
#c mx0 = #c mx, #dirtyrows(mx0, i) = n * 2, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), n * 2 + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, m0 * 2 + n1 ≠ n * 2, m0 + 1 < n, c < #c mx, m0 + 1 < #dirtyrows(mx, i), n1 < 2, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), n * 2 ≤ m0 * 2 + n1, #dirtyrows(mx, i) ≤ n, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∀ n0. m0 * 2 + n1 ≠ n0 * 2 ⊦
Used terms: n
| #c mx0 = #c mx, #dirtyrows(mx0, i) = n * 2, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), n * 2 + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, m0 * 2 + n1 ≠ n * 2, m0 + 1 < n, c < #c mx, m0 + 1 < #dirtyrows(mx, i), n1 < 2, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), n * 2 ≤ m0 * 2 + n1, #dirtyrows(mx, i) ≤ n, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∀ n0. m0 * 2 + n1 ≠ n0 * 2 ⊦ |
#c mx0 = #c mx, #dirtyrows(mx0, i) = n * 2, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), n * 2 + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, m0 * 2 + n1 ≠ n * 2, n * 2 < m0 * 2 + n1, m0 + 1 < n, c < #c mx, m0 + 1 < #dirtyrows(mx, i), n1 < 2, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx, i) ≤ n, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∀ n0. m0 * 2 + n1 ≠ n0 * 2 ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m ≠ n → (m ≤ n ↔ m < n); (s)
| #c mx0 = #c mx, #dirtyrows(mx0, i) = n * 2, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), n * 2 + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, m0 * 2 + n1 ≠ n * 2, n * 2 < m0 * 2 + n1, m0 + 1 < n, c < #c mx, m0 + 1 < #dirtyrows(mx, i), n1 < 2, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx, i) ≤ n, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∀ n0. m0 * 2 + n1 ≠ n0 * 2 ⊦ |
Used simplifier rules: nat freely generated by 0, +1;; ⊦ m < n + 1 ↔ ¬ n < m; (s) n < n0 ⊦ m + (* n) < (* n0) ↔ m < n0 - n; (s) ⊦ m < 1 ↔ m = 0; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m +1 = m + 1; (s) ⊦ n + 0 = n; (s) 0 ≠ m ⊦ (* m) * n ≤ m * n0 ↔ n ≤ n0; (s) ⊦ 2 * m ≠ 2 * n + 1; (s) mult-a: ⊦ m0 * m * n = (m0 * m) * n; from specification nat-mult mult-c: ⊦ m * n = n * m; from specification nat-mult let: ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1; (forward) from specification nat fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat ⊦ ¬ 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 * n = m * n0 ↔ m = 0 ∨ n = n0; (ws) ⊦ 2 * m < 2 * n ↔ m < n; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic trans-nat: ⊦ n < n0 ∧ n0 < n1 → n < n1; (forward) from specification nat-basic ⊦ m < n → n ≠ 0; (s) ⊦ m + m0 < n → ¬ n + n0 < m; (s)
| #c mx0 = #c mx, #dirtyrows(mx0, i) = n0 * 2, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), n0 * 2 + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, c < #c mx, bound / 2 + 1 < n0, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), n0 * 2 ≤ bound, #dirtyrows(mx, i) ≤ n0 + 1, (∃ n0. bound = n0 * 2 ⊃ bound / 2;bound / 2 + 1) < #dirtyrows(mx, i), ∀ n0. bound ≠ n0 * 2, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∀ n0. #dirtyrows(mx0, i) ≠ n0 * 2 ⊦ |
Used terms: n0
| #c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), bound /↑ 2 < #dirtyrows(mx, i), c < #c mx, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #dirtyrows(mx0, i) ≤ bound, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), ¬ #dirtyrows(mx, i) ≤ #dirtyrows(mx0, i) /↑ 2, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i) ⊦ |
#c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, c < #c mx, bound /↑ 2 < #dirtyrows(mx, i), #dirtyrows(mx0, i) /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), #dirtyrows(mx0, i) ≤ bound, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i) ⊦
Used simplifier rules: ⊦ m ≤ n ↔ ¬ n < m; (ss)
| #c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, c < #c mx, bound /↑ 2 < #dirtyrows(mx, i), #dirtyrows(mx0, i) /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), #dirtyrows(mx0, i) ≤ bound, ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i) ⊦ |
#c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), #dirtyrows(mx0, i) /↑ 2 < #dirtyrows(mx, i), c < #c mx, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i) ⊦
| #c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), #dirtyrows(mx0, i) /↑ 2 < #dirtyrows(mx, i), c < #c mx, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i) ⊦ |
#r mx = #r mx0, #c mx = #c mx0, c < #c mx, c0 < #c mx, scolsorted(mx, #c mx, mx0), ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i) ⊦ count(mx[c]c, λ j. j < i) = #clean0rows(mx0, i) + count(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)
#c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, c < #c mx, #dirtyrows(mx0, i) /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i) ⊦ #r mx = #r mx0 ∧ #c mx = #c mx0 ∧ c < #c mx ∧ c < #c mx ∧ scolsorted(mx, #c mx, mx0) ∧ (∀ c1. c1 < #c mx → count(mx[c1]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i))
#c mx = #c mx0, #r mx = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) = #clean0rows(mx0, i) + count(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #dirtyrows(mx0, i) /↑ 2 < #dirtyrows(mx, i), c < #c mx, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∀ c1. c1 < #c mx → count(mx[c1]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i) ⊦
Used terms: c, mx0, c, mx, i
| #r mx = #r mx0, #c mx = #c mx0, c < #c mx, c0 < #c mx, scolsorted(mx, #c mx, mx0), ∀ c. c < #c mx → count(mx[c]c, λ j. j < i) ≤ count(mx[c0]c, λ j. j < i) ⊦ count(mx[c]c, λ j. j < i) = #clean0rows(mx0, i) + count(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i) |
| #c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, c < #c mx, #dirtyrows(mx0, i) /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i) ⊦ #r mx = #r mx0 ∧ #c mx = #c mx0 ∧ c < #c mx ∧ c < #c mx ∧ scolsorted(mx, #c mx, mx0) ∧ (∀ c1. c1 < #c mx → count(mx[c1]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i)) |
#c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) < count(mx[c1]c, λ j. j < i), c1 < #c mx, c < #c mx, #dirtyrows(mx0, i) /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i) ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m ≤ n ↔ ¬ n < m; (ss)
| #c mx0 = #c mx, #r mx0 = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) = count(mx[c]c, λ j. j < i), #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) < count(mx[c1]c, λ j. j < i), c1 < #c mx, c < #c mx, #dirtyrows(mx0, i) /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i) ⊦ |
Used simplifier rules: ⊦ m < n → (n ≤ m ↔ false); (s) Used terms: c1
| #c mx = #c mx0, #r mx = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) = #clean0rows(mx0, i) + count(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #dirtyrows(mx0, i) /↑ 2 < #dirtyrows(mx, i), c < #c mx, scolsorted(mx, #c mx, mx0), srowsorted(mx0, #r mx, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx, λ j. j < i)) ≤ #clean0rows(mx, i), ∀ c0. c0 < #c mx → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∀ c1. c1 < #c mx → count(mx[c1]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i) ⊦ |
#c mx = #c mx0, #r mx = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) = #clean0rows(mx0, i) + count(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx0, #dirtyrows(mx0, i) /↑ 2 < #dirtyrows(mx, i), c < #c mx0, scolsorted(mx, #c mx0, mx0), srowsorted(mx0, #r mx0, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i)) ≤ #clean0rows(mx, i), ∀ c0. c0 < #c mx0 → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∀ c1. c1 < #c mx0 → count(mx[c1]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i) ⊦
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
| #c mx = #c mx0, #r mx = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) = #clean0rows(mx0, i) + count(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx0, #dirtyrows(mx0, i) /↑ 2 < #dirtyrows(mx, i), c < #c mx0, scolsorted(mx, #c mx0, mx0), srowsorted(mx0, #r mx0, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i)) ≤ #clean0rows(mx, i), ∀ c0. c0 < #c mx0 → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∀ c1. c1 < #c mx0 → count(mx[c1]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i) ⊦ |
m ≤ n, n ≤ # a ⊦ countevn(a, m, n, p) + countodd(a, m, n, p) = count(a, m, n, p)
#c mx = #c mx0, #r mx = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx0, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) = #clean0rows(mx0, i) + countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) + countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), c < #c mx0, #dirtyrows(mx0, i) /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx0, mx0), srowsorted(mx0, #r mx0, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i)) ≤ #clean0rows(mx, i), #clean0rows(mx0, i) ≤ #r mx0, #r mx0 ≤ # mx0[c]c, ∀ c1. c1 < #c mx0 → count(mx[c1]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i), ∀ c0. c0 < #c mx0 → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i) ⊦
Used simplifier rules: clean0rows-bounded: ⊦ ¬ #r mx < #clean0rows(mx, i); ⊦ # mx[c]c = #r mx; (s) ⊦ m ≤ m; (s) ⊦ m ≤ n ↔ ¬ n < m; (ss) Used terms: mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i
| m ≤ n, n ≤ # a ⊦ countevn(a, m, n, p) + countodd(a, m, n, p) = count(a, m, n, p) |
| #c mx = #c mx0, #r mx = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx0, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) = #clean0rows(mx0, i) + countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) + countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), c < #c mx0, #dirtyrows(mx0, i) /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx0, mx0), srowsorted(mx0, #r mx0, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i)) ≤ #clean0rows(mx, i), #clean0rows(mx0, i) ≤ #r mx0, #r mx0 ≤ # mx0[c]c, ∀ c1. c1 < #c mx0 → count(mx[c1]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i), ∀ c0. c0 < #c mx0 → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i) ⊦ |
#c mx = #c mx0, #r mx = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) = #clean0rows(mx0, i) + countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) + countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx0, #dirtyrows(mx0, i) /↑ 2 < #dirtyrows(mx, i), c < #c mx0, scolsorted(mx, #c mx0, mx0), srowsorted(mx0, #r mx0, mx0), #clean0rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i)) ≤ #clean0rows(mx, i), ∀ c0. c0 < #c mx0 → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∀ c1. c1 < #c mx0 → count(mx[c1]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i) ⊦
Used simplifier rules: ⊦ m ≤ m; (s) ⊦ # mx[c]c = #r mx; (s)
| #c mx = #c mx0, #r mx = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) = #clean0rows(mx0, i) + countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) + countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx0, #dirtyrows(mx0, i) /↑ 2 < #dirtyrows(mx, i), c < #c mx0, scolsorted(mx, #c mx0, mx0), srowsorted(mx0, #r mx0, mx0), #clean0rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i)) ≤ #clean0rows(mx, i), ∀ c0. c0 < #c mx0 → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∀ c1. c1 < #c mx0 → count(mx[c1]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i) ⊦ |
c0 < #c mx0 ⊦ countevn(mx0[c0]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) ≤ #dirtyrows(mx0, i) /↑ 2
#c mx = #c mx0, #r mx = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx0, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) = #clean0rows(mx0, i) + countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) + countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), c < #c mx0, #dirtyrows(mx0, i) /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx0, mx0), srowsorted(mx0, #r mx0, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i)) ≤ #clean0rows(mx, i), #clean0rows(mx0, i) ≤ #r mx0, countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) ≤ #dirtyrows(mx0, i) /↑ 2, ∀ c1. c1 < #c mx0 → count(mx[c1]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i), ∀ c0. c0 < #c mx0 → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i) ⊦
Used terms: c, mx0, i
| c0 < #c mx0 ⊦ countevn(mx0[c0]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) ≤ #dirtyrows(mx0, i) /↑ 2 |
| #c mx = #c mx0, #r mx = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx0, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) = #clean0rows(mx0, i) + countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) + countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), c < #c mx0, #dirtyrows(mx0, i) /↑ 2 < #dirtyrows(mx, i), scolsorted(mx, #c mx0, mx0), srowsorted(mx0, #r mx0, mx0), #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i)) ≤ #clean0rows(mx, i), #clean0rows(mx0, i) ≤ #r mx0, countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) ≤ #dirtyrows(mx0, i) /↑ 2, ∀ c1. c1 < #c mx0 → count(mx[c1]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i), ∀ c0. c0 < #c mx0 → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i) ⊦ |
c0 < #c mx0 ⊦ countodd(mx0[c0]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) ≤ #dirtyrows(mx0, i) /↑ 2
#c mx = #c mx0, #r mx = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) = #clean0rows(mx0, i) + countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) + countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx0, #dirtyrows(mx0, i) /↑ 2 < #dirtyrows(mx, i), c < #c mx0, scolsorted(mx, #c mx0, mx0), srowsorted(mx0, #r mx0, mx0), countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) ≤ #dirtyrows(mx0, i) /↑ 2, #clean0rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i)) ≤ #clean0rows(mx, i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) ≤ #dirtyrows(mx0, i) /↑ 2, ∀ c0. c0 < #c mx0 → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∀ c1. c1 < #c mx0 → count(mx[c1]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i) ⊦
Used terms: c, mx0, i
| c0 < #c mx0 ⊦ countodd(mx0[c0]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) ≤ #dirtyrows(mx0, i) /↑ 2 |
| #c mx = #c mx0, #r mx = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) = #clean0rows(mx0, i) + countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) + countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx0, #dirtyrows(mx0, i) /↑ 2 < #dirtyrows(mx, i), c < #c mx0, scolsorted(mx, #c mx0, mx0), srowsorted(mx0, #r mx0, mx0), countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) ≤ #dirtyrows(mx0, i) /↑ 2, #clean0rows(mx0, i) ≤ #r mx0, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i)) ≤ #clean0rows(mx, i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) ≤ #dirtyrows(mx0, i) /↑ 2, ∀ c0. c0 < #c mx0 → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∀ c1. c1 < #c mx0 → count(mx[c1]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i) ⊦ |
#c mx = #c mx0, #r mx = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx0, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) = #clean0rows(mx0, i) + countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) + countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), c < #c mx0, #dirtyrows(mx0, i) /↑ 2 < #dirtyrows(mx, i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) < #dirtyrows(mx, i), countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) < #dirtyrows(mx, i), scolsorted(mx, #c mx0, mx0), srowsorted(mx0, #r mx0, mx0), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) ≤ #dirtyrows(mx0, i) /↑ 2, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i)) ≤ #clean0rows(mx, i), #clean0rows(mx0, i) ≤ #r mx0, countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) ≤ #dirtyrows(mx0, i) /↑ 2, ∀ c1. c1 < #c mx0 → count(mx[c1]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i), ∀ c0. c0 < #c mx0 → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i) ⊦
Used simplifier rules: fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat
| #c mx = #c mx0, #r mx = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx0, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) = #clean0rows(mx0, i) + countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) + countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), c < #c mx0, #dirtyrows(mx0, i) /↑ 2 < #dirtyrows(mx, i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) < #dirtyrows(mx, i), countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) < #dirtyrows(mx, i), scolsorted(mx, #c mx0, mx0), srowsorted(mx0, #r mx0, mx0), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) ≤ #dirtyrows(mx0, i) /↑ 2, #clean0rows(mx0, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i)) ≤ #clean0rows(mx, i), #clean0rows(mx0, i) ≤ #r mx0, countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) ≤ #dirtyrows(mx0, i) /↑ 2, ∀ c1. c1 < #c mx0 → count(mx[c1]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i), ∀ c0. c0 < #c mx0 → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i) ⊦ |
⊦ m ≤ n ↔ (∃ n0. m + n0 = n)
#c mx = #c mx0, #r mx = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) = #clean0rows(mx0, i) + countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) + countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx0, countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) < #dirtyrows(mx, i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) < #dirtyrows(mx, i), #dirtyrows(mx0, i) /↑ 2 < #dirtyrows(mx, i), c < #c mx0, scolsorted(mx, #c mx0, mx0), srowsorted(mx0, #r mx0, mx0), countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) ≤ #dirtyrows(mx0, i) /↑ 2, #clean0rows(mx0, i) ≤ #r mx0, countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) ≤ #dirtyrows(mx0, i) /↑ 2, ∀ c0. c0 < #c mx0 → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∀ c1. c1 < #c mx0 → count(mx[c1]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i), ∃ n0. ( #clean0rows(mx0, i) + min (countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i))) + n0 = #clean0rows(mx, i) ⊦
Used terms: #clean0rows(mx0, i) + min (countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i)), #clean0rows(mx, i)
| ⊦ m ≤ n ↔ (∃ n0. m + n0 = n) |
| #c mx = #c mx0, #r mx = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) = #clean0rows(mx0, i) + countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) + countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx0, countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) < #dirtyrows(mx, i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) < #dirtyrows(mx, i), #dirtyrows(mx0, i) /↑ 2 < #dirtyrows(mx, i), c < #c mx0, scolsorted(mx, #c mx0, mx0), srowsorted(mx0, #r mx0, mx0), countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) ≤ #dirtyrows(mx0, i) /↑ 2, #clean0rows(mx0, i) ≤ #r mx0, countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) ≤ #dirtyrows(mx0, i) /↑ 2, ∀ c0. c0 < #c mx0 → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i), ∀ c1. c1 < #c mx0 → count(mx[c1]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i), ∃ n0. ( #clean0rows(mx0, i) + min (countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i))) + n0 = #clean0rows(mx, i) ⊦ |
#c mx = #c mx0, #r mx = #r mx0, ( #clean0rows(mx0, i) + min (countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i))) + n0 = #clean0rows(mx, i), #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx0, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) = #clean0rows(mx0, i) + countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) + countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), c < #c mx0, #dirtyrows(mx0, i) /↑ 2 < #dirtyrows(mx, i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) < #dirtyrows(mx, i), countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) < #dirtyrows(mx, i), scolsorted(mx, #c mx0, mx0), srowsorted(mx0, #r mx0, mx0), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) ≤ #dirtyrows(mx0, i) /↑ 2, #clean0rows(mx0, i) ≤ #r mx0, countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) ≤ #dirtyrows(mx0, i) /↑ 2, ∀ c1. c1 < #c mx0 → count(mx[c1]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i), ∀ c0. c0 < #c mx0 → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i) ⊦
| #c mx = #c mx0, #r mx = #r mx0, ( #clean0rows(mx0, i) + min (countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i))) + n0 = #clean0rows(mx, i), #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx0, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) = #clean0rows(mx0, i) + countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) + countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), c < #c mx0, #dirtyrows(mx0, i) /↑ 2 < #dirtyrows(mx, i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) < #dirtyrows(mx, i), countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) < #dirtyrows(mx, i), scolsorted(mx, #c mx0, mx0), srowsorted(mx0, #r mx0, mx0), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) ≤ #dirtyrows(mx0, i) /↑ 2, #clean0rows(mx0, i) ≤ #r mx0, countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) ≤ #dirtyrows(mx0, i) /↑ 2, ∀ c1. c1 < #c mx0 → count(mx[c1]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i), ∀ c0. c0 < #c mx0 → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + #clean0rows(mx, i) ⊦ |
#c mx = #c mx0, #r mx = #r mx0, #dirtyrows(mx, i) + ( #clean0rows(mx0, i) + min (countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i))) + n0 = #clean0rows(mx0, i) + countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) + countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx, i) + ( ( #clean0rows(mx0, i) + min (countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i))) + n0) + #clean1rows(mx, i) = #r mx0, countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) < #dirtyrows(mx, i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) < #dirtyrows(mx, i), #dirtyrows(mx0, i) /↑ 2 < #dirtyrows(mx, i), c < #c mx0, scolsorted(mx, #c mx0, mx0), srowsorted(mx0, #r mx0, mx0), countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) ≤ #dirtyrows(mx0, i) /↑ 2, #clean0rows(mx0, i) ≤ #r mx0, countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) ≤ #dirtyrows(mx0, i) /↑ 2, ∀ c0. c0 < #c mx0 → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + ( #clean0rows(mx0, i) + min (countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i))) + n0, ∀ c1. c1 < #c mx0 → count(mx[c1]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i) ⊦
| #c mx = #c mx0, #r mx = #r mx0, #dirtyrows(mx, i) + ( #clean0rows(mx0, i) + min (countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i))) + n0 = #clean0rows(mx0, i) + countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) + countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx, i) + ( ( #clean0rows(mx0, i) + min (countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i))) + n0) + #clean1rows(mx, i) = #r mx0, countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) < #dirtyrows(mx, i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) < #dirtyrows(mx, i), #dirtyrows(mx0, i) /↑ 2 < #dirtyrows(mx, i), c < #c mx0, scolsorted(mx, #c mx0, mx0), srowsorted(mx0, #r mx0, mx0), countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) ≤ #dirtyrows(mx0, i) /↑ 2, #clean0rows(mx0, i) ≤ #r mx0, countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) ≤ #dirtyrows(mx0, i) /↑ 2, ∀ c0. c0 < #c mx0 → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + ( #clean0rows(mx0, i) + min (countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i))) + n0, ∀ c1. c1 < #c mx0 → count(mx[c1]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i) ⊦ |
#c mx = #c mx0, #r mx = #r mx0, #dirtyrows(mx0, i) + #clean1rows(mx0, i) = #clean1rows(mx, i) + countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) + countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), #dirtyrows(mx, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i)) + n0 = countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) + countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx, i) + ( ( #clean0rows(mx0, i) + min (countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i))) + n0) + #clean1rows(mx, i) = #r mx0, countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) < #dirtyrows(mx, i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) < #dirtyrows(mx, i), #dirtyrows(mx0, i) /↑ 2 < #dirtyrows(mx, i), c < #c mx0, scolsorted(mx, #c mx0, mx0), srowsorted(mx0, #r mx0, mx0), countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) ≤ #dirtyrows(mx0, i) /↑ 2, #clean0rows(mx0, i) ≤ #r mx0, countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) ≤ #dirtyrows(mx0, i) /↑ 2, ∀ c0. c0 < #c mx0 → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + ( #clean0rows(mx0, i) + min (countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i))) + n0, ∀ c1. c1 < #c mx0 → count(mx[c1]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i) ⊦
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)
| #c mx = #c mx0, #r mx = #r mx0, #dirtyrows(mx0, i) + #clean1rows(mx0, i) = #clean1rows(mx, i) + countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) + countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), #dirtyrows(mx, i) + min(countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i)) + n0 = countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) + countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx, i) + ( ( #clean0rows(mx0, i) + min (countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i))) + n0) + #clean1rows(mx, i) = #r mx0, countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) < #dirtyrows(mx, i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) < #dirtyrows(mx, i), #dirtyrows(mx0, i) /↑ 2 < #dirtyrows(mx, i), c < #c mx0, scolsorted(mx, #c mx0, mx0), srowsorted(mx0, #r mx0, mx0), countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) ≤ #dirtyrows(mx0, i) /↑ 2, #clean0rows(mx0, i) ≤ #r mx0, countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i) ≤ #dirtyrows(mx0, i) /↑ 2, ∀ c0. c0 < #c mx0 → count(mx[c0]c, λ j. j < i) ≤ #dirtyrows(mx, i) + ( #clean0rows(mx0, i) + min (countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i))) + n0, ∀ c1. c1 < #c mx0 → count(mx[c1]c, λ j. j < i) ≤ count(mx[c]c, λ j. j < i) ⊦ |
⊦ m < n → min(m, n) = m
Used simplifier rules: ⊦ m + n = m + n0 ↔ n = n0; (s) eqs: ⊦ m = n + n0 ∧ m = n + n1 → n0 = n1; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat ⊦ m < n → n ≠ 0; (s) ⊦ m +1 = m + 1; (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 < n → min(m, n) = n; (s) min-a: ⊦ min(m, min(n, n0)) = min(min(m, n), n0); from specification nat-even min-c: ⊦ min(m, n) = min(n, m); from specification nat-even ⊦ m < n ↔ ¬ n ≤ m; (ss) let: ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1; (forward) from specification nat Used terms: countevn(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i), countodd(mx0[c]c, #clean0rows(mx0, i), #r mx0, λ j. j < i)
| ⊦ m < n → min(m, n) = m |
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.