| #c mx ≠ 0, #dirtyrows(mx, i) ≤ 1 ⊦ (∀ r. r < #r mx → count(mx[r]r, λ j. j < i) = 0 ∨ count(mx[r]r, λ j. ¬ j < i) = 0) ∨ (∃ r0. count(mx[r0]r, λ j. j < i) ≠ 0 ∧ count(mx[r0]r, λ j. ¬ j < i) ≠ 0 ∧ (∀ r. r ≠ r0 ∧ r < #r mx → count(mx[r]r, λ j. j < i) = 0 ∨ count(mx[r]r, λ j. ¬ j < i) = 0)) |
#c mx ≠ 0, #dirtyrows(mx, i) ≤ 1 ⊦ ∀ r. r < #r mx → count(mx[r]r, λ j. j < i) = 0 ∨ count(mx[r]r, λ j. ¬ j < i) = 0, ∃ r0. count(mx[r0]r, λ j. j < i) ≠ 0 ∧ count(mx[r0]r, λ j. ¬ j < i) ≠ 0 ∧ (∀ r. r ≠ r0 ∧ r < #r mx → count(mx[r]r, λ j. j < i) = 0 ∨ count(mx[r]r, λ j. ¬ j < i) = 0)
| #c mx ≠ 0, #dirtyrows(mx, i) ≤ 1 ⊦ ∀ r. r < #r mx → count(mx[r]r, λ j. j < i) = 0 ∨ count(mx[r]r, λ j. ¬ j < i) = 0, ∃ r0. count(mx[r0]r, λ j. j < i) ≠ 0 ∧ count(mx[r0]r, λ j. ¬ j < i) ≠ 0 ∧ (∀ r. r ≠ r0 ∧ r < #r mx → count(mx[r]r, λ j. j < i) = 0 ∨ count(mx[r]r, λ j. ¬ j < i) = 0) |
#c mx ≠ 0, count(mx[r]r, λ j. ¬ j < i) ≠ 0, count(mx[r]r, λ j. j < i) ≠ 0, r < #r mx, #dirtyrows(mx, i) ≤ 1 ⊦ ∃ r0. count(mx[r0]r, λ j. j < i) ≠ 0 ∧ count(mx[r0]r, λ j. ¬ j < i) ≠ 0 ∧ (∀ r. r ≠ r0 ∧ r < #r mx → count(mx[r]r, λ j. j < i) = 0 ∨ count(mx[r]r, λ j. ¬ j < i) = 0)
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| #c mx ≠ 0, count(mx[r]r, λ j. ¬ j < i) ≠ 0, count(mx[r]r, λ j. j < i) ≠ 0, r < #r mx, #dirtyrows(mx, i) ≤ 1 ⊦ ∃ r0. count(mx[r0]r, λ j. j < i) ≠ 0 ∧ count(mx[r0]r, λ j. ¬ j < i) ≠ 0 ∧ (∀ r. r ≠ r0 ∧ r < #r mx → count(mx[r]r, λ j. j < i) = 0 ∨ count(mx[r]r, λ j. ¬ j < i) = 0) |
⊦ #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx
#dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, count(mx[r]r, λ j. ¬ j < i) ≠ 0, count(mx[r]r, λ j. j < i) ≠ 0, r < #r mx, #dirtyrows(mx, i) ≤ 1 ⊦ ∃ r0. count(mx[r0]r, λ j. j < i) ≠ 0 ∧ count(mx[r0]r, λ j. ¬ j < i) ≠ 0 ∧ (∀ r. r ≠ r0 ∧ r < #r mx → count(mx[r]r, λ j. j < i) = 0 ∨ count(mx[r]r, λ j. ¬ j < i) = 0)
Used terms: mx, i
| ⊦ #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx |
| #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, count(mx[r]r, λ j. ¬ j < i) ≠ 0, count(mx[r]r, λ j. j < i) ≠ 0, r < #r mx, #dirtyrows(mx, i) ≤ 1 ⊦ ∃ r0. count(mx[r0]r, λ j. j < i) ≠ 0 ∧ count(mx[r0]r, λ j. ¬ j < i) ≠ 0 ∧ (∀ r. r ≠ r0 ∧ r < #r mx → count(mx[r]r, λ j. j < i) = 0 ∨ count(mx[r]r, λ j. ¬ j < i) = 0) |
⊦ m ≠ 0 → (m ≤ 1 ↔ m = 1)
#dirtyrows(mx, i) = 0, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, count(mx[r]r, λ j. ¬ j < i) ≠ 0, count(mx[r]r, λ j. j < i) ≠ 0, r < #r mx, #dirtyrows(mx, i) ≤ 1 ⊦ ∃ r0. count(mx[r0]r, λ j. j < i) ≠ 0 ∧ count(mx[r0]r, λ j. ¬ j < i) ≠ 0 ∧ (∀ r. r ≠ r0 ∧ r < #r mx → count(mx[r]r, λ j. j < i) = 0 ∨ count(mx[r]r, λ j. ¬ j < i) = 0)
#dirtyrows(mx, i) = 1, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, #dirtyrows(mx, i) ≠ 0, count(mx[r]r, λ j. ¬ j < i) ≠ 0, count(mx[r]r, λ j. j < i) ≠ 0, r < #r mx ⊦ ∃ r0. count(mx[r0]r, λ j. j < i) ≠ 0 ∧ count(mx[r0]r, λ j. ¬ j < i) ≠ 0 ∧ (∀ r. r ≠ r0 ∧ r < #r mx → count(mx[r]r, λ j. j < i) = 0 ∨ count(mx[r]r, λ j. ¬ j < i) = 0)
Used terms: #dirtyrows(mx, i)
| ⊦ m ≠ 0 → (m ≤ 1 ↔ m = 1) |
| #dirtyrows(mx, i) = 0, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, count(mx[r]r, λ j. ¬ j < i) ≠ 0, count(mx[r]r, λ j. j < i) ≠ 0, r < #r mx, #dirtyrows(mx, i) ≤ 1 ⊦ ∃ r0. count(mx[r0]r, λ j. j < i) ≠ 0 ∧ count(mx[r0]r, λ j. ¬ j < i) ≠ 0 ∧ (∀ r. r ≠ r0 ∧ r < #r mx → count(mx[r]r, λ j. j < i) = 0 ∨ count(mx[r]r, λ j. ¬ j < i) = 0) |
#dirtyrows(mx, i) = 0, #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, count(mx[r]r, λ j. ¬ j < i) ≠ 0, count(mx[r]r, λ j. j < i) ≠ 0, r < #r mx ⊦ ∃ r0. count(mx[r0]r, λ j. j < i) ≠ 0 ∧ count(mx[r0]r, λ j. ¬ j < i) ≠ 0 ∧ (∀ r. r ≠ r0 ∧ r < #r mx → count(mx[r]r, λ j. j < i) = 0 ∨ count(mx[r]r, λ j. ¬ j < i) = 0)
Used simplifier rules: lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ n + 0 = n; (s)
| #dirtyrows(mx, i) = 0, #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, count(mx[r]r, λ j. ¬ j < i) ≠ 0, count(mx[r]r, λ j. j < i) ≠ 0, r < #r mx ⊦ ∃ r0. count(mx[r0]r, λ j. j < i) ≠ 0 ∧ count(mx[r0]r, λ j. ¬ j < i) ≠ 0 ∧ (∀ r. r ≠ r0 ∧ r < #r mx → count(mx[r]r, λ j. j < i) = 0 ∨ count(mx[r]r, λ j. ¬ j < i) = 0) |
⊦ r < #clean0rows(mx, i) → count(mx[r]r, λ j. ¬ j < i) = 0
#dirtyrows(mx, i) = 0, #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, count(mx[r]r, λ j. ¬ j < i) ≠ 0, count(mx[r]r, λ j. j < i) ≠ 0, r < #r mx, r < #clean0rows(mx, i) → count(mx[r]r, λ j. ¬ j < i) = 0 ⊦ ∃ r0. count(mx[r0]r, λ j. j < i) ≠ 0 ∧ count(mx[r0]r, λ j. ¬ j < i) ≠ 0 ∧ (∀ r. r ≠ r0 ∧ r < #r mx → count(mx[r]r, λ j. j < i) = 0 ∨ count(mx[r]r, λ j. ¬ j < i) = 0)
Used terms: r, mx, i
| ⊦ r < #clean0rows(mx, i) → count(mx[r]r, λ j. ¬ j < i) = 0 |
| #dirtyrows(mx, i) = 0, #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, count(mx[r]r, λ j. ¬ j < i) ≠ 0, count(mx[r]r, λ j. j < i) ≠ 0, r < #r mx, r < #clean0rows(mx, i) → count(mx[r]r, λ j. ¬ j < i) = 0 ⊦ ∃ r0. count(mx[r0]r, λ j. j < i) ≠ 0 ∧ count(mx[r0]r, λ j. ¬ j < i) ≠ 0 ∧ (∀ r. r ≠ r0 ∧ r < #r mx → count(mx[r]r, λ j. j < i) = 0 ∨ count(mx[r]r, λ j. ¬ j < i) = 0) |
#dirtyrows(mx, i) = 0, #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, #clean1rows(mx, i) ≠ 0, count(mx[r]r, λ j. ¬ j < i) ≠ 0, count(mx[r]r, λ j. j < i) ≠ 0, r < #r mx, #clean0rows(mx, i) < #r mx, #clean0rows(mx, i) ≤ r ⊦ ∃ r0. count(mx[r0]r, λ j. j < i) ≠ 0 ∧ count(mx[r0]r, λ j. ¬ j < i) ≠ 0 ∧ (∀ r. r ≠ r0 ∧ r < #r mx → count(mx[r]r, λ j. j < i) = 0 ∨ count(mx[r]r, λ j. ¬ j < i) = 0)
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m < m + n ↔ n ≠ 0; (s) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat ⊦ m < n ↔ ¬ n ≤ m; (ss)
| #dirtyrows(mx, i) = 0, #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, #clean1rows(mx, i) ≠ 0, count(mx[r]r, λ j. ¬ j < i) ≠ 0, count(mx[r]r, λ j. j < i) ≠ 0, r < #r mx, #clean0rows(mx, i) < #r mx, #clean0rows(mx, i) ≤ r ⊦ ∃ r0. count(mx[r0]r, λ j. j < i) ≠ 0 ∧ count(mx[r0]r, λ j. ¬ j < i) ≠ 0 ∧ (∀ r. r ≠ r0 ∧ r < #r mx → count(mx[r]r, λ j. j < i) = 0 ∨ count(mx[r]r, λ j. ¬ j < i) = 0) |
⊦ #r mx ≤ #clean1rows(mx, i) + r ∧ r < #r mx → count(mx[r]r, λ j. j < i) = 0
Used simplifier rules: ⊦ m ≤ n ↔ ¬ n < m; (ss) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ m ≤ n → (n < m ↔ false); (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: mx, i, r
| ⊦ #r mx ≤ #clean1rows(mx, i) + r ∧ r < #r mx → count(mx[r]r, λ j. j < i) = 0 |
| #dirtyrows(mx, i) = 1, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, #dirtyrows(mx, i) ≠ 0, count(mx[r]r, λ j. ¬ j < i) ≠ 0, count(mx[r]r, λ j. j < i) ≠ 0, r < #r mx ⊦ ∃ r0. count(mx[r0]r, λ j. j < i) ≠ 0 ∧ count(mx[r0]r, λ j. ¬ j < i) ≠ 0 ∧ (∀ r. r ≠ r0 ∧ r < #r mx → count(mx[r]r, λ j. j < i) = 0 ∨ count(mx[r]r, λ j. ¬ j < i) = 0) |
#dirtyrows(mx, i) = 1, 1 + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, count(mx[r]r, λ j. j < i) ≠ 0, count(mx[r]r, λ j. ¬ j < i) ≠ 0, r < #r mx, r ≤ #clean0rows(mx, i) + #clean1rows(mx, i) ⊦ ∃ r0. count(mx[r0]r, λ j. j < i) ≠ 0 ∧ count(mx[r0]r, λ j. ¬ j < i) ≠ 0 ∧ (∀ r. r ≠ r0 ∧ r < #r mx → count(mx[r]r, λ j. j < i) = 0 ∨ count(mx[r]r, λ j. ¬ j < i) = 0)
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m < n + 1 ↔ ¬ n < m; (s) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic
| #dirtyrows(mx, i) = 1, 1 + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, count(mx[r]r, λ j. j < i) ≠ 0, count(mx[r]r, λ j. ¬ j < i) ≠ 0, r < #r mx, r ≤ #clean0rows(mx, i) + #clean1rows(mx, i) ⊦ ∃ r0. count(mx[r0]r, λ j. j < i) ≠ 0 ∧ count(mx[r0]r, λ j. ¬ j < i) ≠ 0 ∧ (∀ r. r ≠ r0 ∧ r < #r mx → count(mx[r]r, λ j. j < i) = 0 ∨ count(mx[r]r, λ j. ¬ j < i) = 0) |
#dirtyrows(mx, i) = 1, 1 + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, r < #r mx, r ≤ #clean0rows(mx, i) + #clean1rows(mx, i) ⊦ ∃ r0. count(mx[r0]r, λ j. j < i) ≠ 0 ∧ count(mx[r0]r, λ j. ¬ j < i) ≠ 0 ∧ (∀ r. r ≠ r0 ∧ r < #r mx → count(mx[r]r, λ j. j < i) = 0 ∨ count(mx[r]r, λ j. ¬ j < i) = 0)
| #dirtyrows(mx, i) = 1, 1 + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, r < #r mx, r ≤ #clean0rows(mx, i) + #clean1rows(mx, i) ⊦ ∃ r0. count(mx[r0]r, λ j. j < i) ≠ 0 ∧ count(mx[r0]r, λ j. ¬ j < i) ≠ 0 ∧ (∀ r. r ≠ r0 ∧ r < #r mx → count(mx[r]r, λ j. j < i) = 0 ∨ count(mx[r]r, λ j. ¬ j < i) = 0) |
#dirtyrows(mx, i) = 1, 1 + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, r < #r mx, r ≤ #clean0rows(mx, i) + #clean1rows(mx, i) ⊦ count(mx[#clean0rows(mx, i)]r, λ j. j < i) ≠ 0 ∧ count(mx[#clean0rows(mx, i)]r, λ j. ¬ j < i) ≠ 0 ∧ (∀ r. r ≠ #clean0rows(mx, i) ∧ r < #r mx → count(mx[r]r, λ j. j < i) = 0 ∨ count(mx[r]r, λ j. ¬ j < i) = 0)
Used terms: #clean0rows(mx, i)
| #dirtyrows(mx, i) = 1, 1 + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, r < #r mx, r ≤ #clean0rows(mx, i) + #clean1rows(mx, i) ⊦ count(mx[#clean0rows(mx, i)]r, λ j. j < i) ≠ 0 ∧ count(mx[#clean0rows(mx, i)]r, λ j. ¬ j < i) ≠ 0 ∧ (∀ r. r ≠ #clean0rows(mx, i) ∧ r < #r mx → count(mx[r]r, λ j. j < i) = 0 ∨ count(mx[r]r, λ j. ¬ j < i) = 0) |
#dirtyrows(mx, i) = 1, 1 + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, r < #r mx, r ≤ #clean0rows(mx, i) + #clean1rows(mx, i) ⊦ count(mx[#clean0rows(mx, i)]r, λ j. j < i) ≠ 0 ∧ count(mx[#clean0rows(mx, i)]r, λ j. ¬ j < i) ≠ 0 ∧ (r0 ≠ #clean0rows(mx, i) ∧ r0 < #r mx → count(mx[r0]r, λ j. j < i) = 0 ∨ count(mx[r0]r, λ j. ¬ j < i) = 0)
| #dirtyrows(mx, i) = 1, 1 + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, r < #r mx, r ≤ #clean0rows(mx, i) + #clean1rows(mx, i) ⊦ count(mx[#clean0rows(mx, i)]r, λ j. j < i) ≠ 0 ∧ count(mx[#clean0rows(mx, i)]r, λ j. ¬ j < i) ≠ 0 ∧ (r0 ≠ #clean0rows(mx, i) ∧ r0 < #r mx → count(mx[r0]r, λ j. j < i) = 0 ∨ count(mx[r0]r, λ j. ¬ j < i) = 0) |
⊦ #clean0rows(mx, i) < #r mx → count(mx[#clean0rows(mx, i)]r, λ j. ¬ j < i) ≠ 0
#dirtyrows(mx, i) = 1, 1 + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, r < #r mx, r ≤ #clean0rows(mx, i) + #clean1rows(mx, i), #clean0rows(mx, i) < #r mx → count(mx[#clean0rows(mx, i)]r, λ j. ¬ j < i) ≠ 0 ⊦ count(mx[#clean0rows(mx, i)]r, λ j. j < i) ≠ 0 ∧ count(mx[#clean0rows(mx, i)]r, λ j. ¬ j < i) ≠ 0 ∧ (r0 ≠ #clean0rows(mx, i) ∧ r0 < #r mx → count(mx[r0]r, λ j. j < i) = 0 ∨ count(mx[r0]r, λ j. ¬ j < i) = 0)
Used terms: mx, i
| ⊦ #clean0rows(mx, i) < #r mx → count(mx[#clean0rows(mx, i)]r, λ j. ¬ j < i) ≠ 0 |
| #dirtyrows(mx, i) = 1, 1 + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, r < #r mx, r ≤ #clean0rows(mx, i) + #clean1rows(mx, i), #clean0rows(mx, i) < #r mx → count(mx[#clean0rows(mx, i)]r, λ j. ¬ j < i) ≠ 0 ⊦ count(mx[#clean0rows(mx, i)]r, λ j. j < i) ≠ 0 ∧ count(mx[#clean0rows(mx, i)]r, λ j. ¬ j < i) ≠ 0 ∧ (r0 ≠ #clean0rows(mx, i) ∧ r0 < #r mx → count(mx[r0]r, λ j. j < i) = 0 ∨ count(mx[r0]r, λ j. ¬ j < i) = 0) |
#c mx ≠ 0 ⊦ ¬ #r mx < #clean0rows(mx, i) + #clean1rows(mx, i)
#dirtyrows(mx, i) = 1, 1 + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, r < #r mx, r ≤ #clean0rows(mx, i) + #clean1rows(mx, i), ¬ #r mx < #clean0rows(mx, i) + #clean1rows(mx, i), #clean0rows(mx, i) < #r mx → count(mx[#clean0rows(mx, i)]r, λ j. ¬ j < i) ≠ 0 ⊦ count(mx[#clean0rows(mx, i)]r, λ j. j < i) ≠ 0 ∧ count(mx[#clean0rows(mx, i)]r, λ j. ¬ j < i) ≠ 0 ∧ (r0 ≠ #clean0rows(mx, i) ∧ r0 < #r mx → count(mx[r0]r, λ j. j < i) = 0 ∨ count(mx[r0]r, λ j. ¬ j < i) = 0)
Used terms: mx, i
| #c mx ≠ 0 ⊦ ¬ #r mx < #clean0rows(mx, i) + #clean1rows(mx, i) |
| #dirtyrows(mx, i) = 1, 1 + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, r < #r mx, r ≤ #clean0rows(mx, i) + #clean1rows(mx, i), ¬ #r mx < #clean0rows(mx, i) + #clean1rows(mx, i), #clean0rows(mx, i) < #r mx → count(mx[#clean0rows(mx, i)]r, λ j. ¬ j < i) ≠ 0 ⊦ count(mx[#clean0rows(mx, i)]r, λ j. j < i) ≠ 0 ∧ count(mx[#clean0rows(mx, i)]r, λ j. ¬ j < i) ≠ 0 ∧ (r0 ≠ #clean0rows(mx, i) ∧ r0 < #r mx → count(mx[r0]r, λ j. j < i) = 0 ∨ count(mx[r0]r, λ j. ¬ j < i) = 0) |
#dirtyrows(mx, i) = 1, 1 + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, r < #r mx, #clean0rows(mx, i) + #clean1rows(mx, i) ≤ #r mx, r ≤ #clean0rows(mx, i) + #clean1rows(mx, i), #clean0rows(mx, i) < #r mx → count(mx[#clean0rows(mx, i)]r, λ j. ¬ j < i) ≠ 0 ⊦ count(mx[#clean0rows(mx, i)]r, λ j. j < i) ≠ 0 ∧ count(mx[#clean0rows(mx, i)]r, λ j. ¬ j < i) ≠ 0 ∧ (r0 ≠ #clean0rows(mx, i) ∧ r0 < #r mx → count(mx[r0]r, λ j. j < i) = 0 ∨ count(mx[r0]r, λ j. ¬ j < i) = 0)
Used simplifier rules: ⊦ m < n → m ≤ n; (s) let: ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1; (forward) from specification nat ⊦ m < n ↔ ¬ n ≤ m; (ss)
| #dirtyrows(mx, i) = 1, 1 + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, r < #r mx, #clean0rows(mx, i) + #clean1rows(mx, i) ≤ #r mx, r ≤ #clean0rows(mx, i) + #clean1rows(mx, i), #clean0rows(mx, i) < #r mx → count(mx[#clean0rows(mx, i)]r, λ j. ¬ j < i) ≠ 0 ⊦ count(mx[#clean0rows(mx, i)]r, λ j. j < i) ≠ 0 ∧ count(mx[#clean0rows(mx, i)]r, λ j. ¬ j < i) ≠ 0 ∧ (r0 ≠ #clean0rows(mx, i) ∧ r0 < #r mx → count(mx[r0]r, λ j. j < i) = 0 ∨ count(mx[r0]r, λ j. ¬ j < i) = 0) |
#dirtyrows(mx, i) = 1, 1 + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, count(mx[#clean0rows(mx, i)]r, λ j. ¬ j < i) ≠ 0, r < #r mx, r ≤ #clean0rows(mx, i) + #clean1rows(mx, i), #clean0rows(mx, i) + #clean1rows(mx, i) ≤ #r mx ⊦ count(mx[#clean0rows(mx, i)]r, λ j. j < i) ≠ 0 ∧ count(mx[#clean0rows(mx, i)]r, λ j. ¬ j < i) ≠ 0 ∧ (r0 ≠ #clean0rows(mx, i) ∧ r0 < #r mx → count(mx[r0]r, λ j. j < i) = 0 ∨ count(mx[r0]r, λ j. ¬ j < i) = 0)
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss) fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat ⊦ m + m0 ≤ m ↔ m0 = 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic let: ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1; (forward) from specification nat lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic ⊦ m < n → n ≠ 0; (s) ⊦ m ≤ m; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ m < n → ¬ n < m; (s) ⊦ m ≤ n → (n ≤ m ↔ m = n); (s) ⊦ n + 0 = n; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ m < n → m ≤ n; (s) ⊦ m = n + 1 → ¬ m ≤ n; (s)
| #dirtyrows(mx, i) = 1, 1 + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, count(mx[#clean0rows(mx, i)]r, λ j. ¬ j < i) ≠ 0, r < #r mx, r ≤ #clean0rows(mx, i) + #clean1rows(mx, i), #clean0rows(mx, i) + #clean1rows(mx, i) ≤ #r mx ⊦ count(mx[#clean0rows(mx, i)]r, λ j. j < i) ≠ 0 ∧ count(mx[#clean0rows(mx, i)]r, λ j. ¬ j < i) ≠ 0 ∧ (r0 ≠ #clean0rows(mx, i) ∧ r0 < #r mx → count(mx[r0]r, λ j. j < i) = 0 ∨ count(mx[r0]r, λ j. ¬ j < i) = 0) |
#dirtyrows(mx, i) = 1, 1 + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, count(mx[#clean0rows(mx, i)]r, λ j. ¬ j < i) ≠ 0, r < #r mx, #clean0rows(mx, i) + #clean1rows(mx, i) ≤ #r mx, r ≤ #clean0rows(mx, i) + #clean1rows(mx, i) ⊦ count(mx[#clean0rows(mx, i)]r, λ j. j < i) ≠ 0 ∧ (r0 ≠ #clean0rows(mx, i) ∧ r0 < #r mx → count(mx[r0]r, λ j. j < i) = 0 ∨ count(mx[r0]r, λ j. ¬ j < i) = 0)
| #dirtyrows(mx, i) = 1, 1 + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, count(mx[#clean0rows(mx, i)]r, λ j. ¬ j < i) ≠ 0, r < #r mx, #clean0rows(mx, i) + #clean1rows(mx, i) ≤ #r mx, r ≤ #clean0rows(mx, i) + #clean1rows(mx, i) ⊦ count(mx[#clean0rows(mx, i)]r, λ j. j < i) ≠ 0 ∧ (r0 ≠ #clean0rows(mx, i) ∧ r0 < #r mx → count(mx[r0]r, λ j. j < i) = 0 ∨ count(mx[r0]r, λ j. ¬ j < i) = 0) |
⊦ #clean1rows(mx, i) + r + 1 = #r mx → count(mx[r]r, λ j. j < i) ≠ 0
#dirtyrows(mx, i) = 1, 1 + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, count(mx[#clean0rows(mx, i)]r, λ j. ¬ j < i) ≠ 0, r < #r mx, r ≤ #clean0rows(mx, i) + #clean1rows(mx, i), #clean0rows(mx, i) + #clean1rows(mx, i) ≤ #r mx, #clean1rows(mx, i) + #clean0rows(mx, i) + 1 = #r mx → count(mx[#clean0rows(mx, i)]r, λ j. j < i) ≠ 0 ⊦ count(mx[#clean0rows(mx, i)]r, λ j. j < i) ≠ 0 ∧ (r0 ≠ #clean0rows(mx, i) ∧ r0 < #r mx → count(mx[r0]r, λ j. j < i) = 0 ∨ count(mx[r0]r, λ j. ¬ j < i) = 0)
Used terms: mx, i, #clean0rows(mx, i)
| ⊦ #clean1rows(mx, i) + r + 1 = #r mx → count(mx[r]r, λ j. j < i) ≠ 0 |
| #dirtyrows(mx, i) = 1, 1 + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, count(mx[#clean0rows(mx, i)]r, λ j. ¬ j < i) ≠ 0, r < #r mx, r ≤ #clean0rows(mx, i) + #clean1rows(mx, i), #clean0rows(mx, i) + #clean1rows(mx, i) ≤ #r mx, #clean1rows(mx, i) + #clean0rows(mx, i) + 1 = #r mx → count(mx[#clean0rows(mx, i)]r, λ j. j < i) ≠ 0 ⊦ count(mx[#clean0rows(mx, i)]r, λ j. j < i) ≠ 0 ∧ (r0 ≠ #clean0rows(mx, i) ∧ r0 < #r mx → count(mx[r0]r, λ j. j < i) = 0 ∨ count(mx[r0]r, λ j. ¬ j < i) = 0) |
#dirtyrows(mx, i) = 1, 1 + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, count(mx[#clean0rows(mx, i)]r, λ j. ¬ j < i) ≠ 0, count(mx[#clean0rows(mx, i)]r, λ j. j < i) ≠ 0, count(mx[r0]r, λ j. j < i) ≠ 0, count(mx[r0]r, λ j. ¬ j < i) ≠ 0, r0 ≠ #clean0rows(mx, i), r < #r mx, r0 < #r mx, r0 ≤ #clean0rows(mx, i) + #clean1rows(mx, i), #clean0rows(mx, i) + #clean1rows(mx, i) ≤ #r mx, r ≤ #clean0rows(mx, i) + #clean1rows(mx, i) ⊦
Used simplifier rules: ⊦ m < n → m ≤ n; (s) let: ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1; (forward) from specification nat ⊦ 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) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic
| #dirtyrows(mx, i) = 1, 1 + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, count(mx[#clean0rows(mx, i)]r, λ j. ¬ j < i) ≠ 0, count(mx[#clean0rows(mx, i)]r, λ j. j < i) ≠ 0, count(mx[r0]r, λ j. j < i) ≠ 0, count(mx[r0]r, λ j. ¬ j < i) ≠ 0, r0 ≠ #clean0rows(mx, i), r < #r mx, r0 < #r mx, r0 ≤ #clean0rows(mx, i) + #clean1rows(mx, i), #clean0rows(mx, i) + #clean1rows(mx, i) ≤ #r mx, r ≤ #clean0rows(mx, i) + #clean1rows(mx, i) ⊦ |
⊦ r < #clean0rows(mx, i) → count(mx[r]r, λ j. ¬ j < i) = 0
#dirtyrows(mx, i) = 1, 1 + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, count(mx[#clean0rows(mx, i)]r, λ j. ¬ j < i) ≠ 0, count(mx[#clean0rows(mx, i)]r, λ j. j < i) ≠ 0, count(mx[r0]r, λ j. j < i) ≠ 0, count(mx[r0]r, λ j. ¬ j < i) ≠ 0, r0 ≠ #clean0rows(mx, i), r0 < #r mx, r < #r mx, r ≤ #clean0rows(mx, i) + #clean1rows(mx, i), #clean0rows(mx, i) + #clean1rows(mx, i) ≤ #r mx, r0 ≤ #clean0rows(mx, i) + #clean1rows(mx, i), r0 < #clean0rows(mx, i) → count(mx[r0]r, λ j. ¬ j < i) = 0 ⊦
Used terms: r0, mx, i
| ⊦ r < #clean0rows(mx, i) → count(mx[r]r, λ j. ¬ j < i) = 0 |
| #dirtyrows(mx, i) = 1, 1 + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, count(mx[#clean0rows(mx, i)]r, λ j. ¬ j < i) ≠ 0, count(mx[#clean0rows(mx, i)]r, λ j. j < i) ≠ 0, count(mx[r0]r, λ j. j < i) ≠ 0, count(mx[r0]r, λ j. ¬ j < i) ≠ 0, r0 ≠ #clean0rows(mx, i), r0 < #r mx, r < #r mx, r ≤ #clean0rows(mx, i) + #clean1rows(mx, i), #clean0rows(mx, i) + #clean1rows(mx, i) ≤ #r mx, r0 ≤ #clean0rows(mx, i) + #clean1rows(mx, i), r0 < #clean0rows(mx, i) → count(mx[r0]r, λ j. ¬ j < i) = 0 ⊦ |
#dirtyrows(mx, i) = 1, 1 + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, #clean1rows(mx, i) ≠ 0, count(mx[#clean0rows(mx, i)]r, λ j. ¬ j < i) ≠ 0, count(mx[#clean0rows(mx, i)]r, λ j. j < i) ≠ 0, count(mx[r0]r, λ j. j < i) ≠ 0, count(mx[r0]r, λ j. ¬ j < i) ≠ 0, r0 ≠ #clean0rows(mx, i), r < #r mx, r0 < #r mx, #clean0rows(mx, i) < r0, #clean0rows(mx, i) < #r mx, r0 ≤ #clean0rows(mx, i) + #clean1rows(mx, i), #clean0rows(mx, i) + #clean1rows(mx, i) ≤ #r mx, r ≤ #clean0rows(mx, i) + #clean1rows(mx, i) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ ¬ m + n < m; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic ⊦ m < m + n ↔ n ≠ 0; (s) ⊦ m = m0 + n0 ∧ n < n0 → m0 + n < m; (s) ⊦ m +1 = m + 1; (s) ⊦ m < n → n ≠ 0; (s) trans-nat: ⊦ n < n0 ∧ n0 < n1 → n < n1; (forward) from specification nat-basic fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m ≠ n → (m < n ↔ ¬ n < m); (ss)
| #dirtyrows(mx, i) = 1, 1 + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx ≠ 0, #clean1rows(mx, i) ≠ 0, count(mx[#clean0rows(mx, i)]r, λ j. ¬ j < i) ≠ 0, count(mx[#clean0rows(mx, i)]r, λ j. j < i) ≠ 0, count(mx[r0]r, λ j. j < i) ≠ 0, count(mx[r0]r, λ j. ¬ j < i) ≠ 0, r0 ≠ #clean0rows(mx, i), r < #r mx, r0 < #r mx, #clean0rows(mx, i) < r0, #clean0rows(mx, i) < #r mx, r0 ≤ #clean0rows(mx, i) + #clean1rows(mx, i), #clean0rows(mx, i) + #clean1rows(mx, i) ≤ #r mx, r ≤ #clean0rows(mx, i) + #clean1rows(mx, i) ⊦ |
⊦ #r mx ≤ #clean1rows(mx, i) + r ∧ r < #r mx → count(mx[r]r, λ j. j < i) = 0
Used simplifier rules: ⊦ m ≤ n ↔ ¬ n < m; (ss) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ m ≠ n → (m < n + 1 ↔ m < n); (s) ⊦ m < n → ¬ n < m; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: mx, i, r0
| ⊦ #r mx ≤ #clean1rows(mx, i) + r ∧ r < #r mx → count(mx[r]r, λ j. j < i) = 0 |
The following image shows the proof tree of sequent calculus. The proved goal is at the bottom. You can click on the nodes to view additional rules. See here for details on colors in a proof tree.