| ⊦ r × c ∈ spmx ∧ c < # x ∧ r < # y → y[r, y[r] + spmx[r × c] * x[c]] + (spmx -- (r × c)).toMatrix(# y, # x) * x = y + spmx.toMatrix(# y, # x) * x |
y[r, y[r] + spmx[r × c] * x[c]] + (spmx -- (r × c)).toMatrix(# y, # x) * x ≠ y + spmx.toMatrix(# y, # x) * x, c < # x, r < # y, r × c ∈ spmx ⊦
| y[r, y[r] + spmx[r × c] * x[c]] + (spmx -- (r × c)).toMatrix(# y, # x) * x ≠ y + spmx.toMatrix(# y, # x) * x, c < # x, r < # y, r × c ∈ spmx ⊦ |
⊦ a ∈ st ↔ (∃ d, st0. st = st0[a, d] ∧ ¬ a ∈ st0)
y[r, y[r] + spmx[r × c] * x[c]] + (spmx -- (r × c)).toMatrix(# y, # x) * x ≠ y + spmx.toMatrix(# y, # x) * x, r < # y, c < # x, ∃ d, st0. spmx = st0[r × c, d] ∧ ¬ r × c ∈ st0 ⊦
Used terms: r × c, spmx
| ⊦ a ∈ st ↔ (∃ d, st0. st = st0[a, d] ∧ ¬ a ∈ st0) |
| y[r, y[r] + spmx[r × c] * x[c]] + (spmx -- (r × c)).toMatrix(# y, # x) * x ≠ y + spmx.toMatrix(# y, # x) * x, r < # y, c < # x, ∃ d, st0. spmx = st0[r × c, d] ∧ ¬ r × c ∈ st0 ⊦ |
y[r, y[r] + a * x[c]] + spmx0.toMatrix(# y, # x) * x ≠ y + spmx0[r × c, a].toMatrix(# y, # x) * x, r < # y, c < # x, ¬ r × c ∈ spmx0 ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ ¬ a ∈ st → st -- a = st; (s) ⊦ st[a, d] -- a = st -- a; (s) ⊦ a = b → st[b, d][a] = d; (s)
| y[r, y[r] + a * x[c]] + spmx0.toMatrix(# y, # x) * x ≠ y + spmx0[r × c, a].toMatrix(# y, # x) * x, r < # y, c < # x, ¬ r × c ∈ spmx0 ⊦ |
⊦ r < m ∧ c < n ∧ ¬ r × c ∈ spmx → spmx[r × c, a].toMatrix(m, n) = spmx.toMatrix(m, n) + mkmatrix(m, n, O)[r, c, a]
y[r, y[r] + a * x[c]] + spmx0.toMatrix(# y, # x) * x ≠ y + (spmx0.toMatrix(# y, # x) + mkmatrix(# y, # x, O)[r, c, a]) * x, r < # y, c < # x, ¬ r × c ∈ spmx0 ⊦
Used terms: # x, # y, spmx0, c, r, a
| ⊦ r < m ∧ c < n ∧ ¬ r × c ∈ spmx → spmx[r × c, a].toMatrix(m, n) = spmx.toMatrix(m, n) + mkmatrix(m, n, O)[r, c, a] |
| y[r, y[r] + a * x[c]] + spmx0.toMatrix(# y, # x) * x ≠ y + (spmx0.toMatrix(# y, # x) + mkmatrix(# y, # x, O)[r, c, a]) * x, r < # y, c < # x, ¬ r × c ∈ spmx0 ⊦ |
⊦ #r mx1 = #r mx2 ∧ #c mx1 = #c mx2 ∧ #c mx1 = # vec → (mx1 + mx2) * vec = mx1 * vec + mx2 * vec
#c spmx0.toMatrix(# y, # x) = #c mkmatrix(# y, # x, O)[r, c, a], #c spmx0.toMatrix(# y, # x) = # x, #r spmx0.toMatrix(# y, # x) = #r mkmatrix(# y, # x, O)[r, c, a], y[r, y[r] + a * x[c]] + spmx0.toMatrix(# y, # x) * x ≠ y + spmx0.toMatrix(# y, # x) * x + mkmatrix(# y, # x, O)[r, c, a] * x, c < # x, r < # y, ¬ r × c ∈ spmx0 ⊦
Used simplifier rules: toMatrix-rowno: ⊦ #r spmx.toMatrix(r, c) = r; toMatrix-colno: ⊦ #c spmx.toMatrix(r, c) = c; ⊦ #r mx[r, c, a] = #r mx; (s) ⊦ #r mkmatrix(r, c, a) = r; (s) ⊦ #c mx[r, c, a] = #c mx; (s) ⊦ #c mkmatrix(r, c, a) = c; (s) Used terms: spmx0.toMatrix(# y, # x), mkmatrix(# y, # x, O)[r, c, a], x
| ⊦ #r mx1 = #r mx2 ∧ #c mx1 = #c mx2 ∧ #c mx1 = # vec → (mx1 + mx2) * vec = mx1 * vec + mx2 * vec |
| #c spmx0.toMatrix(# y, # x) = #c mkmatrix(# y, # x, O)[r, c, a], #c spmx0.toMatrix(# y, # x) = # x, #r spmx0.toMatrix(# y, # x) = #r mkmatrix(# y, # x, O)[r, c, a], y[r, y[r] + a * x[c]] + spmx0.toMatrix(# y, # x) * x ≠ y + spmx0.toMatrix(# y, # x) * x + mkmatrix(# y, # x, O)[r, c, a] * x, c < # x, r < # y, ¬ r × c ∈ spmx0 ⊦ |
y[r, y[r] + a * x[c]] + spmx0.toMatrix(# y, # x) * x ≠ y + spmx0.toMatrix(# y, # x) * x + mkmatrix(# y, # x, O)[r, c, a] * x, r < # y, c < # x, ¬ r × c ∈ spmx0 ⊦
Used simplifier rules: toMatrix-rowno: ⊦ #r spmx.toMatrix(r, c) = r; toMatrix-colno: ⊦ #c spmx.toMatrix(r, c) = c; ⊦ #c mkmatrix(r, c, a) = c; (s) ⊦ #c mx[r, c, a] = #c mx; (s) ⊦ #r mkmatrix(r, c, a) = r; (s) ⊦ #r mx[r, c, a] = #r mx; (s)
| y[r, y[r] + a * x[c]] + spmx0.toMatrix(# y, # x) * x ≠ y + spmx0.toMatrix(# y, # x) * x + mkmatrix(# y, # x, O)[r, c, a] * x, r < # y, c < # x, ¬ r × c ∈ spmx0 ⊦ |
⊦ ar1 = ar2 ↔ # ar1 = # ar2 ∧ (∀ n. n < # ar1 → ar1[n] = ar2[n])
c < # x, r < # y, ¬ r × c ∈ spmx0, #(y[r, y[r] + a * x[c]] + spmx0.toMatrix(# y, # x) * x) ≠ #(y + spmx0.toMatrix(# y, # x) * x + mkmatrix(# y, # x, O)[r, c, a] * x) ∨ (∃ n. ¬ ( n < #(y[r, y[r] + a * x[c]] + spmx0.toMatrix(# y, # x) * x) → (y[r, y[r] + a * x[c]] + spmx0.toMatrix(# y, # x) * x)[n] = (y + spmx0.toMatrix(# y, # x) * x + mkmatrix(# y, # x, O)[r, c, a] * x)[n])) ⊦
Used terms: y[r, y[r] + a * x[c]] + spmx0.toMatrix(# y, # x) * x, y + spmx0.toMatrix(# y, # x) * x + mkmatrix(# y, # x, O)[r, c, a] * x
| ⊦ ar1 = ar2 ↔ # ar1 = # ar2 ∧ (∀ n. n < # ar1 → ar1[n] = ar2[n]) |
| c < # x, r < # y, ¬ r × c ∈ spmx0, #(y[r, y[r] + a * x[c]] + spmx0.toMatrix(# y, # x) * x) ≠ #(y + spmx0.toMatrix(# y, # x) * x + mkmatrix(# y, # x, O)[r, c, a] * x) ∨ (∃ n. ¬ ( n < #(y[r, y[r] + a * x[c]] + spmx0.toMatrix(# y, # x) * x) → (y[r, y[r] + a * x[c]] + spmx0.toMatrix(# y, # x) * x)[n] = (y + spmx0.toMatrix(# y, # x) * x + mkmatrix(# y, # x, O)[r, c, a] * x)[n])) ⊦ |
(y[r, y[r] + a * x[c]] + spmx0.toMatrix(# y, # x) * x)[n] ≠ y[n] + (spmx0.toMatrix(# y, # x) * x + mkmatrix(# y, # x, O)[r, c, a] * x)[n], r < # y, c < # x, n < # y, ¬ r × c ∈ spmx0 ⊦
Used simplifier rules: ⊦ n < # vec1 → (vec1 + vec2)[n] = vec1[n] + vec2[n]; (s) ⊦ # ar[n, a] = # ar; (s) ⊦ #(vec1 + vec2) = # vec1; (s)
| (y[r, y[r] + a * x[c]] + spmx0.toMatrix(# y, # x) * x)[n] ≠ y[n] + (spmx0.toMatrix(# y, # x) * x + mkmatrix(# y, # x, O)[r, c, a] * x)[n], r < # y, c < # x, n < # y, ¬ r × c ∈ spmx0 ⊦ |
⊦ n < # vec1 → (vec1 + vec2)[n] = vec1[n] + vec2[n]
(y[r, y[r] + a * x[c]] + spmx0.toMatrix(# y, # x) * x)[n] ≠ y[n] + (spmx0.toMatrix(# y, # x) * x + mkmatrix(# y, # x, O)[r, c, a] * x)[n], n < # y, c < # x, r < # y, ¬ n < #(spmx0.toMatrix(# y, # x) * x), ¬ r × c ∈ spmx0 ⊦
(y[r, y[r] + a * x[c]] + spmx0.toMatrix(# y, # x) * x)[n] ≠ y[n] + (spmx0.toMatrix(# y, # x) * x)[n] + (mkmatrix(# y, # x, O)[r, c, a] * x)[n], n < # y, c < # x, r < # y, n < #(spmx0.toMatrix(# y, # x) * x), ¬ r × c ∈ spmx0 ⊦
Used terms: spmx0.toMatrix(# y, # x) * x, mkmatrix(# y, # x, O)[r, c, a] * x, n
| ⊦ n < # vec1 → (vec1 + vec2)[n] = vec1[n] + vec2[n] |
| (y[r, y[r] + a * x[c]] + spmx0.toMatrix(# y, # x) * x)[n] ≠ y[n] + (spmx0.toMatrix(# y, # x) * x + mkmatrix(# y, # x, O)[r, c, a] * x)[n], n < # y, c < # x, r < # y, ¬ n < #(spmx0.toMatrix(# y, # x) * x), ¬ r × c ∈ spmx0 ⊦ |
(y[r, y[r] + a * x[c]] + spmx0.toMatrix(# y, # x) * x)[n] ≠ y[n] + (spmx0.toMatrix(# y, # x) * x + mkmatrix(# y, # x, O)[r, c, a] * x)[n], r < # y, c < # x, n < # y, #(spmx0.toMatrix(# y, # x) * x) < # y, #(spmx0.toMatrix(# y, # x) * x) ≤ n, ¬ r × c ∈ spmx0 ⊦
Used simplifier rules: fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat ⊦ m < n ↔ ¬ n ≤ m; (ss)
| (y[r, y[r] + a * x[c]] + spmx0.toMatrix(# y, # x) * x)[n] ≠ y[n] + (spmx0.toMatrix(# y, # x) * x + mkmatrix(# y, # x, O)[r, c, a] * x)[n], r < # y, c < # x, n < # y, #(spmx0.toMatrix(# y, # x) * x) < # y, #(spmx0.toMatrix(# y, # x) * x) ≤ n, ¬ r × c ∈ spmx0 ⊦ |
⊦ #c mx = # vec → #(mx * vec) = #r mx
Used simplifier rules: toMatrix-colno: ⊦ #c spmx.toMatrix(r, c) = c; toMatrix-colno: ⊦ #c spmx.toMatrix(r, c) = c; toMatrix-rowno: ⊦ #r spmx.toMatrix(r, c) = r; ⊦ m < n → (n ≤ m ↔ false); (s) Used terms: spmx0.toMatrix(# y, # x), x
| ⊦ #c mx = # vec → #(mx * vec) = #r mx |
| (y[r, y[r] + a * x[c]] + spmx0.toMatrix(# y, # x) * x)[n] ≠ y[n] + (spmx0.toMatrix(# y, # x) * x)[n] + (mkmatrix(# y, # x, O)[r, c, a] * x)[n], n < # y, c < # x, r < # y, n < #(spmx0.toMatrix(# y, # x) * x), ¬ r × c ∈ spmx0 ⊦ |
⊦ n < # vec1 → (vec1 + vec2)[n] = vec1[n] + vec2[n]
y[r, y[r] + a * x[c]][n] + (spmx0.toMatrix(# y, # x) * x)[n] ≠ y[n] + (spmx0.toMatrix(# y, # x) * x)[n] + (mkmatrix(# y, # x, O)[r, c, a] * x)[n], n < #(spmx0.toMatrix(# y, # x) * x), r < # y, c < # x, n < # y, n < # y[r, y[r] + a * x[c]], ¬ r × c ∈ spmx0 ⊦
Used simplifier rules: ⊦ # ar[n, a] = # ar; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m < n → (n ≤ m ↔ false); (s) Used terms: y[r, y[r] + a * x[c]], spmx0.toMatrix(# y, # x) * x, n
| ⊦ n < # vec1 → (vec1 + vec2)[n] = vec1[n] + vec2[n] |
| y[r, y[r] + a * x[c]][n] + (spmx0.toMatrix(# y, # x) * x)[n] ≠ y[n] + (spmx0.toMatrix(# y, # x) * x)[n] + (mkmatrix(# y, # x, O)[r, c, a] * x)[n], n < #(spmx0.toMatrix(# y, # x) * x), r < # y, c < # x, n < # y, n < # y[r, y[r] + a * x[c]], ¬ r × c ∈ spmx0 ⊦ |
y[r, y[r] + a * x[c]][n] + (spmx0.toMatrix(# y, # x) * x)[n] ≠ y[n] + (spmx0.toMatrix(# y, # x) * x)[n] + (mkmatrix(# y, # x, O)[r, c, a] * x)[n], n < #(spmx0.toMatrix(# y, # x) * x), r < # y, c < # x, n < # y, ¬ r × c ∈ spmx0 ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ # ar[n, a] = # ar; (s)
| y[r, y[r] + a * x[c]][n] + (spmx0.toMatrix(# y, # x) * x)[n] ≠ y[n] + (spmx0.toMatrix(# y, # x) * x)[n] + (mkmatrix(# y, # x, O)[r, c, a] * x)[n], n < #(spmx0.toMatrix(# y, # x) * x), r < # y, c < # x, n < # y, ¬ r × c ∈ spmx0 ⊦ |
⊦ r < m ∧ c < # vec ∧ n < m → (mkmatrix(m, # vec, O)[r, c, a] * vec)[n] = (n = r ⊃ a * vec[c];O)
y[r, y[r] + a * x[c]][n] + (spmx0.toMatrix(# y, # x) * x)[n] ≠ y[n] + (spmx0.toMatrix(# y, # x) * x)[n] + (n = r ⊃ a * x[c];O), n < #(spmx0.toMatrix(# y, # x) * x), r < # y, c < # x, n < # y, ¬ r × c ∈ spmx0 ⊦
Used terms: x, n, # y, c, r, a
| ⊦ r < m ∧ c < # vec ∧ n < m → (mkmatrix(m, # vec, O)[r, c, a] * vec)[n] = (n = r ⊃ a * vec[c];O) |
| y[r, y[r] + a * x[c]][n] + (spmx0.toMatrix(# y, # x) * x)[n] ≠ y[n] + (spmx0.toMatrix(# y, # x) * x)[n] + (n = r ⊃ a * x[c];O), n < #(spmx0.toMatrix(# y, # x) * x), r < # y, c < # x, n < # y, ¬ r × c ∈ spmx0 ⊦ |
⊦ m ≠ n → ar[n, a][m] = ar[m]
Used simplifier rules: ⊦ a + O = a; (s) addcom: ⊦ a + b = b + a; from specification ring addassoc: ⊦ (a + b) + c = a + b + c; from specification ring ⊦ m < # ar → ar[m, a][m] = a; (s) Used terms: y, r, y[r] + a * x[c], n
| ⊦ m ≠ n → ar[n, a][m] = ar[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.