| #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, #c mx ≠ 0, ¬(#clean0rows(mx0, i) = #clean0rows(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, ¬(#clean0rows(mx0, i) = #clean0rows(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, #clean0rows(mx0, i) ≠ #clean0rows(mx, i), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦
| #c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, #clean0rows(mx0, i) ≠ #clean0rows(mx, i), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦ |
#c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, #clean0rows(mx0, i) ≠ #clean0rows(mx, i), #clean0rows(mx0, i) < #clean0rows(mx, i), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦
#c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, #clean0rows(mx0, i) ≠ #clean0rows(mx, i), ¬ #clean0rows(mx0, i) < #clean0rows(mx, i), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦
Used formulas: #clean0rows(mx0, i) < #clean0rows(mx, i)
| #c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, #clean0rows(mx0, i) ≠ #clean0rows(mx, i), #clean0rows(mx0, i) < #clean0rows(mx, i), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦ |
⊦ ¬ #r mx < #clean0rows(mx, i)
#c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, #clean0rows(mx0, i) ≠ #clean0rows(mx, i), #clean0rows(mx0, i) < #clean0rows(mx, i), ¬ #r mx < #clean0rows(mx, i), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦
Used terms: i, mx
| ⊦ ¬ #r mx < #clean0rows(mx, i) |
| #c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, #clean0rows(mx0, i) ≠ #clean0rows(mx, i), #clean0rows(mx0, i) < #clean0rows(mx, i), ¬ #r mx < #clean0rows(mx, i), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦ |
#c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, #clean0rows(mx0, i) ≠ #clean0rows(mx, i), #clean0rows(mx0, i) < #clean0rows(mx, i), #clean0rows(mx0, i) < #r mx0, #clean0rows(mx, i) ≤ #r mx0, ∀ 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 fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat ⊦ m < n ↔ ¬ n ≤ m; (ss)
| #c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, #clean0rows(mx0, i) ≠ #clean0rows(mx, i), #clean0rows(mx0, i) < #clean0rows(mx, i), #clean0rows(mx0, i) < #r mx0, #clean0rows(mx, i) ≤ #r mx0, ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦ |
⊦ #clean0rows(mx, i) < #r mx → count(mx[#clean0rows(mx, i)]r, λ j. ¬ j < i) ≠ 0
#c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, #clean0rows(mx0, i) ≠ #clean0rows(mx, i), #clean0rows(mx0, i) < #r mx0, #clean0rows(mx0, i) < #clean0rows(mx, i), #clean0rows(mx, i) ≤ #r mx0, #clean0rows(mx0, i) < #r mx0 → count(mx0[#clean0rows(mx0, i)]r, λ j. ¬ j < i) ≠ 0, ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦
Used terms: mx0, i
| ⊦ #clean0rows(mx, i) < #r mx → count(mx[#clean0rows(mx, i)]r, λ j. ¬ j < i) ≠ 0 |
| #c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, #clean0rows(mx0, i) ≠ #clean0rows(mx, i), #clean0rows(mx0, i) < #r mx0, #clean0rows(mx0, i) < #clean0rows(mx, i), #clean0rows(mx, i) ≤ #r mx0, #clean0rows(mx0, i) < #r mx0 → count(mx0[#clean0rows(mx0, i)]r, λ j. ¬ j < i) ≠ 0, ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦ |
#c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, #clean0rows(mx0, i) ≠ #clean0rows(mx, i), count(mx0[#clean0rows(mx0, i)]r, λ j. ¬ j < i) ≠ 0, #clean0rows(mx0, i) < #clean0rows(mx, i), #clean0rows(mx0, i) < #r mx0, #clean0rows(mx, i) ≤ #r mx0, ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦
| #c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, #clean0rows(mx0, i) ≠ #clean0rows(mx, i), count(mx0[#clean0rows(mx0, i)]r, λ j. ¬ j < i) ≠ 0, #clean0rows(mx0, i) < #clean0rows(mx, i), #clean0rows(mx0, i) < #r mx0, #clean0rows(mx, i) ≤ #r mx0, ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦ |
⊦ r < #clean0rows(mx, i) → count(mx[r]r, λ j. ¬ j < i) = 0
#c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, #clean0rows(mx0, i) ≠ #clean0rows(mx, i), count(mx0[#clean0rows(mx0, i)]r, λ j. ¬ j < i) ≠ 0, #clean0rows(mx0, i) < #r mx0, #clean0rows(mx0, i) < #clean0rows(mx, i), #clean0rows(mx, i) ≤ #r mx0, #clean0rows(mx0, i) < #clean0rows(mx, i) → count(mx[#clean0rows(mx0, i)]r, λ j. ¬ j < i) = 0, ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦
Used terms: #clean0rows(mx0, i), mx, i
| ⊦ r < #clean0rows(mx, i) → count(mx[r]r, λ j. ¬ j < i) = 0 |
| #c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, #clean0rows(mx0, i) ≠ #clean0rows(mx, i), count(mx0[#clean0rows(mx0, i)]r, λ j. ¬ j < i) ≠ 0, #clean0rows(mx0, i) < #r mx0, #clean0rows(mx0, i) < #clean0rows(mx, i), #clean0rows(mx, i) ≤ #r mx0, #clean0rows(mx0, i) < #clean0rows(mx, i) → count(mx[#clean0rows(mx0, i)]r, λ j. ¬ j < i) = 0, ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦ |
#c mx = #c mx0, #r mx = #r mx0, count(mx[#clean0rows(mx0, i)]r, λ j. ¬ j < i) = 0, #c mx0 ≠ 0, #clean0rows(mx0, i) ≠ #clean0rows(mx, i), count(mx0[#clean0rows(mx0, i)]r, λ j. ¬ j < i) ≠ 0, #clean0rows(mx0, i) < #clean0rows(mx, i), #clean0rows(mx0, i) < #r mx0, #clean0rows(mx, i) ≤ #r mx0, ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦
| #c mx = #c mx0, #r mx = #r mx0, count(mx[#clean0rows(mx0, i)]r, λ j. ¬ j < i) = 0, #c mx0 ≠ 0, #clean0rows(mx0, i) ≠ #clean0rows(mx, i), count(mx0[#clean0rows(mx0, i)]r, λ j. ¬ j < i) ≠ 0, #clean0rows(mx0, i) < #clean0rows(mx, i), #clean0rows(mx0, i) < #r mx0, #clean0rows(mx, i) ≤ #r mx0, ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦ |
⊦ perm(x, y) → count(x, p) = count(y, p)
#c mx = #c mx0, #r mx = #r mx0, count(mx[#clean0rows(mx0, i)]r, λ j. ¬ j < i) = 0, #c mx0 ≠ 0, #clean0rows(mx0, i) ≠ #clean0rows(mx, i), count(mx0[#clean0rows(mx0, i)]r, λ j. ¬ j < i) ≠ 0, #clean0rows(mx0, i) < #r mx0, #clean0rows(mx0, i) < #clean0rows(mx, i), #clean0rows(mx, i) ≤ #r mx0, ¬ perm(mx0[#clean0rows(mx0, i)]r, mx[#clean0rows(mx0, i)]r), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦
Used terms: mx[#clean0rows(mx0, i)]r, mx0[#clean0rows(mx0, i)]r, λ j. ¬ j < i
| ⊦ perm(x, y) → count(x, p) = count(y, p) |
| #c mx = #c mx0, #r mx = #r mx0, count(mx[#clean0rows(mx0, i)]r, λ j. ¬ j < i) = 0, #c mx0 ≠ 0, #clean0rows(mx0, i) ≠ #clean0rows(mx, i), count(mx0[#clean0rows(mx0, i)]r, λ j. ¬ j < i) ≠ 0, #clean0rows(mx0, i) < #r mx0, #clean0rows(mx0, i) < #clean0rows(mx, i), #clean0rows(mx, i) ≤ #r mx0, ¬ perm(mx0[#clean0rows(mx0, i)]r, mx[#clean0rows(mx0, i)]r), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦ |
Used terms: #clean0rows(mx0, i)
| #c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, #clean0rows(mx0, i) ≠ #clean0rows(mx, i), ¬ #clean0rows(mx0, i) < #clean0rows(mx, i), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦ |
#c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, #clean0rows(mx0, i) ≠ #clean0rows(mx, i), #clean0rows(mx, i) < #clean0rows(mx0, i), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m ≠ n → (m < n ↔ ¬ n < m); (ss)
| #c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, #clean0rows(mx0, i) ≠ #clean0rows(mx, i), #clean0rows(mx, i) < #clean0rows(mx0, i), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦ |
#c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, #clean0rows(mx0, i) ≠ #clean0rows(mx, i), #clean0rows(mx0, i) < #clean0rows(mx, i), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦
#c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, #clean0rows(mx0, i) ≠ #clean0rows(mx, i), #clean0rows(mx, i) < #clean0rows(mx0, i), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦ #c mx0 = #c mx ∧ #r mx0 = #r mx ∧ #c mx ≠ 0 ∧ #clean0rows(mx, i) ≠ #clean0rows(mx0, i) ∧ (∀ r. r < #r mx → perm(mx[r]r, mx0[r]r))
| #c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, #clean0rows(mx0, i) ≠ #clean0rows(mx, i), #clean0rows(mx0, i) < #clean0rows(mx, i), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦ |
| #c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, #clean0rows(mx0, i) ≠ #clean0rows(mx, i), #clean0rows(mx, i) < #clean0rows(mx0, i), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦ #c mx0 = #c mx ∧ #r mx0 = #r mx ∧ #c mx ≠ 0 ∧ #clean0rows(mx, i) ≠ #clean0rows(mx0, i) ∧ (∀ r. r < #r mx → perm(mx[r]r, mx0[r]r)) |
#c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, #clean0rows(mx0, i) ≠ #clean0rows(mx, i), r < #r mx0, #clean0rows(mx, i) < #clean0rows(mx0, i), ¬ perm(mx[r]r, mx0[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, #c mx0 ≠ 0, #clean0rows(mx0, i) ≠ #clean0rows(mx, i), r < #r mx0, #clean0rows(mx, i) < #clean0rows(mx0, i), ¬ perm(mx[r]r, mx0[r]r), ∀ r. r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦ |
#c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, #clean0rows(mx0, i) ≠ #clean0rows(mx, i), #clean0rows(mx, i) < #clean0rows(mx0, i), r < #r mx0, ¬ perm(mx[r]r, mx0[r]r), r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦
Used terms: r
| #c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, #clean0rows(mx0, i) ≠ #clean0rows(mx, i), #clean0rows(mx, i) < #clean0rows(mx0, i), r < #r mx0, ¬ perm(mx[r]r, mx0[r]r), r < #r mx0 → perm(mx0[r]r, mx[r]r) ⊦ |
#c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, #clean0rows(mx0, i) ≠ #clean0rows(mx, i), r < #r mx0, #clean0rows(mx, i) < #clean0rows(mx0, i), perm(mx0[r]r, mx[r]r), ¬ perm(mx[r]r, mx0[r]r) ⊦
| #c mx = #c mx0, #r mx = #r mx0, #c mx0 ≠ 0, #clean0rows(mx0, i) ≠ #clean0rows(mx, i), r < #r mx0, #clean0rows(mx, i) < #clean0rows(mx0, i), perm(mx0[r]r, mx[r]r), ¬ perm(mx[r]r, mx0[r]r) ⊦ |
⊦ perm(x, y) ↔ perm(y, x)
Used terms: mx[r]r, mx0[r]r
| ⊦ perm(x, y) ↔ perm(y, x) |
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.