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