| ⊦ #r mx1 = #r mx2 ∧ #c mx1 = #c mx2 ∧ #c mx1 = #r mx → (mx1 + mx2) * mx = mx1 * mx + mx2 * mx |
#c mx1 = #c mx2, #c mx1 = #r mx, #r mx1 = #r mx2, (mx1 + mx2) * mx ≠ mx1 * mx + mx2 * mx ⊦
| #c mx1 = #c mx2, #c mx1 = #r mx, #r mx1 = #r mx2, (mx1 + mx2) * mx ≠ mx1 * mx + mx2 * mx ⊦ |
#c mx2 = #r mx, #c mx1 = #r mx, #r mx1 = #r mx2, (mx1 + mx2) * mx ≠ mx1 * mx + mx2 * mx ⊦
| #c mx2 = #r mx, #c mx1 = #r mx, #r mx1 = #r mx2, (mx1 + mx2) * mx ≠ mx1 * mx + mx2 * mx ⊦ |
⊦ mx1 = mx2 ↔ #r mx1 = #r mx2 ∧ #c mx1 = #c mx2 ∧ (∀ r, c. r < #r mx1 ∧ c < #c mx1 → mx1[r, c] = mx2[r, c])
#c mx1 = #r mx, #c mx2 = #r mx, #r mx1 = #r mx2, #r((mx1 + mx2) * mx) ≠ #r(mx1 * mx + mx2 * mx) ∨ #c((mx1 + mx2) * mx) ≠ #c(mx1 * mx + mx2 * mx) ∨ (∃ r, c. ¬(r < #r((mx1 + mx2) * mx) ∧ c < #c((mx1 + mx2) * mx) → ((mx1 + mx2) * mx)[r, c] = (mx1 * mx + mx2 * mx)[r, c])) ⊦
Used terms: (mx1 + mx2) * mx, mx1 * mx + mx2 * mx
| ⊦ mx1 = mx2 ↔ #r mx1 = #r mx2 ∧ #c mx1 = #c mx2 ∧ (∀ r, c. r < #r mx1 ∧ c < #c mx1 → mx1[r, c] = mx2[r, c]) |
| #c mx1 = #r mx, #c mx2 = #r mx, #r mx1 = #r mx2, #r((mx1 + mx2) * mx) ≠ #r(mx1 * mx + mx2 * mx) ∨ #c((mx1 + mx2) * mx) ≠ #c(mx1 * mx + mx2 * mx) ∨ (∃ r, c. ¬(r < #r((mx1 + mx2) * mx) ∧ c < #c((mx1 + mx2) * mx) → ((mx1 + mx2) * mx)[r, c] = (mx1 * mx + mx2 * mx)[r, c])) ⊦ |
#c mx2 = #r mx, #c mx1 = #r mx, #r mx1 = #r mx2, #r((mx1 + mx2) * mx) ≠ #r mx2 ∨ #c((mx1 + mx2) * mx) ≠ #c mx ∨ ¬(r < #r((mx1 + mx2) * mx) ∧ c < #c((mx1 + mx2) * mx) → ((mx1 + mx2) * mx)[r, c] = (mx1 * mx + mx2 * mx)[r, c]) ⊦
Used simplifier rules: addmx-rowno: ⊦ #r(mx1 + mx2) = #r mx1; multmx-rowno: ⊦ #c mx1 = #r mx2 → #r(mx1 * mx2) = #r mx1; addmx-colno: ⊦ #c(mx1 + mx2) = #c mx1; multmx-colno: ⊦ #c mx1 = #r mx2 → #c(mx1 * mx2) = #c mx2;
| #c mx2 = #r mx, #c mx1 = #r mx, #r mx1 = #r mx2, #r((mx1 + mx2) * mx) ≠ #r mx2 ∨ #c((mx1 + mx2) * mx) ≠ #c mx ∨ ¬(r < #r((mx1 + mx2) * mx) ∧ c < #c((mx1 + mx2) * mx) → ((mx1 + mx2) * mx)[r, c] = (mx1 * mx + mx2 * mx)[r, c]) ⊦ |
⊦ #c mx1 = #r mx2 → #r(mx1 * mx2) = #r mx1
#c mx1 = #r mx, #c mx2 = #r mx, #c(mx1 + mx2) = #r mx, #r mx1 = #r mx2, #r(mx1 + mx2) ≠ #r mx2 ∨ #c((mx1 + mx2) * mx) ≠ #c mx ∨ ¬(r < #r(mx1 + mx2) ∧ c < #c((mx1 + mx2) * mx) → ((mx1 + mx2) * mx)[r, c] = (mx1 * mx + mx2 * mx)[r, c]) ⊦
Used simplifier rules: addmx-colno: ⊦ #c(mx1 + mx2) = #c mx1; Used terms: mx1 + mx2, mx
| ⊦ #c mx1 = #r mx2 → #r(mx1 * mx2) = #r mx1 |
| #c mx1 = #r mx, #c mx2 = #r mx, #c(mx1 + mx2) = #r mx, #r mx1 = #r mx2, #r(mx1 + mx2) ≠ #r mx2 ∨ #c((mx1 + mx2) * mx) ≠ #c mx ∨ ¬(r < #r(mx1 + mx2) ∧ c < #c((mx1 + mx2) * mx) → ((mx1 + mx2) * mx)[r, c] = (mx1 * mx + mx2 * mx)[r, c]) ⊦ |
#c mx2 = #r mx, #c mx1 = #r mx, #r mx1 = #r mx2, #c((mx1 + mx2) * mx) ≠ #c mx ∨ ¬(r < #r mx2 ∧ c < #c((mx1 + mx2) * mx) → ((mx1 + mx2) * mx)[r, c] = (mx1 * mx + mx2 * mx)[r, c]) ⊦
Used simplifier rules: addmx-colno: ⊦ #c(mx1 + mx2) = #c mx1; addmx-rowno: ⊦ #r(mx1 + mx2) = #r mx1;
| #c mx2 = #r mx, #c mx1 = #r mx, #r mx1 = #r mx2, #c((mx1 + mx2) * mx) ≠ #c mx ∨ ¬(r < #r mx2 ∧ c < #c((mx1 + mx2) * mx) → ((mx1 + mx2) * mx)[r, c] = (mx1 * mx + mx2 * mx)[r, c]) ⊦ |
⊦ #c mx1 = #r mx2 → #c(mx1 * mx2) = #c mx2
#c mx1 = #r mx, #c mx2 = #r mx, #c(mx1 + mx2) = #r mx, #r mx1 = #r mx2, #c mx ≠ #c mx ∨ ¬(r < #r mx2 ∧ c < #c mx → ((mx1 + mx2) * mx)[r, c] = (mx1 * mx + mx2 * mx)[r, c]) ⊦
Used simplifier rules: addmx-colno: ⊦ #c(mx1 + mx2) = #c mx1; Used terms: mx1 + mx2, mx
| ⊦ #c mx1 = #r mx2 → #c(mx1 * mx2) = #c mx2 |
| #c mx1 = #r mx, #c mx2 = #r mx, #c(mx1 + mx2) = #r mx, #r mx1 = #r mx2, #c mx ≠ #c mx ∨ ¬(r < #r mx2 ∧ c < #c mx → ((mx1 + mx2) * mx)[r, c] = (mx1 * mx + mx2 * mx)[r, c]) ⊦ |
#c mx1 = #r mx, #c mx2 = #r mx, #r mx1 = #r mx2, ((mx1 + mx2) * mx)[r, c] ≠ (mx1 * mx + mx2 * mx)[r, c], c < #c mx, r < #r mx2 ⊦
Used simplifier rules: 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
| #c mx1 = #r mx, #c mx2 = #r mx, #r mx1 = #r mx2, ((mx1 + mx2) * mx)[r, c] ≠ (mx1 * mx + mx2 * mx)[r, c], c < #c mx, r < #r mx2 ⊦ |
⊦ #c mx1 = #r mx2 ∧ r < #r mx1 ∧ c < #c mx2 → (mx1 * mx2)[r, c] = Σ(0 to #c mx1, λ n. mx1[r, n] * mx2[n, c])
#c mx2 = #r mx, #c mx1 = #r mx, #c(mx1 + mx2) = #r mx, #r mx1 = #r mx2, Σ(0 to #c(mx1 + mx2), λ n. (mx1 + mx2)[r, n] * mx[n, c]) ≠ (mx1 * mx + mx2 * mx)[r, c], r < #r mx2, r < #r(mx1 + mx2), c < #c mx ⊦
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, mx, r, c
| ⊦ #c mx1 = #r mx2 ∧ r < #r mx1 ∧ c < #c mx2 → (mx1 * mx2)[r, c] = Σ(0 to #c mx1, λ n. mx1[r, n] * mx2[n, c]) |
| #c mx2 = #r mx, #c mx1 = #r mx, #c(mx1 + mx2) = #r mx, #r mx1 = #r mx2, Σ(0 to #c(mx1 + mx2), λ n. (mx1 + mx2)[r, n] * mx[n, c]) ≠ (mx1 * mx + mx2 * mx)[r, c], r < #r mx2, r < #r(mx1 + mx2), c < #c mx ⊦ |
#c mx2 = #r mx, #c mx1 = #r mx, #r mx1 = #r mx2, Σ(0 to #r mx, λ n. (mx1 + mx2)[r, n] * mx[n, c]) ≠ (mx1 * mx + mx2 * mx)[r, c], c < #c mx, r < #r mx2 ⊦
Used simplifier rules: addmx-colno: ⊦ #c(mx1 + mx2) = #c mx1; addmx-rowno: ⊦ #r(mx1 + mx2) = #r mx1;
| #c mx2 = #r mx, #c mx1 = #r mx, #r mx1 = #r mx2, Σ(0 to #r mx, λ n. (mx1 + mx2)[r, n] * mx[n, c]) ≠ (mx1 * mx + mx2 * mx)[r, c], c < #c mx, r < #r mx2 ⊦ |
⊦ r < #r mx1 ∧ c < #c mx1 → (mx1 + mx2)[r, c] = mx1[r, c] + mx2[r, c]
#c mx1 = #r mx, #c mx2 = #r mx, #r mx1 = #r mx2, Σ(0 to #r mx, λ n. (mx1 + mx2)[r, n] * mx[n, c]) ≠ (mx1 * mx)[r, c] + (mx2 * mx)[r, c], r < #r mx2, c < #c mx, r < #r(mx1 * mx), c < #c(mx1 * mx) ⊦
Used simplifier rules: multmx-rowno: ⊦ #c mx1 = #r mx2 → #r(mx1 * mx2) = #r mx1; multmx-colno: ⊦ #c mx1 = #r mx2 → #c(mx1 * mx2) = #c mx2; ⊦ 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 * mx, mx2 * mx, r, c
| ⊦ r < #r mx1 ∧ c < #c mx1 → (mx1 + mx2)[r, c] = mx1[r, c] + mx2[r, c] |
| #c mx1 = #r mx, #c mx2 = #r mx, #r mx1 = #r mx2, Σ(0 to #r mx, λ n. (mx1 + mx2)[r, n] * mx[n, c]) ≠ (mx1 * mx)[r, c] + (mx2 * mx)[r, c], r < #r mx2, c < #c mx, r < #r(mx1 * mx), c < #c(mx1 * mx) ⊦ |
#c mx2 = #r mx, #c mx1 = #r mx, #r mx1 = #r mx2, Σ(0 to #r mx, λ n. (mx1 + mx2)[r, n] * mx[n, c]) ≠ Σ(0 to #r mx, λ n. mx1[r, n] * mx[n, c]) + Σ(0 to #r mx, λ n. mx2[r, n] * mx[n, c]), c < #c mx, r < #r mx2 ⊦
Used simplifier rules: multmx-colno: ⊦ #c mx1 = #r mx2 → #c(mx1 * mx2) = #c mx2; multmx-rowno: ⊦ #c mx1 = #r mx2 → #r(mx1 * mx2) = #r mx1; multmx-get: ⊦ #c mx1 = #r mx2 ∧ r < #r mx1 ∧ c < #c mx2 → (mx1 * mx2)[r, c] = Σ(0 to #c mx1, λ n. mx1[r, n] * mx2[n, c]);
| #c mx2 = #r mx, #c mx1 = #r mx, #r mx1 = #r mx2, Σ(0 to #r mx, λ n. (mx1 + mx2)[r, n] * mx[n, c]) ≠ Σ(0 to #r mx, λ n. mx1[r, n] * mx[n, c]) + Σ(0 to #r mx, λ n. mx2[r, n] * mx[n, c]), c < #c mx, r < #r mx2 ⊦ |
⊦ Σ(ns, f1) + Σ(ns, f2) = Σ(ns, λ n. f1(n) + f2(n))
#c mx1 = #r mx, #c mx2 = #r mx, #r mx1 = #r mx2, Σ(0 to #r mx, λ n. (mx1 + mx2)[r, n] * mx[n, c]) ≠ Σ(0 to #r mx, λ n. mx1[r, n] * mx[n, c] + mx2[r, n] * mx[n, c]), r < #r mx2, c < #c mx ⊦
Used terms: 0 to #r mx, λ n. mx1[r, n] * mx[n, c], λ n. mx2[r, n] * mx[n, c]
| ⊦ Σ(ns, f1) + Σ(ns, f2) = Σ(ns, λ n. f1(n) + f2(n)) |
| #c mx1 = #r mx, #c mx2 = #r mx, #r mx1 = #r mx2, Σ(0 to #r mx, λ n. (mx1 + mx2)[r, n] * mx[n, c]) ≠ Σ(0 to #r mx, λ n. mx1[r, n] * mx[n, c] + mx2[r, n] * mx[n, c]), r < #r mx2, c < #c mx ⊦ |
⊦ (∀ n. n ∈ ns → f1(n) = f2(n)) → Σ(ns, f1) = Σ(ns, f2)
#c mx2 = #r mx, #c mx1 = #r mx, #r mx1 = #r mx2, Σ(0 to #r mx, λ n. (mx1 + mx2)[r, n] * mx[n, c]) ≠ Σ(0 to #r mx, λ n. mx1[r, n] * mx[n, c] + mx2[r, n] * mx[n, c]), c < #c mx, r < #r mx2, (∀ n. n ∈ 0 to #r mx → (mx1 + mx2)[r, n] * mx[n, c] = mx1[r, n] * mx[n, c] + mx2[r, n] * mx[n, c]) → Σ(0 to #r mx, λ n. (mx1 + mx2)[r, n] * mx[n, c]) = Σ(0 to #r mx, λ n. mx1[r, n] * mx[n, c] + mx2[r, n] * mx[n, c]) ⊦
Used terms: 0 to #r mx, λ n. (mx1 + mx2)[r, n] * mx[n, c], λ n. mx1[r, n] * mx[n, c] + mx2[r, n] * mx[n, c]
| ⊦ (∀ n. n ∈ ns → f1(n) = f2(n)) → Σ(ns, f1) = Σ(ns, f2) |
| #c mx2 = #r mx, #c mx1 = #r mx, #r mx1 = #r mx2, Σ(0 to #r mx, λ n. (mx1 + mx2)[r, n] * mx[n, c]) ≠ Σ(0 to #r mx, λ n. mx1[r, n] * mx[n, c] + mx2[r, n] * mx[n, c]), c < #c mx, r < #r mx2, (∀ n. n ∈ 0 to #r mx → (mx1 + mx2)[r, n] * mx[n, c] = mx1[r, n] * mx[n, c] + mx2[r, n] * mx[n, c]) → Σ(0 to #r mx, λ n. (mx1 + mx2)[r, n] * mx[n, c]) = Σ(0 to #r mx, λ n. mx1[r, n] * mx[n, c] + mx2[r, n] * mx[n, c]) ⊦ |
#c mx2 = #r mx, #c mx1 = #r mx, #r mx1 = #r mx2, (mx1 + mx2)[r, n] * mx[n, c] ≠ mx1[r, n] * mx[n, c] + mx2[r, n] * mx[n, c], Σ(0 to #r mx, λ n. (mx1 + mx2)[r, n] * mx[n, c]) ≠ Σ(0 to #r mx, λ n. mx1[r, n] * mx[n, c] + mx2[r, n] * mx[n, c]), n < #r mx, c < #c mx, r < #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 = #r mx, #c mx1 = #r mx, #r mx1 = #r mx2, (mx1 + mx2)[r, n] * mx[n, c] ≠ mx1[r, n] * mx[n, c] + mx2[r, n] * mx[n, c], Σ(0 to #r mx, λ n. (mx1 + mx2)[r, n] * mx[n, c]) ≠ Σ(0 to #r mx, λ n. mx1[r, n] * mx[n, c] + mx2[r, n] * mx[n, c]), n < #r mx, c < #c mx, r < #r mx2 ⊦ |
⊦ r < #r mx1 ∧ c < #c mx1 → (mx1 + mx2)[r, c] = mx1[r, c] + mx2[r, c]
#c mx1 = #r mx, #c mx2 = #r mx, #r mx1 = #r mx2, (mx1[r, n] + mx2[r, n]) * mx[n, c] ≠ mx1[r, n] * mx[n, c] + mx2[r, n] * mx[n, c], Σ(0 to #r mx, λ n. (mx1 + mx2)[r, n] * mx[n, c]) ≠ Σ(0 to #r mx, λ n. mx1[r, n] * mx[n, c] + mx2[r, n] * mx[n, c]), r < #r mx2, c < #c mx, n < #r mx, r < #r mx1, n < #c mx1 ⊦
Used terms: mx1, mx2, r, n
| ⊦ r < #r mx1 ∧ c < #c mx1 → (mx1 + mx2)[r, c] = mx1[r, c] + mx2[r, c] |
| #c mx1 = #r mx, #c mx2 = #r mx, #r mx1 = #r mx2, (mx1[r, n] + mx2[r, n]) * mx[n, c] ≠ mx1[r, n] * mx[n, c] + mx2[r, n] * mx[n, c], Σ(0 to #r mx, λ n. (mx1 + mx2)[r, n] * mx[n, c]) ≠ Σ(0 to #r mx, λ n. mx1[r, n] * mx[n, c] + mx2[r, n] * mx[n, c]), r < #r mx2, c < #c mx, n < #r mx, r < #r mx1, n < #c mx1 ⊦ |
#c mx2 = #r mx, #c mx1 = #r mx, #r mx1 = #r mx2, (mx1[r, n] + mx2[r, n]) * mx[n, c] ≠ mx1[r, n] * mx[n, c] + mx2[r, n] * mx[n, c], Σ(0 to #r mx, λ n. (mx1 + mx2)[r, n] * mx[n, c]) ≠ Σ(0 to #r mx, λ n. mx1[r, n] * mx[n, c] + mx2[r, n] * mx[n, c]), n < #r mx, c < #c mx, r < #r mx2 ⊦
| #c mx2 = #r mx, #c mx1 = #r mx, #r mx1 = #r mx2, (mx1[r, n] + mx2[r, n]) * mx[n, c] ≠ mx1[r, n] * mx[n, c] + mx2[r, n] * mx[n, c], Σ(0 to #r mx, λ n. (mx1 + mx2)[r, n] * mx[n, c]) ≠ Σ(0 to #r mx, λ n. mx1[r, n] * mx[n, c] + mx2[r, n] * mx[n, c]), n < #r mx, c < #c mx, r < #r mx2 ⊦ |
⊦ (b + c) * a = b * a + c * a
Used terms: mx1[r, n], mx2[r, n], mx[n, c]
| ⊦ (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.