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