| ⊦ #r mx1 = #r mx2 ∧ #c mx1 = #c mx2 ∧ #c mx1 = # vec → (mx1 + mx2) * vec = mx1 * vec + mx2 * vec |
#c mx1 = #c mx2, #c mx1 = # vec, #r mx1 = #r mx2, (mx1 + mx2) * vec ≠ mx1 * vec + mx2 * vec ⊦
| #c mx1 = #c mx2, #c mx1 = # vec, #r mx1 = #r mx2, (mx1 + mx2) * vec ≠ mx1 * vec + mx2 * vec ⊦ |
#c mx2 = # vec, #c mx1 = # vec, #r mx1 = #r mx2, (mx1 + mx2) * vec ≠ mx1 * vec + mx2 * vec ⊦
| #c mx2 = # vec, #c mx1 = # vec, #r mx1 = #r mx2, (mx1 + mx2) * vec ≠ mx1 * vec + mx2 * vec ⊦ |
⊦ ar1 = ar2 ↔ # ar1 = # ar2 ∧ (∀ n. n < # ar1 → ar1(n) = ar2(n))
#c mx1 = # vec, #c mx2 = # vec, #r mx1 = #r mx2, #((mx1 + mx2) * vec) ≠ #(mx1 * vec + mx2 * vec) ∨ (∃ n. ¬(n < #((mx1 + mx2) * vec) → ((mx1 + mx2) * vec)(n) = (mx1 * vec + mx2 * vec)(n))) ⊦
Used terms: (mx1 + mx2) * vec, mx1 * vec + mx2 * vec
| ⊦ ar1 = ar2 ↔ # ar1 = # ar2 ∧ (∀ n. n < # ar1 → ar1(n) = ar2(n)) |
| #c mx1 = # vec, #c mx2 = # vec, #r mx1 = #r mx2, #((mx1 + mx2) * vec) ≠ #(mx1 * vec + mx2 * vec) ∨ (∃ n. ¬(n < #((mx1 + mx2) * vec) → ((mx1 + mx2) * vec)(n) = (mx1 * vec + mx2 * vec)(n))) ⊦ |
#c mx2 = # vec, #c mx1 = # vec, #r mx1 = #r mx2, #((mx1 + mx2) * vec) ≠ #r mx2 ∨ ¬(n < #((mx1 + mx2) * vec) → ((mx1 + mx2) * vec)(n) = (mx1 * vec + mx2 * vec)(n)) ⊦
Used simplifier rules: addvec-size: ⊦ #(vec1 + vec2) = # vec1; multmxvec-size: ⊦ #c mx = # vec → #(mx * vec) = #r mx;
| #c mx2 = # vec, #c mx1 = # vec, #r mx1 = #r mx2, #((mx1 + mx2) * vec) ≠ #r mx2 ∨ ¬(n < #((mx1 + mx2) * vec) → ((mx1 + mx2) * vec)(n) = (mx1 * vec + mx2 * vec)(n)) ⊦ |
⊦ #c mx = # vec → #(mx * vec) = #r mx
#c mx1 = # vec, #c mx2 = # vec, #c(mx1 + mx2) = # vec, #r mx1 = #r mx2, #r(mx1 + mx2) ≠ #r mx2 ∨ ¬(n < #r(mx1 + mx2) → ((mx1 + mx2) * vec)(n) = (mx1 * vec + mx2 * vec)(n)) ⊦
Used simplifier rules: addmx-colno: ⊦ #c(mx1 + mx2) = #c mx1; Used terms: mx1 + mx2, vec
| ⊦ #c mx = # vec → #(mx * vec) = #r mx |
| #c mx1 = # vec, #c mx2 = # vec, #c(mx1 + mx2) = # vec, #r mx1 = #r mx2, #r(mx1 + mx2) ≠ #r mx2 ∨ ¬(n < #r(mx1 + mx2) → ((mx1 + mx2) * vec)(n) = (mx1 * vec + mx2 * vec)(n)) ⊦ |
#c mx1 = # vec, #c mx2 = # vec, #r mx1 = #r mx2, ((mx1 + mx2) * vec)(n) ≠ (mx1 * vec + mx2 * vec)(n), n < #r mx2 ⊦
Used simplifier rules: addmx-colno: ⊦ #c(mx1 + mx2) = #c mx1; addmx-rowno: ⊦ #r(mx1 + mx2) = #r mx1; ⊦ 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 mx1 = # vec, #c mx2 = # vec, #r mx1 = #r mx2, ((mx1 + mx2) * vec)(n) ≠ (mx1 * vec + mx2 * vec)(n), n < #r mx2 ⊦ |
⊦ #c mx = # vec ∧ r < #r mx → (mx * vec)(r) = Σ(0 to # vec, λ n. mx(r, n) * vec(n))
#c mx2 = # vec, #c mx1 = # vec, #c(mx1 + mx2) = # vec, #r mx1 = #r mx2, Σ(0 to # vec, λ n0. (mx1 + mx2)(n, n0) * vec(n0)) ≠ (mx1 * vec + mx2 * vec)(n), n < #r mx2, n < #r(mx1 + mx2) ⊦
Used simplifier rules: addmx-colno: ⊦ #c(mx1 + mx2) = #c mx1; addmx-rowno: ⊦ #r(mx1 + mx2) = #r mx1; ⊦ 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: mx1 + mx2, vec, n
| ⊦ #c mx = # vec ∧ r < #r mx → (mx * vec)(r) = Σ(0 to # vec, λ n. mx(r, n) * vec(n)) |
| #c mx2 = # vec, #c mx1 = # vec, #c(mx1 + mx2) = # vec, #r mx1 = #r mx2, Σ(0 to # vec, λ n0. (mx1 + mx2)(n, n0) * vec(n0)) ≠ (mx1 * vec + mx2 * vec)(n), n < #r mx2, n < #r(mx1 + mx2) ⊦ |
#c mx2 = # vec, #c mx1 = # vec, #r mx1 = #r mx2, Σ(0 to # vec, λ n0. (mx1 + mx2)(n, n0) * vec(n0)) ≠ (mx1 * vec + mx2 * vec)(n), n < #r mx2 ⊦
Used simplifier rules: addmx-colno: ⊦ #c(mx1 + mx2) = #c mx1; addmx-rowno: ⊦ #r(mx1 + mx2) = #r mx1;
| #c mx2 = # vec, #c mx1 = # vec, #r mx1 = #r mx2, Σ(0 to # vec, λ n0. (mx1 + mx2)(n, n0) * vec(n0)) ≠ (mx1 * vec + mx2 * vec)(n), n < #r mx2 ⊦ |
⊦ n < # vec1 → (vec1 + vec2)(n) = vec1(n) + vec2(n)
#c mx1 = # vec, #c mx2 = # vec, #r mx1 = #r mx2, Σ(0 to # vec, λ n0. (mx1 + mx2)(n, n0) * vec(n0)) ≠ (mx1 * vec)(n) + (mx2 * vec)(n), n < #r mx2, n < #(mx1 * vec) ⊦
Used simplifier rules: multmxvec-size: ⊦ #c mx = # vec → #(mx * vec) = #r mx; ⊦ 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: mx1 * vec, mx2 * vec, n
| ⊦ n < # vec1 → (vec1 + vec2)(n) = vec1(n) + vec2(n) |
| #c mx1 = # vec, #c mx2 = # vec, #r mx1 = #r mx2, Σ(0 to # vec, λ n0. (mx1 + mx2)(n, n0) * vec(n0)) ≠ (mx1 * vec)(n) + (mx2 * vec)(n), n < #r mx2, n < #(mx1 * vec) ⊦ |
#c mx2 = # vec, #c mx1 = # vec, #r mx1 = #r mx2, Σ(0 to # vec, λ n0. (mx1 + mx2)(n, n0) * vec(n0)) ≠ Σ(0 to # vec, λ n0. mx1(n, n0) * vec(n0)) + Σ(0 to # vec, λ n0. mx2(n, n0) * vec(n0)), n < #r mx2 ⊦
Used simplifier rules: multmxvec-size: ⊦ #c mx = # vec → #(mx * vec) = #r mx; multmxvec-get: ⊦ #c mx = # vec ∧ r < #r mx → (mx * vec)(r) = Σ(0 to # vec, λ n. mx(r, n) * vec(n));
| #c mx2 = # vec, #c mx1 = # vec, #r mx1 = #r mx2, Σ(0 to # vec, λ n0. (mx1 + mx2)(n, n0) * vec(n0)) ≠ Σ(0 to # vec, λ n0. mx1(n, n0) * vec(n0)) + Σ(0 to # vec, λ n0. mx2(n, n0) * vec(n0)), n < #r mx2 ⊦ |
⊦ Σ(ns, f1) + Σ(ns, f2) = Σ(ns, λ n. f1(n) + f2(n))
#c mx1 = # vec, #c mx2 = # vec, #r mx1 = #r mx2, Σ(0 to # vec, λ n0. (mx1 + mx2)(n, n0) * vec(n0)) ≠ Σ(0 to # vec, λ n0. mx1(n, n0) * vec(n0) + mx2(n, n0) * vec(n0)), n < #r mx2 ⊦
Used terms: 0 to # vec, λ n0. mx1(n, n0) * vec(n0), λ n0. mx2(n, n0) * vec(n0)
| ⊦ Σ(ns, f1) + Σ(ns, f2) = Σ(ns, λ n. f1(n) + f2(n)) |
| #c mx1 = # vec, #c mx2 = # vec, #r mx1 = #r mx2, Σ(0 to # vec, λ n0. (mx1 + mx2)(n, n0) * vec(n0)) ≠ Σ(0 to # vec, λ n0. mx1(n, n0) * vec(n0) + mx2(n, n0) * vec(n0)), n < #r mx2 ⊦ |
⊦ (∀ n. n ∈ ns → f1(n) = f2(n)) → Σ(ns, f1) = Σ(ns, f2)
#c mx2 = # vec, #c mx1 = # vec, #r mx1 = #r mx2, Σ(0 to # vec, λ n0. (mx1 + mx2)(n, n0) * vec(n0)) ≠ Σ(0 to # vec, λ n0. mx1(n, n0) * vec(n0) + mx2(n, n0) * vec(n0)), n < #r mx2, (∀ n0. n0 ∈ 0 to # vec → (mx1 + mx2)(n, n0) * vec(n0) = mx1(n, n0) * vec(n0) + mx2(n, n0) * vec(n0)) → Σ(0 to # vec, λ n0. (mx1 + mx2)(n, n0) * vec(n0)) = Σ(0 to # vec, λ n0. mx1(n, n0) * vec(n0) + mx2(n, n0) * vec(n0)) ⊦
Used terms: 0 to # vec, λ n0. (mx1 + mx2)(n, n0) * vec(n0), λ n0. mx1(n, n0) * vec(n0) + mx2(n, n0) * vec(n0)
| ⊦ (∀ n. n ∈ ns → f1(n) = f2(n)) → Σ(ns, f1) = Σ(ns, f2) |
| #c mx2 = # vec, #c mx1 = # vec, #r mx1 = #r mx2, Σ(0 to # vec, λ n0. (mx1 + mx2)(n, n0) * vec(n0)) ≠ Σ(0 to # vec, λ n0. mx1(n, n0) * vec(n0) + mx2(n, n0) * vec(n0)), n < #r mx2, (∀ n0. n0 ∈ 0 to # vec → (mx1 + mx2)(n, n0) * vec(n0) = mx1(n, n0) * vec(n0) + mx2(n, n0) * vec(n0)) → Σ(0 to # vec, λ n0. (mx1 + mx2)(n, n0) * vec(n0)) = Σ(0 to # vec, λ n0. mx1(n, n0) * vec(n0) + mx2(n, n0) * vec(n0)) ⊦ |
#c mx2 = # vec, #c mx1 = # vec, #r mx1 = #r mx2, (mx1 + mx2)(n, n0) * vec(n0) ≠ mx1(n, n0) * vec(n0) + mx2(n, n0) * vec(n0), Σ(0 to # vec, λ n0. (mx1 + mx2)(n, n0) * vec(n0)) ≠ Σ(0 to # vec, λ n0. mx1(n, n0) * vec(n0) + mx2(n, n0) * vec(n0)), n0 < # vec, n < #r mx2 ⊦
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 ⊦ 0 ≤ m; (s) ⊦ n0 ∈ m to n ↔ m ≤ n0 ∧ n0 < n; (s)
| #c mx2 = # vec, #c mx1 = # vec, #r mx1 = #r mx2, (mx1 + mx2)(n, n0) * vec(n0) ≠ mx1(n, n0) * vec(n0) + mx2(n, n0) * vec(n0), Σ(0 to # vec, λ n0. (mx1 + mx2)(n, n0) * vec(n0)) ≠ Σ(0 to # vec, λ n0. mx1(n, n0) * vec(n0) + mx2(n, n0) * vec(n0)), n0 < # vec, n < #r mx2 ⊦ |
⊦ r < #r mx1 ∧ c < #c mx1 → (mx1 + mx2)(r, c) = mx1(r, c) + mx2(r, c)
#c mx1 = # vec, #c mx2 = # vec, #r mx1 = #r mx2, (mx1(n, n0) + mx2(n, n0)) * vec(n0) ≠ mx1(n, n0) * vec(n0) + mx2(n, n0) * vec(n0), Σ(0 to # vec, λ n0. (mx1 + mx2)(n, n0) * vec(n0)) ≠ Σ(0 to # vec, λ n0. mx1(n, n0) * vec(n0) + mx2(n, n0) * vec(n0)), n < #r mx2, n0 < # vec, n < #r mx1, n0 < #c mx1 ⊦
Used terms: mx1, mx2, n, n0
| ⊦ r < #r mx1 ∧ c < #c mx1 → (mx1 + mx2)(r, c) = mx1(r, c) + mx2(r, c) |
| #c mx1 = # vec, #c mx2 = # vec, #r mx1 = #r mx2, (mx1(n, n0) + mx2(n, n0)) * vec(n0) ≠ mx1(n, n0) * vec(n0) + mx2(n, n0) * vec(n0), Σ(0 to # vec, λ n0. (mx1 + mx2)(n, n0) * vec(n0)) ≠ Σ(0 to # vec, λ n0. mx1(n, n0) * vec(n0) + mx2(n, n0) * vec(n0)), n < #r mx2, n0 < # vec, n < #r mx1, n0 < #c mx1 ⊦ |
#c mx2 = # vec, #c mx1 = # vec, #r mx1 = #r mx2, (mx1(n, n0) + mx2(n, n0)) * vec(n0) ≠ mx1(n, n0) * vec(n0) + mx2(n, n0) * vec(n0), Σ(0 to # vec, λ n0. (mx1 + mx2)(n, n0) * vec(n0)) ≠ Σ(0 to # vec, λ n0. mx1(n, n0) * vec(n0) + mx2(n, n0) * vec(n0)), n0 < # vec, n < #r mx2 ⊦
| #c mx2 = # vec, #c mx1 = # vec, #r mx1 = #r mx2, (mx1(n, n0) + mx2(n, n0)) * vec(n0) ≠ mx1(n, n0) * vec(n0) + mx2(n, n0) * vec(n0), Σ(0 to # vec, λ n0. (mx1 + mx2)(n, n0) * vec(n0)) ≠ Σ(0 to # vec, λ n0. mx1(n, n0) * vec(n0) + mx2(n, n0) * vec(n0)), n0 < # vec, n < #r mx2 ⊦ |
⊦ (b + c) * a = b * a + c * a
Used terms: mx1(n, n0), mx2(n, n0), vec(n0)
| ⊦ (b + c) * a = b * a + c * a |
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.