| ⊦ #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.