| ⊦ #r mx1 = # vec ∧ #r mx1 = #r mx2 ∧ #c mx1 = #c mx2 → vec * (mx1 + mx2) = vec * mx1 + vec * mx2 |
#c mx1 = #c mx2, #r mx1 = # vec, #r mx1 = #r mx2, vec * (mx1 + mx2) ≠ vec * mx1 + vec * mx2 ⊦
| #c mx1 = #c mx2, #r mx1 = # vec, #r mx1 = #r mx2, vec * (mx1 + mx2) ≠ vec * mx1 + vec * mx2 ⊦ |
# vec = #r mx2, #c mx1 = #c mx2, #r mx1 = #r mx2, vec * (mx1 + mx2) ≠ vec * mx1 + vec * mx2 ⊦
| # vec = #r mx2, #c mx1 = #c mx2, #r mx1 = #r mx2, vec * (mx1 + mx2) ≠ vec * mx1 + vec * mx2 ⊦ |
⊦ ar1 = ar2 ↔ # ar1 = # ar2 ∧ (∀ n. n < # ar1 → ar1(n) = ar2(n))
# vec = #r mx2, #c mx1 = #c mx2, #r mx1 = #r mx2, #(vec * (mx1 + mx2)) ≠ #(vec * mx1 + vec * mx2) ∨ (∃ n. ¬(n < #(vec * (mx1 + mx2)) → (vec * (mx1 + mx2))(n) = (vec * mx1 + vec * mx2)(n))) ⊦
Used terms: vec * (mx1 + mx2), vec * mx1 + vec * mx2
| ⊦ ar1 = ar2 ↔ # ar1 = # ar2 ∧ (∀ n. n < # ar1 → ar1(n) = ar2(n)) |
| # vec = #r mx2, #c mx1 = #c mx2, #r mx1 = #r mx2, #(vec * (mx1 + mx2)) ≠ #(vec * mx1 + vec * mx2) ∨ (∃ n. ¬(n < #(vec * (mx1 + mx2)) → (vec * (mx1 + mx2))(n) = (vec * mx1 + vec * mx2)(n))) ⊦ |
# vec = #r mx2, #c mx1 = #c mx2, #r mx1 = #r mx2, #(vec * (mx1 + mx2)) ≠ #(vec * mx1) ∨ ¬(n < #(vec * (mx1 + mx2)) → (vec * (mx1 + mx2))(n) = (vec * mx1 + vec * mx2)(n)) ⊦
Used simplifier rules: addvec-size: ⊦ #(vec1 + vec2) = # vec1;
| # vec = #r mx2, #c mx1 = #c mx2, #r mx1 = #r mx2, #(vec * (mx1 + mx2)) ≠ #(vec * mx1) ∨ ¬(n < #(vec * (mx1 + mx2)) → (vec * (mx1 + mx2))(n) = (vec * mx1 + vec * mx2)(n)) ⊦ |
⊦ #r mx = # vec → #(vec * mx) = #c mx
# vec = #r mx2, #c mx1 = #c mx2, #r mx1 = #r mx2, #r(mx1 + mx2) = # vec, #c(mx1 + mx2) ≠ #(vec * mx1) ∨ ¬(n < #c(mx1 + mx2) → (vec * (mx1 + mx2))(n) = (vec * mx1 + vec * mx2)(n)) ⊦
Used simplifier rules: addmx-rowno: ⊦ #r(mx1 + mx2) = #r mx1; Used terms: vec, mx1 + mx2
| ⊦ #r mx = # vec → #(vec * mx) = #c mx |
| # vec = #r mx2, #c mx1 = #c mx2, #r mx1 = #r mx2, #r(mx1 + mx2) = # vec, #c(mx1 + mx2) ≠ #(vec * mx1) ∨ ¬(n < #c(mx1 + mx2) → (vec * (mx1 + mx2))(n) = (vec * mx1 + vec * mx2)(n)) ⊦ |
# vec = #r mx2, #c mx1 = #c mx2, #r mx1 = #r mx2, (vec * (mx1 + mx2))(n) ≠ (vec * mx1 + vec * mx2)(n), n < #c mx2 ⊦
Used simplifier rules: addmx-rowno: ⊦ #r(mx1 + mx2) = #r mx1; multvecmx-size: ⊦ #r mx = # vec → #(vec * mx) = #c mx; addmx-colno: ⊦ #c(mx1 + mx2) = #c 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
| # vec = #r mx2, #c mx1 = #c mx2, #r mx1 = #r mx2, (vec * (mx1 + mx2))(n) ≠ (vec * mx1 + vec * mx2)(n), n < #c mx2 ⊦ |
⊦ #r mx = # vec ∧ c < #c mx → (vec * mx)(c) = Σ(0 to # vec, λ n. vec(n) * mx(n, c))
# vec = #r mx2, #c mx1 = #c mx2, #r mx1 = #r mx2, #r(mx1 + mx2) = # vec, Σ(0 to # vec, λ n0. vec(n0) * (mx1 + mx2)(n0, n)) ≠ (vec * mx1 + vec * mx2)(n), n < #c mx2, n < #c(mx1 + mx2) ⊦
Used simplifier rules: addmx-rowno: ⊦ #r(mx1 + mx2) = #r mx1; addmx-colno: ⊦ #c(mx1 + mx2) = #c mx1; Used terms: vec, mx1 + mx2, n
| ⊦ #r mx = # vec ∧ c < #c mx → (vec * mx)(c) = Σ(0 to # vec, λ n. vec(n) * mx(n, c)) |
| # vec = #r mx2, #c mx1 = #c mx2, #r mx1 = #r mx2, #r(mx1 + mx2) = # vec, Σ(0 to # vec, λ n0. vec(n0) * (mx1 + mx2)(n0, n)) ≠ (vec * mx1 + vec * mx2)(n), n < #c mx2, n < #c(mx1 + mx2) ⊦ |
# vec = #r mx2, #c mx1 = #c mx2, #r mx1 = #r mx2, Σ(0 to #r mx2, λ n0. vec(n0) * (mx1 + mx2)(n0, n)) ≠ (vec * mx1 + vec * mx2)(n), n < #c mx2 ⊦
Used simplifier rules: addmx-rowno: ⊦ #r(mx1 + mx2) = #r mx1; addmx-colno: ⊦ #c(mx1 + mx2) = #c mx1;
| # vec = #r mx2, #c mx1 = #c mx2, #r mx1 = #r mx2, Σ(0 to #r mx2, λ n0. vec(n0) * (mx1 + mx2)(n0, n)) ≠ (vec * mx1 + vec * mx2)(n), n < #c mx2 ⊦ |
⊦ n < # vec1 → (vec1 + vec2)(n) = vec1(n) + vec2(n)
# vec = #r mx2, #c mx1 = #c mx2, #r mx1 = #r mx2, Σ(0 to #r mx2, λ n0. vec(n0) * (mx1 + mx2)(n0, n)) ≠ (vec * mx1 + vec * mx2)(n), n < #c mx2, ¬ n < #(vec * mx1) ⊦
# vec = #r mx2, #c mx1 = #c mx2, #r mx1 = #r mx2, Σ(0 to #r mx2, λ n0. vec(n0) * (mx1 + mx2)(n0, n)) ≠ (vec * mx1)(n) + (vec * mx2)(n), n < #c mx2, n < #(vec * mx1) ⊦
Used terms: vec * mx1, vec * mx2, n
| ⊦ n < # vec1 → (vec1 + vec2)(n) = vec1(n) + vec2(n) |
| # vec = #r mx2, #c mx1 = #c mx2, #r mx1 = #r mx2, Σ(0 to #r mx2, λ n0. vec(n0) * (mx1 + mx2)(n0, n)) ≠ (vec * mx1 + vec * mx2)(n), n < #c mx2, ¬ n < #(vec * mx1) ⊦ |
# vec = #r mx2, #c mx1 = #c mx2, #r mx1 = #r mx2, Σ(0 to #r mx2, λ n0. vec(n0) * (mx1 + mx2)(n0, n)) ≠ (vec * mx1 + vec * mx2)(n), n < #c mx2, #(vec * mx1) < #c mx2, #(vec * mx1) ≤ n ⊦
Used simplifier rules: lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat ⊦ m < n ↔ ¬ n ≤ m; (ss)
| # vec = #r mx2, #c mx1 = #c mx2, #r mx1 = #r mx2, Σ(0 to #r mx2, λ n0. vec(n0) * (mx1 + mx2)(n0, n)) ≠ (vec * mx1 + vec * mx2)(n), n < #c mx2, #(vec * mx1) < #c mx2, #(vec * mx1) ≤ n ⊦ |
⊦ #r mx = # vec → #(vec * mx) = #c mx
Used simplifier rules: lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic lf: ⊦ m < n ∧ n < n0 → m.+1 < n0; (forward) from specification nat-basic fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat trans-nat: ⊦ n < n0 ∧ n0 < n1 → n < n1; (forward) from specification nat-basic fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat ⊦ m < n → ¬ n < m; (s) Used terms: vec, mx1
| ⊦ #r mx = # vec → #(vec * mx) = #c mx |
| # vec = #r mx2, #c mx1 = #c mx2, #r mx1 = #r mx2, Σ(0 to #r mx2, λ n0. vec(n0) * (mx1 + mx2)(n0, n)) ≠ (vec * mx1)(n) + (vec * mx2)(n), n < #c mx2, n < #(vec * mx1) ⊦ |
# vec = #r mx2, #c mx1 = #c mx2, #r mx1 = #r mx2, Σ(0 to #r mx2, λ n0. vec(n0) * (mx1 + mx2)(n0, n)) ≠ (vec * mx1)(n) + Σ(0 to #r mx2, λ n0. vec(n0) * mx2(n0, n)), n < #c mx2, n < #(vec * mx1) ⊦
Used simplifier rules: multvecmx-get: ⊦ #r mx = # vec ∧ c < #c mx → (vec * mx)(c) = Σ(0 to # vec, λ n. vec(n) * mx(n, c)); ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| # vec = #r mx2, #c mx1 = #c mx2, #r mx1 = #r mx2, Σ(0 to #r mx2, λ n0. vec(n0) * (mx1 + mx2)(n0, n)) ≠ (vec * mx1)(n) + Σ(0 to #r mx2, λ n0. vec(n0) * mx2(n0, n)), n < #c mx2, n < #(vec * mx1) ⊦ |
⊦ #r mx = # vec ∧ c < #c mx → (vec * mx)(c) = Σ(0 to # vec, λ n. vec(n) * mx(n, c))
# vec = #r mx2, #c mx1 = #c mx2, #r mx1 = #r mx2, #r mx1 = # vec, Σ(0 to #r mx2, λ n0. vec(n0) * (mx1 + mx2)(n0, n)) ≠ Σ(0 to # vec, λ n0. vec(n0) * mx1(n0, n)) + Σ(0 to #r mx2, λ n0. vec(n0) * mx2(n0, n)), n < #(vec * mx1), n < #c mx2, n < #c mx1 ⊦
Used terms: vec, mx1, n
| ⊦ #r mx = # vec ∧ c < #c mx → (vec * mx)(c) = Σ(0 to # vec, λ n. vec(n) * mx(n, c)) |
| # vec = #r mx2, #c mx1 = #c mx2, #r mx1 = #r mx2, #r mx1 = # vec, Σ(0 to #r mx2, λ n0. vec(n0) * (mx1 + mx2)(n0, n)) ≠ Σ(0 to # vec, λ n0. vec(n0) * mx1(n0, n)) + Σ(0 to #r mx2, λ n0. vec(n0) * mx2(n0, n)), n < #(vec * mx1), n < #c mx2, n < #c mx1 ⊦ |
# vec = #r mx2, #c mx1 = #c mx2, #r mx1 = #r mx2, Σ(0 to #r mx2, λ n0. vec(n0) * (mx1 + mx2)(n0, n)) ≠ Σ(0 to #r mx2, λ n0. vec(n0) * mx1(n0, n)) + Σ(0 to #r mx2, λ n0. vec(n0) * mx2(n0, n)), n < #c mx2 ⊦
Used simplifier rules: multvecmx-size: ⊦ #r mx = # vec → #(vec * mx) = #c mx;
| # vec = #r mx2, #c mx1 = #c mx2, #r mx1 = #r mx2, Σ(0 to #r mx2, λ n0. vec(n0) * (mx1 + mx2)(n0, n)) ≠ Σ(0 to #r mx2, λ n0. vec(n0) * mx1(n0, n)) + Σ(0 to #r mx2, λ n0. vec(n0) * mx2(n0, n)), n < #c mx2 ⊦ |
⊦ Σ(ns, f1) + Σ(ns, f2) = Σ(ns, λ n. f1(n) + f2(n))
# vec = #r mx2, #c mx1 = #c mx2, #r mx1 = #r mx2, Σ(0 to #r mx2, λ n0. vec(n0) * (mx1 + mx2)(n0, n)) ≠ Σ(0 to #r mx2, λ n0. vec(n0) * mx1(n0, n) + vec(n0) * mx2(n0, n)), n < #c mx2 ⊦
Used terms: 0 to #r mx2, λ n0. vec(n0) * mx1(n0, n), λ n0. vec(n0) * mx2(n0, n)
| ⊦ Σ(ns, f1) + Σ(ns, f2) = Σ(ns, λ n. f1(n) + f2(n)) |
| # vec = #r mx2, #c mx1 = #c mx2, #r mx1 = #r mx2, Σ(0 to #r mx2, λ n0. vec(n0) * (mx1 + mx2)(n0, n)) ≠ Σ(0 to #r mx2, λ n0. vec(n0) * mx1(n0, n) + vec(n0) * mx2(n0, n)), n < #c mx2 ⊦ |
⊦ (∀ n. n ∈ ns → f1(n) = f2(n)) → Σ(ns, f1) = Σ(ns, f2)
# vec = #r mx2, #c mx1 = #c mx2, #r mx1 = #r mx2, Σ(0 to #r mx2, λ n0. vec(n0) * (mx1 + mx2)(n0, n)) ≠ Σ(0 to #r mx2, λ n0. vec(n0) * mx1(n0, n) + vec(n0) * mx2(n0, n)), n < #c mx2, (∀ n0. n0 ∈ 0 to #r mx2 → vec(n0) * (mx1 + mx2)(n0, n) = vec(n0) * mx1(n0, n) + vec(n0) * mx2(n0, n)) → Σ(0 to #r mx2, λ n0. vec(n0) * (mx1 + mx2)(n0, n)) = Σ(0 to #r mx2, λ n0. vec(n0) * mx1(n0, n) + vec(n0) * mx2(n0, n)) ⊦
Used terms: 0 to #r mx2, λ n0. vec(n0) * (mx1 + mx2)(n0, n), λ n0. vec(n0) * mx1(n0, n) + vec(n0) * mx2(n0, n)
| ⊦ (∀ n. n ∈ ns → f1(n) = f2(n)) → Σ(ns, f1) = Σ(ns, f2) |
| # vec = #r mx2, #c mx1 = #c mx2, #r mx1 = #r mx2, Σ(0 to #r mx2, λ n0. vec(n0) * (mx1 + mx2)(n0, n)) ≠ Σ(0 to #r mx2, λ n0. vec(n0) * mx1(n0, n) + vec(n0) * mx2(n0, n)), n < #c mx2, (∀ n0. n0 ∈ 0 to #r mx2 → vec(n0) * (mx1 + mx2)(n0, n) = vec(n0) * mx1(n0, n) + vec(n0) * mx2(n0, n)) → Σ(0 to #r mx2, λ n0. vec(n0) * (mx1 + mx2)(n0, n)) = Σ(0 to #r mx2, λ n0. vec(n0) * mx1(n0, n) + vec(n0) * mx2(n0, n)) ⊦ |
# vec = #r mx2, #c mx1 = #c mx2, #r mx1 = #r mx2, vec(n0) * (mx1 + mx2)(n0, n) ≠ vec(n0) * mx1(n0, n) + vec(n0) * mx2(n0, n), Σ(0 to #r mx2, λ n0. vec(n0) * (mx1 + mx2)(n0, n)) ≠ Σ(0 to #r mx2, λ n0. vec(n0) * mx1(n0, n) + vec(n0) * mx2(n0, n)), n0 < #r mx2, n < #c 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)
| # vec = #r mx2, #c mx1 = #c mx2, #r mx1 = #r mx2, vec(n0) * (mx1 + mx2)(n0, n) ≠ vec(n0) * mx1(n0, n) + vec(n0) * mx2(n0, n), Σ(0 to #r mx2, λ n0. vec(n0) * (mx1 + mx2)(n0, n)) ≠ Σ(0 to #r mx2, λ n0. vec(n0) * mx1(n0, n) + vec(n0) * mx2(n0, n)), n0 < #r mx2, n < #c mx2 ⊦ |
⊦ r < #r mx1 ∧ c < #c mx1 → (mx1 + mx2)(r, c) = mx1(r, c) + mx2(r, c)
# vec = #r mx2, #c mx1 = #c mx2, #r mx1 = #r mx2, vec(n0) * (mx1(n0, n) + mx2(n0, n)) ≠ vec(n0) * mx1(n0, n) + vec(n0) * mx2(n0, n), Σ(0 to #r mx2, λ n0. vec(n0) * (mx1 + mx2)(n0, n)) ≠ Σ(0 to #r mx2, λ n0. vec(n0) * mx1(n0, n) + vec(n0) * mx2(n0, n)), n < #c mx2, n0 < #r mx2, n0 < #r mx1, n < #c mx1 ⊦
Used terms: mx1, mx2, n0, n
| ⊦ r < #r mx1 ∧ c < #c mx1 → (mx1 + mx2)(r, c) = mx1(r, c) + mx2(r, c) |
| # vec = #r mx2, #c mx1 = #c mx2, #r mx1 = #r mx2, vec(n0) * (mx1(n0, n) + mx2(n0, n)) ≠ vec(n0) * mx1(n0, n) + vec(n0) * mx2(n0, n), Σ(0 to #r mx2, λ n0. vec(n0) * (mx1 + mx2)(n0, n)) ≠ Σ(0 to #r mx2, λ n0. vec(n0) * mx1(n0, n) + vec(n0) * mx2(n0, n)), n < #c mx2, n0 < #r mx2, n0 < #r mx1, n < #c mx1 ⊦ |
# vec = #r mx2, #c mx1 = #c mx2, #r mx1 = #r mx2, vec(n0) * (mx1(n0, n) + mx2(n0, n)) ≠ vec(n0) * mx1(n0, n) + vec(n0) * mx2(n0, n), Σ(0 to #r mx2, λ n0. vec(n0) * (mx1 + mx2)(n0, n)) ≠ Σ(0 to #r mx2, λ n0. vec(n0) * mx1(n0, n) + vec(n0) * mx2(n0, n)), n0 < #r mx2, n < #c mx2 ⊦
| # vec = #r mx2, #c mx1 = #c mx2, #r mx1 = #r mx2, vec(n0) * (mx1(n0, n) + mx2(n0, n)) ≠ vec(n0) * mx1(n0, n) + vec(n0) * mx2(n0, n), Σ(0 to #r mx2, λ n0. vec(n0) * (mx1 + mx2)(n0, n)) ≠ Σ(0 to #r mx2, λ n0. vec(n0) * mx1(n0, n) + vec(n0) * mx2(n0, n)), n0 < #r mx2, n < #c mx2 ⊦ |
⊦ a * (b + c) = a * b + a * c
Used terms: vec(n0), mx1(n0, n), mx2(n0, n)
| ⊦ a * (b + c) = a * b + a * c |
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.