| ⊦ #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 ⊦ |
⊦ Σ(ns1, λ m. Σ(ns2, λ n. g(m, n))) = Σ(ns2, λ n. Σ(ns1, λ m. g(m, n)))
#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. Σ(0 to #r mx3, λ m. mx1(r, n) * mx2(n, m) * mx3(m, 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 ⊦
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 mx2 = #r mx3, #c mx1 = #r mx2, Σ(0 to #r mx3, λ n. (mx1 * mx2)(r, n) * 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 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 ∈ ns → f1(n) = f2(n)) → Σ(ns, f1) = Σ(ns, f2)
#c mx1 = #r mx2, #c mx2 = #r mx3, Σ(0 to #r mx3, λ n. (mx1 * mx2)(r, n) * 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 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 ∈ 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 mx1 = #r mx2, #c mx2 = #r mx3, Σ(0 to #r mx3, λ n. (mx1 * mx2)(r, n) * 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 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 ∈ 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, λ n. (mx1 * mx2)(r, n) * 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 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 mx3, λ n. (mx1 * mx2)(r, n) * mx3(n, 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, λ n. (mx1 * mx2)(r, n) * 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 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 mx3, λ n. (mx1 * mx2)(r, n) * mx3(n, 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.