| ⊦ #r mx = # vec1 ∧ # vec1 = # vec2 → (vec1 + vec2) * mx = vec1 * mx + vec2 * mx |
# vec1 = # vec2, #r mx = # vec1, (vec1 + vec2) * mx ≠ vec1 * mx + vec2 * mx ⊦
| # vec1 = # vec2, #r mx = # vec1, (vec1 + vec2) * mx ≠ vec1 * mx + vec2 * mx ⊦ |
# vec1 = # vec2, #r mx = # vec2, (vec1 + vec2) * mx ≠ vec1 * mx + vec2 * mx ⊦
| # vec1 = # vec2, #r mx = # vec2, (vec1 + vec2) * mx ≠ vec1 * mx + vec2 * mx ⊦ |
⊦ ar1 = ar2 ↔ # ar1 = # ar2 ∧ (∀ n. n < # ar1 → ar1(n) = ar2(n))
# vec1 = # vec2, #r mx = # vec2, #((vec1 + vec2) * mx) ≠ #(vec1 * mx + vec2 * mx) ∨ (∃ n. ¬(n < #((vec1 + vec2) * mx) → ((vec1 + vec2) * mx)(n) = (vec1 * mx + vec2 * mx)(n))) ⊦
Used terms: (vec1 + vec2) * mx, vec1 * mx + vec2 * mx
| ⊦ ar1 = ar2 ↔ # ar1 = # ar2 ∧ (∀ n. n < # ar1 → ar1(n) = ar2(n)) |
| # vec1 = # vec2, #r mx = # vec2, #((vec1 + vec2) * mx) ≠ #(vec1 * mx + vec2 * mx) ∨ (∃ n. ¬(n < #((vec1 + vec2) * mx) → ((vec1 + vec2) * mx)(n) = (vec1 * mx + vec2 * mx)(n))) ⊦ |
# vec1 = # vec2, #r mx = # vec2, #((vec1 + vec2) * mx) ≠ #(vec1 * mx) ∨ ¬(n < #((vec1 + vec2) * mx) → ((vec1 + vec2) * mx)(n) = (vec1 * mx + vec2 * mx)(n)) ⊦
Used simplifier rules: addvec-size: ⊦ #(vec1 + vec2) = # vec1;
| # vec1 = # vec2, #r mx = # vec2, #((vec1 + vec2) * mx) ≠ #(vec1 * mx) ∨ ¬(n < #((vec1 + vec2) * mx) → ((vec1 + vec2) * mx)(n) = (vec1 * mx + vec2 * mx)(n)) ⊦ |
⊦ #r mx = # vec → #(vec * mx) = #c mx
# vec1 = # vec2, #r mx = # vec2, #r mx = #(vec1 + vec2), #c mx ≠ #(vec1 * mx) ∨ ¬(n < #c mx → ((vec1 + vec2) * mx)(n) = (vec1 * mx + vec2 * mx)(n)) ⊦
Used simplifier rules: addvec-size: ⊦ #(vec1 + vec2) = # vec1; Used terms: vec1 + vec2, mx
| ⊦ #r mx = # vec → #(vec * mx) = #c mx |
| # vec1 = # vec2, #r mx = # vec2, #r mx = #(vec1 + vec2), #c mx ≠ #(vec1 * mx) ∨ ¬(n < #c mx → ((vec1 + vec2) * mx)(n) = (vec1 * mx + vec2 * mx)(n)) ⊦ |
# vec1 = # vec2, #r mx = # vec2, ((vec1 + vec2) * mx)(n) ≠ (vec1 * mx + vec2 * mx)(n), n < #c mx ⊦
Used simplifier rules: addvec-size: ⊦ #(vec1 + vec2) = # vec1; multvecmx-size: ⊦ #r mx = # vec → #(vec * mx) = #c mx; ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| # vec1 = # vec2, #r mx = # vec2, ((vec1 + vec2) * mx)(n) ≠ (vec1 * mx + vec2 * mx)(n), n < #c mx ⊦ |
⊦ #r mx = # vec ∧ c < #c mx → (vec * mx)(c) = Σ(0 to # vec, λ n. vec(n) * mx(n, c))
# vec1 = # vec2, #r mx = # vec2, #r mx = #(vec1 + vec2), Σ(0 to #(vec1 + vec2), λ n0. (vec1 + vec2)(n0) * mx(n0, n)) ≠ (vec1 * mx + vec2 * mx)(n), n < #c mx ⊦
Used simplifier rules: addvec-size: ⊦ #(vec1 + vec2) = # vec1; Used terms: vec1 + vec2, mx, n
| ⊦ #r mx = # vec ∧ c < #c mx → (vec * mx)(c) = Σ(0 to # vec, λ n. vec(n) * mx(n, c)) |
| # vec1 = # vec2, #r mx = # vec2, #r mx = #(vec1 + vec2), Σ(0 to #(vec1 + vec2), λ n0. (vec1 + vec2)(n0) * mx(n0, n)) ≠ (vec1 * mx + vec2 * mx)(n), n < #c mx ⊦ |
# vec1 = # vec2, #r mx = # vec2, Σ(0 to # vec2, λ n0. (vec1 + vec2)(n0) * mx(n0, n)) ≠ (vec1 * mx + vec2 * mx)(n), n < #c mx ⊦
Used simplifier rules: addvec-size: ⊦ #(vec1 + vec2) = # vec1;
| # vec1 = # vec2, #r mx = # vec2, Σ(0 to # vec2, λ n0. (vec1 + vec2)(n0) * mx(n0, n)) ≠ (vec1 * mx + vec2 * mx)(n), n < #c mx ⊦ |
⊦ n < # vec1 → (vec1 + vec2)(n) = vec1(n) + vec2(n)
# vec1 = # vec2, #r mx = # vec2, Σ(0 to # vec2, λ n0. (vec1 + vec2)(n0) * mx(n0, n)) ≠ (vec1 * mx + vec2 * mx)(n), n < #c mx, ¬ n < #(vec1 * mx) ⊦
# vec1 = # vec2, #r mx = # vec2, Σ(0 to # vec2, λ n0. (vec1 + vec2)(n0) * mx(n0, n)) ≠ (vec1 * mx)(n) + (vec2 * mx)(n), n < #c mx, n < #(vec1 * mx) ⊦
Used terms: vec1 * mx, vec2 * mx, n
| ⊦ n < # vec1 → (vec1 + vec2)(n) = vec1(n) + vec2(n) |
| # vec1 = # vec2, #r mx = # vec2, Σ(0 to # vec2, λ n0. (vec1 + vec2)(n0) * mx(n0, n)) ≠ (vec1 * mx + vec2 * mx)(n), n < #c mx, ¬ n < #(vec1 * mx) ⊦ |
# vec1 = # vec2, #r mx = # vec2, Σ(0 to # vec2, λ n0. (vec1 + vec2)(n0) * mx(n0, n)) ≠ (vec1 * mx + vec2 * mx)(n), n < #c mx, #(vec1 * mx) < #c mx, #(vec1 * mx) ≤ n ⊦
Used simplifier rules: fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat ⊦ m < n ↔ ¬ n ≤ m; (ss)
| # vec1 = # vec2, #r mx = # vec2, Σ(0 to # vec2, λ n0. (vec1 + vec2)(n0) * mx(n0, n)) ≠ (vec1 * mx + vec2 * mx)(n), n < #c mx, #(vec1 * mx) < #c mx, #(vec1 * mx) ≤ n ⊦ |
⊦ #r mx = # vec → #(vec * mx) = #c mx
Used simplifier rules: ⊦ m < n → (n ≤ m ↔ false); (s) Used terms: vec1, mx
| ⊦ #r mx = # vec → #(vec * mx) = #c mx |
| # vec1 = # vec2, #r mx = # vec2, Σ(0 to # vec2, λ n0. (vec1 + vec2)(n0) * mx(n0, n)) ≠ (vec1 * mx)(n) + (vec2 * mx)(n), n < #c mx, n < #(vec1 * mx) ⊦ |
# vec1 = # vec2, #r mx = # vec2, Σ(0 to # vec2, λ n0. (vec1 + vec2)(n0) * mx(n0, n)) ≠ (vec1 * mx)(n) + (vec2 * mx)(n), n < #c mx, n < #(vec1 * mx) ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| # vec1 = # vec2, #r mx = # vec2, Σ(0 to # vec2, λ n0. (vec1 + vec2)(n0) * mx(n0, n)) ≠ (vec1 * mx)(n) + (vec2 * mx)(n), n < #c mx, n < #(vec1 * mx) ⊦ |
⊦ #r mx = # vec ∧ c < #c mx → (vec * mx)(c) = Σ(0 to # vec, λ n. vec(n) * mx(n, c))
# vec1 = # vec2, #r mx = # vec2, #r mx = # vec1, Σ(0 to # vec2, λ n0. (vec1 + vec2)(n0) * mx(n0, n)) ≠ Σ(0 to # vec1, λ n0. vec1(n0) * mx(n0, n)) + (vec2 * mx)(n), n < #(vec1 * mx), n < #c mx ⊦
Used terms: vec1, mx, n
| ⊦ #r mx = # vec ∧ c < #c mx → (vec * mx)(c) = Σ(0 to # vec, λ n. vec(n) * mx(n, c)) |
| # vec1 = # vec2, #r mx = # vec2, #r mx = # vec1, Σ(0 to # vec2, λ n0. (vec1 + vec2)(n0) * mx(n0, n)) ≠ Σ(0 to # vec1, λ n0. vec1(n0) * mx(n0, n)) + (vec2 * mx)(n), n < #(vec1 * mx), n < #c mx ⊦ |
# vec1 = # vec2, #r mx = # vec2, Σ(0 to # vec2, λ n0. (vec1 + vec2)(n0) * mx(n0, n)) ≠ Σ(0 to # vec2, λ n0. vec1(n0) * mx(n0, n)) + (vec2 * mx)(n), n < #c mx ⊦
Used simplifier rules: multvecmx-size: ⊦ #r mx = # vec → #(vec * mx) = #c mx;
| # vec1 = # vec2, #r mx = # vec2, Σ(0 to # vec2, λ n0. (vec1 + vec2)(n0) * mx(n0, n)) ≠ Σ(0 to # vec2, λ n0. vec1(n0) * mx(n0, n)) + (vec2 * mx)(n), n < #c mx ⊦ |
⊦ #r mx = # vec ∧ c < #c mx → (vec * mx)(c) = Σ(0 to # vec, λ n. vec(n) * mx(n, c))
# vec1 = # vec2, #r mx = # vec2, Σ(0 to # vec2, λ n0. (vec1 + vec2)(n0) * mx(n0, n)) ≠ Σ(0 to # vec2, λ n0. vec1(n0) * mx(n0, n)) + Σ(0 to # vec2, λ n0. vec2(n0) * mx(n0, n)), n < #c mx ⊦
Used simplifier rules: multvecmx-get: ⊦ #r mx = # vec ∧ c < #c mx → (vec * mx)(c) = Σ(0 to # vec, λ n. vec(n) * mx(n, c)); Used terms: vec2, mx, n
| ⊦ #r mx = # vec ∧ c < #c mx → (vec * mx)(c) = Σ(0 to # vec, λ n. vec(n) * mx(n, c)) |
| # vec1 = # vec2, #r mx = # vec2, Σ(0 to # vec2, λ n0. (vec1 + vec2)(n0) * mx(n0, n)) ≠ Σ(0 to # vec2, λ n0. vec1(n0) * mx(n0, n)) + Σ(0 to # vec2, λ n0. vec2(n0) * mx(n0, n)), n < #c mx ⊦ |
⊦ Σ(ns, f1) + Σ(ns, f2) = Σ(ns, λ n. f1(n) + f2(n))
# vec1 = # vec2, #r mx = # vec2, Σ(0 to # vec2, λ n0. (vec1 + vec2)(n0) * mx(n0, n)) ≠ Σ(0 to # vec2, λ n0. vec1(n0) * mx(n0, n) + vec2(n0) * mx(n0, n)), n < #c mx ⊦
Used terms: 0 to # vec2, λ n0. vec1(n0) * mx(n0, n), λ n0. vec2(n0) * mx(n0, n)
| ⊦ Σ(ns, f1) + Σ(ns, f2) = Σ(ns, λ n. f1(n) + f2(n)) |
| # vec1 = # vec2, #r mx = # vec2, Σ(0 to # vec2, λ n0. (vec1 + vec2)(n0) * mx(n0, n)) ≠ Σ(0 to # vec2, λ n0. vec1(n0) * mx(n0, n) + vec2(n0) * mx(n0, n)), n < #c mx ⊦ |
⊦ (∀ n. n ∈ ns → f1(n) = f2(n)) → Σ(ns, f1) = Σ(ns, f2)
# vec1 = # vec2, #r mx = # vec2, Σ(0 to # vec2, λ n0. (vec1 + vec2)(n0) * mx(n0, n)) ≠ Σ(0 to # vec2, λ n0. vec1(n0) * mx(n0, n) + vec2(n0) * mx(n0, n)), n < #c mx, (∀ n0. n0 ∈ 0 to # vec2 → (vec1 + vec2)(n0) * mx(n0, n) = vec1(n0) * mx(n0, n) + vec2(n0) * mx(n0, n)) → Σ(0 to # vec2, λ n0. (vec1 + vec2)(n0) * mx(n0, n)) = Σ(0 to # vec2, λ n0. vec1(n0) * mx(n0, n) + vec2(n0) * mx(n0, n)) ⊦
Used terms: 0 to # vec2, λ n0. (vec1 + vec2)(n0) * mx(n0, n), λ n0. vec1(n0) * mx(n0, n) + vec2(n0) * mx(n0, n)
| ⊦ (∀ n. n ∈ ns → f1(n) = f2(n)) → Σ(ns, f1) = Σ(ns, f2) |
| # vec1 = # vec2, #r mx = # vec2, Σ(0 to # vec2, λ n0. (vec1 + vec2)(n0) * mx(n0, n)) ≠ Σ(0 to # vec2, λ n0. vec1(n0) * mx(n0, n) + vec2(n0) * mx(n0, n)), n < #c mx, (∀ n0. n0 ∈ 0 to # vec2 → (vec1 + vec2)(n0) * mx(n0, n) = vec1(n0) * mx(n0, n) + vec2(n0) * mx(n0, n)) → Σ(0 to # vec2, λ n0. (vec1 + vec2)(n0) * mx(n0, n)) = Σ(0 to # vec2, λ n0. vec1(n0) * mx(n0, n) + vec2(n0) * mx(n0, n)) ⊦ |
# vec1 = # vec2, #r mx = # vec2, (vec1(n0) + vec2(n0)) * mx(n0, n) ≠ vec1(n0) * mx(n0, n) + vec2(n0) * mx(n0, n), Σ(0 to # vec2, λ n0. (vec1 + vec2)(n0) * mx(n0, n)) ≠ Σ(0 to # vec2, λ n0. vec1(n0) * mx(n0, n) + vec2(n0) * mx(n0, n)), n0 < # vec2, n < #c mx ⊦
Used simplifier rules: addmvec-get: ⊦ n < # vec1 → (vec1 + vec2)(n) = vec1(n) + vec2(n); ⊦ 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)
| # vec1 = # vec2, #r mx = # vec2, (vec1(n0) + vec2(n0)) * mx(n0, n) ≠ vec1(n0) * mx(n0, n) + vec2(n0) * mx(n0, n), Σ(0 to # vec2, λ n0. (vec1 + vec2)(n0) * mx(n0, n)) ≠ Σ(0 to # vec2, λ n0. vec1(n0) * mx(n0, n) + vec2(n0) * mx(n0, n)), n0 < # vec2, n < #c mx ⊦ |
⊦ (b + c) * a = b * a + c * a
Used terms: vec1(n0), vec2(n0), mx(n0, n)
| ⊦ (b + c) * a = b * a + c * 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.