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