| #r mx = #r mx0, #c mx = #c mx0, #c mx ≠ 0, ∀ r. r < #r mx → perm(mx0[r]r, mx[r]r) ⊦ #dirtyrows(mx0, i) = #dirtyrows(mx, i) ↔ true |
#c mx = #c mx0, #r mx = #r mx0, #c mx ≠ 0, ¬(#dirtyrows(mx0, i) = #dirtyrows(mx, i) ↔ true), ∀ r. r < #r mx → perm(mx0[r]r, mx[r]r) ⊦
| #c mx = #c mx0, #r mx = #r mx0, #c mx ≠ 0, ¬(#dirtyrows(mx0, i) = #dirtyrows(mx, i) ↔ true), ∀ r. r < #r mx → perm(mx0[r]r, mx[r]r) ⊦ |
#c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, #dirtyrows(mx0, i) ≠ #dirtyrows(mx, i), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦
| #c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, #dirtyrows(mx0, i) ≠ #dirtyrows(mx, i), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦ |
⊦ #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx
#c mx = #c mx0, #r mx = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx0 ≠ 0, #dirtyrows(mx0, i) ≠ #dirtyrows(mx, i), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦
Used terms: i, mx
| ⊦ #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx |
| #c mx = #c mx0, #r mx = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx, #c mx0 ≠ 0, #dirtyrows(mx0, i) ≠ #dirtyrows(mx, i), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦ |
#c mx = #c mx0, #r mx = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx0, #c mx0 ≠ 0, #dirtyrows(mx0, i) ≠ #dirtyrows(mx, i), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦
| #c mx = #c mx0, #r mx = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx0, #c mx0 ≠ 0, #dirtyrows(mx0, i) ≠ #dirtyrows(mx, i), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦ |
⊦ #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx
#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, #c mx0 ≠ 0, #dirtyrows(mx0, i) ≠ #dirtyrows(mx, i), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦
Used terms: i, mx0
| ⊦ #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx |
| #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, #c mx0 ≠ 0, #dirtyrows(mx0, i) ≠ #dirtyrows(mx, i), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦ |
#r mx = #r mx0, #c mx = #c mx0, #c mx ≠ 0, ∀ r. r < #r mx → perm(mx0[r]r, mx[r]r) ⊦ #clean0rows(mx0, i) = #clean0rows(mx, i) ↔ true
#c mx = #c mx0, #r mx = #r mx0, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx0, #c mx0 ≠ 0, #dirtyrows(mx0, i) ≠ #dirtyrows(mx, i), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦ #c mx ≠ 0 ∧ (∀ r. r < #r mx → perm(mx0[r]r, mx[r]r))
#c mx = #c mx0, #r mx = #r mx0, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx0, #clean0rows(mx0, i) = #clean0rows(mx, i) ↔ true, #c mx0 ≠ 0, #dirtyrows(mx0, i) ≠ #dirtyrows(mx, i), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦
Used terms: mx, mx0, i
| #r mx = #r mx0, #c mx = #c mx0, #c mx ≠ 0, ∀ r. r < #r mx → perm(mx0[r]r, mx[r]r) ⊦ #clean0rows(mx0, i) = #clean0rows(mx, i) ↔ true |
| #c mx = #c mx0, #r mx = #r mx0, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx0, #c mx0 ≠ 0, #dirtyrows(mx0, i) ≠ #dirtyrows(mx, i), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦ #c mx ≠ 0 ∧ (∀ r. r < #r mx → perm(mx0[r]r, mx[r]r)) |
#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, #c mx0 ≠ 0, #dirtyrows(mx0, i) ≠ #dirtyrows(mx, i), r < #r mx0, ¬ perm(mx0[r]r, mx[r]r), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦
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) + #clean1rows(mx, i) = #r mx0, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #c mx0 ≠ 0, #dirtyrows(mx0, i) ≠ #dirtyrows(mx, i), r < #r mx0, ¬ perm(mx0[r]r, mx[r]r), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦ |
Used terms: r
| #c mx = #c mx0, #r mx = #r mx0, #dirtyrows(mx0, i) + #clean0rows(mx0, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx0, #clean0rows(mx0, i) = #clean0rows(mx, i) ↔ true, #c mx0 ≠ 0, #dirtyrows(mx0, i) ≠ #dirtyrows(mx, i), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦ |
#c mx = #c mx0, #clean0rows(mx0, i) = #clean0rows(mx, i), #r mx = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx0, #dirtyrows(mx0, i) + #clean0rows(mx, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) + #clean1rows(mx0, i) = #clean1rows(mx, i) + #dirtyrows(mx, i), #c mx0 ≠ 0, #dirtyrows(mx0, i) ≠ #dirtyrows(mx, i), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦
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 mx = #c mx0, #clean0rows(mx0, i) = #clean0rows(mx, i), #r mx = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx0, #dirtyrows(mx0, i) + #clean0rows(mx, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) + #clean1rows(mx0, i) = #clean1rows(mx, i) + #dirtyrows(mx, i), #c mx0 ≠ 0, #dirtyrows(mx0, i) ≠ #dirtyrows(mx, i), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦ |
#r mx = #r mx0, #c mx = #c mx0, #c mx ≠ 0, ∀ r. r < #r mx → perm(mx0[r]r, mx[r]r) ⊦ #clean1rows(mx0, i) = #clean1rows(mx, i) ↔ true
#c mx = #c mx0, #clean0rows(mx0, i) = #clean0rows(mx, i), #r mx = #r mx0, #dirtyrows(mx0, i) + #clean1rows(mx0, i) = #clean1rows(mx, i) + #dirtyrows(mx, i), #dirtyrows(mx0, i) + #clean0rows(mx, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx0, #c mx0 ≠ 0, #dirtyrows(mx0, i) ≠ #dirtyrows(mx, i), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦ #c mx ≠ 0 ∧ (∀ r. r < #r mx → perm(mx0[r]r, mx[r]r))
Used simplifier rules: eqs: ⊦ m = n + n0 ∧ m = n + n1 → n0 = n1; (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 Used terms: mx, mx0, i
| #r mx = #r mx0, #c mx = #c mx0, #c mx ≠ 0, ∀ r. r < #r mx → perm(mx0[r]r, mx[r]r) ⊦ #clean1rows(mx0, i) = #clean1rows(mx, i) ↔ true |
| #c mx = #c mx0, #clean0rows(mx0, i) = #clean0rows(mx, i), #r mx = #r mx0, #dirtyrows(mx0, i) + #clean1rows(mx0, i) = #clean1rows(mx, i) + #dirtyrows(mx, i), #dirtyrows(mx0, i) + #clean0rows(mx, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx0, #c mx0 ≠ 0, #dirtyrows(mx0, i) ≠ #dirtyrows(mx, i), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦ #c mx ≠ 0 ∧ (∀ r. r < #r mx → perm(mx0[r]r, mx[r]r)) |
#c mx = #c mx0, #clean0rows(mx0, i) = #clean0rows(mx, i), #r mx = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx0, #dirtyrows(mx0, i) + #clean0rows(mx, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) + #clean1rows(mx0, i) = #clean1rows(mx, i) + #dirtyrows(mx, i), #c mx0 ≠ 0, #dirtyrows(mx0, i) ≠ #dirtyrows(mx, i), r < #r mx0, ¬ perm(mx0[r]r, mx[r]r), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦
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, #clean0rows(mx0, i) = #clean0rows(mx, i), #r mx = #r mx0, #dirtyrows(mx, i) + #clean0rows(mx, i) + #clean1rows(mx, i) = #r mx0, #dirtyrows(mx0, i) + #clean0rows(mx, i) + #clean1rows(mx0, i) = #r mx0, #dirtyrows(mx0, i) + #clean1rows(mx0, i) = #clean1rows(mx, i) + #dirtyrows(mx, i), #c mx0 ≠ 0, #dirtyrows(mx0, i) ≠ #dirtyrows(mx, i), r < #r mx0, ¬ perm(mx0[r]r, mx[r]r), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦ |
Used terms: r
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.