| #r mx = #r mx0, #c mx = #c mx0, c < #c mx, scolsorted(mx, #c mx, mx0) ⊦ count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i) = #clean0rows(mx0, i) |
#c mx = #c mx0, #r mx = #r mx0, count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i) ≠ #clean0rows(mx0, i), c < #c mx, scolsorted(mx, #c mx, mx0) ⊦
| #c mx = #c mx0, #r mx = #r mx0, count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i) ≠ #clean0rows(mx0, i), c < #c mx, scolsorted(mx, #c mx, mx0) ⊦ |
#c mx = #c mx0, #r mx = #r mx0, count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i) ≠ #clean0rows(mx0, i), c < #c mx0, scolsorted(mx, #c mx0, mx0) ⊦
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, count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i) ≠ #clean0rows(mx0, i), c < #c mx0, scolsorted(mx, #c mx0, mx0) ⊦ |
#c mx ≠ 0, #r mx = #r mx0, #c mx = #c mx0 ⊦ scolsorted(mx, #c mx0, mx0) → ¬ #clean0rows(mx, i) < #clean0rows(mx0, i)
#c mx = #c mx0, #r mx = #r mx0, count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i) ≠ #clean0rows(mx0, i), c < #c mx0, scolsorted(mx, #c mx0, mx0), scolsorted(mx, #c mx0, mx0) → ¬ #clean0rows(mx, i) < #clean0rows(mx0, i) ⊦
Used simplifier rules: f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic Used terms: mx, mx0, i
| #c mx ≠ 0, #r mx = #r mx0, #c mx = #c mx0 ⊦ scolsorted(mx, #c mx0, mx0) → ¬ #clean0rows(mx, i) < #clean0rows(mx0, i) |
| #c mx = #c mx0, #r mx = #r mx0, count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i) ≠ #clean0rows(mx0, i), c < #c mx0, scolsorted(mx, #c mx0, mx0), scolsorted(mx, #c mx0, mx0) → ¬ #clean0rows(mx, i) < #clean0rows(mx0, i) ⊦ |
#c mx = #c mx0, #r mx = #r mx0, count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i) ≠ #clean0rows(mx0, i), c < #c mx0, scolsorted(mx, #c mx0, mx0), #clean0rows(mx0, i) ≤ #clean0rows(mx, i) ⊦
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss)
| #c mx = #c mx0, #r mx = #r mx0, count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i) ≠ #clean0rows(mx0, i), c < #c mx0, scolsorted(mx, #c mx0, mx0), #clean0rows(mx0, i) ≤ #clean0rows(mx, i) ⊦ |
n ≤ # x ⊦ count(x, 0, n, p) < n ↔ (∃ m. m < n ∧ ¬ p(x[m]))
#c mx = #c mx0, #r mx = #r mx0, count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i) ≠ #clean0rows(mx0, i), c < #c mx0, scolsorted(mx, #c mx0, mx0), #clean0rows(mx0, i) ≤ #clean0rows(mx, i), count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i) < #clean0rows(mx0, i) ↔ (∃ m. m < #clean0rows(mx0, i) ∧ ¬ mx[c]c[m] < i) ⊦
Used simplifier rules: clean0rows-bounded: ⊦ ¬ #r mx < #clean0rows(mx, i); ⊦ # mx[c]c = #r mx; (s) ⊦ m ≤ n ↔ ¬ n < m; (ss) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat ⊦ m < n → n ≠ 0; (s) Used terms: #clean0rows(mx0, i), mx[c]c, λ j. j < i
| n ≤ # x ⊦ count(x, 0, n, p) < n ↔ (∃ m. m < n ∧ ¬ p(x[m])) |
| #c mx = #c mx0, #r mx = #r mx0, count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i) ≠ #clean0rows(mx0, i), c < #c mx0, scolsorted(mx, #c mx0, mx0), #clean0rows(mx0, i) ≤ #clean0rows(mx, i), count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i) < #clean0rows(mx0, i) ↔ (∃ m. m < #clean0rows(mx0, i) ∧ ¬ mx[c]c[m] < i) ⊦ |
n ≤ m, m ≤ # x ⊦ ¬ m - n < count(x, n, m, p)
#c mx = #c mx0, #r mx = #r mx0, count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i) ≠ #clean0rows(mx0, i), c < #c mx0, scolsorted(mx, #c mx0, mx0), #clean0rows(mx0, i) ≤ #clean0rows(mx, i), ¬ #clean0rows(mx0, i) - 0 < count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i), count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i) < #clean0rows(mx0, i) ↔ (∃ m. m < #clean0rows(mx0, i) ∧ ¬ mx[c]c[m] < i) ⊦
Used simplifier rules: clean0rows-bounded: ⊦ ¬ #r mx < #clean0rows(mx, i); ⊦ mx[c]c[r] = mx[r, c]; (s) ⊦ 0 ≤ m; (s) ⊦ # mx[c]c = #r mx; (s) ⊦ m ≤ n ↔ ¬ n < m; (ss) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat ⊦ m < n → n ≠ 0; (s) Used terms: 0, #clean0rows(mx0, i), mx[c]c, λ j. j < i
| n ≤ m, m ≤ # x ⊦ ¬ m - n < count(x, n, m, p) |
| #c mx = #c mx0, #r mx = #r mx0, count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i) ≠ #clean0rows(mx0, i), c < #c mx0, scolsorted(mx, #c mx0, mx0), #clean0rows(mx0, i) ≤ #clean0rows(mx, i), ¬ #clean0rows(mx0, i) - 0 < count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i), count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i) < #clean0rows(mx0, i) ↔ (∃ m. m < #clean0rows(mx0, i) ∧ ¬ mx[c]c[m] < i) ⊦ |
#c mx = #c mx0, #r mx = #r mx0, count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i) ≠ #clean0rows(mx0, i), c < #c mx0, count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i) < #clean0rows(mx0, i), m < #clean0rows(mx0, i), count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i) < #clean0rows(mx, i), m < #clean0rows(mx, i), scolsorted(mx, #c mx0, mx0), #clean0rows(mx0, i) ≤ #clean0rows(mx, i), ¬ mx[m, c] < 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 ⊦ mx[c]c[r] = mx[r, c]; (s) ⊦ m ≠ n → (m < n ↔ ¬ n < m); (ss) ⊦ m - 0 = m; (s)
| #c mx = #c mx0, #r mx = #r mx0, count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i) ≠ #clean0rows(mx0, i), c < #c mx0, count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i) < #clean0rows(mx0, i), m < #clean0rows(mx0, i), count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i) < #clean0rows(mx, i), m < #clean0rows(mx, i), scolsorted(mx, #c mx0, mx0), #clean0rows(mx0, i) ≤ #clean0rows(mx, i), ¬ mx[m, c] < i ⊦ |
perm(a0, a), ordered≤(a), # a0 = # a, n < # a ⊦ a[n] < i ↔ n < count(a0, λ j. j < i)
#c mx = #c mx0, #r mx = #r mx0, mx[c]c[m] < i ↔ m < count(mx[c]c, λ j. j < i), count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i) ≠ #clean0rows(mx0, i), m < #clean0rows(mx, i), count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i) < #clean0rows(mx, i), m < #clean0rows(mx0, i), count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i) < #clean0rows(mx0, i), c < #c mx0, scolsorted(mx, #c mx0, mx0), #clean0rows(mx0, i) ≤ #clean0rows(mx, i), ¬ mx[m, c] < i ⊦
Used simplifier rules: scolsorted-colordered: #c mx = #c mx0, c < #c mx ⊦ scolsorted(mx, #c mx0, mx0) → ordered≤(mx[c]c); clean0rows-bounded: ⊦ ¬ #r mx < #clean0rows(mx, i); ⊦ perm(x, x); (s) ⊦ # mx[c]c = #r mx; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat Used terms: mx[c]c, mx[c]c, m, i
| perm(a0, a), ordered≤(a), # a0 = # a, n < # a ⊦ a[n] < i ↔ n < count(a0, λ j. j < i) |
| #c mx = #c mx0, #r mx = #r mx0, mx[c]c[m] < i ↔ m < count(mx[c]c, λ j. j < i), count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i) ≠ #clean0rows(mx0, i), m < #clean0rows(mx, i), count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i) < #clean0rows(mx, i), m < #clean0rows(mx0, i), count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i) < #clean0rows(mx0, i), c < #c mx0, scolsorted(mx, #c mx0, mx0), #clean0rows(mx0, i) ≤ #clean0rows(mx, i), ¬ mx[m, c] < i ⊦ |
#c mx = #c mx0, #r mx = #r mx0, count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i) ≠ #clean0rows(mx0, i), c < #c mx0, count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i) < #clean0rows(mx0, i), m < #clean0rows(mx0, i), count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i) < #clean0rows(mx, i), m < #clean0rows(mx, i), count(mx[c]c, λ j. j < i) < #clean0rows(mx0, i), count(mx[c]c, λ j. j < i) < #clean0rows(mx, i), scolsorted(mx, #c mx0, mx0), #clean0rows(mx0, i) ≤ #clean0rows(mx, i), count(mx[c]c, λ j. j < i) ≤ m, ¬ mx[m, c] < i ⊦
Used simplifier rules: fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ mx[c]c[r] = mx[r, c]; (s)
| #c mx = #c mx0, #r mx = #r mx0, count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i) ≠ #clean0rows(mx0, i), c < #c mx0, count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i) < #clean0rows(mx0, i), m < #clean0rows(mx0, i), count(mx[c]c, 0, #clean0rows(mx0, i), λ j. j < i) < #clean0rows(mx, i), m < #clean0rows(mx, i), count(mx[c]c, λ j. j < i) < #clean0rows(mx0, i), count(mx[c]c, λ j. j < i) < #clean0rows(mx, i), scolsorted(mx, #c mx0, mx0), #clean0rows(mx0, i) ≤ #clean0rows(mx, i), count(mx[c]c, λ j. j < i) ≤ m, ¬ mx[m, c] < i ⊦ |
c < #c mx ⊦ #clean0rows(mx, i) ≤ count(mx[c]c, λ j. j < i)
Used simplifier rules: ⊦ m < n → (n ≤ m ↔ false); (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat ⊦ ¬ n < n; (s) Used terms: i, mx, c
| c < #c mx ⊦ #clean0rows(mx, i) ≤ count(mx[c]c, λ j. j < i) |
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.