/- Copyright (c) 2019 Neil Strickland. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Neil Strickland ! This file was ported from Lean 3 source module algebra.geom_sum ! leanprover-community/mathlib commit f7fc89d5d5ff1db2d1242c7bb0e9062ce47ef47c ! Please do not edit these lines, except to modify the commit id ! if you have ported upstream changes. -/ import Mathlib.Algebra.BigOperators.Order import Mathlib.Algebra.BigOperators.Ring import Mathlib.Algebra.BigOperators.Intervals import Mathlib.Tactic.Abel import Mathlib.Data.Nat.Parity /-! # Partial sums of geometric series This file determines the values of the geometric series $\sum_{i=0}^{n-1} x^i$ and $\sum_{i=0}^{n-1} x^i y^{n-1-i}$ and variants thereof. We also provide some bounds on the "geometric" sum of `a/b^i` where `a b : β`. ## Main statements * `geom_sum_Ico` proves that $\sum_{i=m}^{n-1} x^i=\frac{x^n-x^m}{x-1}$ in a division ring. * `geom_sumβ_Ico` proves that $\sum_{i=m}^{n-1} x^iy^{n - 1 - i}=\frac{x^n-y^{n-m}x^m}{x-y}$ in a field. Several variants are recorded, generalising in particular to the case of a noncommutative ring in which `x` and `y` commute. Even versions not using division or subtraction, valid in each semiring, are recorded. -/ --porting note: corrected type in the description of `geom_sumβ_Ico` (in the doc string only). universe u variable {Ξ± :Ξ±: Type uType u} open Finset MulOpposite open BigOperators section Semiring variable [SemiringType u: Type (u+1)Ξ±] theoremΞ±: Type ugeom_sum_succ {x :x: Ξ±Ξ±} {Ξ±: Type un :n: ββ} : (ββ: Typei in range (i: ?m.83n +n: β1),1: ?m.29x ^x: Ξ±i) = (i: ?m.83x * βx: Ξ±i in rangei: ?m.503n,n: βx ^x: Ξ±i) +i: ?m.5031 :=1: ?m.595Goals accomplished! π#align geom_sum_succ geom_sum_succ theoremGoals accomplished! πgeom_sum_succ' {x :x: Ξ±Ξ±} {Ξ±: Type un :n: ββ} : (ββ: Typei in range (i: ?m.2123n +n: β1),1: ?m.2069x ^x: Ξ±i) =i: ?m.2123x ^x: Ξ±n + βn: βi in rangei: ?m.2543n,n: βx ^x: Ξ±i := (sum_range_succi: ?m.2543__: β β ?m.2944_).trans (_: βadd_commadd_comm: β {G : Type ?u.3002} [inst : AddCommSemigroup G] (a b : G), a + b = b + a__: ?m.3003_) #align geom_sum_succ' geom_sum_succ' theorem geom_sum_zero (_: ?m.3003x :x: Ξ±Ξ±) : (βΞ±: Type ui in rangei: ?m.32810,0: ?m.3269x ^x: Ξ±i) =i: ?m.32810 := rfl #align geom_sum_zero geom_sum_zero theorem geom_sum_one (0: ?m.3681x :x: Ξ±Ξ±) : (βΞ±: Type ui in rangei: ?m.39271,1: ?m.3915x ^x: Ξ±i) =i: ?m.39271 :=1: ?m.4327Goals accomplished! π#align geom_sum_one geom_sum_one @[simp] theorem geom_sum_two {Goals accomplished! πx :x: Ξ±Ξ±} : (βΞ±: Type ui in rangei: ?m.46552,2: ?m.4644x ^x: Ξ±i) =i: ?m.4655x +x: Ξ±1 :=1: ?m.5058Goals accomplished! π#align geom_sum_two geom_sum_two @[simp] theoremGoals accomplished! πzero_geom_sum : β {n}, (βn: ?m.5712i in rangei: ?m.5724n, (n: ?m.57120 :0: ?m.5731Ξ±) ^Ξ±: Type ui) = ifi: ?m.5724n =n: ?m.57120 then0: ?m.62760 else0: ?m.63051 |1: ?m.63160 =>0: βGoals accomplished! π|Goals accomplished! π1 =>1: βGoals accomplished! π|Goals accomplished! πn + 2 =>n: βGoals accomplished! π#align zero_geom_sum zero_geom_sum theorem one_geom_sum (Goals accomplished! πn :n: ββ) : (ββ: Typei in rangei: ?m.8490n, (n: β1 :1: ?m.8497Ξ±) ^Ξ±: Type ui) =i: ?m.8490n :=n: βGoals accomplished! π#align one_geom_sum one_geom_sum -- porting note: simp can prove this -- @[simp] theorem op_geom_sum (Goals accomplished! πx :x: Ξ±Ξ±) (Ξ±: Type un :n: ββ) : op (ββ: Typei in rangei: ?m.9704n,n: βx ^x: Ξ±i) = βi: ?m.9704i in rangei: ?m.10110n, opn: βx ^x: Ξ±i :=i: ?m.10110Goals accomplished! π#align op_geom_sum op_geom_sum --porting note: linter suggested to change left hand side @[simp] theoremGoals accomplished! πop_geom_sumβ (xx: Ξ±y :y: Ξ±Ξ±) (Ξ±: Type un :n: ββ) : ββ: Typei in rangei: ?m.10767n, opn: βy ^ (y: Ξ±n -n: β1 -1: ?m.10784i) * opi: ?m.10767x ^x: Ξ±i = βi: ?m.10767i in rangei: ?m.11707n, opn: βy ^y: Ξ±i * opi: ?m.11707x ^ (x: Ξ±n -n: β1 -1: ?m.11729i):=i: ?m.11707Goals accomplished! π#align op_geom_sumβ op_geom_sumβ theoremGoals accomplished! πgeom_sumβ_with_one (x :x: Ξ±Ξ±) (Ξ±: Type un :n: ββ) : (ββ: Typei in rangei: ?m.13877n,n: βx ^x: Ξ±i *i: ?m.138771 ^ (1: ?m.13889n -n: β1 -1: ?m.13906i)) = βi: ?m.13877i in rangei: ?m.14504n,n: βx ^x: Ξ±i :=i: ?m.14504sum_congr rfl funsum_congr: β {Ξ² : Type ?u.15267} {Ξ± : Type ?u.15266} {sβ sβ : Finset Ξ±} {f g : Ξ± β Ξ²} [inst : AddCommMonoid Ξ²], sβ = sβ β (β (x : Ξ±), x β sβ β f x = g x) β Finset.sum sβ f = Finset.sum sβ gii: ?m.15322_ =>_: ?m.15325Goals accomplished! π#align geom_sumβ_with_one geom_sumβ_with_one /-- $x^n-y^n = (x-y) \sum x^ky^{n-1-k}$ reformulated without `-` signs. -/ protected theoremGoals accomplished! πCommute.geom_sumβ_mul_add {xx: Ξ±y :y: Ξ±Ξ±} (Ξ±: Type uh : Commuteh: Commute x yxx: Ξ±y) (y: Ξ±n :n: ββ) : (ββ: Typei in rangei: ?m.15717n, (n: βx +x: Ξ±y) ^y: Ξ±i *i: ?m.15717y ^ (y: Ξ±n -n: β1 -1: ?m.15738i)) *i: ?m.15717x +x: Ξ±y ^y: Ξ±n = (n: βx +x: Ξ±y) ^y: Ξ±n :=n: βGoals accomplished! πGoals accomplished! πGoals accomplished! πΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
zeroΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
succΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
zeroΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
succGoals accomplished! πGoals accomplished! πGoals accomplished! πGoals accomplished! πΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
i: β
hi: i β range n
this: Commute y ((x + y) ^ i)Ξ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
i: β
hi: i β range n
this: Commute y ((x + y) ^ i)Ξ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
i: β
hi: i β range n
this: Commute y ((x + y) ^ i)Ξ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
i: β
hi: i β range n
this: Commute y ((x + y) ^ i)Ξ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
i: β
hi: i β range n
this: Commute y ((x + y) ^ i)Ξ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
i: β
hi: i β range n
this: Commute y ((x + y) ^ i)Ξ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
i: β
hi: i β range n
this: Commute y ((x + y) ^ i)Ξ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
i: β
hi: i β range n
this: Commute y ((x + y) ^ i)Ξ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
i: β
hi: i β range n
this: Commute y ((x + y) ^ i)Ξ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
i: β
hi: i β range n
this: Commute y ((x + y) ^ i)Ξ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
i: β
hi: i β range n
this: Commute y ((x + y) ^ i)
e_a.e_aΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
i: β
hi: i β range n
this: Commute y ((x + y) ^ i)
e_a.e_aΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
i: β
hi: i β range n
this: Commute y ((x + y) ^ i)
e_a.e_aΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
i: β
hi: i β range n
this: Commute y ((x + y) ^ i)
e_a.e_aΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
i: β
hi: i β range n
this: Commute y ((x + y) ^ i)
e_a.e_aΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
i: β
hi: i β range n
this: Commute y ((x + y) ^ i)
e_a.e_aΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
i: β
hi: i β range n
this: Commute y ((x + y) ^ i)
e_a.e_aΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
i: β
hi: i β range n
this: Commute y ((x + y) ^ i)
e_a.e_aΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
i: β
hi: i β range n
thisβ: Commute y ((x + y) ^ i)
this: i + 1 + (n - (i + 1)) = n
e_a.e_aΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
i: β
hi: i β range n
thisβ: Commute y ((x + y) ^ i)
this: i + 1 + (n - (i + 1)) = n
e_a.e_aΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
i: β
hi: i β range n
thisβ: Commute y ((x + y) ^ i)
this: n - (i + 1) + (i + 1) = n
e_a.e_aΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
i: β
hi: i β range n
thisβ: Commute y ((x + y) ^ i)
this: n - (i + 1) + (i + 1) = n
e_a.e_aΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
i: β
hi: i β range n
thisβ: Commute y ((x + y) ^ i)
this: n - (i + 1) + (i + 1) = n
e_a.e_aΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
i: β
hi: i β range n
thisβ: Commute y ((x + y) ^ i)
this: n - (i + 1) + (i + 1) = n
e_a.e_aΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
i: β
hi: i β range n
thisβ: Commute y ((x + y) ^ i)
this: n - (i + 1) + (i + 1) = n
e_a.e_aΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
i: β
hi: i β range n
thisβ: Commute y ((x + y) ^ i)
this: n - (i + 1) + (i + 1) = n
e_a.e_aΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
i: β
hi: i β range n
thisβ: Commute y ((x + y) ^ i)
this: n - (i + 1) + (i + 1) = n
e_a.e_aΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
i: β
hi: i β range n
thisβ: Commute y ((x + y) ^ i)
this: n - (i + 1) + (i + 1) = n
e_a.e_aΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
i: β
hi: i β range n
thisβ: Commute y ((x + y) ^ i)
this: n - (i + 1) + (i + 1) = n
e_a.e_aΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
i: β
hi: i β range n
thisβ: Commute y ((x + y) ^ i)
this: n - (i + 1) + (i + 1) = n
e_a.e_aΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
i: β
hi: i β range n
thisβ: Commute y ((x + y) ^ i)
this: n - (i + 1) + (i + 1) = n
e_a.e_aΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
i: β
hi: i β range n
thisβ: Commute y ((x + y) ^ i)
this: n - (i + 1) + (i + 1) = n
e_a.e_aΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
i: β
hi: i β range n
thisβ: Commute y ((x + y) ^ i)
this: n - (i + 1) + (i + 1) = n
e_a.e_aGoals accomplished! πΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
f_succ: β (i : β), i β range n β f (n + 1) i = y * f n i
succΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
f_succ: β (i : β), i β range n β f (n + 1) i = y * f n i
succΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
f_succ: β (i : β), i β range n β f (n + 1) i = y * f n i
succΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
f_succ: β (i : β), i β range n β f (n + 1) i = y * f n i
succΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
f_succ: β (i : β), i β range n β f (n + 1) i = y * f n i
succΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
f_succ: β (i : β), i β range n β f (n + 1) i = y * f n i
succΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
f_succ: β (i : β), i β range n β f (n + 1) i = y * f n i
succΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
f_succ: β (i : β), i β range n β f (n + 1) i = y * f n i
succΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
f_succ: β (i : β), i β range n β f (n + 1) i = y * f n i
succΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
f_succ: β (i : β), i β range n β f (n + 1) i = y * f n i
succΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
f_succ: β (i : β), i β range n β f (n + 1) i = y * f n i
succΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
f_succ: β (i : β), i β range n β f (n + 1) i = y * f n i
succΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
f_succ: β (i : β), i β range n β f (n + 1) i = y * f n i
succΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
f_succ: β (i : β), i β range n β f (n + 1) i = y * f n i
succΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
f_succ: β (i : β), i β range n β f (n + 1) i = y * f n i
succΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
f_succ: β (i : β), i β range n β f (n + 1) i = y * f n i
succΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
f_succ: β (i : β), i β range n β f (n + 1) i = y * f n i
succ.e_aΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
f_succ: β (i : β), i β range n β f (n + 1) i = y * f n i
succ.e_aΞ±: Type u
instβ: Semiring Ξ±
x, y: Ξ±
h: Commute x y
f:= fun m i => (x + y) ^ i * y ^ (m - 1 - i): β β β β Ξ±
hf: β (m i : β), f m i = (x + y) ^ i * y ^ (m - 1 - i)
n: β
ih: (β i in range n, f n i) * x + y ^ n = (x + y) ^ n
f_last: f (n + 1) n = (x + y) ^ n
f_succ: β (i : β), i β range n β f (n + 1) i = y * f n i
succ.e_a