Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 484d864

Browse files
sanderdahmenChrisHughes24
authored andcommitted
add geometric sum (#701)
* feat(data/finset): add range_add_one * feat(algebra/big_operators): geometric sum for semiring, ring and division ring
1 parent 22c7179 commit 484d864

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

src/algebra/big_operators.lean

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -530,6 +530,32 @@ eq.symm (prod_bij (λ x _, nat.succ x)
530530

531531
end finset
532532

533+
section geom_sum
534+
open finset
535+
536+
theorem geom_sum_mul_add [semiring α] (x : α) :
537+
∀ (n : ℕ), ((range n).sum (λ i, (x+1)^i)) * x + 1 = (x+1)^n
538+
| 0 := by simp
539+
| (n+1) := calc (range (n + 1)).sum (λi, (x + 1) ^ i) * x + 1 =
540+
(x + 1)^n * x + (((range n).sum (λ i, (x+1)^i)) * x + 1) :
541+
by simp [range_add_one, add_mul]
542+
... = (x + 1)^n * x + (x + 1)^n :
543+
by rw geom_sum_mul_add n
544+
... = (x + 1) ^ (n + 1) :
545+
by simp [pow_add, mul_add]
546+
547+
theorem geom_sum_mul [ring α] (x : α) (n : ℕ) :
548+
((range n).sum (λ i, x^i)) * (x-1) = x^n-1 :=
549+
have _ := geom_sum_mul_add (x-1) n,
550+
by rw [sub_add_cancel] at this; rw [← this, add_sub_cancel]
551+
552+
theorem geom_sum [division_ring α] (x : α) (h : x ≠ 1) (n : ℕ) :
553+
(range n).sum (λ i, x^i) = (x^n-1)/(x-1) :=
554+
have x - 10, by simp [*, -sub_eq_add_neg, sub_eq_iff_eq_add] at *,
555+
by rw [← geom_sum_mul, mul_div_cancel _ this]
556+
557+
end geom_sum
558+
533559
section group
534560

535561
open list

src/data/finset.lean

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -616,6 +616,9 @@ def range (n : ℕ) : finset ℕ := ⟨_, nodup_range n⟩
616616
theorem range_succ : range (succ n) = insert n (range n) :=
617617
eq_of_veq $ (range_succ n).trans $ (ndinsert_of_not_mem not_mem_range_self).symm
618618

619+
theorem range_add_one : range (n + 1) = insert n (range n) :=
620+
range_succ
621+
619622
@[simp] theorem not_mem_range_self : n ∉ range n := not_mem_range_self
620623

621624
@[simp] theorem range_subset {n m} : range n ⊆ range m ↔ n ≤ m := range_subset

0 commit comments

Comments
 (0)