Problems / erdos-1050 / erdos-1050--h1-v2--h2
Integrality: b(n)z - a(n) = 9^n W(n) E(n)
erdos-1050--h1-v2--h2
proved
Hole integrality of erdos-1050--h1-v2 (split by 20260924T123700Z-t0924-1050-mcp-partial.lean).
$\displaystyle \exists\, a,b:\mathbb{N}\to\mathbb{Z}\ \ \forall n\ge 1:\qquad b(n)\,z-a(n)\;=\;9^n\,W(n)\,E(n)$
There are two sequences of integers $a(n)$, $b(n)$ such that for every $n\ge 1$ the identity holds in $\mathbb{R}$, where, with $c=8/3$, $z=\sum_{j\ge 0}\bigl(1-c\,2^{j+1}\bigr)^{-1}$, $W(n)=(n-2)!\;\prod_{k=1}^{n}\bigl(1-c\,2^{k}\bigr)\prod_{k=\lfloor (n+1)/2\rfloor}^{n}\bigl(1-2^{k}\bigr)$ and $E(n)=\sum_{j\ge 0}\;-\bigl(1-c\,2^{\,2n+j}\bigr)^{-1}\prod_{k=1}^{n-1}\bigl(1-2^{\,k-n-j}\bigr)\bigl(1-c\,2^{\,k+n+j}\bigr)^{-1}$. Here $n-2$ is natural-number subtraction (so $(n-2)!=0!=1$ at $n=1$), $\lfloor (n+1)/2\rfloor$ is natural-number division, the exponents $2n+j$, $k-n-j$ and $k+n+j$ in $E(n)$ are integers (so $2^{k-n-j}=1/2^{n+j-k}$, and the product over $k$ is empty at $n=1$), and both infinite sums are Lean's ∑' over $j\ge 0$, which is $0$ for a non-summable family. Nothing is required of $a(0)$ or $b(0)$, and $a(n)$, $b(n)$ are not required to be nonzero.
Lean
theorem erdos_1050__h1_v2__h2 : ∃ (a : ℕ → ℤ) (b : ℕ → ℤ),
∀ (n : ℕ),
(1 : ℕ) ≤ n →
(↑(b n) : ℝ) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (↑(a n) : ℝ) =
(9 : ℝ) ^ n *
(((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) *
∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) *
∑' (j : ℕ),
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ *
∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)),
((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) *
((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ := by
sorryWhy does it end in sorry?
A statement is written := by sorry: the sorry holds the place of a proof, because a statement file only says what is claimed. A proof the gate checked is its own file, Proof.lean. How to read a proof page →
Explainer
Informal account, unverified — unverified prose about a kernel-checked proof; shown section by section, each labelled with who drafted, wrote or verified it (D-3 v3.31).
Unverified: explainer, its words from explainer/658a25aec9a9….md, written by t1006-w2, drafted with Claude Opus 5.5 (claude-opus-5-5) via Claude Code, as an agent, 2026-10-06; explainer/d31708683eee….md, written by t1006-w2, drafted with Claude Opus 5.5 (claude-opus-5-5) via Claude Code, as an agent, 2026-10-06.
What is proved, and the plan
Draft · drafted, by the model named above
Fix $c = 8/3$ and write $z=\sum_{j\ge0}\bigl(1-c\,2^{\,j+1}\bigr)^{-1}$. For $n\ge1$ and $1\le k\le n$ write $$D_k=\prod_{1\le l\le n,\ l\ne k}\bigl(1-2^{\,l-k}\bigr),\qquad A_k=-\frac{\prod_{t=1}^{n-1}\bigl(1-c\,2^{\,t+k}\bigr)}{D_k},\qquad W(n)=(n-2)!\prod_{k=1}^{n}\bigl(1-c\,2^k\bigr)\prod_{k=\lceil n/2\rceil}^{n}\bigl(1-2^k\bigr),$$ and $E(n)$ for the infinite sum on the right of the statement, so the statement asks for integers with $b(n)z-a(n)=9^nW(n)E(n)$ for $n\ge1$. Put $$\beta_0=\sum_{k=1}^{n}A_k,\qquad S_1=\sum_{k=1}^{n}A_k\sum_{i=1}^{k}\bigl(1-c\,2^i\bigr)^{-1},\qquad S_2=\sum_{i=1}^{n-1}\frac{B_i}{2^i-1},\quad B_i=\sum_{k=1}^{n}A_k\,(c\,2^k)^{-i}.$$
The proof has four parts, then one line:
(1) numerator_integral: $9^nW(n)(S_1-S_2)$ is an integer $a(n)$.
(2) hden: $9^nW(n)\beta_0$ is an integer $b(n)$.
(3) hpf: a partial-fraction identity for the summand of $E(n)$.
(4) hres: summing it, $E(n)=\beta_0\,z-(S_1-S_2)$.
The final line takes these $a$ and $b$ and checks $b(n)z-a(n)=9^nW(n)E(n)$ by linear_combination from the three equations. The comments in the proof point to annexes 959e0d5b… and a03db62f… for the informal argument (Borwein's construction). The outline lists no graph node as used: this proof proves part 1 in full itself and does not call the node erdos-1050--h1-v2--h2--h1, although that node states the same fact and is listed as a dependency.
Read it step by step (5 more sections)
Shared lemmas
Draft · drafted, by the model named above
These eight steps are stated once at the top and used by parts 1 and 2. With $D_s(k)=\prod_{l\in s,\,l\ne k}(1-2^{\,l-k})$ for a finite set $s$ of naturals:
hsumZ: a finite sum of terms that are each integers is an integer.
h0: $\sum_{k\in s}1/D_s(k)=1$ for nonempty $s$ (Mathlib's Lagrange basis for the nodes $2^{-k}$, evaluated at $0$).
hrec: for $a\in s$, $\sum_{k\in s}2^kf(k)/D_s(k)=\sum_{k\in s\setminus\{a\}}2^kf(k)/D_{s\setminus\{a\}}(k)+2^a\sum_{k\in s}f(k)/D_s(k)$.
hW: $\sum_{k\in s}(2^k)^e/D_s(k)$ is an integer for every $e\ge0$ (induction on $|s|+e$ using h0 and hrec). Write $H_e$ for this sum with $s=\{1,\dots,n\}$.
hV: $\sum_{k\in s}(2^k)^{-(m+1)}/D_s(k)=0$ when $m+1<|s|$.
hgeo: $\sum_{i=1}^{k}2^{-im}=(1-2^{-km})/(2^m-1)$ for $m\ge1$.
hdvd: $2^i-1$ divides $\prod_{k=\lceil n/2\rceil}^{n}(1-2^k)$ for $1\le i\le n-1$ (it divides $2^{k_0}-1$ for the multiple $k_0=i\lfloor n/i\rfloor$ of $i$, which lies in that range).
hpoly: $\prod_{t=1}^{n-1}(1-2^ty)=\sum_{j<n}\alpha_jy^j$ with integers $\alpha_j$.
Part 1: the numerator
Draft · drafted, by the model named above
numerator_integral states exactly what the node erdos-1050--h1-v2--h2--h1 states, and is proved here by the same argument, whose own steps are residue_integral, polypart_integral, head_integral and hmer nested inside it:
$S_1$ is split by partial fractions in the parameter $c$ into a residue part $\sum_{i=1}^n b_i\,(1-c\,2^i)^{-1}$, with $b_i=\sum_{k=i}^nA_k|_{c\to2^{-i}}$, and a remainder. Each $b_i$ is an integer: every term of it is an integer, using that Gaussian binomial coefficients at $q=2$ are integers. The remainder times $3^n\prod_{k=\lceil n/2\rceil}^n(1-2^k)$ is an integer, by hW, hgeo and hdvd.
$3^{\,n-1-i}B_i$ is an integer for $1\le i\le n-1$. Expanding $A_k$ with hpoly, the terms of negative degree vanish by hV and the others are multiples of the $H_e$. The factor $2^i-1$ is cancelled by hdvd.
s10 unpacks the resulting sequence $a$.
Part 2: the denominator
Draft · drafted, by the model named above
hden produces integers $b(n)=9^nW(n)\beta_0$ for $n\ge1$. Its step key shows that $3^{\,n-1}\beta_0$ is an integer. Expanding the numerator of $A_k$ with hpoly gives $$\beta_0=-\sum_{j<n}\alpha_j\,c^{\,j}H_j,$$ and $3^{\,n-1}c^{\,j}=3^{\,n-1-j}8^{\,j}$ for $j\le n-1$, so $3^{\,n-1}\beta_0=-\sum_j\alpha_j3^{\,n-1-j}8^jH_j$, an integer by hW. Then, writing $9^n=3\cdot3^{\,n-1}\cdot3^n$ and $3^n\prod_{k=1}^n(1-c\,2^k)=\prod_{k=1}^n(3-8\cdot2^k)$, the proof defines $$b(n)=3\,(n-2)!\prod_{k=1}^n(3-8\cdot2^k)\prod_{k=\lceil n/2\rceil}^{n}(1-2^k)\cdot\bigl(3^{\,n-1}\beta_0\bigr)$$ for $n\ge1$ (and $0$ at $n=0$). s12 unpacks it.
Part 3: partial fractions at $x=2^m$
Draft · drafted, by the model named above
hpf: for $n\ge1$ and $m\ge1$, the summand of $E(n)$ evaluated at $x=2^m$, that is $$-\bigl(1-c\,2^{\,m+n}\bigr)^{-1}\prod_{k=1}^{n-1}\bigl(1-2^{\,k-m}\bigr)\bigl(1-c\,2^{\,k+m}\bigr)^{-1},$$ equals $$\sum_{k=1}^{n}A_k\,\bigl(1-c\,2^{\,k+m}\bigr)^{-1}+\sum_{i=1}^{n-1}B_i\,(2^m)^{-i}.$$
The step lag is a general partial-fraction formula from Mathlib's Lagrange interpolation. For distinct nonzero $p_k$ ($k\in s$) a polynomial $Q$ of degree less than $|s|$, and $x$ with every $1-p_kx\ne0$,
$$Q(x)\prod_{k\in s}(1-p_kx)^{-1}=\sum_{k\in s}Q(1/p_k)\prod_{j\ne k}(1-p_j/p_k)^{-1}(1-p_kx)^{-1}.$$
It is applied with $p_k=c\,2^k$ for $k=1,\dots,n$ and $Q(X)=-\prod_{t=1}^{n-1}(X-2^t)$, which has degree $n-1$.
The left side is rewritten into this shape (the factor $(2^m)^{-(n-1)}$ comes from $1-2^{k-m}=2^{-m}(2^m-2^k)$).
The coefficients are matched with $A_k\,(c\,2^k)^{-(n-1)}$.
A finite geometric identity, $(1-u)^{-1}+\sum_{i=1}^{N}u^{-i}=u^{-N}(1-u)^{-1}$ with $u=c\,2^{k}2^{m}$ and $N=n-1$, splits each term into the two sums shown. The calc chain at the end of hpf strings these equalities together.
Part 4: summing over $m$
Draft · drafted, by the model named above
hres: for $n\ge1$, $E(n)=\beta_0\,z-(S_1-S_2)$.
Re-indexing. The terms of $E(n)$ are the summand above at $m=n+j$, $j\ge0$. The terms at $m=1,\dots,n-1$ are $0$, because the factor $k=m$ of $\prod_k(1-2^{\,k-m})$ vanishes. So $E(n)$ is the sum of the summand over all $m\ge1$.
Summability. The proof establishes it for every piece: $(1-c\,2^{\,k+m+1})^{-1}$ is bounded in size by $(1/2)^m$, and $\sum_m (2^{m+1})^{-i}$ is geometric. The full summand is then summable because it equals, by hpf, a sum of summable pieces.
Summing term by term. The proof applies hpf for every $m\ge1$ and sums. On the first part it uses $\sum_{m\ge1}(1-c\,2^{\,k+m})^{-1}=z-\sum_{i=1}^{k}(1-c\,2^i)^{-1}$, the tail of $z$. On the second it uses $\sum_{m\ge1}2^{-mi}=1/(2^i-1)$ for $i\ge1$. The result is $\beta_0z-S_1+S_2$.
The proof then concludes with the single linear_combination described in the first section.
History: 2 versions on record
2026-10-06 · written by t1006-w2, drafted with Claude Opus 5.5 (claude-opus-5-5) via Claude Code, as an agent · not signed · explainer/d31708683eee….md · the first version of its chain
Read this version
What is proved, and the plan
Fix $c = 8/3$ and write $z=\sum_{j\ge0}\bigl(1-c\,2^{\,j+1}\bigr)^{-1}$. For $n\ge1$ and $1\le k\le n$ write $$D_k=\prod_{1\le l\le n,\ l\ne k}\bigl(1-2^{\,l-k}\bigr),\qquad A_k=-\frac{\prod_{t=1}^{n-1}\bigl(1-c\,2^{\,t+k}\bigr)}{D_k},\qquad W(n)=(n-2)!\prod_{k=1}^{n}\bigl(1-c\,2^k\bigr)\prod_{k=\lceil n/2\rceil}^{n}\bigl(1-2^k\bigr),$$ and $E(n)$ for the infinite sum on the right of the statement, so the statement asks for integers with $b(n)z-a(n)=9^nW(n)E(n)$ for $n\ge1$. Put $$\beta_0=\sum_{k=1}^{n}A_k,\qquad S_1=\sum_{k=1}^{n}A_k\sum_{i=1}^{k}\bigl(1-c\,2^i\bigr)^{-1},\qquad S_2=\sum_{i=1}^{n-1}\frac{B_i}{2^i-1},\quad B_i=\sum_{k=1}^{n}A_k\,(c\,2^k)^{-i}.$$
The proof has four parts, then one line:
numerator_integral: $9^nW(n)(S_1-S_2)$ is an integer $a(n)$.hden: $9^nW(n)\beta_0$ is an integer $b(n)$.hpf: a partial-fraction identity for the summand of $E(n)$.hres: summing it, $E(n)=\beta_0\,z-(S_1-S_2)$.
The final line takes these $a$ and $b$ and checks $b(n)z-a(n)=9^nW(n)E(n)$ by
linear_combinationfrom the three equations. The comments in the proof point to annexes 959e0d5b… and a03db62f… for the informal argument (Borwein's construction). The outline lists no graph node as used: this proof proves part 1 in full itself and does not call the node erdos-1050--h1-v2--h2--h1, although that node states the same fact and is listed as a dependency.Shared lemmas (h0 hdvd hgeo hpoly hrec hsumZ hV hW)
These eight steps are stated once at the top and used by parts 1 and 2. With $D_s(k)=\prod_{l\in s,\,l\ne k}(1-2^{\,l-k})$ for a finite set $s$ of naturals:
hsumZ: a finite sum of terms that are each integers is an integer.h0: $\sum_{k\in s}1/D_s(k)=1$ for nonempty $s$ (Mathlib's Lagrange basis for the nodes $2^{-k}$, evaluated at $0$).hrec: for $a\in s$, $\sum_{k\in s}2^kf(k)/D_s(k)=\sum_{k\in s\setminus\{a\}}2^kf(k)/D_{s\setminus\{a\}}(k)+2^a\sum_{k\in s}f(k)/D_s(k)$.hW: $\sum_{k\in s}(2^k)^e/D_s(k)$ is an integer for every $e\ge0$ (induction on $|s|+e$ usingh0andhrec). Write $H_e$ for this sum with $s=\{1,\dots,n\}$.hV: $\sum_{k\in s}(2^k)^{-(m+1)}/D_s(k)=0$ when $m+1<|s|$.hgeo: $\sum_{i=1}^{k}2^{-im}=(1-2^{-km})/(2^m-1)$ for $m\ge1$.hdvd: $2^i-1$ divides $\prod_{k=\lceil n/2\rceil}^{n}(1-2^k)$ for $1\le i\le n-1$ (it divides $2^{k_0}-1$ for the multiple $k_0=i\lfloor n/i\rfloor$ of $i$, which lies in that range).hpoly: $\prod_{t=1}^{n-1}(1-2^ty)=\sum_{j<n}\alpha_jy^j$ with integers $\alpha_j$.
Part 1: the numerator (numerator_integral s10)
numerator_integralstates exactly what the node erdos-1050--h1-v2--h2--h1 states, and is proved here by the same argument, whose own steps areresidue_integral,polypart_integral,head_integralandhmernested inside it:- $S_1$ is split by partial fractions in the parameter $c$ into a residue part $\sum_{i=1}^n b_i\,(1-c\,2^i)^{-1}$, with $b_i=\sum_{k=i}^nA_k|_{c\to2^{-i}}$, and a remainder. Each $b_i$ is an integer: every term of it is an integer, using that Gaussian binomial coefficients at $q=2$ are integers. The remainder times $3^n\prod_{k=\lceil n/2\rceil}^n(1-2^k)$ is an integer, by
hW,hgeoandhdvd. - $3^{\,n-1-i}B_i$ is an integer for $1\le i\le n-1$. Expanding $A_k$ with
hpoly, the terms of negative degree vanish byhVand the others are multiples of the $H_e$. The factor $2^i-1$ is cancelled byhdvd.
s10unpacks the resulting sequence $a$.Part 2: the denominator (hden s12)
hdenproduces integers $b(n)=9^nW(n)\beta_0$ for $n\ge1$. Its stepkeyshows that $3^{\,n-1}\beta_0$ is an integer. Expanding the numerator of $A_k$ withhpolygives $$\beta_0=-\sum_{j<n}\alpha_j\,c^{\,j}H_j,$$ and $3^{\,n-1}c^{\,j}=3^{\,n-1-j}8^{\,j}$ for $j\le n-1$, so $3^{\,n-1}\beta_0=-\sum_j\alpha_j3^{\,n-1-j}8^jH_j$, an integer byhW. Then, writing $9^n=3\cdot3^{\,n-1}\cdot3^n$ and $3^n\prod_{k=1}^n(1-c\,2^k)=\prod_{k=1}^n(3-8\cdot2^k)$, the proof defines $$b(n)=3\,(n-2)!\prod_{k=1}^n(3-8\cdot2^k)\prod_{k=\lceil n/2\rceil}^{n}(1-2^k)\cdot\bigl(3^{\,n-1}\beta_0\bigr)$$ for $n\ge1$ (and $0$ at $n=0$).s12unpacks it.Part 3: partial fractions at $x=2^m$ (hpf)
hpf: for $n\ge1$ and $m\ge1$, the summand of $E(n)$ evaluated at $x=2^m$, that is $$-\bigl(1-c\,2^{\,m+n}\bigr)^{-1}\prod_{k=1}^{n-1}\bigl(1-2^{\,k-m}\bigr)\bigl(1-c\,2^{\,k+m}\bigr)^{-1},$$ equals $$\sum_{k=1}^{n}A_k\,\bigl(1-c\,2^{\,k+m}\bigr)^{-1}+\sum_{i=1}^{n-1}B_i\,(2^m)^{-i}.$$- The step
lagis a general partial-fraction formula from Mathlib's Lagrange interpolation. For distinct nonzero $p_k$ ($k\in s$) a polynomial $Q$ of degree less than $|s|$, and $x$ with every $1-p_kx\ne0$,
$$Q(x)\prod_{k\in s}(1-p_kx)^{-1}=\sum_{k\in s}Q(1/p_k)\prod_{j\ne k}(1-p_j/p_k)^{-1}(1-p_kx)^{-1}.$$
- It is applied with $p_k=c\,2^k$ for $k=1,\dots,n$ and $Q(X)=-\prod_{t=1}^{n-1}(X-2^t)$, which has degree $n-1$.
- The left side is rewritten into this shape (the factor $(2^m)^{-(n-1)}$ comes from $1-2^{k-m}=2^{-m}(2^m-2^k)$).
- The coefficients are matched with $A_k\,(c\,2^k)^{-(n-1)}$.
- A finite geometric identity, $(1-u)^{-1}+\sum_{i=1}^{N}u^{-i}=u^{-N}(1-u)^{-1}$ with $u=c\,2^{k}2^{m}$ and $N=n-1$, splits each term into the two sums shown. The
calcchain at the end ofhpfstrings these equalities together.
Part 4: summing over $m$ (hres)
hres: for $n\ge1$, $E(n)=\beta_0\,z-(S_1-S_2)$.- Re-indexing. The terms of $E(n)$ are the summand above at $m=n+j$, $j\ge0$. The terms at $m=1,\dots,n-1$ are $0$, because the factor $k=m$ of $\prod_k(1-2^{\,k-m})$ vanishes. So $E(n)$ is the sum of the summand over all $m\ge1$.
- Summability. The proof establishes it for every piece: $(1-c\,2^{\,k+m+1})^{-1}$ is bounded in size by $(1/2)^m$, and $\sum_m (2^{m+1})^{-i}$ is geometric. The full summand is then summable because it equals, by
hpf, a sum of summable pieces. - Summing term by term. The proof applies
hpffor every $m\ge1$ and sums. On the first part it uses $\sum_{m\ge1}(1-c\,2^{\,k+m})^{-1}=z-\sum_{i=1}^{k}(1-c\,2^i)^{-1}$, the tail of $z$. On the second it uses $\sum_{m\ge1}2^{-mi}=1/(2^i-1)$ for $i\ge1$. The result is $\beta_0z-S_1+S_2$.
The proof then concludes with the single
linear_combinationdescribed in the first section.2026-10-06 · written by t1006-w2, drafted with Claude Opus 5.5 (claude-opus-5-5) via Claude Code, as an agent · not signed · current · explainer/658a25aec9a9….md · diff to its predecessor
Read this version
What is proved, and the plan
Fix $c = 8/3$ and write $z=\sum_{j\ge0}\bigl(1-c\,2^{\,j+1}\bigr)^{-1}$. For $n\ge1$ and $1\le k\le n$ write $$D_k=\prod_{1\le l\le n,\ l\ne k}\bigl(1-2^{\,l-k}\bigr),\qquad A_k=-\frac{\prod_{t=1}^{n-1}\bigl(1-c\,2^{\,t+k}\bigr)}{D_k},\qquad W(n)=(n-2)!\prod_{k=1}^{n}\bigl(1-c\,2^k\bigr)\prod_{k=\lceil n/2\rceil}^{n}\bigl(1-2^k\bigr),$$ and $E(n)$ for the infinite sum on the right of the statement, so the statement asks for integers with $b(n)z-a(n)=9^nW(n)E(n)$ for $n\ge1$. Put $$\beta_0=\sum_{k=1}^{n}A_k,\qquad S_1=\sum_{k=1}^{n}A_k\sum_{i=1}^{k}\bigl(1-c\,2^i\bigr)^{-1},\qquad S_2=\sum_{i=1}^{n-1}\frac{B_i}{2^i-1},\quad B_i=\sum_{k=1}^{n}A_k\,(c\,2^k)^{-i}.$$
The proof has four parts, then one line:
(1)
numerator_integral: $9^nW(n)(S_1-S_2)$ is an integer $a(n)$.(2)
hden: $9^nW(n)\beta_0$ is an integer $b(n)$.(3)
hpf: a partial-fraction identity for the summand of $E(n)$.(4)
hres: summing it, $E(n)=\beta_0\,z-(S_1-S_2)$.The final line takes these $a$ and $b$ and checks $b(n)z-a(n)=9^nW(n)E(n)$ by
linear_combinationfrom the three equations. The comments in the proof point to annexes 959e0d5b… and a03db62f… for the informal argument (Borwein's construction). The outline lists no graph node as used: this proof proves part 1 in full itself and does not call the node erdos-1050--h1-v2--h2--h1, although that node states the same fact and is listed as a dependency.Shared lemmas (h0 hdvd hgeo hpoly hrec hsumZ hV hW)
These eight steps are stated once at the top and used by parts 1 and 2. With $D_s(k)=\prod_{l\in s,\,l\ne k}(1-2^{\,l-k})$ for a finite set $s$ of naturals:
hsumZ: a finite sum of terms that are each integers is an integer.h0: $\sum_{k\in s}1/D_s(k)=1$ for nonempty $s$ (Mathlib's Lagrange basis for the nodes $2^{-k}$, evaluated at $0$).hrec: for $a\in s$, $\sum_{k\in s}2^kf(k)/D_s(k)=\sum_{k\in s\setminus\{a\}}2^kf(k)/D_{s\setminus\{a\}}(k)+2^a\sum_{k\in s}f(k)/D_s(k)$.hW: $\sum_{k\in s}(2^k)^e/D_s(k)$ is an integer for every $e\ge0$ (induction on $|s|+e$ usingh0andhrec). Write $H_e$ for this sum with $s=\{1,\dots,n\}$.hV: $\sum_{k\in s}(2^k)^{-(m+1)}/D_s(k)=0$ when $m+1<|s|$.hgeo: $\sum_{i=1}^{k}2^{-im}=(1-2^{-km})/(2^m-1)$ for $m\ge1$.hdvd: $2^i-1$ divides $\prod_{k=\lceil n/2\rceil}^{n}(1-2^k)$ for $1\le i\le n-1$ (it divides $2^{k_0}-1$ for the multiple $k_0=i\lfloor n/i\rfloor$ of $i$, which lies in that range).hpoly: $\prod_{t=1}^{n-1}(1-2^ty)=\sum_{j<n}\alpha_jy^j$ with integers $\alpha_j$.Part 1: the numerator (numerator_integral s10)
numerator_integralstates exactly what the node erdos-1050--h1-v2--h2--h1 states, and is proved here by the same argument, whose own steps areresidue_integral,polypart_integral,head_integralandhmernested inside it:$S_1$ is split by partial fractions in the parameter $c$ into a residue part $\sum_{i=1}^n b_i\,(1-c\,2^i)^{-1}$, with $b_i=\sum_{k=i}^nA_k|_{c\to2^{-i}}$, and a remainder. Each $b_i$ is an integer: every term of it is an integer, using that Gaussian binomial coefficients at $q=2$ are integers. The remainder times $3^n\prod_{k=\lceil n/2\rceil}^n(1-2^k)$ is an integer, by
hW,hgeoandhdvd.$3^{\,n-1-i}B_i$ is an integer for $1\le i\le n-1$. Expanding $A_k$ with
hpoly, the terms of negative degree vanish byhVand the others are multiples of the $H_e$. The factor $2^i-1$ is cancelled byhdvd.s10unpacks the resulting sequence $a$.Part 2: the denominator (hden s12)
hdenproduces integers $b(n)=9^nW(n)\beta_0$ for $n\ge1$. Its stepkeyshows that $3^{\,n-1}\beta_0$ is an integer. Expanding the numerator of $A_k$ withhpolygives $$\beta_0=-\sum_{j<n}\alpha_j\,c^{\,j}H_j,$$ and $3^{\,n-1}c^{\,j}=3^{\,n-1-j}8^{\,j}$ for $j\le n-1$, so $3^{\,n-1}\beta_0=-\sum_j\alpha_j3^{\,n-1-j}8^jH_j$, an integer byhW. Then, writing $9^n=3\cdot3^{\,n-1}\cdot3^n$ and $3^n\prod_{k=1}^n(1-c\,2^k)=\prod_{k=1}^n(3-8\cdot2^k)$, the proof defines $$b(n)=3\,(n-2)!\prod_{k=1}^n(3-8\cdot2^k)\prod_{k=\lceil n/2\rceil}^{n}(1-2^k)\cdot\bigl(3^{\,n-1}\beta_0\bigr)$$ for $n\ge1$ (and $0$ at $n=0$).s12unpacks it.Part 3: partial fractions at $x=2^m$ (hpf)
hpf: for $n\ge1$ and $m\ge1$, the summand of $E(n)$ evaluated at $x=2^m$, that is $$-\bigl(1-c\,2^{\,m+n}\bigr)^{-1}\prod_{k=1}^{n-1}\bigl(1-2^{\,k-m}\bigr)\bigl(1-c\,2^{\,k+m}\bigr)^{-1},$$ equals $$\sum_{k=1}^{n}A_k\,\bigl(1-c\,2^{\,k+m}\bigr)^{-1}+\sum_{i=1}^{n-1}B_i\,(2^m)^{-i}.$$The step
lagis a general partial-fraction formula from Mathlib's Lagrange interpolation. For distinct nonzero $p_k$ ($k\in s$) a polynomial $Q$ of degree less than $|s|$, and $x$ with every $1-p_kx\ne0$,$$Q(x)\prod_{k\in s}(1-p_kx)^{-1}=\sum_{k\in s}Q(1/p_k)\prod_{j\ne k}(1-p_j/p_k)^{-1}(1-p_kx)^{-1}.$$
It is applied with $p_k=c\,2^k$ for $k=1,\dots,n$ and $Q(X)=-\prod_{t=1}^{n-1}(X-2^t)$, which has degree $n-1$.
The left side is rewritten into this shape (the factor $(2^m)^{-(n-1)}$ comes from $1-2^{k-m}=2^{-m}(2^m-2^k)$).
The coefficients are matched with $A_k\,(c\,2^k)^{-(n-1)}$.
A finite geometric identity, $(1-u)^{-1}+\sum_{i=1}^{N}u^{-i}=u^{-N}(1-u)^{-1}$ with $u=c\,2^{k}2^{m}$ and $N=n-1$, splits each term into the two sums shown. The
calcchain at the end ofhpfstrings these equalities together.Part 4: summing over $m$ (hres)
hres: for $n\ge1$, $E(n)=\beta_0\,z-(S_1-S_2)$.Re-indexing. The terms of $E(n)$ are the summand above at $m=n+j$, $j\ge0$. The terms at $m=1,\dots,n-1$ are $0$, because the factor $k=m$ of $\prod_k(1-2^{\,k-m})$ vanishes. So $E(n)$ is the sum of the summand over all $m\ge1$.
Summability. The proof establishes it for every piece: $(1-c\,2^{\,k+m+1})^{-1}$ is bounded in size by $(1/2)^m$, and $\sum_m (2^{m+1})^{-i}$ is geometric. The full summand is then summable because it equals, by
hpf, a sum of summable pieces.Summing term by term. The proof applies
hpffor every $m\ge1$ and sums. On the first part it uses $\sum_{m\ge1}(1-c\,2^{\,k+m})^{-1}=z-\sum_{i=1}^{k}(1-c\,2^i)^{-1}$, the tail of $z$. On the second it uses $\sum_{m\ge1}2^{-mi}=1/(2^i-1)$ for $i\ge1$. The result is $\beta_0z-S_1+S_2$.The proof then concludes with the single
linear_combinationdescribed in the first section.
Diff of 658a25aec9a9 against d31708683eee
@@ -8,8 +8,11 @@ The proof has four parts, then one line: -1. `numerator_integral`: $9^nW(n)(S_1-S_2)$ is an integer $a(n)$. -2. `hden`: $9^nW(n)\beta_0$ is an integer $b(n)$. -3. `hpf`: a partial-fraction identity for the summand of $E(n)$. -4. `hres`: summing it, $E(n)=\beta_0\,z-(S_1-S_2)$. +(1) `numerator_integral`: $9^nW(n)(S_1-S_2)$ is an integer $a(n)$. + +(2) `hden`: $9^nW(n)\beta_0$ is an integer $b(n)$. + +(3) `hpf`: a partial-fraction identity for the summand of $E(n)$. + +(4) `hres`: summing it, $E(n)=\beta_0\,z-(S_1-S_2)$. The final line takes these $a$ and $b$ and checks $b(n)z-a(n)=9^nW(n)E(n)$ by `linear_combination` from the three equations. The comments in the proof point to annexes 959e0d5b… and a03db62f… for the informal argument (Borwein's construction). The outline lists no graph node as used: this proof proves part 1 in full itself and does not call the node erdos-1050--h1-v2--h2--h1, although that node states the same fact and is listed as a dependency. @@ -19,12 +22,19 @@ These eight steps are stated once at the top and used by parts 1 and 2. With $D_s(k)=\prod_{l\in s,\,l\ne k}(1-2^{\,l-k})$ for a finite set $s$ of naturals: -- `hsumZ`: a finite sum of terms that are each integers is an integer. -- `h0`: $\sum_{k\in s}1/D_s(k)=1$ for nonempty $s$ (Mathlib's Lagrange basis for the nodes $2^{-k}$, evaluated at $0$). -- `hrec`: for $a\in s$, $\sum_{k\in s}2^kf(k)/D_s(k)=\sum_{k\in s\setminus\{a\}}2^kf(k)/D_{s\setminus\{a\}}(k)+2^a\sum_{k\in s}f(k)/D_s(k)$. -- `hW`: $\sum_{k\in s}(2^k)^e/D_s(k)$ is an integer for every $e\ge0$ (induction on $|s|+e$ using `h0` and `hrec`). Write $H_e$ for this sum with $s=\{1,\dots,n\}$. -- `hV`: $\sum_{k\in s}(2^k)^{-(m+1)}/D_s(k)=0$ when $m+1<|s|$. -- `hgeo`: $\sum_{i=1}^{k}2^{-im}=(1-2^{-km})/(2^m-1)$ for $m\ge1$. -- `hdvd`: $2^i-1$ divides $\prod_{k=\lceil n/2\rceil}^{n}(1-2^k)$ for $1\le i\le n-1$ (it divides $2^{k_0}-1$ for the multiple $k_0=i\lfloor n/i\rfloor$ of $i$, which lies in that range). -- `hpoly`: $\prod_{t=1}^{n-1}(1-2^ty)=\sum_{j<n}\alpha_jy^j$ with integers $\alpha_j$. +`hsumZ`: a finite sum of terms that are each integers is an integer. + +`h0`: $\sum_{k\in s}1/D_s(k)=1$ for nonempty $s$ (Mathlib's Lagrange basis for the nodes $2^{-k}$, evaluated at $0$). + +`hrec`: for $a\in s$, $\sum_{k\in s}2^kf(k)/D_s(k)=\sum_{k\in s\setminus\{a\}}2^kf(k)/D_{s\setminus\{a\}}(k)+2^a\sum_{k\in s}f(k)/D_s(k)$. + +`hW`: $\sum_{k\in s}(2^k)^e/D_s(k)$ is an integer for every $e\ge0$ (induction on $|s|+e$ using `h0` and `hrec`). Write $H_e$ for this sum with $s=\{1,\dots,n\}$. + +`hV`: $\sum_{k\in s}(2^k)^{-(m+1)}/D_s(k)=0$ when $m+1<|s|$. + +`hgeo`: $\sum_{i=1}^{k}2^{-im}=(1-2^{-km})/(2^m-1)$ for $m\ge1$. + +`hdvd`: $2^i-1$ divides $\prod_{k=\lceil n/2\rceil}^{n}(1-2^k)$ for $1\le i\le n-1$ (it divides $2^{k_0}-1$ for the multiple $k_0=i\lfloor n/i\rfloor$ of $i$, which lies in that range). + +`hpoly`: $\prod_{t=1}^{n-1}(1-2^ty)=\sum_{j<n}\alpha_jy^j$ with integers $\alpha_j$. ## Part 1: the numerator {steps: numerator_integral s10} @@ -32,6 +42,7 @@ `numerator_integral` states exactly what the node erdos-1050--h1-v2--h2--h1 states, and is proved here by the same argument, whose own steps are `residue_integral`, `polypart_integral`, `head_integral` and `hmer` nested inside it: -- $S_1$ is split by partial fractions in the parameter $c$ into a residue part $\sum_{i=1}^n b_i\,(1-c\,2^i)^{-1}$, with $b_i=\sum_{k=i}^nA_k|_{c\to2^{-i}}$, and a remainder. Each $b_i$ is an integer: every term of it is an integer, using that Gaussian binomial coefficients at $q=2$ are integers. The remainder times $3^n\prod_{k=\lceil n/2\rceil}^n(1-2^k)$ is an integer, by `hW`, `hgeo` and `hdvd`. -- $3^{\,n-1-i}B_i$ is an integer for $1\le i\le n-1$. Expanding $A_k$ with `hpoly`, the terms of negative degree vanish by `hV` and the others are multiples of the $H_e$. The factor $2^i-1$ is cancelled by `hdvd`. +$S_1$ is split by partial fractions in the parameter $c$ into a residue part $\sum_{i=1}^n b_i\,(1-c\,2^i)^{-1}$, with $b_i=\sum_{k=i}^nA_k|_{c\to2^{-i}}$, and a remainder. Each $b_i$ is an integer: every term of it is an integer, using that Gaussian binomial coefficients at $q=2$ are integers. The remainder times $3^n\prod_{k=\lceil n/2\rceil}^n(1-2^k)$ is an integer, by `hW`, `hgeo` and `hdvd`. + +$3^{\,n-1-i}B_i$ is an integer for $1\le i\le n-1$. Expanding $A_k$ with `hpoly`, the terms of negative degree vanish by `hV` and the others are multiples of the $H_e$. The factor $2^i-1$ is cancelled by `hdvd`. `s10` unpacks the resulting sequence $a$. @@ -52,10 +63,15 @@ $$\sum_{k=1}^{n}A_k\,\bigl(1-c\,2^{\,k+m}\bigr)^{-1}+\sum_{i=1}^{n-1}B_i\,(2^m)^{-i}.$$ -- The step `lag` is a general partial-fraction formula from Mathlib's Lagrange interpolation. For distinct nonzero $p_k$ ($k\in s$) a polynomial $Q$ of degree less than $|s|$, and $x$ with every $1-p_kx\ne0$, +The step `lag` is a general partial-fraction formula from Mathlib's Lagrange interpolation. For distinct nonzero $p_k$ ($k\in s$) a polynomial $Q$ of degree less than $|s|$, and $x$ with every $1-p_kx\ne0$, + $$Q(x)\prod_{k\in s}(1-p_kx)^{-1}=\sum_{k\in s}Q(1/p_k)\prod_{j\ne k}(1-p_j/p_k)^{-1}(1-p_kx)^{-1}.$$ -- It is applied with $p_k=c\,2^k$ for $k=1,\dots,n$ and $Q(X)=-\prod_{t=1}^{n-1}(X-2^t)$, which has degree $n-1$. -- The left side is rewritten into this shape (the factor $(2^m)^{-(n-1)}$ comes from $1-2^{k-m}=2^{-m}(2^m-2^k)$). -- The coefficients are matched with $A_k\,(c\,2^k)^{-(n-1)}$. -- A finite geometric identity, $(1-u)^{-1}+\sum_{i=1}^{N}u^{-i}=u^{-N}(1-u)^{-1}$ with $u=c\,2^{k}2^{m}$ and $N=n-1$, splits each term into the two sums shown. The `calc` chain at the end of `hpf` strings these equalities together. + +It is applied with $p_k=c\,2^k$ for $k=1,\dots,n$ and $Q(X)=-\prod_{t=1}^{n-1}(X-2^t)$, which has degree $n-1$. + +The left side is rewritten into this shape (the factor $(2^m)^{-(n-1)}$ comes from $1-2^{k-m}=2^{-m}(2^m-2^k)$). + +The coefficients are matched with $A_k\,(c\,2^k)^{-(n-1)}$. + +A finite geometric identity, $(1-u)^{-1}+\sum_{i=1}^{N}u^{-i}=u^{-N}(1-u)^{-1}$ with $u=c\,2^{k}2^{m}$ and $N=n-1$, splits each term into the two sums shown. The `calc` chain at the end of `hpf` strings these equalities together. ## Part 4: summing over $m$ {steps: hres} @@ -63,7 +79,9 @@ `hres`: for $n\ge1$, $E(n)=\beta_0\,z-(S_1-S_2)$. -- **Re-indexing.** The terms of $E(n)$ are the summand above at $m=n+j$, $j\ge0$. The terms at $m=1,\dots,n-1$ are $0$, because the factor $k=m$ of $\prod_k(1-2^{\,k-m})$ vanishes. So $E(n)$ is the sum of the summand over all $m\ge1$. -- **Summability.** The proof establishes it for every piece: $(1-c\,2^{\,k+m+1})^{-1}$ is bounded in size by $(1/2)^m$, and $\sum_m (2^{m+1})^{-i}$ is geometric. The full summand is then summable because it equals, by `hpf`, a sum of summable pieces. -- **Summing term by term.** The proof applies `hpf` for every $m\ge1$ and sums. On the first part it uses $\sum_{m\ge1}(1-c\,2^{\,k+m})^{-1}=z-\sum_{i=1}^{k}(1-c\,2^i)^{-1}$, the tail of $z$. On the second it uses $\sum_{m\ge1}2^{-mi}=1/(2^i-1)$ for $i\ge1$. The result is $\beta_0z-S_1+S_2$. +Re-indexing. The terms of $E(n)$ are the summand above at $m=n+j$, $j\ge0$. The terms at $m=1,\dots,n-1$ are $0$, because the factor $k=m$ of $\prod_k(1-2^{\,k-m})$ vanishes. So $E(n)$ is the sum of the summand over all $m\ge1$. + +Summability. The proof establishes it for every piece: $(1-c\,2^{\,k+m+1})^{-1}$ is bounded in size by $(1/2)^m$, and $\sum_m (2^{m+1})^{-i}$ is geometric. The full summand is then summable because it equals, by `hpf`, a sum of summable pieces. + +Summing term by term. The proof applies `hpf` for every $m\ge1$ and sums. On the first part it uses $\sum_{m\ge1}(1-c\,2^{\,k+m})^{-1}=z-\sum_{i=1}^{k}(1-c\,2^i)^{-1}$, the tail of $z$. On the second it uses $\sum_{m\ge1}2^{-mi}=1/(2^i-1)$ for $i\ge1$. The result is $\beta_0z-S_1+S_2$. The proof then concludes with the single `linear_combination` described in the first section.
Improve these words → Nothing is edited: a correction is a new version, and every version stays on the record (D-3 v3.30).
How it was proved
Proved by Proof.lean, checked by the kernel. Its attestation, 000335, records the gate’s run.
The proof step by step (outline)
Checked by the kernel — an outline of the attested proof below: attestations/000335.json, merge commit b16ab29fc51b.
Outline of Proof.lean, extracted by the gate at 82834c4684b8 from the proof’s elaboration: each step is a claim the proof establishes and the goal it leaves. Open a step for what it uses and its Lean lines.
hsumZhave∀ (s : Finset ℕ) (g : ℕ → ℝ), (∀ i ∈ s, ∃ (z : ℤ), (↑z : ℝ) = g i) → ∃ (z : ℤ), (↑z : ℝ) = ∑ i ∈ s, g iLeaves
∃ (a : ℕ → ℤ) (b : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(b n) : ℝ) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (↑(a n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹, withhsumZ : ∀ (s : Finset ℕ) (g : ℕ → ℝ), (∀ i ∈ s, ∃ (z : ℤ), (↑z : ℝ) = g i) → ∃ (z : ℤ), (↑z : ℝ) = ∑ i ∈ s, g i.Uses library
FinsetFinset αis the type of finite sets of elements ofα. ,Finset.induction_onTo prove a proposition about an arbitraryFinset α, it suffices to prove it for the emptyFinset, and to show that if it holds for someFinset α, then it holds for theFinsetobtained by inserting a new element. .Lean, lines 23–31
have hsumZ : ∀ (s : Finset ℕ) (g : ℕ → ℝ), (∀ i ∈ s, ∃ z : ℤ, (z : ℝ) = g i) → ∃ z : ℤ, (z : ℝ) = ∑ i ∈ s, g i := by intro s g induction s using Finset.induction_on with | empty => intro _; exact ⟨0, by simp⟩ | insert a s ha ih => intro h obtain ⟨za, hza⟩ := h a (Finset.mem_insert_self a s) obtain ⟨zs, hzs⟩ := ih (fun i hi => h i (Finset.mem_insert_of_mem hi)) exact ⟨za + zs, by rw [Finset.sum_insert ha]; push_cast; rw [hza, hzs]⟩targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 23–31 at
b16ab29fc51b↗hsumZ.s1case printed form did not read back: shown as its Lean lines only| empty => intro _; exact ⟨0, by simp⟩
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 26 at
b16ab29fc51b↗hsumZ.s2caseLeaves
(∀ i ∈ insert a s, ∃ (z : ℤ), (↑z : ℝ) = g i) → ∃ (z : ℤ), (↑z : ℝ) = ∑ i ∈ insert a s, g i, witha : ℕ,s : Finset ℕ,ha : a ∉ s,ih : (∀ i ∈ s, ∃ (z : ℤ), (↑z : ℝ) = g i) → ∃ (z : ℤ), (↑z : ℝ) = ∑ i ∈ s, g i.Uses library
Exists.introExistential introduction. ,Finset.sum_insert.Lean, lines 27–31
| insert a s ha ih => intro h obtain ⟨za, hza⟩ := h a (Finset.mem_insert_self a s) obtain ⟨zs, hzs⟩ := ih (fun i hi => h i (Finset.mem_insert_of_mem hi)) exact ⟨za + zs, by rw [Finset.sum_insert ha]; push_cast; rw [hza, hzs]⟩targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 27–31 at
b16ab29fc51b↗hsumZ.s2.s1obtain∃ (z : ℤ), (↑z : ℝ) = g aLeaves
∃ (z : ℤ), (↑z : ℝ) = ∑ i ∈ insert a s, g i, withza : ℤ,hza : (↑za : ℝ) = g a.Uses library
Finset.mem_insert_self.Lean, line 29
obtain ⟨za, hza⟩ := h a (Finset.mem_insert_self a s)
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 29 at
b16ab29fc51b↗hsumZ.s2.s2obtain∃ (z : ℤ), (↑z : ℝ) = ∑ i ∈ s, g iLeaves
∃ (z : ℤ), (↑z : ℝ) = ∑ i ∈ insert a s, g i, withzs : ℤ,hzs : (↑zs : ℝ) = ∑ i ∈ s, g i.Uses library
Finset.mem_insert_of_mem.Lean, line 30
obtain ⟨zs, hzs⟩ := ih (fun i hi => h i (Finset.mem_insert_of_mem hi))
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 30 at
b16ab29fc51b↗
h0have∀ (s : Finset ℕ), s.Nonempty → ∑ k ∈ s, (1 : ℝ) / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = (1 : ℝ)Leaves
∃ (a : ℕ → ℤ) (b : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(b n) : ℝ) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (↑(a n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹, withh0 : ∀ (s : Finset ℕ), s.Nonempty → ∑ k ∈ s, (1 : ℝ) / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = (1 : ℝ).Uses library
FinsetFinset αis the type of finite sets of elements ofα. ,Polynomial.eval_finset_sumAlias ofPolynomial.eval_finsetSum. ,Polynomial.eval_one,Eq.transEquality is transitive: ifa = bandb = cthena = c. ,Finset.sum_congr,rflrfl : a = ais the unique constructor of the equality type. ,Lagrange.basisLagrange basis polynomials indexed bys : Finset ι, defined at nodesv ifor a mapv : ι → F. ,Polynomial.eval_prodPolynomial evaluation commutes withFinset.prod,one_div,Finset.prod_inv_distrib,Finset.prod_congr,Lagrange.basisDivisorbasisDivisor x yis the unique linear or constant polynomial such that when evaluated atxit gives1andyit gives0(where whenx = yit is identically0). ,Polynomial.eval_mul,Polynomial.eval_C,Polynomial.eval_sub,Polynomial.eval_X,zpow_sub₀,two_ne_zero,zpow_natCast,mul_inv,zero_sub,mul_assoc,inv_mul_cancel₀,neg_ne_zero,inv_ne_zero,mul_one.Lean, lines 33–49
have h0 : ∀ s : Finset ℕ, s.Nonempty → ∑ k ∈ s, (1 : ℝ) / ∏ l ∈ s.erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))) = 1 := by intro s hs have hv : Set.InjOn (fun k : ℕ => ((2 : ℝ) ^ k)⁻¹) (s : Set ℕ) := by intro a _ b _ hab exact pow_right_injective₀ (by norm_num : (0 : ℝ) < 2) (by norm_num) (inv_injective hab) have hsum := congrArg (Polynomial.eval (0 : ℝ)) (Lagrange.sum_basis hv hs) rw [Polynomial.eval_finset_sum, Polynomial.eval_one] at hsum refine Eq.trans (Finset.sum_congr rfl (fun k hk => ?_)) hsum unfold Lagrange.basis rw [Polynomial.eval_prod, one_div, ← Finset.prod_inv_distrib] refine Finset.prod_congr rfl (fun l hl => ?_) have ha : (2 : ℝ) ^ k ≠ 0 := by positivity have hb : (2 : ℝ) ^ l ≠ 0 := by positivity simp only [Lagrange.basisDivisor, Polynomial.eval_mul, Polynomial.eval_C, Polynomial.eval_sub, Polynomial.eval_X] rw [zpow_sub₀ two_ne_zero, zpow_natCast, zpow_natCast, show ((2 : ℝ) ^ k)⁻¹ - ((2 : ℝ) ^ l)⁻¹ = (1 - (2 : ℝ) ^ l / (2 : ℝ) ^ k) * (-((2 : ℝ) ^ l)⁻¹) by field_simp; ring, mul_inv, zero_sub, mul_assoc, inv_mul_cancel₀ (neg_ne_zero.mpr (inv_ne_zero hb)), mul_one]targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 33–49 at
b16ab29fc51b↗h0.hvhaveSet.InjOn (fun (k : ℕ) => ((2 : ℝ) ^ k)⁻¹) (↑s : Set ℕ)Leaves
∑ k ∈ s, (1 : ℝ) / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = (1 : ℝ), withhv : Set.InjOn (fun (k : ℕ) => ((2 : ℝ) ^ k)⁻¹) (↑s : Set ℕ).Uses library
Set.InjOnfis injective onsif the restriction offtosis injective. ,SetA set is a collection of elements of some typeα. ,pow_right_injective₀,inv_injective.Lean, lines 35–37
have hv : Set.InjOn (fun k : ℕ => ((2 : ℝ) ^ k)⁻¹) (s : Set ℕ) := by intro a _ b _ hab exact pow_right_injective₀ (by norm_num : (0 : ℝ) < 2) (by norm_num) (inv_injective hab)targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 35–37 at
b16ab29fc51b↗h0.hsumhavePolynomial.eval (0 : ℝ) (∑ j ∈ s, Lagrange.basis s (fun (k : ℕ) => ((2 : ℝ) ^ k)⁻¹) j) = Polynomial.eval (0 : ℝ) (1 : Polynomial ℝ)Leaves
∑ k ∈ s, (1 : ℝ) / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = (1 : ℝ), withhsum : Polynomial.eval (0 : ℝ) (∑ j ∈ s, Lagrange.basis s (fun (k : ℕ) => ((2 : ℝ) ^ k)⁻¹) j) = Polynomial.eval (0 : ℝ) (1 : Polynomial ℝ).Uses library
congrArgCongruence in the function argument: ifa₁ = a₂thenf a₁ = f a₂for any (nondependent) functionf. ,Polynomial.evaleval x pis the evaluation of the polynomialpatx,Lagrange.sum_basis.Lean, line 38
have hsum := congrArg (Polynomial.eval (0 : ℝ)) (Lagrange.sum_basis hv hs)
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 38 at
b16ab29fc51b↗h0.hahave(2 : ℝ) ^ k ≠ (0 : ℝ)routine: positivityLeaves
((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))⁻¹ = Polynomial.eval (0 : ℝ) (Lagrange.basisDivisor ((fun (k : ℕ) => ((2 : ℝ) ^ k)⁻¹) k) ((fun (k : ℕ) => ((2 : ℝ) ^ k)⁻¹) l)), withha : (2 : ℝ) ^ k ≠ (0 : ℝ).Lean, line 44
have ha : (2 : ℝ) ^ k ≠ 0 := by positivity
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 44 at
b16ab29fc51b↗h0.hbhave(2 : ℝ) ^ l ≠ (0 : ℝ)routine: positivityLeaves
((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))⁻¹ = Polynomial.eval (0 : ℝ) (Lagrange.basisDivisor ((fun (k : ℕ) => ((2 : ℝ) ^ k)⁻¹) k) ((fun (k : ℕ) => ((2 : ℝ) ^ k)⁻¹) l)), withhb : (2 : ℝ) ^ l ≠ (0 : ℝ).Lean, line 45
have hb : (2 : ℝ) ^ l ≠ 0 := by positivity
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 45 at
b16ab29fc51b↗
hrechave∀ (s : Finset ℕ) (a : ℕ) (f : ℕ → ℝ), a ∈ s → ∑ k ∈ s, (2 : ℝ) ^ k * f k / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = ∑ k ∈ s.erase a, (2 : ℝ) ^ k * f k / ∏ l ∈ (s.erase a).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) + (2 : ℝ) ^ a * ∑ k ∈ s, f k / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))Leaves
∃ (a : ℕ → ℤ) (b : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(b n) : ℝ) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (↑(a n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹, withhrec : ∀ (s : Finset ℕ) (a : ℕ) (f : ℕ → ℝ), a ∈ s → ∑ k ∈ s, (2 : ℝ) ^ k * f k / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = ∑ k ∈ s.erase a, (2 : ℝ) ^ k * f k / ∏ l ∈ (s.erase a).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) + (2 : ℝ) ^ a * ∑ k ∈ s, f k / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))).Uses library
FinsetFinset αis the type of finite sets of elements ofα. ,Finset.add_sum_eraseTaking a sum overs : Finset ιis the same as adding the value on a single elementf ato the sum overs.erase a. ,mul_addAlias ofleft_distrib. ,Finset.mul_sum,add_left_comm,Finset.sum_add_distrib.Lean, lines 51–73
have hrec : ∀ (s : Finset ℕ) (a : ℕ) (f : ℕ → ℝ), a ∈ s → ∑ k ∈ s, (2 : ℝ) ^ k * f k / ∏ l ∈ s.erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))) = ∑ k ∈ s.erase a, (2 : ℝ) ^ k * f k / ∏ l ∈ (s.erase a).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))) + (2 : ℝ) ^ a * ∑ k ∈ s, f k / ∏ l ∈ s.erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))) := by intro s a f ha rw [← Finset.add_sum_erase s (fun k => f k / ∏ l ∈ s.erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) ha, ← Finset.add_sum_erase s (fun k => (2 : ℝ) ^ k * f k / ∏ l ∈ s.erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) ha, mul_add, Finset.mul_sum, add_left_comm, ← Finset.sum_add_distrib] congr 1 · ring · refine Finset.sum_congr rfl (fun k hk => ?_) have hka : k ≠ a := Finset.ne_of_mem_erase hk have hmem : a ∈ s.erase k := Finset.mem_erase.mpr ⟨Ne.symm hka, ha⟩ have hsplit := Finset.mul_prod_erase (s.erase k) (fun l => (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) hmem rw [Finset.erase_right_comm] at hsplit rw [← hsplit] have hρ : (1 - (2 : ℝ) ^ ((a : ℤ) - (k : ℤ))) ≠ 0 := by intro h1 have h2 : (2 : ℝ) ^ ((a : ℤ) - (k : ℤ)) = 2 ^ (0 : ℤ) := by rw [zpow_zero]; linarith have h3 := zpow_right_injective₀ (by norm_num : (0 : ℝ) < 2) (by norm_num) h2 omega have hq : (1 - (2 : ℝ) ^ ((a : ℤ) - (k : ℤ))) * (1 - (2 : ℝ) ^ ((a : ℤ) - (k : ℤ)))⁻¹ = 1 := mul_inv_cancel₀ hρ have hak : (2 : ℝ) ^ a = (2 : ℝ) ^ ((a : ℤ) - (k : ℤ)) * 2 ^ k := by rw [zpow_sub₀ two_ne_zero, zpow_natCast, zpow_natCast] field_simp simp only [div_eq_mul_inv, mul_inv] rw [hak] linear_combination ((2 : ℝ) ^ k * f k * (∏ l ∈ (s.erase a).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))))⁻¹) * hqtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 51–73 at
b16ab29fc51b↗hrec.s1case routine: ringLeaves
(2 : ℝ) ^ a * f a / ∏ l ∈ s.erase a, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑a : ℤ))) = (2 : ℝ) ^ a * (f a / ∏ l ∈ s.erase a, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑a : ℤ)))).hrec.s2caseLeaves
∑ x ∈ s.erase a, (2 : ℝ) ^ x * f x / ∏ l ∈ s.erase x, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑x : ℤ))) = ∑ x ∈ s.erase a, ((2 : ℝ) ^ x * f x / ∏ l ∈ (s.erase a).erase x, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑x : ℤ))) + (2 : ℝ) ^ a * (f x / ∏ l ∈ s.erase x, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑x : ℤ))))).Uses library
Finset.sum_congr,rflrfl : a = ais the unique constructor of the equality type. ,Finset.erase_right_comm,div_eq_mul_invDividing by an element is the same as multiplying by its inverse. ,mul_inv.Lean, lines 56–73
· refine Finset.sum_congr rfl (fun k hk => ?_) have hka : k ≠ a := Finset.ne_of_mem_erase hk have hmem : a ∈ s.erase k := Finset.mem_erase.mpr ⟨Ne.symm hka, ha⟩ have hsplit := Finset.mul_prod_erase (s.erase k) (fun l => (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) hmem rw [Finset.erase_right_comm] at hsplit rw [← hsplit] have hρ : (1 - (2 : ℝ) ^ ((a : ℤ) - (k : ℤ))) ≠ 0 := by intro h1 have h2 : (2 : ℝ) ^ ((a : ℤ) - (k : ℤ)) = 2 ^ (0 : ℤ) := by rw [zpow_zero]; linarith have h3 := zpow_right_injective₀ (by norm_num : (0 : ℝ) < 2) (by norm_num) h2 omega have hq : (1 - (2 : ℝ) ^ ((a : ℤ) - (k : ℤ))) * (1 - (2 : ℝ) ^ ((a : ℤ) - (k : ℤ)))⁻¹ = 1 := mul_inv_cancel₀ hρ have hak : (2 : ℝ) ^ a = (2 : ℝ) ^ ((a : ℤ) - (k : ℤ)) * 2 ^ k := by rw [zpow_sub₀ two_ne_zero, zpow_natCast, zpow_natCast] field_simp simp only [div_eq_mul_inv, mul_inv] rw [hak] linear_combination ((2 : ℝ) ^ k * f k * (∏ l ∈ (s.erase a).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))))⁻¹) * hqtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 56–73 at
b16ab29fc51b↗hrec.s2.hkahavek ≠ aLeaves
(2 : ℝ) ^ k * f k / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = (2 : ℝ) ^ k * f k / ∏ l ∈ (s.erase a).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) + (2 : ℝ) ^ a * (f k / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))), withhka : k ≠ a.Uses library
Finset.ne_of_mem_erase.Lean, line 57
have hka : k ≠ a := Finset.ne_of_mem_erase hk
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 57 at
b16ab29fc51b↗hrec.s2.hmemhavea ∈ s.erase kLeaves
(2 : ℝ) ^ k * f k / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = (2 : ℝ) ^ k * f k / ∏ l ∈ (s.erase a).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) + (2 : ℝ) ^ a * (f k / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))), withhmem : a ∈ s.erase k.Uses library
Finset.mem_erase,And.introAnd.intro : a → b → a ∧ bis the constructor for the And operation. ,Ne.symm.Lean, line 58
have hmem : a ∈ s.erase k := Finset.mem_erase.mpr ⟨Ne.symm hka, ha⟩
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 58 at
b16ab29fc51b↗hrec.s2.hsplithave((1 : ℝ) - (2 : ℝ) ^ ((↑a : ℤ) - (↑k : ℤ))) * ∏ x ∈ (s.erase k).erase a, ((1 : ℝ) - (2 : ℝ) ^ ((↑x : ℤ) - (↑k : ℤ))) = ∏ x ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑x : ℤ) - (↑k : ℤ)))Leaves
(2 : ℝ) ^ k * f k / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = (2 : ℝ) ^ k * f k / ∏ l ∈ (s.erase a).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) + (2 : ℝ) ^ a * (f k / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))), withhsplit : ((1 : ℝ) - (2 : ℝ) ^ ((↑a : ℤ) - (↑k : ℤ))) * ∏ x ∈ (s.erase k).erase a, ((1 : ℝ) - (2 : ℝ) ^ ((↑x : ℤ) - (↑k : ℤ))) = ∏ x ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑x : ℤ) - (↑k : ℤ))).Uses library
Finset.mul_prod_eraseTaking a product overs : Finset ιis the same as multiplying the value on a single elementf aby the product ofs.erase a. .Lean, line 59
have hsplit := Finset.mul_prod_erase (s.erase k) (fun l => (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) hmem
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 59 at
b16ab29fc51b↗hrec.s2.h_x3c1(hρ) have(1 : ℝ) - (2 : ℝ) ^ ((↑a : ℤ) - (↑k : ℤ)) ≠ (0 : ℝ)Leaves
(2 : ℝ) ^ k * f k / (((1 : ℝ) - (2 : ℝ) ^ ((↑a : ℤ) - (↑k : ℤ))) * ∏ x ∈ (s.erase a).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑x : ℤ) - (↑k : ℤ)))) = (2 : ℝ) ^ k * f k / ∏ l ∈ (s.erase a).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) + (2 : ℝ) ^ a * (f k / (((1 : ℝ) - (2 : ℝ) ^ ((↑a : ℤ) - (↑k : ℤ))) * ∏ x ∈ (s.erase a).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑x : ℤ) - (↑k : ℤ))))), withhρ : (1 : ℝ) - (2 : ℝ) ^ ((↑a : ℤ) - (↑k : ℤ)) ≠ (0 : ℝ).Lean, lines 62–66
have hρ : (1 - (2 : ℝ) ^ ((a : ℤ) - (k : ℤ))) ≠ 0 := by intro h1 have h2 : (2 : ℝ) ^ ((a : ℤ) - (k : ℤ)) = 2 ^ (0 : ℤ) := by rw [zpow_zero]; linarith have h3 := zpow_right_injective₀ (by norm_num : (0 : ℝ) < 2) (by norm_num) h2 omegatargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 62–66 at
b16ab29fc51b↗hrec.s2.h_x3c1.h2have(2 : ℝ) ^ ((↑a : ℤ) - (↑k : ℤ)) = (2 : ℝ) ^ (0 : ℤ)Leaves
False, withh2 : (2 : ℝ) ^ ((↑a : ℤ) - (↑k : ℤ)) = (2 : ℝ) ^ (0 : ℤ).Uses library
zpow_zero.Lean, line 64
have h2 : (2 : ℝ) ^ ((a : ℤ) - (k : ℤ)) = 2 ^ (0 : ℤ) := by rw [zpow_zero]; linarith
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 64 at
b16ab29fc51b↗hrec.s2.h_x3c1.h3have(↑a : ℤ) - (↑k : ℤ) = (0 : ℤ)Leaves
False, withh3 : (↑a : ℤ) - (↑k : ℤ) = (0 : ℤ).Uses library
zpow_right_injective₀.Lean, line 65
have h3 := zpow_right_injective₀ (by norm_num : (0 : ℝ) < 2) (by norm_num) h2
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 65 at
b16ab29fc51b↗
hrec.s2.hqhave((1 : ℝ) - (2 : ℝ) ^ ((↑a : ℤ) - (↑k : ℤ))) * ((1 : ℝ) - (2 : ℝ) ^ ((↑a : ℤ) - (↑k : ℤ)))⁻¹ = (1 : ℝ)Leaves
(2 : ℝ) ^ k * f k / (((1 : ℝ) - (2 : ℝ) ^ ((↑a : ℤ) - (↑k : ℤ))) * ∏ x ∈ (s.erase a).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑x : ℤ) - (↑k : ℤ)))) = (2 : ℝ) ^ k * f k / ∏ l ∈ (s.erase a).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) + (2 : ℝ) ^ a * (f k / (((1 : ℝ) - (2 : ℝ) ^ ((↑a : ℤ) - (↑k : ℤ))) * ∏ x ∈ (s.erase a).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑x : ℤ) - (↑k : ℤ))))), withhq : ((1 : ℝ) - (2 : ℝ) ^ ((↑a : ℤ) - (↑k : ℤ))) * ((1 : ℝ) - (2 : ℝ) ^ ((↑a : ℤ) - (↑k : ℤ)))⁻¹ = (1 : ℝ).Uses library
mul_inv_cancel₀.Lean, line 67
have hq : (1 - (2 : ℝ) ^ ((a : ℤ) - (k : ℤ))) * (1 - (2 : ℝ) ^ ((a : ℤ) - (k : ℤ)))⁻¹ = 1 := mul_inv_cancel₀ hρ
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 67 at
b16ab29fc51b↗hrec.s2.hakhave(2 : ℝ) ^ a = (2 : ℝ) ^ ((↑a : ℤ) - (↑k : ℤ)) * (2 : ℝ) ^ kLeaves
(2 : ℝ) ^ k * f k / (((1 : ℝ) - (2 : ℝ) ^ ((↑a : ℤ) - (↑k : ℤ))) * ∏ x ∈ (s.erase a).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑x : ℤ) - (↑k : ℤ)))) = (2 : ℝ) ^ k * f k / ∏ l ∈ (s.erase a).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) + (2 : ℝ) ^ a * (f k / (((1 : ℝ) - (2 : ℝ) ^ ((↑a : ℤ) - (↑k : ℤ))) * ∏ x ∈ (s.erase a).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑x : ℤ) - (↑k : ℤ))))), withhak : (2 : ℝ) ^ a = (2 : ℝ) ^ ((↑a : ℤ) - (↑k : ℤ)) * (2 : ℝ) ^ k.Uses library
zpow_sub₀,two_ne_zero,zpow_natCast.Lean, lines 68–70
have hak : (2 : ℝ) ^ a = (2 : ℝ) ^ ((a : ℤ) - (k : ℤ)) * 2 ^ k := by rw [zpow_sub₀ two_ne_zero, zpow_natCast, zpow_natCast] field_simptargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 68–70 at
b16ab29fc51b↗
hWhave∀ (N : ℕ) (s : Finset ℕ) (e : ℕ), s.card + e = N → ∃ (z : ℤ), (↑z : ℝ) = ∑ k ∈ s, ((2 : ℝ) ^ k) ^ e / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))Leaves
∃ (a : ℕ → ℤ) (b : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(b n) : ℝ) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (↑(a n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹, withhW : ∀ (N : ℕ) (s : Finset ℕ) (e : ℕ), s.card + e = N → ∃ (z : ℤ), (↑z : ℝ) = ∑ k ∈ s, ((2 : ℝ) ^ k) ^ e / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))).Uses library
FinsetFinset αis the type of finite sets of elements ofα. .Lean, lines 75–98
have hW : ∀ N : ℕ, ∀ (s : Finset ℕ) (e : ℕ), s.card + e = N → ∃ z : ℤ, (z : ℝ) = ∑ k ∈ s, ((2 : ℝ) ^ k) ^ e / ∏ l ∈ s.erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))) := by intro N induction N with | zero => intro s e h have hs : s = ∅ := Finset.card_eq_zero.mp (by omega) subst hs exact ⟨0, by simp⟩ | succ N ih => intro s e h rcases s.eq_empty_or_nonempty with rfl | hs · exact ⟨0, by simp⟩ rcases Nat.eq_zero_or_pos e with rfl | he · exact ⟨1, by rw [Int.cast_one]; exact (h0 s hs).symm.trans (Finset.sum_congr rfl (fun k _ => by rw [pow_zero]))⟩ obtain ⟨e', rfl⟩ : ∃ e', e = e' + 1 := ⟨e - 1, by omega⟩ obtain ⟨a, ha⟩ := hs obtain ⟨z1, hz1⟩ := ih (s.erase a) (e' + 1) (by rw [Finset.card_erase_of_mem ha]; have := Finset.card_pos.mpr ⟨a, ha⟩; omega) obtain ⟨z2, hz2⟩ := ih s e' (by omega) refine ⟨z1 + 2 ^ a * z2, ?_⟩ have hr := hrec s a (fun k => ((2 : ℝ) ^ k) ^ e') ha simp only [← pow_succ'] at hr push_cast rw [hz1, hz2] exact hr.symmtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 75–98 at
b16ab29fc51b↗hW.s1caseLeaves
∀ (s : Finset ℕ) (e : ℕ), s.card + e = (0 : ℕ) → ∃ (z : ℤ), (↑z : ℝ) = ∑ k ∈ s, ((2 : ℝ) ^ k) ^ e / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))).Uses library
Nat.zeroZero, the smallest natural number. ,Exists.introExistential introduction. .Lean, lines 78–82
| zero => intro s e h have hs : s = ∅ := Finset.card_eq_zero.mp (by omega) subst hs exact ⟨0, by simp⟩targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 78–82 at
b16ab29fc51b↗hW.s1.hshaves = ∅Leaves
∃ (z : ℤ), (↑z : ℝ) = ∑ k ∈ s, ((2 : ℝ) ^ k) ^ e / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))), withhs : s = ∅.Uses library
Finset.card_eq_zero.Lean, line 80
have hs : s = ∅ := Finset.card_eq_zero.mp (by omega)
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 80 at
b16ab29fc51b↗
hW.s2caseLeaves
∀ (s : Finset ℕ) (e : ℕ), s.card + e = N + (1 : ℕ) → ∃ (z : ℤ), (↑z : ℝ) = ∑ k ∈ s, ((2 : ℝ) ^ k) ^ e / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))), withN : ℕ,ih : ∀ (s : Finset ℕ) (e : ℕ), s.card + e = N → ∃ (z : ℤ), (↑z : ℝ) = ∑ k ∈ s, ((2 : ℝ) ^ k) ^ e / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))).Uses library
Nat.succThe successor of a natural numbern. ,Nat.eq_zero_or_pos,Exists.introExistential introduction. ,pow_succ'.Lean, lines 83–98
| succ N ih => intro s e h rcases s.eq_empty_or_nonempty with rfl | hs · exact ⟨0, by simp⟩ rcases Nat.eq_zero_or_pos e with rfl | he · exact ⟨1, by rw [Int.cast_one]; exact (h0 s hs).symm.trans (Finset.sum_congr rfl (fun k _ => by rw [pow_zero]))⟩ obtain ⟨e', rfl⟩ : ∃ e', e = e' + 1 := ⟨e - 1, by omega⟩ obtain ⟨a, ha⟩ := hs obtain ⟨z1, hz1⟩ := ih (s.erase a) (e' + 1) (by rw [Finset.card_erase_of_mem ha]; have := Finset.card_pos.mpr ⟨a, ha⟩; omega) obtain ⟨z2, hz2⟩ := ih s e' (by omega) refine ⟨z1 + 2 ^ a * z2, ?_⟩ have hr := hrec s a (fun k => ((2 : ℝ) ^ k) ^ e') ha simp only [← pow_succ'] at hr push_cast rw [hz1, hz2] exact hr.symmtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 83–98 at
b16ab29fc51b↗hW.s2.s1caseLeaves
∃ (z : ℤ), (↑z : ℝ) = ∑ k ∈ ∅, ((2 : ℝ) ^ k) ^ e / ∏ l ∈ ∅.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))).Uses library
Exists.introExistential introduction. .Lean, line 86
· exact ⟨0, by simp⟩
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 86 at
b16ab29fc51b↗hW.s2.s2caseLeaves
∃ (z : ℤ), (↑z : ℝ) = ∑ k ∈ s, ((2 : ℝ) ^ k) ^ (0 : ℕ) / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))).Uses library
Exists.introExistential introduction. ,Int.cast_one,Finset.sum_congr,rflrfl : a = ais the unique constructor of the equality type. ,pow_zero.Lean, line 88
· exact ⟨1, by rw [Int.cast_one]; exact (h0 s hs).symm.trans (Finset.sum_congr rfl (fun k _ => by rw [pow_zero]))⟩
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 88 at
b16ab29fc51b↗hW.s2.s3obtain∃ (e' : ℕ), e = e' + (1 : ℕ)Leaves
∃ (z : ℤ), (↑z : ℝ) = ∑ k ∈ s, ((2 : ℝ) ^ k) ^ (e' + (1 : ℕ)) / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))), withe' : ℕ,h : s.card + (e' + (1 : ℕ)) = N + (1 : ℕ),he : e' + (1 : ℕ) > (0 : ℕ).Uses library
Exists.introExistential introduction. .Lean, line 89
obtain ⟨e', rfl⟩ : ∃ e', e = e' + 1 := ⟨e - 1, by omega⟩
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 89 at
b16ab29fc51b↗hW.s2.s4obtains.NonemptyLeaves
∃ (z : ℤ), (↑z : ℝ) = ∑ k ∈ s, ((2 : ℝ) ^ k) ^ (e' + (1 : ℕ)) / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))), witha : ℕ,ha : a ∈ s.Lean, line 90
obtain ⟨a, ha⟩ := hs
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 90 at
b16ab29fc51b↗hW.s2.s5obtain∃ (z : ℤ), (↑z : ℝ) = ∑ k ∈ s.erase a, ((2 : ℝ) ^ k) ^ (e' + (1 : ℕ)) / ∏ l ∈ (s.erase a).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))Leaves
∃ (z : ℤ), (↑z : ℝ) = ∑ k ∈ s, ((2 : ℝ) ^ k) ^ (e' + (1 : ℕ)) / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))), withz1 : ℤ,hz1 : (↑z1 : ℝ) = ∑ k ∈ s.erase a, ((2 : ℝ) ^ k) ^ (e' + (1 : ℕ)) / ∏ l ∈ (s.erase a).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))).Uses library
Finset.card_erase_of_mem$\#(s \setminus \{a\}) = \#s - 1$ if $a \in s$. .Lean, line 91
obtain ⟨z1, hz1⟩ := ih (s.erase a) (e' + 1) (by rw [Finset.card_erase_of_mem ha]; have := Finset.card_pos.mpr ⟨a, ha⟩; omega)
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 91 at
b16ab29fc51b↗hW.s2.s5.thishave(0 : ℕ) < s.cardLeaves
s.card - (1 : ℕ) + (e' + (1 : ℕ)) = N, withthis : (0 : ℕ) < s.card.Uses library
Finset.card_pos,Exists.introExistential introduction. .Lean, line 91
obtain ⟨z1, hz1⟩ := ih (s.erase a) (e' + 1) (by rw [Finset.card_erase_of_mem ha]; have := Finset.card_pos.mpr ⟨a, ha⟩; omega)
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 91 at
b16ab29fc51b↗
hW.s2.s6obtain∃ (z : ℤ), (↑z : ℝ) = ∑ k ∈ s, ((2 : ℝ) ^ k) ^ e' / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))Leaves
∃ (z : ℤ), (↑z : ℝ) = ∑ k ∈ s, ((2 : ℝ) ^ k) ^ (e' + (1 : ℕ)) / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))), withz2 : ℤ,hz2 : (↑z2 : ℝ) = ∑ k ∈ s, ((2 : ℝ) ^ k) ^ e' / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))).Lean, line 92
obtain ⟨z2, hz2⟩ := ih s e' (by omega)
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 92 at
b16ab29fc51b↗hW.s2.hrhave∑ k ∈ s, (2 : ℝ) ^ k * ((2 : ℝ) ^ k) ^ e' / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = ∑ k ∈ s.erase a, (2 : ℝ) ^ k * ((2 : ℝ) ^ k) ^ e' / ∏ l ∈ (s.erase a).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) + (2 : ℝ) ^ a * ∑ k ∈ s, ((2 : ℝ) ^ k) ^ e' / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))Leaves
(↑(z1 + (2 : ℤ) ^ a * z2) : ℝ) = ∑ k ∈ s, ((2 : ℝ) ^ k) ^ (e' + (1 : ℕ)) / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))), withhr : ∑ k ∈ s, (2 : ℝ) ^ k * ((2 : ℝ) ^ k) ^ e' / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = ∑ k ∈ s.erase a, (2 : ℝ) ^ k * ((2 : ℝ) ^ k) ^ e' / ∏ l ∈ (s.erase a).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) + (2 : ℝ) ^ a * ∑ k ∈ s, ((2 : ℝ) ^ k) ^ e' / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))).Lean, line 94
have hr := hrec s a (fun k => ((2 : ℝ) ^ k) ^ e') ha
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 94 at
b16ab29fc51b↗
hVhave∀ (m : ℕ) (s : Finset ℕ), m + (1 : ℕ) < s.card → ∑ k ∈ s, (((2 : ℝ) ^ k) ^ (m + (1 : ℕ)))⁻¹ / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = (0 : ℝ)Leaves
∃ (a : ℕ → ℤ) (b : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(b n) : ℝ) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (↑(a n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹, withhV : ∀ (m : ℕ) (s : Finset ℕ), m + (1 : ℕ) < s.card → ∑ k ∈ s, (((2 : ℝ) ^ k) ^ (m + (1 : ℕ)))⁻¹ / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = (0 : ℝ).Uses library
FinsetFinset αis the type of finite sets of elements ofα. .Lean, lines 100–127
have hV : ∀ m : ℕ, ∀ s : Finset ℕ, m + 1 < s.card → ∑ k ∈ s, (((2 : ℝ) ^ k) ^ (m + 1))⁻¹ / ∏ l ∈ s.erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))) = 0 := by intro m induction m with | zero => intro s hs obtain ⟨a, ha⟩ : s.Nonempty := Finset.card_pos.mp (by omega) have hne : (s.erase a).Nonempty := Finset.card_pos.mp (by rw [Finset.card_erase_of_mem ha]; omega) have h := hrec s a (fun k => (((2 : ℝ) ^ k) ^ (0 + 1))⁻¹) ha have e : ∀ k : ℕ, (2 : ℝ) ^ k * (((2 : ℝ) ^ k) ^ (0 + 1))⁻¹ = 1 := fun k => by rw [zero_add, pow_one]; exact mul_inv_cancel₀ (by positivity) simp only [e] at h rw [h0 s ⟨a, ha⟩, h0 _ hne] at h have h2a : (2 : ℝ) ^ a ≠ 0 := by positivity rcases mul_eq_zero.mp (show (2 : ℝ) ^ a * (∑ k ∈ s, (((2 : ℝ) ^ k) ^ (0 + 1))⁻¹ / ∏ l ∈ s.erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) = 0 by linarith) with h5 | h5 · exact absurd h5 h2a · exact h5 | succ m ih => intro s hs obtain ⟨a, ha⟩ : s.Nonempty := Finset.card_pos.mp (by omega) have h := hrec s a (fun k => (((2 : ℝ) ^ k) ^ (m + 1 + 1))⁻¹) ha have e : ∀ k : ℕ, (2 : ℝ) ^ k * (((2 : ℝ) ^ k) ^ (m + 1 + 1))⁻¹ = (((2 : ℝ) ^ k) ^ (m + 1))⁻¹ := fun k => by rw [pow_succ' _ (m + 1), mul_inv, ← mul_assoc, mul_inv_cancel₀ (by positivity), one_mul] simp only [e] at h rw [ih s (by omega), ih (s.erase a) (by rw [Finset.card_erase_of_mem ha]; omega)] at h have h2a : (2 : ℝ) ^ a ≠ 0 := by positivity rcases mul_eq_zero.mp (show (2 : ℝ) ^ a * (∑ k ∈ s, (((2 : ℝ) ^ k) ^ (m + 1 + 1))⁻¹ / ∏ l ∈ s.erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) = 0 by linarith) with h5 | h5 · exact absurd h5 h2a · exact h5targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 100–127 at
b16ab29fc51b↗hV.s1caseLeaves
∀ (s : Finset ℕ), (0 : ℕ) + (1 : ℕ) < s.card → ∑ k ∈ s, (((2 : ℝ) ^ k) ^ ((0 : ℕ) + (1 : ℕ)))⁻¹ / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = (0 : ℝ).Uses library
Nat.zeroZero, the smallest natural number. ,Exists.introExistential introduction. ,mul_eq_zeroIfαhas no zero divisors, then the product of two elements equals zero iff one of them equals zero. .Lean, lines 103–115
| zero => intro s hs obtain ⟨a, ha⟩ : s.Nonempty := Finset.card_pos.mp (by omega) have hne : (s.erase a).Nonempty := Finset.card_pos.mp (by rw [Finset.card_erase_of_mem ha]; omega) have h := hrec s a (fun k => (((2 : ℝ) ^ k) ^ (0 + 1))⁻¹) ha have e : ∀ k : ℕ, (2 : ℝ) ^ k * (((2 : ℝ) ^ k) ^ (0 + 1))⁻¹ = 1 := fun k => by rw [zero_add, pow_one]; exact mul_inv_cancel₀ (by positivity) simp only [e] at h rw [h0 s ⟨a, ha⟩, h0 _ hne] at h have h2a : (2 : ℝ) ^ a ≠ 0 := by positivity rcases mul_eq_zero.mp (show (2 : ℝ) ^ a * (∑ k ∈ s, (((2 : ℝ) ^ k) ^ (0 + 1))⁻¹ / ∏ l ∈ s.erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) = 0 by linarith) with h5 | h5 · exact absurd h5 h2a · exact h5targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 103–115 at
b16ab29fc51b↗hV.s1.s1obtains.NonemptyLeaves
∑ k ∈ s, (((2 : ℝ) ^ k) ^ ((0 : ℕ) + (1 : ℕ)))⁻¹ / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = (0 : ℝ), witha : ℕ,ha : a ∈ s.Uses library
Finset.card_pos.Lean, line 105
obtain ⟨a, ha⟩ : s.Nonempty := Finset.card_pos.mp (by omega)
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 105 at
b16ab29fc51b↗hV.s1.hnehave(s.erase a).NonemptyLeaves
∑ k ∈ s, (((2 : ℝ) ^ k) ^ ((0 : ℕ) + (1 : ℕ)))⁻¹ / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = (0 : ℝ), withhne : (s.erase a).Nonempty.Uses library
Finset.card_pos,Finset.card_erase_of_mem$\#(s \setminus \{a\}) = \#s - 1$ if $a \in s$. .Lean, line 106
have hne : (s.erase a).Nonempty := Finset.card_pos.mp (by rw [Finset.card_erase_of_mem ha]; omega)
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 106 at
b16ab29fc51b↗hV.s1.hhave∑ k ∈ s, (2 : ℝ) ^ k * (((2 : ℝ) ^ k) ^ ((0 : ℕ) + (1 : ℕ)))⁻¹ / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = ∑ k ∈ s.erase a, (2 : ℝ) ^ k * (((2 : ℝ) ^ k) ^ ((0 : ℕ) + (1 : ℕ)))⁻¹ / ∏ l ∈ (s.erase a).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) + (2 : ℝ) ^ a * ∑ k ∈ s, (((2 : ℝ) ^ k) ^ ((0 : ℕ) + (1 : ℕ)))⁻¹ / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))Leaves
∑ k ∈ s, (((2 : ℝ) ^ k) ^ ((0 : ℕ) + (1 : ℕ)))⁻¹ / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = (0 : ℝ), withh : ∑ k ∈ s, (2 : ℝ) ^ k * (((2 : ℝ) ^ k) ^ ((0 : ℕ) + (1 : ℕ)))⁻¹ / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = ∑ k ∈ s.erase a, (2 : ℝ) ^ k * (((2 : ℝ) ^ k) ^ ((0 : ℕ) + (1 : ℕ)))⁻¹ / ∏ l ∈ (s.erase a).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) + (2 : ℝ) ^ a * ∑ k ∈ s, (((2 : ℝ) ^ k) ^ ((0 : ℕ) + (1 : ℕ)))⁻¹ / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))).Lean, line 107
have h := hrec s a (fun k => (((2 : ℝ) ^ k) ^ (0 + 1))⁻¹) ha
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 107 at
b16ab29fc51b↗hV.s1.ehave∀ (k : ℕ), (2 : ℝ) ^ k * (((2 : ℝ) ^ k) ^ ((0 : ℕ) + (1 : ℕ)))⁻¹ = (1 : ℝ)Leaves
∑ k ∈ s, (((2 : ℝ) ^ k) ^ ((0 : ℕ) + (1 : ℕ)))⁻¹ / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = (0 : ℝ), withe : ∀ (k : ℕ), (2 : ℝ) ^ k * (((2 : ℝ) ^ k) ^ ((0 : ℕ) + (1 : ℕ)))⁻¹ = (1 : ℝ).Uses library
zero_add,pow_one,mul_inv_cancel₀.Lean, lines 108–109
have e : ∀ k : ℕ, (2 : ℝ) ^ k * (((2 : ℝ) ^ k) ^ (0 + 1))⁻¹ = 1 := fun k => by rw [zero_add, pow_one]; exact mul_inv_cancel₀ (by positivity)targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 108–109 at
b16ab29fc51b↗hV.s1.h2ahave(2 : ℝ) ^ a ≠ (0 : ℝ)routine: positivityLeaves
∑ k ∈ s, (((2 : ℝ) ^ k) ^ ((0 : ℕ) + (1 : ℕ)))⁻¹ / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = (0 : ℝ), withh2a : (2 : ℝ) ^ a ≠ (0 : ℝ).Lean, line 112
have h2a : (2 : ℝ) ^ a ≠ 0 := by positivity
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 112 at
b16ab29fc51b↗hV.s1.s6caseLeaves
∑ k ∈ s, (((2 : ℝ) ^ k) ^ ((0 : ℕ) + (1 : ℕ)))⁻¹ / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = (0 : ℝ).Uses library
absurdAnything follows from two contradictory hypotheses. .Lean, line 114
· exact absurd h5 h2a
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 114 at
b16ab29fc51b↗hV.s1.s7caseLeaves
∑ k ∈ s, (((2 : ℝ) ^ k) ^ ((0 : ℕ) + (1 : ℕ)))⁻¹ / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = (0 : ℝ).Lean, line 115
· exact h5
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 115 at
b16ab29fc51b↗
hV.s2caseLeaves
∀ (s : Finset ℕ), m + (1 : ℕ) + (1 : ℕ) < s.card → ∑ k ∈ s, (((2 : ℝ) ^ k) ^ (m + (1 : ℕ) + (1 : ℕ)))⁻¹ / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = (0 : ℝ), withm : ℕ,ih : ∀ (s : Finset ℕ), m + (1 : ℕ) < s.card → ∑ k ∈ s, (((2 : ℝ) ^ k) ^ (m + (1 : ℕ)))⁻¹ / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = (0 : ℝ).Uses library
Nat.succThe successor of a natural numbern. ,Finset.card_erase_of_mem$\#(s \setminus \{a\}) = \#s - 1$ if $a \in s$. ,mul_eq_zeroIfαhas no zero divisors, then the product of two elements equals zero iff one of them equals zero. .Lean, lines 116–127
| succ m ih => intro s hs obtain ⟨a, ha⟩ : s.Nonempty := Finset.card_pos.mp (by omega) have h := hrec s a (fun k => (((2 : ℝ) ^ k) ^ (m + 1 + 1))⁻¹) ha have e : ∀ k : ℕ, (2 : ℝ) ^ k * (((2 : ℝ) ^ k) ^ (m + 1 + 1))⁻¹ = (((2 : ℝ) ^ k) ^ (m + 1))⁻¹ := fun k => by rw [pow_succ' _ (m + 1), mul_inv, ← mul_assoc, mul_inv_cancel₀ (by positivity), one_mul] simp only [e] at h rw [ih s (by omega), ih (s.erase a) (by rw [Finset.card_erase_of_mem ha]; omega)] at h have h2a : (2 : ℝ) ^ a ≠ 0 := by positivity rcases mul_eq_zero.mp (show (2 : ℝ) ^ a * (∑ k ∈ s, (((2 : ℝ) ^ k) ^ (m + 1 + 1))⁻¹ / ∏ l ∈ s.erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) = 0 by linarith) with h5 | h5 · exact absurd h5 h2a · exact h5targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 116–127 at
b16ab29fc51b↗hV.s2.s1obtains.NonemptyLeaves
∑ k ∈ s, (((2 : ℝ) ^ k) ^ (m + (1 : ℕ) + (1 : ℕ)))⁻¹ / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = (0 : ℝ), witha : ℕ,ha : a ∈ s.Uses library
Finset.card_pos.Lean, line 118
obtain ⟨a, ha⟩ : s.Nonempty := Finset.card_pos.mp (by omega)
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 118 at
b16ab29fc51b↗hV.s2.hhave∑ k ∈ s, (2 : ℝ) ^ k * (((2 : ℝ) ^ k) ^ (m + (1 : ℕ) + (1 : ℕ)))⁻¹ / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = ∑ k ∈ s.erase a, (2 : ℝ) ^ k * (((2 : ℝ) ^ k) ^ (m + (1 : ℕ) + (1 : ℕ)))⁻¹ / ∏ l ∈ (s.erase a).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) + (2 : ℝ) ^ a * ∑ k ∈ s, (((2 : ℝ) ^ k) ^ (m + (1 : ℕ) + (1 : ℕ)))⁻¹ / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))Leaves
∑ k ∈ s, (((2 : ℝ) ^ k) ^ (m + (1 : ℕ) + (1 : ℕ)))⁻¹ / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = (0 : ℝ), withh : ∑ k ∈ s, (2 : ℝ) ^ k * (((2 : ℝ) ^ k) ^ (m + (1 : ℕ) + (1 : ℕ)))⁻¹ / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = ∑ k ∈ s.erase a, (2 : ℝ) ^ k * (((2 : ℝ) ^ k) ^ (m + (1 : ℕ) + (1 : ℕ)))⁻¹ / ∏ l ∈ (s.erase a).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) + (2 : ℝ) ^ a * ∑ k ∈ s, (((2 : ℝ) ^ k) ^ (m + (1 : ℕ) + (1 : ℕ)))⁻¹ / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))).Lean, line 119
have h := hrec s a (fun k => (((2 : ℝ) ^ k) ^ (m + 1 + 1))⁻¹) ha
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 119 at
b16ab29fc51b↗hV.s2.ehave∀ (k : ℕ), (2 : ℝ) ^ k * (((2 : ℝ) ^ k) ^ (m + (1 : ℕ) + (1 : ℕ)))⁻¹ = (((2 : ℝ) ^ k) ^ (m + (1 : ℕ)))⁻¹Leaves
∑ k ∈ s, (((2 : ℝ) ^ k) ^ (m + (1 : ℕ) + (1 : ℕ)))⁻¹ / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = (0 : ℝ), withe : ∀ (k : ℕ), (2 : ℝ) ^ k * (((2 : ℝ) ^ k) ^ (m + (1 : ℕ) + (1 : ℕ)))⁻¹ = (((2 : ℝ) ^ k) ^ (m + (1 : ℕ)))⁻¹.Uses library
pow_succ',mul_inv,mul_assoc,mul_inv_cancel₀,one_mul.Lean, lines 120–121
have e : ∀ k : ℕ, (2 : ℝ) ^ k * (((2 : ℝ) ^ k) ^ (m + 1 + 1))⁻¹ = (((2 : ℝ) ^ k) ^ (m + 1))⁻¹ := fun k => by rw [pow_succ' _ (m + 1), mul_inv, ← mul_assoc, mul_inv_cancel₀ (by positivity), one_mul]targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 120–121 at
b16ab29fc51b↗hV.s2.h2ahave(2 : ℝ) ^ a ≠ (0 : ℝ)routine: positivityLeaves
∑ k ∈ s, (((2 : ℝ) ^ k) ^ (m + (1 : ℕ) + (1 : ℕ)))⁻¹ / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = (0 : ℝ), withh2a : (2 : ℝ) ^ a ≠ (0 : ℝ).Lean, line 124
have h2a : (2 : ℝ) ^ a ≠ 0 := by positivity
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 124 at
b16ab29fc51b↗hV.s2.s5caseLeaves
∑ k ∈ s, (((2 : ℝ) ^ k) ^ (m + (1 : ℕ) + (1 : ℕ)))⁻¹ / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = (0 : ℝ).Uses library
absurdAnything follows from two contradictory hypotheses. .Lean, line 126
· exact absurd h5 h2a
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 126 at
b16ab29fc51b↗hV.s2.s6caseLeaves
∑ k ∈ s, (((2 : ℝ) ^ k) ^ (m + (1 : ℕ) + (1 : ℕ)))⁻¹ / ∏ l ∈ s.erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = (0 : ℝ).Lean, line 127
· exact h5
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 127 at
b16ab29fc51b↗
hgeohave∀ (m : ℕ), (1 : ℕ) ≤ m → ∀ (k : ℕ), ∑ i ∈ Finset.Icc (1 : ℕ) k, ((2 : ℝ) ^ i)⁻¹ ^ m = ((1 : ℝ) - (((2 : ℝ) ^ k) ^ m)⁻¹) / ((2 : ℝ) ^ m - (1 : ℝ))Leaves
∃ (a : ℕ → ℤ) (b : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(b n) : ℝ) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (↑(a n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹, withhgeo : ∀ (m : ℕ), (1 : ℕ) ≤ m → ∀ (k : ℕ), ∑ i ∈ Finset.Icc (1 : ℕ) k, ((2 : ℝ) ^ i)⁻¹ ^ m = ((1 : ℝ) - (((2 : ℝ) ^ k) ^ m)⁻¹) / ((2 : ℝ) ^ m - (1 : ℝ)).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. .Lean, lines 129–145
have hgeo : ∀ m : ℕ, 1 ≤ m → ∀ k : ℕ, ∑ i ∈ Finset.Icc 1 k, (((2 : ℝ) ^ i)⁻¹) ^ m = (1 - (((2 : ℝ) ^ k) ^ m)⁻¹) / ((2 : ℝ) ^ m - 1) := by intro m hm k have hB : (2 : ℝ) ^ m - 1 ≠ 0 := by have : (2 : ℝ) ≤ 2 ^ m := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ m := pow_le_pow_right₀ (by norm_num) hm linarith induction k with | zero => simp | succ k ih => rw [Finset.sum_Icc_succ_top (by omega), ih, inv_pow, pow_succ, mul_pow] have hX : ((2 : ℝ) ^ k) ^ m ≠ 0 := by positivity have hY : (2 : ℝ) ^ m ≠ 0 := by positivity generalize ((2 : ℝ) ^ k) ^ m = X at hX ⊢ generalize (2 : ℝ) ^ m = Y at hY hB ⊢ field_simp ringtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 129–145 at
b16ab29fc51b↗hgeo.hBhave(2 : ℝ) ^ m - (1 : ℝ) ≠ (0 : ℝ)Leaves
∑ i ∈ Finset.Icc (1 : ℕ) k, ((2 : ℝ) ^ i)⁻¹ ^ m = ((1 : ℝ) - (((2 : ℝ) ^ k) ^ m)⁻¹) / ((2 : ℝ) ^ m - (1 : ℝ)), withhB : (2 : ℝ) ^ m - (1 : ℝ) ≠ (0 : ℝ).Lean, lines 131–135
have hB : (2 : ℝ) ^ m - 1 ≠ 0 := by have : (2 : ℝ) ≤ 2 ^ m := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ m := pow_le_pow_right₀ (by norm_num) hm linarithtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 131–135 at
b16ab29fc51b↗hgeo.hB.thishave(2 : ℝ) ≤ (2 : ℝ) ^ mLeaves
(2 : ℝ) ^ m - (1 : ℝ) ≠ (0 : ℝ), withthis : (2 : ℝ) ≤ (2 : ℝ) ^ m.Lean, lines 132–134
have : (2 : ℝ) ≤ 2 ^ m := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ m := pow_le_pow_right₀ (by norm_num) hmtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 132–134 at
b16ab29fc51b↗hgeo.hB.this.s1calc(2 : ℝ) = (2 : ℝ) ^ (1 : ℕ)Closes the goal.
Uses library
pow_one.Lean, line 133
calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 133 at
b16ab29fc51b↗hgeo.hB.this.s2calc(2 : ℝ) ^ (1 : ℕ) ≤ (2 : ℝ) ^ mCloses the goal.
Uses library
pow_le_pow_right₀.Lean, line 134
_ ≤ 2 ^ m := pow_le_pow_right₀ (by norm_num) hm
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 134 at
b16ab29fc51b↗
hgeo.s2case routine: simpLeaves
∑ i ∈ Finset.Icc (1 : ℕ) (0 : ℕ), ((2 : ℝ) ^ i)⁻¹ ^ m = ((1 : ℝ) - (((2 : ℝ) ^ (0 : ℕ)) ^ m)⁻¹) / ((2 : ℝ) ^ m - (1 : ℝ)).Uses library
Nat.zeroZero, the smallest natural number. .Lean, line 137
| zero => simp
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 137 at
b16ab29fc51b↗hgeo.s3caseLeaves
∑ i ∈ Finset.Icc (1 : ℕ) (k + (1 : ℕ)), ((2 : ℝ) ^ i)⁻¹ ^ m = ((1 : ℝ) - (((2 : ℝ) ^ (k + (1 : ℕ))) ^ m)⁻¹) / ((2 : ℝ) ^ m - (1 : ℝ)), withk : ℕ,ih : ∑ i ∈ Finset.Icc (1 : ℕ) k, ((2 : ℝ) ^ i)⁻¹ ^ m = ((1 : ℝ) - (((2 : ℝ) ^ k) ^ m)⁻¹) / ((2 : ℝ) ^ m - (1 : ℝ)).Uses library
Nat.succThe successor of a natural numbern. ,Finset.sum_Icc_succ_top,inv_pow,pow_succ,mul_pow.Lean, lines 138–145
| succ k ih => rw [Finset.sum_Icc_succ_top (by omega), ih, inv_pow, pow_succ, mul_pow] have hX : ((2 : ℝ) ^ k) ^ m ≠ 0 := by positivity have hY : (2 : ℝ) ^ m ≠ 0 := by positivity generalize ((2 : ℝ) ^ k) ^ m = X at hX ⊢ generalize (2 : ℝ) ^ m = Y at hY hB ⊢ field_simp ringtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 138–145 at
b16ab29fc51b↗hgeo.s3.hXhave((2 : ℝ) ^ k) ^ m ≠ (0 : ℝ)routine: positivityLeaves
((1 : ℝ) - (((2 : ℝ) ^ k) ^ m)⁻¹) / ((2 : ℝ) ^ m - (1 : ℝ)) + (((2 : ℝ) ^ k) ^ m * (2 : ℝ) ^ m)⁻¹ = ((1 : ℝ) - (((2 : ℝ) ^ k) ^ m * (2 : ℝ) ^ m)⁻¹) / ((2 : ℝ) ^ m - (1 : ℝ)), withhX : ((2 : ℝ) ^ k) ^ m ≠ (0 : ℝ).Lean, line 140
have hX : ((2 : ℝ) ^ k) ^ m ≠ 0 := by positivity
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 140 at
b16ab29fc51b↗hgeo.s3.hYhave(2 : ℝ) ^ m ≠ (0 : ℝ)routine: positivityLeaves
((1 : ℝ) - (((2 : ℝ) ^ k) ^ m)⁻¹) / ((2 : ℝ) ^ m - (1 : ℝ)) + (((2 : ℝ) ^ k) ^ m * (2 : ℝ) ^ m)⁻¹ = ((1 : ℝ) - (((2 : ℝ) ^ k) ^ m * (2 : ℝ) ^ m)⁻¹) / ((2 : ℝ) ^ m - (1 : ℝ)), withhY : (2 : ℝ) ^ m ≠ (0 : ℝ).Lean, line 141
have hY : (2 : ℝ) ^ m ≠ 0 := by positivity
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 141 at
b16ab29fc51b↗
hdvdhave∀ (n i : ℕ), (1 : ℕ) ≤ i → i ≤ n - (1 : ℕ) → (2 : ℤ) ^ i - (1 : ℤ) ∣ ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℤ) - (2 : ℤ) ^ k)Leaves
∃ (a : ℕ → ℤ) (b : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(b n) : ℝ) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (↑(a n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹, withhdvd : ∀ (n i : ℕ), (1 : ℕ) ≤ i → i ≤ n - (1 : ℕ) → (2 : ℤ) ^ i - (1 : ℤ) ∣ ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℤ) - (2 : ℤ) ^ k).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.dvd_prod_of_mem.Lean, lines 146–160
have hdvd : ∀ n i : ℕ, 1 ≤ i → i ≤ n - 1 → ((2 : ℤ) ^ i - 1) ∣ ∏ k ∈ Finset.Icc ((n + 1) / 2) n, ((1 : ℤ) - 2 ^ k) := by intro n i hi1 hi2 obtain ⟨k0, hk0⟩ : ∃ k0, k0 = i * (n / i) := ⟨_, rfl⟩ have hle : k0 ≤ n := by rw [hk0, mul_comm]; exact Nat.div_mul_le_self n i have hlt : n < k0 + i := by rw [hk0]; have := Nat.lt_mul_div_succ n (by omega : 0 < i); linarith have hge : i ≤ k0 := by rw [hk0]; exact Nat.le_mul_of_pos_right i (Nat.div_pos (by omega) (by omega)) have hmem : k0 ∈ Finset.Icc ((n + 1) / 2) n := Finset.mem_Icc.mpr ⟨by omega, hle⟩ have h1 : ((2 : ℤ) ^ i - 1) ∣ (2 : ℤ) ^ k0 - 1 := by have := sub_dvd_pow_sub_pow ((2 : ℤ) ^ i) 1 (n / i) rw [one_pow, ← pow_mul, ← hk0] at this exact this have h2 : ((2 : ℤ) ^ i - 1) ∣ (1 : ℤ) - 2 ^ k0 := by have : (1 : ℤ) - 2 ^ k0 = -((2 : ℤ) ^ k0 - 1) := by ring rw [this]; exact (dvd_neg).mpr h1 exact h2.trans (Finset.dvd_prod_of_mem (fun k => (1 : ℤ) - 2 ^ k) hmem)targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 146–160 at
b16ab29fc51b↗hdvd.s1obtain∃ (k0 : ℕ), k0 = i * (n / i)Leaves
(2 : ℤ) ^ i - (1 : ℤ) ∣ ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℤ) - (2 : ℤ) ^ k), withk0 : ℕ,hk0 : k0 = i * (n / i).Uses library
Exists.introExistential introduction. ,rflrfl : a = ais the unique constructor of the equality type. .Lean, line 148
obtain ⟨k0, hk0⟩ : ∃ k0, k0 = i * (n / i) := ⟨_, rfl⟩
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 148 at
b16ab29fc51b↗hdvd.hlehavek0 ≤ nLeaves
(2 : ℤ) ^ i - (1 : ℤ) ∣ ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℤ) - (2 : ℤ) ^ k), withhle : k0 ≤ n.Uses library
mul_comm,Nat.div_mul_le_self.Lean, line 149
have hle : k0 ≤ n := by rw [hk0, mul_comm]; exact Nat.div_mul_le_self n i
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 149 at
b16ab29fc51b↗hdvd.hlthaven < k0 + iLeaves
(2 : ℤ) ^ i - (1 : ℤ) ∣ ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℤ) - (2 : ℤ) ^ k), withhlt : n < k0 + i.Lean, line 150
have hlt : n < k0 + i := by rw [hk0]; have := Nat.lt_mul_div_succ n (by omega : 0 < i); linarith
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 150 at
b16ab29fc51b↗hdvd.hlt.thishaven < i * (n / i + (1 : ℕ))Leaves
n < i * (n / i) + i, withthis : n < i * (n / i + (1 : ℕ)).Uses library
Nat.lt_mul_div_succ.Lean, line 150
have hlt : n < k0 + i := by rw [hk0]; have := Nat.lt_mul_div_succ n (by omega : 0 < i); linarith
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 150 at
b16ab29fc51b↗
hdvd.hgehavei ≤ k0Leaves
(2 : ℤ) ^ i - (1 : ℤ) ∣ ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℤ) - (2 : ℤ) ^ k), withhge : i ≤ k0.Uses library
Nat.le_mul_of_pos_right,Nat.div_pos.Lean, line 151
have hge : i ≤ k0 := by rw [hk0]; exact Nat.le_mul_of_pos_right i (Nat.div_pos (by omega) (by omega))
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 151 at
b16ab29fc51b↗hdvd.hmemhavek0 ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) nLeaves
(2 : ℤ) ^ i - (1 : ℤ) ∣ ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℤ) - (2 : ℤ) ^ k), withhmem : k0 ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n.Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.mem_Icc,And.introAnd.intro : a → b → a ∧ bis the constructor for the And operation. .Lean, line 152
have hmem : k0 ∈ Finset.Icc ((n + 1) / 2) n := Finset.mem_Icc.mpr ⟨by omega, hle⟩
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 152 at
b16ab29fc51b↗hdvd.h1have(2 : ℤ) ^ i - (1 : ℤ) ∣ (2 : ℤ) ^ k0 - (1 : ℤ)Leaves
(2 : ℤ) ^ i - (1 : ℤ) ∣ ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℤ) - (2 : ℤ) ^ k), withh1 : (2 : ℤ) ^ i - (1 : ℤ) ∣ (2 : ℤ) ^ k0 - (1 : ℤ).Uses library
one_pow,pow_mul.Lean, lines 153–156
have h1 : ((2 : ℤ) ^ i - 1) ∣ (2 : ℤ) ^ k0 - 1 := by have := sub_dvd_pow_sub_pow ((2 : ℤ) ^ i) 1 (n / i) rw [one_pow, ← pow_mul, ← hk0] at this exact thistargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 153–156 at
b16ab29fc51b↗hdvd.h1.thishave(2 : ℤ) ^ i - (1 : ℤ) ∣ ((2 : ℤ) ^ i) ^ (n / i) - (1 : ℤ) ^ (n / i)Leaves
(2 : ℤ) ^ i - (1 : ℤ) ∣ (2 : ℤ) ^ k0 - (1 : ℤ), withthis : (2 : ℤ) ^ i - (1 : ℤ) ∣ ((2 : ℤ) ^ i) ^ (n / i) - (1 : ℤ) ^ (n / i).Uses library
sub_dvd_pow_sub_pow.Lean, line 154
have := sub_dvd_pow_sub_pow ((2 : ℤ) ^ i) 1 (n / i)
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 154 at
b16ab29fc51b↗
hdvd.h2have(2 : ℤ) ^ i - (1 : ℤ) ∣ (1 : ℤ) - (2 : ℤ) ^ k0Leaves
(2 : ℤ) ^ i - (1 : ℤ) ∣ ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℤ) - (2 : ℤ) ^ k), withh2 : (2 : ℤ) ^ i - (1 : ℤ) ∣ (1 : ℤ) - (2 : ℤ) ^ k0.Uses library
dvd_negAn elementaof a semigroup with a distributive negation divides the negation of an elementbiffadividesb. .Lean, lines 157–159
have h2 : ((2 : ℤ) ^ i - 1) ∣ (1 : ℤ) - 2 ^ k0 := by have : (1 : ℤ) - 2 ^ k0 = -((2 : ℤ) ^ k0 - 1) := by ring rw [this]; exact (dvd_neg).mpr h1targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 157–159 at
b16ab29fc51b↗hdvd.h2.thishave(1 : ℤ) - (2 : ℤ) ^ k0 = -((2 : ℤ) ^ k0 - (1 : ℤ))routine: ringLeaves
(2 : ℤ) ^ i - (1 : ℤ) ∣ (1 : ℤ) - (2 : ℤ) ^ k0, withthis : (1 : ℤ) - (2 : ℤ) ^ k0 = -((2 : ℤ) ^ k0 - (1 : ℤ)).Lean, line 158
have : (1 : ℤ) - 2 ^ k0 = -((2 : ℤ) ^ k0 - 1) := by ring
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 158 at
b16ab29fc51b↗
hpolyhave∀ (n : ℕ), (1 : ℕ) ≤ n → ∃ (α : ℕ → ℤ), ∀ (y : ℝ), ∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ t * y) = ∑ j ∈ Finset.range n, (↑(α j) : ℝ) * y ^ jLeaves
∃ (a : ℕ → ℤ) (b : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(b n) : ℝ) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (↑(a n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹, withhpoly : ∀ (n : ℕ), (1 : ℕ) ≤ n → ∃ (α : ℕ → ℤ), ∀ (y : ℝ), ∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ t * y) = ∑ j ∈ Finset.range n, (↑(α j) : ℝ) * y ^ j.Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.rangerange nis the set of natural numbers less thann. ,Exists.introExistential introduction. ,Polynomial.CC ais the constant polynomiala. ,Polynomial.XXis the polynomial variable (aka indeterminate). ,Finset.sum_congr,rflrfl : a = ais the unique constructor of the equality type. ,Polynomial.coeff_map.Lean, lines 161–178
have hpoly : ∀ n : ℕ, 1 ≤ n → ∃ α : ℕ → ℤ, ∀ y : ℝ, ∏ t ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ t * y) = ∑ j ∈ Finset.range n, (α j : ℝ) * y ^ j := by intro n hn refine ⟨fun j => (∏ t ∈ Finset.Icc 1 (n - 1), (1 - Polynomial.C ((2 : ℤ) ^ t) * Polynomial.X)).coeff j, fun y => ?_⟩ have hdeg : (Polynomial.map (Int.castRingHom ℝ) (∏ t ∈ Finset.Icc 1 (n - 1), (1 - Polynomial.C ((2 : ℤ) ^ t) * Polynomial.X))).natDegree < n := by refine lt_of_le_of_lt (Polynomial.natDegree_map_le) ?_ refine lt_of_le_of_lt (Polynomial.natDegree_prod_le _ _) ?_ refine lt_of_le_of_lt (Finset.sum_le_sum (g := fun _ => 1) (fun t _ => ?_)) ?_ · compute_degree · simp only [Finset.sum_const, smul_eq_mul, mul_one, Nat.card_Icc]; omega have hev := Polynomial.eval_eq_sum_range' hdeg y have hev2 : ∏ t ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ t * y) = Polynomial.eval y (Polynomial.map (Int.castRingHom ℝ) (∏ t ∈ Finset.Icc 1 (n - 1), (1 - Polynomial.C ((2 : ℤ) ^ t) * Polynomial.X))) := by rw [Polynomial.map_prod, Polynomial.eval_prod] refine Finset.prod_congr rfl (fun t _ => ?_) simp rw [hev2, hev] refine Finset.sum_congr rfl (fun j _ => ?_) rw [Polynomial.coeff_map] rfltargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 161–178 at
b16ab29fc51b↗hpoly.hdeghave(Polynomial.map (Int.castRingHom ℝ) (∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : Polynomial ℤ) - (Polynomial.C : ℤ → Polynomial ℤ) ((2 : ℤ) ^ t) * Polynomial.X))).natDegree < nLeaves
∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ t * y) = ∑ j ∈ Finset.range n, (↑((fun (j : ℕ) => (∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : Polynomial ℤ) - (Polynomial.C : ℤ → Polynomial ℤ) ((2 : ℤ) ^ t) * Polynomial.X)).coeff j) j) : ℝ) * y ^ j, withhdeg : (Polynomial.map (Int.castRingHom ℝ) (∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : Polynomial ℤ) - (Polynomial.C : ℤ → Polynomial ℤ) ((2 : ℤ) ^ t) * Polynomial.X))).natDegree < n.Uses library
Polynomial.mapmap f pmaps a polynomialpacross a ring homf,Int.castRingHomcoe : ℤ → αas aRingHom. ,Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Polynomial.CC ais the constant polynomiala. ,Polynomial.XXis the polynomial variable (aka indeterminate). ,lt_of_le_of_lt,Polynomial.natDegree_map_le,Polynomial.natDegree_prod_le,Finset.sum_le_sumIn an ordered additive commutative monoid, if each summandf iof one finite sum is less than or equal to the corresponding summandg iof another finite sum, then∑ i ∈ s, f i ≤ ∑ i ∈ s, g i. .Lean, lines 164–169
have hdeg : (Polynomial.map (Int.castRingHom ℝ) (∏ t ∈ Finset.Icc 1 (n - 1), (1 - Polynomial.C ((2 : ℤ) ^ t) * Polynomial.X))).natDegree < n := by refine lt_of_le_of_lt (Polynomial.natDegree_map_le) ?_ refine lt_of_le_of_lt (Polynomial.natDegree_prod_le _ _) ?_ refine lt_of_le_of_lt (Finset.sum_le_sum (g := fun _ => 1) (fun t _ => ?_)) ?_ · compute_degree · simp only [Finset.sum_const, smul_eq_mul, mul_one, Nat.card_Icc]; omegatargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 164–169 at
b16ab29fc51b↗hpoly.hdeg.s1caseLeaves
((1 : Polynomial ℤ) - (Polynomial.C : ℤ → Polynomial ℤ) ((2 : ℤ) ^ t) * Polynomial.X).natDegree ≤ (1 : ℕ).Lean, line 168
· compute_degree
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 168 at
b16ab29fc51b↗hpoly.hdeg.s2case routine: simp, omegaLeaves
∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (1 : ℕ) < n.Uses library
Finset.sum_const,smul_eq_mul,mul_one,Nat.card_Icc.Lean, line 169
· simp only [Finset.sum_const, smul_eq_mul, mul_one, Nat.card_Icc]; omega
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 169 at
b16ab29fc51b↗
hpoly.hevhavePolynomial.eval y (Polynomial.map (Int.castRingHom ℝ) (∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : Polynomial ℤ) - (Polynomial.C : ℤ → Polynomial ℤ) ((2 : ℤ) ^ t) * Polynomial.X))) = ∑ i ∈ Finset.range n, (Polynomial.map (Int.castRingHom ℝ) (∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : Polynomial ℤ) - (Polynomial.C : ℤ → Polynomial ℤ) ((2 : ℤ) ^ t) * Polynomial.X))).coeff i * y ^ iLeaves
∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ t * y) = ∑ j ∈ Finset.range n, (↑((fun (j : ℕ) => (∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : Polynomial ℤ) - (Polynomial.C : ℤ → Polynomial ℤ) ((2 : ℤ) ^ t) * Polynomial.X)).coeff j) j) : ℝ) * y ^ j, withhev : Polynomial.eval y (Polynomial.map (Int.castRingHom ℝ) (∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : Polynomial ℤ) - (Polynomial.C : ℤ → Polynomial ℤ) ((2 : ℤ) ^ t) * Polynomial.X))) = ∑ i ∈ Finset.range n, (Polynomial.map (Int.castRingHom ℝ) (∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : Polynomial ℤ) - (Polynomial.C : ℤ → Polynomial ℤ) ((2 : ℤ) ^ t) * Polynomial.X))).coeff i * y ^ i.Uses library
Polynomial.eval_eq_sum_range'.Lean, line 170
have hev := Polynomial.eval_eq_sum_range' hdeg y
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 170 at
b16ab29fc51b↗hpoly.hev2have∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ t * y) = Polynomial.eval y (Polynomial.map (Int.castRingHom ℝ) (∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : Polynomial ℤ) - (Polynomial.C : ℤ → Polynomial ℤ) ((2 : ℤ) ^ t) * Polynomial.X)))Leaves
∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ t * y) = ∑ j ∈ Finset.range n, (↑((fun (j : ℕ) => (∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : Polynomial ℤ) - (Polynomial.C : ℤ → Polynomial ℤ) ((2 : ℤ) ^ t) * Polynomial.X)).coeff j) j) : ℝ) * y ^ j, withhev2 : ∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ t * y) = Polynomial.eval y (Polynomial.map (Int.castRingHom ℝ) (∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : Polynomial ℤ) - (Polynomial.C : ℤ → Polynomial ℤ) ((2 : ℤ) ^ t) * Polynomial.X))).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Polynomial.evaleval x pis the evaluation of the polynomialpatx,Polynomial.mapmap f pmaps a polynomialpacross a ring homf,Int.castRingHomcoe : ℤ → αas aRingHom. ,Polynomial.CC ais the constant polynomiala. ,Polynomial.XXis the polynomial variable (aka indeterminate). ,Polynomial.map_prod,Polynomial.eval_prodPolynomial evaluation commutes withFinset.prod,Finset.prod_congr,rflrfl : a = ais the unique constructor of the equality type. .Lean, lines 171–174
have hev2 : ∏ t ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ t * y) = Polynomial.eval y (Polynomial.map (Int.castRingHom ℝ) (∏ t ∈ Finset.Icc 1 (n - 1), (1 - Polynomial.C ((2 : ℤ) ^ t) * Polynomial.X))) := by rw [Polynomial.map_prod, Polynomial.eval_prod] refine Finset.prod_congr rfl (fun t _ => ?_) simptargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 171–174 at
b16ab29fc51b↗
numerator_integralhave∃ (a : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(a n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ)))Leaves
∃ (a : ℕ → ℤ) (b : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(b n) : ℝ) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (↑(a n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹, withnumerator_integral : ∃ (a : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(a n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))).Uses library
Nat.factorialNat.factorial nis the factorial ofn. ,Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Exists.introExistential introduction. .Lean, lines 183–561
have numerator_integral : ∃ a : ℕ → ℤ, ∀ n : ℕ, 1 ≤ n → (a n : ℝ) = (9 : ℝ) ^ n * ((Nat.factorial (n - 2) : ℝ) * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, (1 - (2 : ℝ) ^ k))) * ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (∑ i ∈ Finset.Icc 1 k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹)) - ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - 1)) := by have residue_integral : ∀ n i : ℕ, 1 ≤ i → i ≤ n → ∃ z : ℤ, (z : ℝ) = (∑ k ∈ Finset.Icc i n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))) := by have hQne : ∀ m : ℕ, (∏ s ∈ Finset.Icc 1 m, ((1 : ℤ) - 2 ^ s)) ≠ 0 := by intro m refine Finset.prod_ne_zero_iff.mpr (fun s hs => ?_) have h1 := (Finset.mem_Icc.mp hs).1 have h2 : (2 : ℤ) ≤ 2 ^ s := by calc (2 : ℤ) = 2 ^ 1 := by norm_num _ ≤ 2 ^ s := pow_le_pow_right₀ (by norm_num) h1 omega have hG : ∀ N a b : ℕ, a + b = N → ∃ z : ℤ, (∏ s ∈ Finset.Icc 1 (a + b), ((1 : ℤ) - 2 ^ s)) = z * ((∏ s ∈ Finset.Icc 1 a, ((1 : ℤ) - 2 ^ s)) * (∏ s ∈ Finset.Icc 1 b, ((1 : ℤ) - 2 ^ s))) := by intro N induction N with | zero => intro a b h obtain ⟨rfl, rfl⟩ : a = 0 ∧ b = 0 := by omega exact ⟨1, by simp⟩ | succ N ih => intro a b h rcases Nat.eq_zero_or_pos a with rfl | ha · exact ⟨1, by simp⟩ rcases Nat.eq_zero_or_pos b with rfl | hb · exact ⟨1, by simp⟩ obtain ⟨a', rfl⟩ : ∃ a', a = a' + 1 := ⟨a - 1, by omega⟩ obtain ⟨b', rfl⟩ : ∃ b', b = b' + 1 := ⟨b - 1, by omega⟩ obtain ⟨z1, h1⟩ := ih a' (b' + 1) (by omega) obtain ⟨z2, h2⟩ := ih (a' + 1) b' (by omega) refine ⟨2 ^ (b' + 1) * z1 + z2, ?_⟩ have e1 : a' + 1 + (b' + 1) = (a' + (b' + 1)) + 1 := by omega have e2 : a' + 1 + b' = a' + (b' + 1) := by omega have hA := Finset.prod_Icc_succ_top (show 1 ≤ a' + 1 by omega) (fun s => (1 : ℤ) - 2 ^ s) have hB := Finset.prod_Icc_succ_top (show 1 ≤ b' + 1 by omega) (fun s => (1 : ℤ) - 2 ^ s) have hC := Finset.prod_Icc_succ_top (show 1 ≤ a' + (b' + 1) + 1 by omega) (fun s => (1 : ℤ) - 2 ^ s) beta_reduce at hA hB hC rw [e2, hA] at h2 rw [hB] at h1 rw [e1, hC, hA, hB] linear_combination (2 ^ (b' + 1) * (1 - 2 ^ (a' + 1))) * h1 + (1 - 2 ^ (b' + 1)) * h2 have hN : ∀ m d : ℕ, (∏ s ∈ Finset.Icc 1 d, ((1 : ℤ) - 2 ^ s)) * (∏ t ∈ Finset.Icc 1 m, ((1 : ℤ) - 2 ^ (t + d))) = ∏ s ∈ Finset.Icc 1 (d + m), ((1 : ℤ) - 2 ^ s) := by intro m d induction m with | zero => simp | succ m ih => rw [Finset.prod_Icc_succ_top (by omega), show d + (m + 1) = (d + m) + 1 by omega, Finset.prod_Icc_succ_top (by omega), ← mul_assoc, ih, show m + 1 + d = d + m + 1 by omega] have hsumZ : ∀ (s : Finset ℕ) (g : ℕ → ℝ), (∀ i ∈ s, ∃ z : ℤ, (z : ℝ) = g i) → ∃ z : ℤ, (z : ℝ) = ∑ i ∈ s, g i := by intro s g induction s using Finset.induction_on with | empty => intro _; exact ⟨0, by simp⟩ | insert a s ha ih => intro h obtain ⟨za, hza⟩ := h a (Finset.mem_insert_self a s) obtain ⟨zs, hzs⟩ := ih (fun i hi => h i (Finset.mem_insert_of_mem hi)) exact ⟨za + zs, by rw [Finset.sum_insert ha]; push_cast; rw [hza, hzs]⟩ intro n i hi hin refine hsumZ _ _ (fun k hk => ?_) have hk' := Finset.mem_Icc.mp hk obtain ⟨d, rfl⟩ : ∃ d, k = i + d := ⟨k - i, by omega⟩ -- numerator have hNr : ∏ t ∈ Finset.Icc 1 (n - 1), (1 - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + (i + d))) = ((∏ t ∈ Finset.Icc 1 (n - 1), ((1 : ℤ) - 2 ^ (t + d)) : ℤ) : ℝ) := by push_cast refine Finset.prod_congr rfl (fun t _ => ?_) have h2i : (2 : ℝ) ^ i ≠ 0 := by positivity rw [show t + (i + d) = i + (t + d) by omega, pow_add, ← mul_assoc, inv_mul_cancel₀ h2i, one_mul] -- denominator have hset : (Finset.Icc 1 n).erase (i + d) = Finset.Icc 1 (i + d - 1) ∪ Finset.Icc (i + d + 1) n := by ext l simp only [Finset.mem_erase, Finset.mem_Icc, Finset.mem_union] omega have hdisj : Disjoint (Finset.Icc 1 (i + d - 1)) (Finset.Icc (i + d + 1) n) := by rw [Finset.disjoint_left] intro l h1 h2 simp only [Finset.mem_Icc] at h1 h2 omega have hD1 : (∏ l ∈ Finset.Icc 1 (i + d - 1), (1 - (2 : ℝ) ^ ((l : ℤ) - ((i + d : ℕ) : ℤ)))) * ((∏ s ∈ Finset.Icc 1 (i + d - 1), (-(2 : ℤ) ^ s) : ℤ) : ℝ) = ((∏ s ∈ Finset.Icc 1 (i + d - 1), ((1 : ℤ) - 2 ^ s) : ℤ) : ℝ) := by have hrefl : ∏ l ∈ Finset.Icc 1 (i + d - 1), (1 - (2 : ℝ) ^ ((l : ℤ) - ((i + d : ℕ) : ℤ))) = ∏ s ∈ Finset.Icc 1 (i + d - 1), (1 - ((2 : ℝ) ^ s)⁻¹) := by refine Finset.prod_nbij' (fun l => i + d - l) (fun s => i + d - s) ?_ ?_ ?_ ?_ ?_ · intro l hl; simp only [Finset.mem_Icc] at hl ⊢; omega · intro l hl; simp only [Finset.mem_Icc] at hl ⊢; omega · intro l hl; simp only [Finset.mem_Icc] at hl; omega · intro l hl; simp only [Finset.mem_Icc] at hl; omega · intro l hl simp only [Finset.mem_Icc] at hl rw [← zpow_natCast, ← zpow_neg] congr 2 push_cast [Nat.cast_sub (show l ≤ i + d by omega)] ring rw [hrefl] push_cast rw [← Finset.prod_mul_distrib] refine Finset.prod_congr rfl (fun s _ => ?_) have h2s : (2 : ℝ) ^ s ≠ 0 := by positivity field_simp ring have hD2 : ∏ l ∈ Finset.Icc (i + d + 1) n, (1 - (2 : ℝ) ^ ((l : ℤ) - ((i + d : ℕ) : ℤ))) = ((∏ s ∈ Finset.Icc 1 (n - (i + d)), ((1 : ℤ) - 2 ^ s) : ℤ) : ℝ) := by push_cast refine Finset.prod_nbij' (fun l => l - (i + d)) (fun s => s + (i + d)) ?_ ?_ ?_ ?_ ?_ · intro l hl; simp only [Finset.mem_Icc] at hl ⊢; omega · intro l hl; simp only [Finset.mem_Icc] at hl ⊢; omega · intro l hl; simp only [Finset.mem_Icc] at hl; omega · intro l hl; simp only [Finset.mem_Icc] at hl; omega · intro l hl simp only [Finset.mem_Icc] at hl rw [← zpow_natCast] congr 2 push_cast [Nat.cast_sub (show i + d ≤ l by omega)] ring obtain ⟨z1, hz1⟩ := hG _ d (n - 1) rfl obtain ⟨z2, hz2⟩ := hG _ (i + d - 1) (n - (i + d)) rfl rw [show i + d - 1 + (n - (i + d)) = n - 1 by omega] at hz2 have hNZ : (∏ t ∈ Finset.Icc 1 (n - 1), ((1 : ℤ) - 2 ^ (t + d))) = z1 * z2 * ((∏ s ∈ Finset.Icc 1 (i + d - 1), ((1 : ℤ) - 2 ^ s)) * (∏ s ∈ Finset.Icc 1 (n - (i + d)), ((1 : ℤ) - 2 ^ s))) := by apply mul_left_cancel₀ (hQne d) rw [hN (n - 1) d, hz1, hz2] ring have hNZ' : ((∏ t ∈ Finset.Icc 1 (n - 1), ((1 : ℤ) - 2 ^ (t + d)) : ℤ) : ℝ) = (z1 : ℝ) * z2 * (((∏ s ∈ Finset.Icc 1 (i + d - 1), ((1 : ℤ) - 2 ^ s) : ℤ) : ℝ) * ((∏ s ∈ Finset.Icc 1 (n - (i + d)), ((1 : ℤ) - 2 ^ s) : ℤ) : ℝ)) := by exact_mod_cast hNZ have hQ1 : ((∏ s ∈ Finset.Icc 1 (i + d - 1), ((1 : ℤ) - 2 ^ s) : ℤ) : ℝ) ≠ 0 := by exact_mod_cast hQne _ have hQ2 : ((∏ s ∈ Finset.Icc 1 (n - (i + d)), ((1 : ℤ) - 2 ^ s) : ℤ) : ℝ) ≠ 0 := by exact_mod_cast hQne _ have hDr : (∏ l ∈ (Finset.Icc 1 n).erase (i + d), (1 - (2 : ℝ) ^ ((l : ℤ) - ((i + d : ℕ) : ℤ)))) * ((∏ s ∈ Finset.Icc 1 (i + d - 1), (-(2 : ℤ) ^ s) : ℤ) : ℝ) = ((∏ s ∈ Finset.Icc 1 (i + d - 1), ((1 : ℤ) - 2 ^ s) : ℤ) : ℝ) * ((∏ s ∈ Finset.Icc 1 (n - (i + d)), ((1 : ℤ) - 2 ^ s) : ℤ) : ℝ) := by rw [hset, Finset.prod_union hdisj, hD2, ← hD1] ring have hDne : (∏ l ∈ (Finset.Icc 1 n).erase (i + d), (1 - (2 : ℝ) ^ ((l : ℤ) - ((i + d : ℕ) : ℤ)))) ≠ 0 := by intro h0 rw [h0, zero_mul] at hDr exact mul_ne_zero hQ1 hQ2 hDr.symm refine ⟨-(z1 * z2 * (∏ s ∈ Finset.Icc 1 (i + d - 1), (-(2 : ℤ) ^ s))), ?_⟩ rw [hNr, eq_div_iff hDne, hNZ'] rw [Int.cast_neg, Int.cast_mul, Int.cast_mul] linear_combination (-((z1 : ℝ) * z2)) * hDr have polypart_integral : ∀ n : ℕ, 1 ≤ n → ∃ z : ℤ, (z : ℝ) = (3 : ℝ) ^ n * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, (1 - (2 : ℝ) ^ k)) * ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (∑ i ∈ Finset.Icc 1 k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹)) - (∑ i ∈ Finset.Icc 1 n, (∑ k ∈ Finset.Icc i n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹)) := by intro n hn obtain ⟨α, hα⟩ := hpoly n hn obtain ⟨D, hD⟩ : ∃ D : ℕ → ℝ, ∀ k, D k = ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))) := ⟨fun k => _, fun k => rfl⟩ have hA : ∀ (x : ℝ) (k : ℕ), ∏ t ∈ Finset.Icc 1 (n - 1), (1 - x * (2 : ℝ) ^ (t + k)) = ∑ j ∈ Finset.range n, (α j : ℝ) * (x * 2 ^ k) ^ j := by intro x k rw [← hα] refine Finset.prod_congr rfl (fun t _ => ?_) rw [pow_add]; ring simp only [← hD, hA] -- (a) one double sum have hswap : ∑ i ∈ Finset.Icc 1 n, (∑ k ∈ Finset.Icc i n, -(∑ j ∈ Finset.range n, (α j : ℝ) * (((2 : ℝ) ^ i)⁻¹ * 2 ^ k) ^ j) / D k) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = ∑ k ∈ Finset.Icc 1 n, ∑ i ∈ Finset.Icc 1 k, (-(∑ j ∈ Finset.range n, (α j : ℝ) * (((2 : ℝ) ^ i)⁻¹ * 2 ^ k) ^ j) / D k) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ := by simp only [Finset.sum_mul] refine Finset.sum_comm' (fun i k => ?_) simp only [Finset.mem_Icc] omega rw [hswap] simp only [Finset.mul_sum] rw [← Finset.sum_sub_distrib] simp only [← Finset.sum_sub_distrib, ← sub_mul] -- (b) per (k, i) have hb : ∀ (k i : ℕ), 1 ≤ i → (-(∑ j ∈ Finset.range n, (α j : ℝ) * ((8 / 3 : ℝ) * 2 ^ k) ^ j) / D k - -(∑ j ∈ Finset.range n, (α j : ℝ) * (((2 : ℝ) ^ i)⁻¹ * 2 ^ k) ^ j) / D k) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = (∑ j ∈ Finset.range n, ∑ s ∈ Finset.range j, (α j : ℝ) * ((2 : ℝ) ^ k) ^ j * ((8 / 3 : ℝ) ^ s * (((2 : ℝ) ^ i)⁻¹) ^ (j - s))) / D k := by intro k i hi have h2i : (2 : ℝ) ^ i ≠ 0 := by positivity have hne : (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i) ≠ 0 := by have : (2 : ℝ) ≤ 2 ^ i := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi intro h0 linarith have hch : (((2 : ℝ) ^ i)⁻¹ - (8 / 3 : ℝ)) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = ((2 : ℝ) ^ i)⁻¹ := by rw [show (((2 : ℝ) ^ i)⁻¹ - (8 / 3 : ℝ)) = ((2 : ℝ) ^ i)⁻¹ * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i) by field_simp, mul_assoc, mul_inv_cancel₀ hne, mul_one] have hj : ∀ j : ℕ, ((((2 : ℝ) ^ i)⁻¹) ^ j - (8 / 3 : ℝ) ^ j) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = ∑ s ∈ Finset.range j, (8 / 3 : ℝ) ^ s * (((2 : ℝ) ^ i)⁻¹) ^ (j - s) := by intro j have hg := geom_sum₂_mul (8 / 3 : ℝ) (((2 : ℝ) ^ i)⁻¹) j have hg' : (((2 : ℝ) ^ i)⁻¹) ^ j - (8 / 3 : ℝ) ^ j = (∑ s ∈ Finset.range j, (8 / 3 : ℝ) ^ s * (((2 : ℝ) ^ i)⁻¹) ^ (j - 1 - s)) * (((2 : ℝ) ^ i)⁻¹ - (8 / 3 : ℝ)) := by linear_combination hg rw [hg', mul_assoc, hch, Finset.sum_mul] refine Finset.sum_congr rfl (fun s hs => ?_) have hs' := Finset.mem_range.mp hs rw [mul_assoc, ← pow_succ, show j - 1 - s + 1 = j - s by omega] have e1 : (-(∑ j ∈ Finset.range n, (α j : ℝ) * ((8 / 3 : ℝ) * 2 ^ k) ^ j) / D k - -(∑ j ∈ Finset.range n, (α j : ℝ) * (((2 : ℝ) ^ i)⁻¹ * 2 ^ k) ^ j) / D k) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = ((∑ j ∈ Finset.range n, (α j : ℝ) * (((2 : ℝ) ^ i)⁻¹ * 2 ^ k) ^ j - ∑ j ∈ Finset.range n, (α j : ℝ) * ((8 / 3 : ℝ) * 2 ^ k) ^ j) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹) / D k := by ring rw [e1, ← Finset.sum_sub_distrib, Finset.sum_mul] congr 1 refine Finset.sum_congr rfl (fun j _ => ?_) rw [← Finset.mul_sum, ← hj j, mul_pow, mul_pow] ring -- (c) sum over i have hc : ∀ k : ℕ, ∑ i ∈ Finset.Icc 1 k, (-(∑ j ∈ Finset.range n, (α j : ℝ) * ((8 / 3 : ℝ) * 2 ^ k) ^ j) / D k - -(∑ j ∈ Finset.range n, (α j : ℝ) * (((2 : ℝ) ^ i)⁻¹ * 2 ^ k) ^ j) / D k) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = ∑ j ∈ Finset.range n, ∑ s ∈ Finset.range j, (α j : ℝ) * (8 / 3 : ℝ) ^ s * ((((2 : ℝ) ^ k) ^ j - ((2 : ℝ) ^ k) ^ s) / D k) / ((2 : ℝ) ^ (j - s) - 1) := by intro k rw [Finset.sum_congr rfl (fun i hi => hb k i (Finset.mem_Icc.mp hi).1), ← Finset.sum_div, Finset.sum_comm, Finset.sum_div] refine Finset.sum_congr rfl (fun j _ => ?_) rw [Finset.sum_comm, Finset.sum_div] refine Finset.sum_congr rfl (fun s hs => ?_) have hs' := Finset.mem_range.mp hs rw [Finset.sum_congr rfl (fun i _ => (mul_assoc _ _ _).symm), ← Finset.mul_sum, hgeo (j - s) (by omega) k] have hjs : ((2 : ℝ) ^ k) ^ j = ((2 : ℝ) ^ k) ^ s * ((2 : ℝ) ^ k) ^ (j - s) := by rw [← pow_add]; congr 1; omega have hZ : ((2 : ℝ) ^ k) ^ (j - s) * (((2 : ℝ) ^ k) ^ (j - s))⁻¹ = 1 := mul_inv_cancel₀ (by positivity) rw [hjs] linear_combination (-((α j : ℝ) * ((2 : ℝ) ^ k) ^ s * (8 / 3 : ℝ) ^ s / ((2 : ℝ) ^ (j - s) - 1) / D k)) * hZ rw [Finset.sum_congr rfl (fun k _ => hc k), Finset.sum_comm, Finset.mul_sum] refine hsumZ _ _ (fun j hj => ?_) rw [Finset.sum_comm, Finset.mul_sum] refine hsumZ _ _ (fun s hs => ?_) have hj' := Finset.mem_range.mp hj have hs' := Finset.mem_range.mp hs obtain ⟨wj, hwj⟩ := hW _ (Finset.Icc 1 n) j rfl obtain ⟨ws, hws⟩ := hW _ (Finset.Icc 1 n) s rfl obtain ⟨q, hq⟩ := hdvd n (j - s) (by omega) (by omega) have hqR : ∏ k ∈ Finset.Icc ((n + 1) / 2) n, ((1 : ℝ) - 2 ^ k) = ((2 : ℝ) ^ (j - s) - 1) * q := by exact_mod_cast hq have hB : (2 : ℝ) ^ (j - s) - 1 ≠ 0 := by have : (2 : ℝ) ≤ 2 ^ (j - s) := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ (j - s) := pow_le_pow_right₀ (by norm_num) (by omega) linarith have h3 : (3 : ℝ) ^ n = 3 ^ (n - s) * 3 ^ s := by rw [← pow_add]; congr 1; omega have h83 : (8 / 3 : ℝ) ^ s * 3 ^ s = 8 ^ s := by rw [← mul_pow]; norm_num refine ⟨3 ^ (n - s) * 8 ^ s * q * α j * (wj - ws), ?_⟩ simp only [← hD] at hwj hws push_cast rw [hwj, hws, hqR, h3, ← h83, ← Finset.sum_sub_distrib] rw [Finset.mul_sum, Finset.mul_sum] refine Finset.sum_congr rfl (fun k _ => ?_) field_simp have head_integral : ∃ a₁ : ℕ → ℤ, ∀ n : ℕ, 1 ≤ n → (a₁ n : ℝ) = (9 : ℝ) ^ n * ((Nat.factorial (n - 2) : ℝ) * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, (1 - (2 : ℝ) ^ k))) * (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (∑ i ∈ Finset.Icc 1 k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹)) := by have hsumZ0 : ∀ (s : Finset ℕ) (g : ℕ → ℝ), (∀ i ∈ s, ∃ z : ℤ, (z : ℝ) = g i) → ∃ z : ℤ, (z : ℝ) = ∑ i ∈ s, g i := by intro s g induction s using Finset.induction_on with | empty => intro _; exact ⟨0, by simp⟩ | insert a s ha ih => intro h obtain ⟨za, hza⟩ := h a (Finset.mem_insert_self a s) obtain ⟨zs, hzs⟩ := ih (fun i hi => h i (Finset.mem_insert_of_mem hi)) exact ⟨za + zs, by rw [Finset.sum_insert ha]; push_cast; rw [hza, hzs]⟩ have hn : ∀ n : ℕ, 1 ≤ n → ∃ z : ℤ, (z : ℝ) = (9 : ℝ) ^ n * ((Nat.factorial (n - 2) : ℝ) * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, (1 - (2 : ℝ) ^ k))) * (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (∑ i ∈ Finset.Icc 1 k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹)) := by intro n hn obtain ⟨zE, hzE⟩ := polypart_integral n hn have hR : ∃ zR : ℤ, (zR : ℝ) = (3 : ℝ) ^ n * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * (∑ i ∈ Finset.Icc 1 n, (∑ k ∈ Finset.Icc i n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹) := by rw [Finset.mul_sum] refine hsumZ0 _ _ (fun i hi => ?_) have hi' := Finset.mem_Icc.mp hi obtain ⟨zb, hzb⟩ := residue_integral n i hi'.1 hi'.2 refine ⟨zb * (3 * ∏ j ∈ (Finset.Icc 1 n).erase i, ((3 : ℤ) - 8 * 2 ^ j)), ?_⟩ have hne : (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i) ≠ 0 := by have : (2 : ℝ) ≤ 2 ^ i := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi'.1 intro h0 linarith have hsplit : (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) = (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i) * ∏ k ∈ (Finset.Icc 1 n).erase i, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) := (Finset.mul_prod_erase _ (fun k => (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) hi).symm have he : ∏ k ∈ (Finset.Icc 1 n).erase i, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = (∏ k ∈ (Finset.Icc 1 n).erase i, ((3 : ℝ) - 8 * 2 ^ k)) * ((3 : ℝ) ^ (n - 1))⁻¹ := by rw [Finset.prod_congr rfl (fun k _ => (by ring : (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = ((3 : ℝ) - 8 * 2 ^ k) * (3 : ℝ)⁻¹)), Finset.prod_mul_distrib, Finset.prod_const, Finset.card_erase_of_mem hi, Nat.card_Icc, Nat.add_sub_cancel, inv_pow] have h3 : (3 : ℝ) ^ n = 3 * 3 ^ (n - 1) := by rw [← pow_succ']; congr 1; omega have h3ne : (3 : ℝ) ^ (n - 1) ≠ 0 := by positivity obtain ⟨b, hb⟩ : ∃ b : ℝ, b = (∑ k ∈ Finset.Icc i n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))) := ⟨_, rfl⟩ rw [← hb] at hzb ⊢ push_cast rw [hzb, hsplit, he, h3] have hne' : (3 : ℝ) - 8 * 2 ^ i ≠ 0 := by intro h0 apply hne linear_combination (1 / 3 : ℝ) * h0 field_simp obtain ⟨zR, hzR⟩ := hR have hPZ : ∏ k ∈ Finset.Icc 1 n, ((3 : ℝ) - 8 * 2 ^ k) = (3 : ℝ) ^ n * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) := by rw [Finset.prod_congr rfl (fun k _ => (by ring : (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = ((3 : ℝ) - 8 * 2 ^ k) * (3 : ℝ)⁻¹)), Finset.prod_mul_distrib, Finset.prod_const, Nat.card_Icc, Nat.add_sub_cancel, inv_pow] have h3n : (3 : ℝ) ^ n ≠ 0 := by positivity field_simp have h9 : (9 : ℝ) ^ n = 3 ^ n * 3 ^ n := by rw [show (9 : ℝ) = 3 * 3 by norm_num, mul_pow] refine ⟨(Nat.factorial (n - 2) : ℤ) * ((∏ k ∈ Finset.Icc 1 n, ((3 : ℤ) - 8 * 2 ^ k)) * zE + 3 ^ n * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, ((1 : ℤ) - 2 ^ k)) * zR), ?_⟩ push_cast rw [hzE, hzR, hPZ, h9] ring refine ⟨fun n => if h : 1 ≤ n then Classical.choose (hn n h) else 0, fun n hn' => ?_⟩ simp only [dif_pos hn'] exact Classical.choose_spec (hn n hn') obtain ⟨a₁, h₁⟩ := head_integral have hmer : ∃ a₂ : ℕ → ℤ, ∀ n : ℕ, 1 ≤ n → (a₂ n : ℝ) = (9 : ℝ) ^ n * ((Nat.factorial (n - 2) : ℝ) * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, (1 - (2 : ℝ) ^ k))) * (∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - 1)) := by have key : ∀ n : ℕ, 1 ≤ n → ∀ i : ℕ, 1 ≤ i → i ≤ n - 1 → ∃ z : ℤ, (z : ℝ) = (3 : ℝ) ^ (n - 1 - i) * (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) := by intro n hn i hi1 hi2 obtain ⟨α, hα⟩ := hpoly n hn have hA : ∀ k : ℕ, ∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k)) = ∑ j ∈ Finset.range n, (α j : ℝ) * ((8 / 3 : ℝ) * 2 ^ k) ^ j := by intro k rw [← hα] refine Finset.prod_congr rfl (fun t _ => ?_) rw [pow_add]; ring simp only [hA] have e1 : ∑ k ∈ Finset.Icc 1 n, (-(∑ j ∈ Finset.range n, (α j : ℝ) * ((8 / 3 : ℝ) * 2 ^ k) ^ j) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) * ((((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) = ∑ j ∈ Finset.range n, ∑ k ∈ Finset.Icc 1 n, (-(α j : ℝ)) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) := by rw [Finset.sum_comm] refine Finset.sum_congr rfl (fun k _ => ?_) rw [neg_div, neg_mul, Finset.sum_div, Finset.sum_mul, ← Finset.sum_neg_distrib] refine Finset.sum_congr rfl (fun j _ => ?_) ring rw [e1, Finset.mul_sum] refine hsumZ _ _ (fun j hj => ?_) have hj' := Finset.mem_range.mp hj rw [← Finset.mul_sum] have hcX : ∀ k : ℕ, ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ≠ 0 := fun k => by positivity rcases lt_or_ge j i with hji | hji · refine ⟨0, ?_⟩ have hvan : ∑ k ∈ Finset.Icc 1 n, (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) = ((8 / 3 : ℝ) ^ (i - j))⁻¹ * ∑ k ∈ Finset.Icc 1 n, (((2 : ℝ) ^ k) ^ (i - j - 1 + 1))⁻¹ / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))) := by rw [Finset.mul_sum] refine Finset.sum_congr rfl (fun k _ => ?_) have hk : ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) = ((8 / 3 : ℝ) ^ (i - j))⁻¹ * (((2 : ℝ) ^ k) ^ (i - j))⁻¹ := by rw [show ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i = ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ (i - j) from by rw [← pow_add]; congr 1; omega, mul_inv, ← mul_assoc, mul_inv_cancel₀ (pow_ne_zero _ (hcX k)), one_mul, mul_pow, mul_inv] rw [hk, mul_div_assoc, show i - j - 1 + 1 = i - j by omega] rw [hvan, hV (i - j - 1) (Finset.Icc 1 n) (by rw [Nat.card_Icc]; omega)] simp · obtain ⟨w, hw⟩ := hW _ (Finset.Icc 1 n) (j - i) rfl refine ⟨-(α j) * 3 ^ (n - 1 - j) * 8 ^ (j - i) * w, ?_⟩ have hpos : ∑ k ∈ Finset.Icc 1 n, (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) = (8 / 3 : ℝ) ^ (j - i) * ∑ k ∈ Finset.Icc 1 n, ((2 : ℝ) ^ k) ^ (j - i) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))) := by rw [Finset.mul_sum] refine Finset.sum_congr rfl (fun k _ => ?_) have hk : ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) = (8 / 3 : ℝ) ^ (j - i) * ((2 : ℝ) ^ k) ^ (j - i) := by rw [show ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j = ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ (j - i) * ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i from by rw [← pow_add]; congr 1; omega, mul_assoc, mul_inv_cancel₀ (pow_ne_zero _ (hcX k)), mul_one, mul_pow] rw [hk, mul_div_assoc] have h3 : (3 : ℝ) ^ (n - 1 - i) = 3 ^ (n - 1 - j) * 3 ^ (j - i) := by rw [← pow_add]; congr 1; omega have h83 : (8 / 3 : ℝ) ^ (j - i) * 3 ^ (j - i) = 8 ^ (j - i) := by rw [← mul_pow]; norm_num push_cast rw [hpos, hw, h3, ← h83] ring have hW3 : ∀ n : ℕ, ∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = (∏ k ∈ Finset.Icc 1 n, ((3 : ℝ) - 8 * 2 ^ k)) * ((3 : ℝ) ^ n)⁻¹ := by intro n rw [Finset.prod_congr rfl (fun k _ => (by ring : (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = ((3 : ℝ) - 8 * 2 ^ k) * (3 : ℝ)⁻¹)), Finset.prod_mul_distrib, Finset.prod_const, Nat.card_Icc, Nat.add_sub_cancel, inv_pow] have hdvd : ∀ n i : ℕ, 1 ≤ i → i ≤ n - 1 → ((2 : ℤ) ^ i - 1) ∣ ∏ k ∈ Finset.Icc ((n + 1) / 2) n, ((1 : ℤ) - 2 ^ k) := by intro n i hi1 hi2 obtain ⟨k0, hk0⟩ : ∃ k0, k0 = i * (n / i) := ⟨_, rfl⟩ have hle : k0 ≤ n := by rw [hk0, mul_comm]; exact Nat.div_mul_le_self n i have hlt : n < k0 + i := by rw [hk0]; have := Nat.lt_mul_div_succ n (by omega : 0 < i); linarith have hge : i ≤ k0 := by rw [hk0]; exact Nat.le_mul_of_pos_right i (Nat.div_pos (by omega) (by omega)) have hmem : k0 ∈ Finset.Icc ((n + 1) / 2) n := Finset.mem_Icc.mpr ⟨by omega, hle⟩ have h1 : ((2 : ℤ) ^ i - 1) ∣ (2 : ℤ) ^ k0 - 1 := by have := sub_dvd_pow_sub_pow ((2 : ℤ) ^ i) 1 (n / i) rw [one_pow, ← pow_mul, ← hk0] at this exact this have h2 : ((2 : ℤ) ^ i - 1) ∣ (1 : ℤ) - 2 ^ k0 := by have : (1 : ℤ) - 2 ^ k0 = -((2 : ℤ) ^ k0 - 1) := by ring rw [this]; exact (dvd_neg).mpr h1 exact h2.trans (Finset.dvd_prod_of_mem (fun k => (1 : ℤ) - 2 ^ k) hmem) have hsumZ : ∀ (s : Finset ℕ) (g : ℕ → ℝ), (∀ i ∈ s, ∃ z : ℤ, (z : ℝ) = g i) → ∃ z : ℤ, (z : ℝ) = ∑ i ∈ s, g i := by intro s g induction s using Finset.induction_on with | empty => intro _; exact ⟨0, by simp⟩ | insert a s ha ih => intro h obtain ⟨za, hza⟩ := h a (Finset.mem_insert_self a s) obtain ⟨zs, hzs⟩ := ih (fun i hi => h i (Finset.mem_insert_of_mem hi)) exact ⟨za + zs, by rw [Finset.sum_insert ha]; push_cast; rw [hza, hzs]⟩ have hn : ∀ n : ℕ, 1 ≤ n → ∃ z : ℤ, (z : ℝ) = (9 : ℝ) ^ n * ((Nat.factorial (n - 2) : ℝ) * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, (1 - (2 : ℝ) ^ k))) * (∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - 1)) := by intro n hn rw [Finset.mul_sum] refine hsumZ _ _ (fun i hi => ?_) have hi' := Finset.mem_Icc.mp hi obtain ⟨z1, hz1⟩ := key n hn i hi'.1 hi'.2 obtain ⟨q, hq⟩ := hdvd n i hi'.1 hi'.2 have hqR : ∏ k ∈ Finset.Icc ((n + 1) / 2) n, ((1 : ℝ) - 2 ^ k) = ((2 : ℝ) ^ i - 1) * q := by exact_mod_cast hq have h2i : (2 : ℝ) ^ i - 1 ≠ 0 := by have : (2 : ℝ) ≤ 2 ^ i := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi'.1 linarith have h9 : (9 : ℝ) ^ n = 3 ^ (i + 1) * 3 ^ (n - 1 - i) * 3 ^ n := by rw [show (9 : ℝ) = 3 * 3 by norm_num, mul_pow] congr 1 rw [← pow_add] congr 1 omega refine ⟨3 ^ (i + 1) * (Nat.factorial (n - 2) : ℤ) * (∏ k ∈ Finset.Icc 1 n, ((3 : ℤ) - 8 * 2 ^ k)) * q * z1, ?_⟩ push_cast rw [hz1, hW3 n, hqR, h9] have h3n : (3 : ℝ) ^ n ≠ 0 := by positivity field_simp refine ⟨fun n => if h : 1 ≤ n then Classical.choose (hn n h) else 0, fun n hn' => ?_⟩ simp only [dif_pos hn'] exact Classical.choose_spec (hn n hn') obtain ⟨a₂, h₂⟩ := hmer refine ⟨fun n => a₁ n - a₂ n, fun n hn => ?_⟩ push_cast rw [h₁ n hn, h₂ n hn] ringtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 183–561 at
b16ab29fc51b↗numerator_integral.residue_integralhave∀ (n i : ℕ), (1 : ℕ) ≤ i → i ≤ n → ∃ (z : ℤ), (↑z : ℝ) = ∑ k ∈ Finset.Icc i n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))Leaves
∃ (a : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(a n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withresidue_integral : ∀ (n i : ℕ), (1 : ℕ) ≤ i → i ≤ n → ∃ (z : ℤ), (↑z : ℝ) = ∑ k ∈ Finset.Icc i n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Exists.introExistential introduction. ,eq_div_iff,Int.cast_neg,Int.cast_mul.Lean, lines 184–311
have residue_integral : ∀ n i : ℕ, 1 ≤ i → i ≤ n → ∃ z : ℤ, (z : ℝ) = (∑ k ∈ Finset.Icc i n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))) := by have hQne : ∀ m : ℕ, (∏ s ∈ Finset.Icc 1 m, ((1 : ℤ) - 2 ^ s)) ≠ 0 := by intro m refine Finset.prod_ne_zero_iff.mpr (fun s hs => ?_) have h1 := (Finset.mem_Icc.mp hs).1 have h2 : (2 : ℤ) ≤ 2 ^ s := by calc (2 : ℤ) = 2 ^ 1 := by norm_num _ ≤ 2 ^ s := pow_le_pow_right₀ (by norm_num) h1 omega have hG : ∀ N a b : ℕ, a + b = N → ∃ z : ℤ, (∏ s ∈ Finset.Icc 1 (a + b), ((1 : ℤ) - 2 ^ s)) = z * ((∏ s ∈ Finset.Icc 1 a, ((1 : ℤ) - 2 ^ s)) * (∏ s ∈ Finset.Icc 1 b, ((1 : ℤ) - 2 ^ s))) := by intro N induction N with | zero => intro a b h obtain ⟨rfl, rfl⟩ : a = 0 ∧ b = 0 := by omega exact ⟨1, by simp⟩ | succ N ih => intro a b h rcases Nat.eq_zero_or_pos a with rfl | ha · exact ⟨1, by simp⟩ rcases Nat.eq_zero_or_pos b with rfl | hb · exact ⟨1, by simp⟩ obtain ⟨a', rfl⟩ : ∃ a', a = a' + 1 := ⟨a - 1, by omega⟩ obtain ⟨b', rfl⟩ : ∃ b', b = b' + 1 := ⟨b - 1, by omega⟩ obtain ⟨z1, h1⟩ := ih a' (b' + 1) (by omega) obtain ⟨z2, h2⟩ := ih (a' + 1) b' (by omega) refine ⟨2 ^ (b' + 1) * z1 + z2, ?_⟩ have e1 : a' + 1 + (b' + 1) = (a' + (b' + 1)) + 1 := by omega have e2 : a' + 1 + b' = a' + (b' + 1) := by omega have hA := Finset.prod_Icc_succ_top (show 1 ≤ a' + 1 by omega) (fun s => (1 : ℤ) - 2 ^ s) have hB := Finset.prod_Icc_succ_top (show 1 ≤ b' + 1 by omega) (fun s => (1 : ℤ) - 2 ^ s) have hC := Finset.prod_Icc_succ_top (show 1 ≤ a' + (b' + 1) + 1 by omega) (fun s => (1 : ℤ) - 2 ^ s) beta_reduce at hA hB hC rw [e2, hA] at h2 rw [hB] at h1 rw [e1, hC, hA, hB] linear_combination (2 ^ (b' + 1) * (1 - 2 ^ (a' + 1))) * h1 + (1 - 2 ^ (b' + 1)) * h2 have hN : ∀ m d : ℕ, (∏ s ∈ Finset.Icc 1 d, ((1 : ℤ) - 2 ^ s)) * (∏ t ∈ Finset.Icc 1 m, ((1 : ℤ) - 2 ^ (t + d))) = ∏ s ∈ Finset.Icc 1 (d + m), ((1 : ℤ) - 2 ^ s) := by intro m d induction m with | zero => simp | succ m ih => rw [Finset.prod_Icc_succ_top (by omega), show d + (m + 1) = (d + m) + 1 by omega, Finset.prod_Icc_succ_top (by omega), ← mul_assoc, ih, show m + 1 + d = d + m + 1 by omega] have hsumZ : ∀ (s : Finset ℕ) (g : ℕ → ℝ), (∀ i ∈ s, ∃ z : ℤ, (z : ℝ) = g i) → ∃ z : ℤ, (z : ℝ) = ∑ i ∈ s, g i := by intro s g induction s using Finset.induction_on with | empty => intro _; exact ⟨0, by simp⟩ | insert a s ha ih => intro h obtain ⟨za, hza⟩ := h a (Finset.mem_insert_self a s) obtain ⟨zs, hzs⟩ := ih (fun i hi => h i (Finset.mem_insert_of_mem hi)) exact ⟨za + zs, by rw [Finset.sum_insert ha]; push_cast; rw [hza, hzs]⟩ intro n i hi hin refine hsumZ _ _ (fun k hk => ?_) have hk' := Finset.mem_Icc.mp hk obtain ⟨d, rfl⟩ : ∃ d, k = i + d := ⟨k - i, by omega⟩ -- numerator have hNr : ∏ t ∈ Finset.Icc 1 (n - 1), (1 - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + (i + d))) = ((∏ t ∈ Finset.Icc 1 (n - 1), ((1 : ℤ) - 2 ^ (t + d)) : ℤ) : ℝ) := by push_cast refine Finset.prod_congr rfl (fun t _ => ?_) have h2i : (2 : ℝ) ^ i ≠ 0 := by positivity rw [show t + (i + d) = i + (t + d) by omega, pow_add, ← mul_assoc, inv_mul_cancel₀ h2i, one_mul] -- denominator have hset : (Finset.Icc 1 n).erase (i + d) = Finset.Icc 1 (i + d - 1) ∪ Finset.Icc (i + d + 1) n := by ext l simp only [Finset.mem_erase, Finset.mem_Icc, Finset.mem_union] omega have hdisj : Disjoint (Finset.Icc 1 (i + d - 1)) (Finset.Icc (i + d + 1) n) := by rw [Finset.disjoint_left] intro l h1 h2 simp only [Finset.mem_Icc] at h1 h2 omega have hD1 : (∏ l ∈ Finset.Icc 1 (i + d - 1), (1 - (2 : ℝ) ^ ((l : ℤ) - ((i + d : ℕ) : ℤ)))) * ((∏ s ∈ Finset.Icc 1 (i + d - 1), (-(2 : ℤ) ^ s) : ℤ) : ℝ) = ((∏ s ∈ Finset.Icc 1 (i + d - 1), ((1 : ℤ) - 2 ^ s) : ℤ) : ℝ) := by have hrefl : ∏ l ∈ Finset.Icc 1 (i + d - 1), (1 - (2 : ℝ) ^ ((l : ℤ) - ((i + d : ℕ) : ℤ))) = ∏ s ∈ Finset.Icc 1 (i + d - 1), (1 - ((2 : ℝ) ^ s)⁻¹) := by refine Finset.prod_nbij' (fun l => i + d - l) (fun s => i + d - s) ?_ ?_ ?_ ?_ ?_ · intro l hl; simp only [Finset.mem_Icc] at hl ⊢; omega · intro l hl; simp only [Finset.mem_Icc] at hl ⊢; omega · intro l hl; simp only [Finset.mem_Icc] at hl; omega · intro l hl; simp only [Finset.mem_Icc] at hl; omega · intro l hl simp only [Finset.mem_Icc] at hl rw [← zpow_natCast, ← zpow_neg] congr 2 push_cast [Nat.cast_sub (show l ≤ i + d by omega)] ring rw [hrefl] push_cast rw [← Finset.prod_mul_distrib] refine Finset.prod_congr rfl (fun s _ => ?_) have h2s : (2 : ℝ) ^ s ≠ 0 := by positivity field_simp ring have hD2 : ∏ l ∈ Finset.Icc (i + d + 1) n, (1 - (2 : ℝ) ^ ((l : ℤ) - ((i + d : ℕ) : ℤ))) = ((∏ s ∈ Finset.Icc 1 (n - (i + d)), ((1 : ℤ) - 2 ^ s) : ℤ) : ℝ) := by push_cast refine Finset.prod_nbij' (fun l => l - (i + d)) (fun s => s + (i + d)) ?_ ?_ ?_ ?_ ?_ · intro l hl; simp only [Finset.mem_Icc] at hl ⊢; omega · intro l hl; simp only [Finset.mem_Icc] at hl ⊢; omega · intro l hl; simp only [Finset.mem_Icc] at hl; omega · intro l hl; simp only [Finset.mem_Icc] at hl; omega · intro l hl simp only [Finset.mem_Icc] at hl rw [← zpow_natCast] congr 2 push_cast [Nat.cast_sub (show i + d ≤ l by omega)] ring obtain ⟨z1, hz1⟩ := hG _ d (n - 1) rfl obtain ⟨z2, hz2⟩ := hG _ (i + d - 1) (n - (i + d)) rfl rw [show i + d - 1 + (n - (i + d)) = n - 1 by omega] at hz2 have hNZ : (∏ t ∈ Finset.Icc 1 (n - 1), ((1 : ℤ) - 2 ^ (t + d))) = z1 * z2 * ((∏ s ∈ Finset.Icc 1 (i + d - 1), ((1 : ℤ) - 2 ^ s)) * (∏ s ∈ Finset.Icc 1 (n - (i + d)), ((1 : ℤ) - 2 ^ s))) := by apply mul_left_cancel₀ (hQne d) rw [hN (n - 1) d, hz1, hz2] ring have hNZ' : ((∏ t ∈ Finset.Icc 1 (n - 1), ((1 : ℤ) - 2 ^ (t + d)) : ℤ) : ℝ) = (z1 : ℝ) * z2 * (((∏ s ∈ Finset.Icc 1 (i + d - 1), ((1 : ℤ) - 2 ^ s) : ℤ) : ℝ) * ((∏ s ∈ Finset.Icc 1 (n - (i + d)), ((1 : ℤ) - 2 ^ s) : ℤ) : ℝ)) := by exact_mod_cast hNZ have hQ1 : ((∏ s ∈ Finset.Icc 1 (i + d - 1), ((1 : ℤ) - 2 ^ s) : ℤ) : ℝ) ≠ 0 := by exact_mod_cast hQne _ have hQ2 : ((∏ s ∈ Finset.Icc 1 (n - (i + d)), ((1 : ℤ) - 2 ^ s) : ℤ) : ℝ) ≠ 0 := by exact_mod_cast hQne _ have hDr : (∏ l ∈ (Finset.Icc 1 n).erase (i + d), (1 - (2 : ℝ) ^ ((l : ℤ) - ((i + d : ℕ) : ℤ)))) * ((∏ s ∈ Finset.Icc 1 (i + d - 1), (-(2 : ℤ) ^ s) : ℤ) : ℝ) = ((∏ s ∈ Finset.Icc 1 (i + d - 1), ((1 : ℤ) - 2 ^ s) : ℤ) : ℝ) * ((∏ s ∈ Finset.Icc 1 (n - (i + d)), ((1 : ℤ) - 2 ^ s) : ℤ) : ℝ) := by rw [hset, Finset.prod_union hdisj, hD2, ← hD1] ring have hDne : (∏ l ∈ (Finset.Icc 1 n).erase (i + d), (1 - (2 : ℝ) ^ ((l : ℤ) - ((i + d : ℕ) : ℤ)))) ≠ 0 := by intro h0 rw [h0, zero_mul] at hDr exact mul_ne_zero hQ1 hQ2 hDr.symm refine ⟨-(z1 * z2 * (∏ s ∈ Finset.Icc 1 (i + d - 1), (-(2 : ℤ) ^ s))), ?_⟩ rw [hNr, eq_div_iff hDne, hNZ'] rw [Int.cast_neg, Int.cast_mul, Int.cast_mul] linear_combination (-((z1 : ℝ) * z2)) * hDrtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 184–311 at
b16ab29fc51b↗numerator_integral.residue_integral.hQnehave∀ (m : ℕ), ∏ s ∈ Finset.Icc (1 : ℕ) m, ((1 : ℤ) - (2 : ℤ) ^ s) ≠ (0 : ℤ)Leaves
∀ (n i : ℕ), (1 : ℕ) ≤ i → i ≤ n → ∃ (z : ℤ), (↑z : ℝ) = ∑ k ∈ Finset.Icc i n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))), withhQne : ∀ (m : ℕ), ∏ s ∈ Finset.Icc (1 : ℕ) m, ((1 : ℤ) - (2 : ℤ) ^ s) ≠ (0 : ℤ).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.prod_ne_zero_iff.Lean, lines 185–192
have hQne : ∀ m : ℕ, (∏ s ∈ Finset.Icc 1 m, ((1 : ℤ) - 2 ^ s)) ≠ 0 := by intro m refine Finset.prod_ne_zero_iff.mpr (fun s hs => ?_) have h1 := (Finset.mem_Icc.mp hs).1 have h2 : (2 : ℤ) ≤ 2 ^ s := by calc (2 : ℤ) = 2 ^ 1 := by norm_num _ ≤ 2 ^ s := pow_le_pow_right₀ (by norm_num) h1 omegatargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 185–192 at
b16ab29fc51b↗numerator_integral.residue_integral.hQne.h1have(1 : ℕ) ≤ sLeaves
(1 : ℤ) - (2 : ℤ) ^ s ≠ (0 : ℤ), withh1 : (1 : ℕ) ≤ s.Uses library
Finset.mem_Icc.Lean, line 188
have h1 := (Finset.mem_Icc.mp hs).1
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 188 at
b16ab29fc51b↗numerator_integral.residue_integral.hQne.h2have(2 : ℤ) ≤ (2 : ℤ) ^ sLeaves
(1 : ℤ) - (2 : ℤ) ^ s ≠ (0 : ℤ), withh2 : (2 : ℤ) ≤ (2 : ℤ) ^ s.Lean, lines 189–191
have h2 : (2 : ℤ) ≤ 2 ^ s := by calc (2 : ℤ) = 2 ^ 1 := by norm_num _ ≤ 2 ^ s := pow_le_pow_right₀ (by norm_num) h1targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 189–191 at
b16ab29fc51b↗numerator_integral.residue_integral.hQne.h2.s1calc(2 : ℤ) = (2 : ℤ) ^ (1 : ℕ)routine: norm_numCloses the goal.
Lean, line 190
calc (2 : ℤ) = 2 ^ 1 := by norm_num
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 190 at
b16ab29fc51b↗numerator_integral.residue_integral.hQne.h2.s2calc(2 : ℤ) ^ (1 : ℕ) ≤ (2 : ℤ) ^ sCloses the goal.
Uses library
pow_le_pow_right₀.Lean, line 191
_ ≤ 2 ^ s := pow_le_pow_right₀ (by norm_num) h1
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 191 at
b16ab29fc51b↗
numerator_integral.residue_integral.hGhave∀ (N a b : ℕ), a + b = N → ∃ (z : ℤ), ∏ s ∈ Finset.Icc (1 : ℕ) (a + b), ((1 : ℤ) - (2 : ℤ) ^ s) = z * ((∏ s ∈ Finset.Icc (1 : ℕ) a, ((1 : ℤ) - (2 : ℤ) ^ s)) * ∏ s ∈ Finset.Icc (1 : ℕ) b, ((1 : ℤ) - (2 : ℤ) ^ s))Leaves
∀ (n i : ℕ), (1 : ℕ) ≤ i → i ≤ n → ∃ (z : ℤ), (↑z : ℝ) = ∑ k ∈ Finset.Icc i n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))), withhG : ∀ (N a b : ℕ), a + b = N → ∃ (z : ℤ), ∏ s ∈ Finset.Icc (1 : ℕ) (a + b), ((1 : ℤ) - (2 : ℤ) ^ s) = z * ((∏ s ∈ Finset.Icc (1 : ℕ) a, ((1 : ℤ) - (2 : ℤ) ^ s)) * ∏ s ∈ Finset.Icc (1 : ℕ) b, ((1 : ℤ) - (2 : ℤ) ^ s)).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. .Lean, lines 193–220
have hG : ∀ N a b : ℕ, a + b = N → ∃ z : ℤ, (∏ s ∈ Finset.Icc 1 (a + b), ((1 : ℤ) - 2 ^ s)) = z * ((∏ s ∈ Finset.Icc 1 a, ((1 : ℤ) - 2 ^ s)) * (∏ s ∈ Finset.Icc 1 b, ((1 : ℤ) - 2 ^ s))) := by intro N induction N with | zero => intro a b h obtain ⟨rfl, rfl⟩ : a = 0 ∧ b = 0 := by omega exact ⟨1, by simp⟩ | succ N ih => intro a b h rcases Nat.eq_zero_or_pos a with rfl | ha · exact ⟨1, by simp⟩ rcases Nat.eq_zero_or_pos b with rfl | hb · exact ⟨1, by simp⟩ obtain ⟨a', rfl⟩ : ∃ a', a = a' + 1 := ⟨a - 1, by omega⟩ obtain ⟨b', rfl⟩ : ∃ b', b = b' + 1 := ⟨b - 1, by omega⟩ obtain ⟨z1, h1⟩ := ih a' (b' + 1) (by omega) obtain ⟨z2, h2⟩ := ih (a' + 1) b' (by omega) refine ⟨2 ^ (b' + 1) * z1 + z2, ?_⟩ have e1 : a' + 1 + (b' + 1) = (a' + (b' + 1)) + 1 := by omega have e2 : a' + 1 + b' = a' + (b' + 1) := by omega have hA := Finset.prod_Icc_succ_top (show 1 ≤ a' + 1 by omega) (fun s => (1 : ℤ) - 2 ^ s) have hB := Finset.prod_Icc_succ_top (show 1 ≤ b' + 1 by omega) (fun s => (1 : ℤ) - 2 ^ s) have hC := Finset.prod_Icc_succ_top (show 1 ≤ a' + (b' + 1) + 1 by omega) (fun s => (1 : ℤ) - 2 ^ s) beta_reduce at hA hB hC rw [e2, hA] at h2 rw [hB] at h1 rw [e1, hC, hA, hB] linear_combination (2 ^ (b' + 1) * (1 - 2 ^ (a' + 1))) * h1 + (1 - 2 ^ (b' + 1)) * h2targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 193–220 at
b16ab29fc51b↗numerator_integral.residue_integral.hG.s1caseLeaves
∀ (a b : ℕ), a + b = (0 : ℕ) → ∃ (z : ℤ), ∏ s ∈ Finset.Icc (1 : ℕ) (a + b), ((1 : ℤ) - (2 : ℤ) ^ s) = z * ((∏ s ∈ Finset.Icc (1 : ℕ) a, ((1 : ℤ) - (2 : ℤ) ^ s)) * ∏ s ∈ Finset.Icc (1 : ℕ) b, ((1 : ℤ) - (2 : ℤ) ^ s)).Uses library
Nat.zeroZero, the smallest natural number. ,Exists.introExistential introduction. .Lean, lines 196–199
| zero => intro a b h obtain ⟨rfl, rfl⟩ : a = 0 ∧ b = 0 := by omega exact ⟨1, by simp⟩targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 196–199 at
b16ab29fc51b↗numerator_integral.residue_integral.hG.s1.s1obtaina = (0 : ℕ) ∧ b = (0 : ℕ)routine: omegaLeaves
∃ (z : ℤ), ∏ s ∈ Finset.Icc (1 : ℕ) ((0 : ℕ) + (0 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s) = z * ((∏ s ∈ Finset.Icc (1 : ℕ) (0 : ℕ), ((1 : ℤ) - (2 : ℤ) ^ s)) * ∏ s ∈ Finset.Icc (1 : ℕ) (0 : ℕ), ((1 : ℤ) - (2 : ℤ) ^ s)), withh : (0 : ℕ) + (0 : ℕ) = (0 : ℕ).Lean, line 198
obtain ⟨rfl, rfl⟩ : a = 0 ∧ b = 0 := by omega
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 198 at
b16ab29fc51b↗
numerator_integral.residue_integral.hG.s2caseLeaves
∀ (a b : ℕ), a + b = N + (1 : ℕ) → ∃ (z : ℤ), ∏ s ∈ Finset.Icc (1 : ℕ) (a + b), ((1 : ℤ) - (2 : ℤ) ^ s) = z * ((∏ s ∈ Finset.Icc (1 : ℕ) a, ((1 : ℤ) - (2 : ℤ) ^ s)) * ∏ s ∈ Finset.Icc (1 : ℕ) b, ((1 : ℤ) - (2 : ℤ) ^ s)), withN : ℕ,ih : ∀ (a b : ℕ), a + b = N → ∃ (z : ℤ), ∏ s ∈ Finset.Icc (1 : ℕ) (a + b), ((1 : ℤ) - (2 : ℤ) ^ s) = z * ((∏ s ∈ Finset.Icc (1 : ℕ) a, ((1 : ℤ) - (2 : ℤ) ^ s)) * ∏ s ∈ Finset.Icc (1 : ℕ) b, ((1 : ℤ) - (2 : ℤ) ^ s)).Uses library
Nat.succThe successor of a natural numbern. ,Nat.eq_zero_or_pos,Exists.introExistential introduction. .Lean, lines 200–220
| succ N ih => intro a b h rcases Nat.eq_zero_or_pos a with rfl | ha · exact ⟨1, by simp⟩ rcases Nat.eq_zero_or_pos b with rfl | hb · exact ⟨1, by simp⟩ obtain ⟨a', rfl⟩ : ∃ a', a = a' + 1 := ⟨a - 1, by omega⟩ obtain ⟨b', rfl⟩ : ∃ b', b = b' + 1 := ⟨b - 1, by omega⟩ obtain ⟨z1, h1⟩ := ih a' (b' + 1) (by omega) obtain ⟨z2, h2⟩ := ih (a' + 1) b' (by omega) refine ⟨2 ^ (b' + 1) * z1 + z2, ?_⟩ have e1 : a' + 1 + (b' + 1) = (a' + (b' + 1)) + 1 := by omega have e2 : a' + 1 + b' = a' + (b' + 1) := by omega have hA := Finset.prod_Icc_succ_top (show 1 ≤ a' + 1 by omega) (fun s => (1 : ℤ) - 2 ^ s) have hB := Finset.prod_Icc_succ_top (show 1 ≤ b' + 1 by omega) (fun s => (1 : ℤ) - 2 ^ s) have hC := Finset.prod_Icc_succ_top (show 1 ≤ a' + (b' + 1) + 1 by omega) (fun s => (1 : ℤ) - 2 ^ s) beta_reduce at hA hB hC rw [e2, hA] at h2 rw [hB] at h1 rw [e1, hC, hA, hB] linear_combination (2 ^ (b' + 1) * (1 - 2 ^ (a' + 1))) * h1 + (1 - 2 ^ (b' + 1)) * h2targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 200–220 at
b16ab29fc51b↗numerator_integral.residue_integral.hG.s2.s1caseLeaves
∃ (z : ℤ), ∏ s ∈ Finset.Icc (1 : ℕ) ((0 : ℕ) + b), ((1 : ℤ) - (2 : ℤ) ^ s) = z * ((∏ s ∈ Finset.Icc (1 : ℕ) (0 : ℕ), ((1 : ℤ) - (2 : ℤ) ^ s)) * ∏ s ∈ Finset.Icc (1 : ℕ) b, ((1 : ℤ) - (2 : ℤ) ^ s)).Uses library
Exists.introExistential introduction. .Lean, line 203
· exact ⟨1, by simp⟩
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 203 at
b16ab29fc51b↗numerator_integral.residue_integral.hG.s2.s2caseLeaves
∃ (z : ℤ), ∏ s ∈ Finset.Icc (1 : ℕ) (a + (0 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s) = z * ((∏ s ∈ Finset.Icc (1 : ℕ) a, ((1 : ℤ) - (2 : ℤ) ^ s)) * ∏ s ∈ Finset.Icc (1 : ℕ) (0 : ℕ), ((1 : ℤ) - (2 : ℤ) ^ s)).Uses library
Exists.introExistential introduction. .Lean, line 205
· exact ⟨1, by simp⟩
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 205 at
b16ab29fc51b↗numerator_integral.residue_integral.hG.s2.s3obtain∃ (a' : ℕ), a = a' + (1 : ℕ)Leaves
∃ (z : ℤ), ∏ s ∈ Finset.Icc (1 : ℕ) (a' + (1 : ℕ) + b), ((1 : ℤ) - (2 : ℤ) ^ s) = z * ((∏ s ∈ Finset.Icc (1 : ℕ) (a' + (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s)) * ∏ s ∈ Finset.Icc (1 : ℕ) b, ((1 : ℤ) - (2 : ℤ) ^ s)), witha' : ℕ,h : a' + (1 : ℕ) + b = N + (1 : ℕ),ha : a' + (1 : ℕ) > (0 : ℕ).Uses library
Exists.introExistential introduction. .Lean, line 206
obtain ⟨a', rfl⟩ : ∃ a', a = a' + 1 := ⟨a - 1, by omega⟩
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 206 at
b16ab29fc51b↗numerator_integral.residue_integral.hG.s2.s4obtain∃ (b' : ℕ), b = b' + (1 : ℕ)Leaves
∃ (z : ℤ), ∏ s ∈ Finset.Icc (1 : ℕ) (a' + (1 : ℕ) + (b' + (1 : ℕ))), ((1 : ℤ) - (2 : ℤ) ^ s) = z * ((∏ s ∈ Finset.Icc (1 : ℕ) (a' + (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s)) * ∏ s ∈ Finset.Icc (1 : ℕ) (b' + (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s)), withb' : ℕ,hb : b' + (1 : ℕ) > (0 : ℕ),h : a' + (1 : ℕ) + (b' + (1 : ℕ)) = N + (1 : ℕ).Uses library
Exists.introExistential introduction. .Lean, line 207
obtain ⟨b', rfl⟩ : ∃ b', b = b' + 1 := ⟨b - 1, by omega⟩
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 207 at
b16ab29fc51b↗numerator_integral.residue_integral.hG.s2.s5obtain∃ (z : ℤ), ∏ s ∈ Finset.Icc (1 : ℕ) (a' + (b' + (1 : ℕ))), ((1 : ℤ) - (2 : ℤ) ^ s) = z * ((∏ s ∈ Finset.Icc (1 : ℕ) a', ((1 : ℤ) - (2 : ℤ) ^ s)) * ∏ s ∈ Finset.Icc (1 : ℕ) (b' + (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s))Leaves
∃ (z : ℤ), ∏ s ∈ Finset.Icc (1 : ℕ) (a' + (1 : ℕ) + (b' + (1 : ℕ))), ((1 : ℤ) - (2 : ℤ) ^ s) = z * ((∏ s ∈ Finset.Icc (1 : ℕ) (a' + (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s)) * ∏ s ∈ Finset.Icc (1 : ℕ) (b' + (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s)), withz1 : ℤ,h1 : ∏ s ∈ Finset.Icc (1 : ℕ) (a' + (b' + (1 : ℕ))), ((1 : ℤ) - (2 : ℤ) ^ s) = z1 * ((∏ s ∈ Finset.Icc (1 : ℕ) a', ((1 : ℤ) - (2 : ℤ) ^ s)) * ∏ s ∈ Finset.Icc (1 : ℕ) (b' + (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s)).Lean, line 208
obtain ⟨z1, h1⟩ := ih a' (b' + 1) (by omega)
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 208 at
b16ab29fc51b↗numerator_integral.residue_integral.hG.s2.s6obtain∃ (z : ℤ), ∏ s ∈ Finset.Icc (1 : ℕ) (a' + (1 : ℕ) + b'), ((1 : ℤ) - (2 : ℤ) ^ s) = z * ((∏ s ∈ Finset.Icc (1 : ℕ) (a' + (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s)) * ∏ s ∈ Finset.Icc (1 : ℕ) b', ((1 : ℤ) - (2 : ℤ) ^ s))Leaves
∃ (z : ℤ), ∏ s ∈ Finset.Icc (1 : ℕ) (a' + (1 : ℕ) + (b' + (1 : ℕ))), ((1 : ℤ) - (2 : ℤ) ^ s) = z * ((∏ s ∈ Finset.Icc (1 : ℕ) (a' + (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s)) * ∏ s ∈ Finset.Icc (1 : ℕ) (b' + (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s)), withz2 : ℤ,h2 : ∏ s ∈ Finset.Icc (1 : ℕ) (a' + (1 : ℕ) + b'), ((1 : ℤ) - (2 : ℤ) ^ s) = z2 * ((∏ s ∈ Finset.Icc (1 : ℕ) (a' + (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s)) * ∏ s ∈ Finset.Icc (1 : ℕ) b', ((1 : ℤ) - (2 : ℤ) ^ s)).Lean, line 209
obtain ⟨z2, h2⟩ := ih (a' + 1) b' (by omega)
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 209 at
b16ab29fc51b↗numerator_integral.residue_integral.hG.s2.e1havea' + (1 : ℕ) + (b' + (1 : ℕ)) = a' + (b' + (1 : ℕ)) + (1 : ℕ)routine: omegaLeaves
∏ s ∈ Finset.Icc (1 : ℕ) (a' + (1 : ℕ) + (b' + (1 : ℕ))), ((1 : ℤ) - (2 : ℤ) ^ s) = ((2 : ℤ) ^ (b' + (1 : ℕ)) * z1 + z2) * ((∏ s ∈ Finset.Icc (1 : ℕ) (a' + (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s)) * ∏ s ∈ Finset.Icc (1 : ℕ) (b' + (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s)), withe1 : a' + (1 : ℕ) + (b' + (1 : ℕ)) = a' + (b' + (1 : ℕ)) + (1 : ℕ).Lean, line 211
have e1 : a' + 1 + (b' + 1) = (a' + (b' + 1)) + 1 := by omega
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 211 at
b16ab29fc51b↗numerator_integral.residue_integral.hG.s2.e2havea' + (1 : ℕ) + b' = a' + (b' + (1 : ℕ))routine: omegaLeaves
∏ s ∈ Finset.Icc (1 : ℕ) (a' + (1 : ℕ) + (b' + (1 : ℕ))), ((1 : ℤ) - (2 : ℤ) ^ s) = ((2 : ℤ) ^ (b' + (1 : ℕ)) * z1 + z2) * ((∏ s ∈ Finset.Icc (1 : ℕ) (a' + (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s)) * ∏ s ∈ Finset.Icc (1 : ℕ) (b' + (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s)), withe2 : a' + (1 : ℕ) + b' = a' + (b' + (1 : ℕ)).Lean, line 212
have e2 : a' + 1 + b' = a' + (b' + 1) := by omega
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 212 at
b16ab29fc51b↗numerator_integral.residue_integral.hG.s2.hAhave∏ k ∈ Finset.Icc (1 : ℕ) (a' + (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ k) = (∏ k ∈ Finset.Icc (1 : ℕ) a', ((1 : ℤ) - (2 : ℤ) ^ k)) * ((1 : ℤ) - (2 : ℤ) ^ (a' + (1 : ℕ)))Leaves
∏ s ∈ Finset.Icc (1 : ℕ) (a' + (1 : ℕ) + (b' + (1 : ℕ))), ((1 : ℤ) - (2 : ℤ) ^ s) = ((2 : ℤ) ^ (b' + (1 : ℕ)) * z1 + z2) * ((∏ s ∈ Finset.Icc (1 : ℕ) (a' + (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s)) * ∏ s ∈ Finset.Icc (1 : ℕ) (b' + (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s)), withhA : ∏ k ∈ Finset.Icc (1 : ℕ) (a' + (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ k) = (∏ k ∈ Finset.Icc (1 : ℕ) a', ((1 : ℤ) - (2 : ℤ) ^ k)) * ((1 : ℤ) - (2 : ℤ) ^ (a' + (1 : ℕ))).Uses library
Finset.prod_Icc_succ_top.Lean, line 213
have hA := Finset.prod_Icc_succ_top (show 1 ≤ a' + 1 by omega) (fun s => (1 : ℤ) - 2 ^ s)
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 213 at
b16ab29fc51b↗numerator_integral.residue_integral.hG.s2.hBhave∏ k ∈ Finset.Icc (1 : ℕ) (b' + (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ k) = (∏ k ∈ Finset.Icc (1 : ℕ) b', ((1 : ℤ) - (2 : ℤ) ^ k)) * ((1 : ℤ) - (2 : ℤ) ^ (b' + (1 : ℕ)))Leaves
∏ s ∈ Finset.Icc (1 : ℕ) (a' + (1 : ℕ) + (b' + (1 : ℕ))), ((1 : ℤ) - (2 : ℤ) ^ s) = ((2 : ℤ) ^ (b' + (1 : ℕ)) * z1 + z2) * ((∏ s ∈ Finset.Icc (1 : ℕ) (a' + (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s)) * ∏ s ∈ Finset.Icc (1 : ℕ) (b' + (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s)), withhB : ∏ k ∈ Finset.Icc (1 : ℕ) (b' + (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ k) = (∏ k ∈ Finset.Icc (1 : ℕ) b', ((1 : ℤ) - (2 : ℤ) ^ k)) * ((1 : ℤ) - (2 : ℤ) ^ (b' + (1 : ℕ))).Uses library
Finset.prod_Icc_succ_top.Lean, line 214
have hB := Finset.prod_Icc_succ_top (show 1 ≤ b' + 1 by omega) (fun s => (1 : ℤ) - 2 ^ s)
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 214 at
b16ab29fc51b↗numerator_integral.residue_integral.hG.s2.hChave∏ k ∈ Finset.Icc (1 : ℕ) (a' + (b' + (1 : ℕ)) + (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ k) = (∏ k ∈ Finset.Icc (1 : ℕ) (a' + (b' + (1 : ℕ))), ((1 : ℤ) - (2 : ℤ) ^ k)) * ((1 : ℤ) - (2 : ℤ) ^ (a' + (b' + (1 : ℕ)) + (1 : ℕ)))Leaves
∏ s ∈ Finset.Icc (1 : ℕ) (a' + (1 : ℕ) + (b' + (1 : ℕ))), ((1 : ℤ) - (2 : ℤ) ^ s) = ((2 : ℤ) ^ (b' + (1 : ℕ)) * z1 + z2) * ((∏ s ∈ Finset.Icc (1 : ℕ) (a' + (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s)) * ∏ s ∈ Finset.Icc (1 : ℕ) (b' + (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s)), withhC : ∏ k ∈ Finset.Icc (1 : ℕ) (a' + (b' + (1 : ℕ)) + (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ k) = (∏ k ∈ Finset.Icc (1 : ℕ) (a' + (b' + (1 : ℕ))), ((1 : ℤ) - (2 : ℤ) ^ k)) * ((1 : ℤ) - (2 : ℤ) ^ (a' + (b' + (1 : ℕ)) + (1 : ℕ))).Uses library
Finset.prod_Icc_succ_top.Lean, line 215
have hC := Finset.prod_Icc_succ_top (show 1 ≤ a' + (b' + 1) + 1 by omega) (fun s => (1 : ℤ) - 2 ^ s)
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 215 at
b16ab29fc51b↗
numerator_integral.residue_integral.hNhave∀ (m d : ℕ), (∏ s ∈ Finset.Icc (1 : ℕ) d, ((1 : ℤ) - (2 : ℤ) ^ s)) * ∏ t ∈ Finset.Icc (1 : ℕ) m, ((1 : ℤ) - (2 : ℤ) ^ (t + d)) = ∏ s ∈ Finset.Icc (1 : ℕ) (d + m), ((1 : ℤ) - (2 : ℤ) ^ s)Leaves
∀ (n i : ℕ), (1 : ℕ) ≤ i → i ≤ n → ∃ (z : ℤ), (↑z : ℝ) = ∑ k ∈ Finset.Icc i n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))), withhN : ∀ (m d : ℕ), (∏ s ∈ Finset.Icc (1 : ℕ) d, ((1 : ℤ) - (2 : ℤ) ^ s)) * ∏ t ∈ Finset.Icc (1 : ℕ) m, ((1 : ℤ) - (2 : ℤ) ^ (t + d)) = ∏ s ∈ Finset.Icc (1 : ℕ) (d + m), ((1 : ℤ) - (2 : ℤ) ^ s).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. .Lean, lines 221–227
have hN : ∀ m d : ℕ, (∏ s ∈ Finset.Icc 1 d, ((1 : ℤ) - 2 ^ s)) * (∏ t ∈ Finset.Icc 1 m, ((1 : ℤ) - 2 ^ (t + d))) = ∏ s ∈ Finset.Icc 1 (d + m), ((1 : ℤ) - 2 ^ s) := by intro m d induction m with | zero => simp | succ m ih => rw [Finset.prod_Icc_succ_top (by omega), show d + (m + 1) = (d + m) + 1 by omega, Finset.prod_Icc_succ_top (by omega), ← mul_assoc, ih, show m + 1 + d = d + m + 1 by omega]targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 221–227 at
b16ab29fc51b↗numerator_integral.residue_integral.hN.s1case routine: simpLeaves
(∏ s ∈ Finset.Icc (1 : ℕ) d, ((1 : ℤ) - (2 : ℤ) ^ s)) * ∏ t ∈ Finset.Icc (1 : ℕ) (0 : ℕ), ((1 : ℤ) - (2 : ℤ) ^ (t + d)) = ∏ s ∈ Finset.Icc (1 : ℕ) (d + (0 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s).Uses library
Nat.zeroZero, the smallest natural number. .Lean, line 224
| zero => simp
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 224 at
b16ab29fc51b↗numerator_integral.residue_integral.hN.s2caseLeaves
(∏ s ∈ Finset.Icc (1 : ℕ) d, ((1 : ℤ) - (2 : ℤ) ^ s)) * ∏ t ∈ Finset.Icc (1 : ℕ) (m + (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ (t + d)) = ∏ s ∈ Finset.Icc (1 : ℕ) (d + (m + (1 : ℕ))), ((1 : ℤ) - (2 : ℤ) ^ s), withm : ℕ,ih : (∏ s ∈ Finset.Icc (1 : ℕ) d, ((1 : ℤ) - (2 : ℤ) ^ s)) * ∏ t ∈ Finset.Icc (1 : ℕ) m, ((1 : ℤ) - (2 : ℤ) ^ (t + d)) = ∏ s ∈ Finset.Icc (1 : ℕ) (d + m), ((1 : ℤ) - (2 : ℤ) ^ s).Uses library
Nat.succThe successor of a natural numbern. ,Finset.prod_Icc_succ_top,mul_assoc.Lean, lines 225–227
| succ m ih => rw [Finset.prod_Icc_succ_top (by omega), show d + (m + 1) = (d + m) + 1 by omega, Finset.prod_Icc_succ_top (by omega), ← mul_assoc, ih, show m + 1 + d = d + m + 1 by omega]targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 225–227 at
b16ab29fc51b↗
numerator_integral.residue_integral.hsumZhave∀ (s : Finset ℕ) (g : ℕ → ℝ), (∀ i ∈ s, ∃ (z : ℤ), (↑z : ℝ) = g i) → ∃ (z : ℤ), (↑z : ℝ) = ∑ i ∈ s, g iLeaves
∀ (n i : ℕ), (1 : ℕ) ≤ i → i ≤ n → ∃ (z : ℤ), (↑z : ℝ) = ∑ k ∈ Finset.Icc i n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))), withhsumZ : ∀ (s : Finset ℕ) (g : ℕ → ℝ), (∀ i ∈ s, ∃ (z : ℤ), (↑z : ℝ) = g i) → ∃ (z : ℤ), (↑z : ℝ) = ∑ i ∈ s, g i.Uses library
FinsetFinset αis the type of finite sets of elements ofα. ,Finset.induction_onTo prove a proposition about an arbitraryFinset α, it suffices to prove it for the emptyFinset, and to show that if it holds for someFinset α, then it holds for theFinsetobtained by inserting a new element. .Lean, lines 228–236
have hsumZ : ∀ (s : Finset ℕ) (g : ℕ → ℝ), (∀ i ∈ s, ∃ z : ℤ, (z : ℝ) = g i) → ∃ z : ℤ, (z : ℝ) = ∑ i ∈ s, g i := by intro s g induction s using Finset.induction_on with | empty => intro _; exact ⟨0, by simp⟩ | insert a s ha ih => intro h obtain ⟨za, hza⟩ := h a (Finset.mem_insert_self a s) obtain ⟨zs, hzs⟩ := ih (fun i hi => h i (Finset.mem_insert_of_mem hi)) exact ⟨za + zs, by rw [Finset.sum_insert ha]; push_cast; rw [hza, hzs]⟩targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 228–236 at
b16ab29fc51b↗numerator_integral.residue_integral.hsumZ.s1case printed form did not read back: shown as its Lean lines only| empty => intro _; exact ⟨0, by simp⟩
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 231 at
b16ab29fc51b↗numerator_integral.residue_integral.hsumZ.s2caseLeaves
(∀ i ∈ insert a s, ∃ (z : ℤ), (↑z : ℝ) = g i) → ∃ (z : ℤ), (↑z : ℝ) = ∑ i ∈ insert a s, g i, witha : ℕ,s : Finset ℕ,ha : a ∉ s,ih : (∀ i ∈ s, ∃ (z : ℤ), (↑z : ℝ) = g i) → ∃ (z : ℤ), (↑z : ℝ) = ∑ i ∈ s, g i.Uses library
Exists.introExistential introduction. ,Finset.sum_insert.Lean, lines 232–236
| insert a s ha ih => intro h obtain ⟨za, hza⟩ := h a (Finset.mem_insert_self a s) obtain ⟨zs, hzs⟩ := ih (fun i hi => h i (Finset.mem_insert_of_mem hi)) exact ⟨za + zs, by rw [Finset.sum_insert ha]; push_cast; rw [hza, hzs]⟩targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 232–236 at
b16ab29fc51b↗numerator_integral.residue_integral.hsumZ.s2.s1obtain∃ (z : ℤ), (↑z : ℝ) = g aLeaves
∃ (z : ℤ), (↑z : ℝ) = ∑ i ∈ insert a s, g i, withza : ℤ,hza : (↑za : ℝ) = g a.Uses library
Finset.mem_insert_self.Lean, line 234
obtain ⟨za, hza⟩ := h a (Finset.mem_insert_self a s)
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 234 at
b16ab29fc51b↗numerator_integral.residue_integral.hsumZ.s2.s2obtain∃ (z : ℤ), (↑z : ℝ) = ∑ i ∈ s, g iLeaves
∃ (z : ℤ), (↑z : ℝ) = ∑ i ∈ insert a s, g i, withzs : ℤ,hzs : (↑zs : ℝ) = ∑ i ∈ s, g i.Uses library
Finset.mem_insert_of_mem.Lean, line 235
obtain ⟨zs, hzs⟩ := ih (fun i hi => h i (Finset.mem_insert_of_mem hi))
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 235 at
b16ab29fc51b↗
numerator_integral.residue_integral.hk'havei ≤ k ∧ k ≤ nLeaves
∃ (z : ℤ), (↑z : ℝ) = (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))), withhk' : i ≤ k ∧ k ≤ n.Uses library
Finset.mem_Icc.Lean, line 239
have hk' := Finset.mem_Icc.mp hk
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 239 at
b16ab29fc51b↗numerator_integral.residue_integral.s6obtain∃ (d : ℕ), k = i + dLeaves
∃ (z : ℤ), (↑z : ℝ) = (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + (i + d)))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase (i + d), ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑(i + d) : ℤ))), withd : ℕ,hk : i + d ∈ Finset.Icc i n,hk' : i ≤ i + d ∧ i + d ≤ n.Uses library
Exists.introExistential introduction. .Lean, line 240
obtain ⟨d, rfl⟩ : ∃ d, k = i + d := ⟨k - i, by omega⟩
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 240 at
b16ab29fc51b↗numerator_integral.residue_integral.hNrhave∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + (i + d))) = (↑(∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ (t + d))) : ℝ)Leaves
∃ (z : ℤ), (↑z : ℝ) = (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + (i + d)))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase (i + d), ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑(i + d) : ℤ))), withhNr : ∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + (i + d))) = (↑(∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ (t + d))) : ℝ).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.prod_congr,rflrfl : a = ais the unique constructor of the equality type. ,pow_add,mul_assoc,inv_mul_cancel₀,one_mul.Lean, lines 242–246
have hNr : ∏ t ∈ Finset.Icc 1 (n - 1), (1 - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + (i + d))) = ((∏ t ∈ Finset.Icc 1 (n - 1), ((1 : ℤ) - 2 ^ (t + d)) : ℤ) : ℝ) := by push_cast refine Finset.prod_congr rfl (fun t _ => ?_) have h2i : (2 : ℝ) ^ i ≠ 0 := by positivity rw [show t + (i + d) = i + (t + d) by omega, pow_add, ← mul_assoc, inv_mul_cancel₀ h2i, one_mul]targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 242–246 at
b16ab29fc51b↗numerator_integral.residue_integral.hNr.h2ihave(2 : ℝ) ^ i ≠ (0 : ℝ)routine: positivityLeaves
(1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + (i + d)) = (1 : ℝ) - (2 : ℝ) ^ (t + d), withh2i : (2 : ℝ) ^ i ≠ (0 : ℝ).Lean, line 245
have h2i : (2 : ℝ) ^ i ≠ 0 := by positivity
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 245 at
b16ab29fc51b↗
numerator_integral.residue_integral.hsethave(Finset.Icc (1 : ℕ) n).erase (i + d) = Finset.Icc (1 : ℕ) (i + d - (1 : ℕ)) ∪ Finset.Icc (i + d + (1 : ℕ)) nLeaves
∃ (z : ℤ), (↑z : ℝ) = (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + (i + d)))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase (i + d), ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑(i + d) : ℤ))), withhset : (Finset.Icc (1 : ℕ) n).erase (i + d) = Finset.Icc (1 : ℕ) (i + d - (1 : ℕ)) ∪ Finset.Icc (i + d + (1 : ℕ)) n.Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.mem_erase,Finset.mem_Icc,Finset.mem_union.Lean, lines 248–251
have hset : (Finset.Icc 1 n).erase (i + d) = Finset.Icc 1 (i + d - 1) ∪ Finset.Icc (i + d + 1) n := by ext l simp only [Finset.mem_erase, Finset.mem_Icc, Finset.mem_union] omegatargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 248–251 at
b16ab29fc51b↗numerator_integral.residue_integral.hdisjhaveDisjoint (Finset.Icc (1 : ℕ) (i + d - (1 : ℕ))) (Finset.Icc (i + d + (1 : ℕ)) n)Leaves
∃ (z : ℤ), (↑z : ℝ) = (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + (i + d)))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase (i + d), ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑(i + d) : ℤ))), withhdisj : Disjoint (Finset.Icc (1 : ℕ) (i + d - (1 : ℕ))) (Finset.Icc (i + d + (1 : ℕ)) n).Uses library
DisjointTwo elements of a lattice are disjoint if their inf is the bottom element. ,Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.disjoint_left,Finset.mem_Icc.Lean, lines 252–256
have hdisj : Disjoint (Finset.Icc 1 (i + d - 1)) (Finset.Icc (i + d + 1) n) := by rw [Finset.disjoint_left] intro l h1 h2 simp only [Finset.mem_Icc] at h1 h2 omegatargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 252–256 at
b16ab29fc51b↗numerator_integral.residue_integral.hD1have(∏ l ∈ Finset.Icc (1 : ℕ) (i + d - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑(i + d) : ℤ)))) * (↑(∏ s ∈ Finset.Icc (1 : ℕ) (i + d - (1 : ℕ)), -(2 : ℤ) ^ s) : ℝ) = (↑(∏ s ∈ Finset.Icc (1 : ℕ) (i + d - (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s)) : ℝ)Leaves
∃ (z : ℤ), (↑z : ℝ) = (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + (i + d)))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase (i + d), ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑(i + d) : ℤ))), withhD1 : (∏ l ∈ Finset.Icc (1 : ℕ) (i + d - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑(i + d) : ℤ)))) * (↑(∏ s ∈ Finset.Icc (1 : ℕ) (i + d - (1 : ℕ)), -(2 : ℤ) ^ s) : ℝ) = (↑(∏ s ∈ Finset.Icc (1 : ℕ) (i + d - (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s)) : ℝ).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.prod_mul_distrib,Finset.prod_congr,rflrfl : a = ais the unique constructor of the equality type. .Lean, lines 257–276
have hD1 : (∏ l ∈ Finset.Icc 1 (i + d - 1), (1 - (2 : ℝ) ^ ((l : ℤ) - ((i + d : ℕ) : ℤ)))) * ((∏ s ∈ Finset.Icc 1 (i + d - 1), (-(2 : ℤ) ^ s) : ℤ) : ℝ) = ((∏ s ∈ Finset.Icc 1 (i + d - 1), ((1 : ℤ) - 2 ^ s) : ℤ) : ℝ) := by have hrefl : ∏ l ∈ Finset.Icc 1 (i + d - 1), (1 - (2 : ℝ) ^ ((l : ℤ) - ((i + d : ℕ) : ℤ))) = ∏ s ∈ Finset.Icc 1 (i + d - 1), (1 - ((2 : ℝ) ^ s)⁻¹) := by refine Finset.prod_nbij' (fun l => i + d - l) (fun s => i + d - s) ?_ ?_ ?_ ?_ ?_ · intro l hl; simp only [Finset.mem_Icc] at hl ⊢; omega · intro l hl; simp only [Finset.mem_Icc] at hl ⊢; omega · intro l hl; simp only [Finset.mem_Icc] at hl; omega · intro l hl; simp only [Finset.mem_Icc] at hl; omega · intro l hl simp only [Finset.mem_Icc] at hl rw [← zpow_natCast, ← zpow_neg] congr 2 push_cast [Nat.cast_sub (show l ≤ i + d by omega)] ring rw [hrefl] push_cast rw [← Finset.prod_mul_distrib] refine Finset.prod_congr rfl (fun s _ => ?_) have h2s : (2 : ℝ) ^ s ≠ 0 := by positivity field_simp ringtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 257–276 at
b16ab29fc51b↗numerator_integral.residue_integral.hD1.hreflhave∏ l ∈ Finset.Icc (1 : ℕ) (i + d - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑(i + d) : ℤ))) = ∏ s ∈ Finset.Icc (1 : ℕ) (i + d - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ s)⁻¹)Leaves
(∏ l ∈ Finset.Icc (1 : ℕ) (i + d - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑(i + d) : ℤ)))) * (↑(∏ s ∈ Finset.Icc (1 : ℕ) (i + d - (1 : ℕ)), -(2 : ℤ) ^ s) : ℝ) = (↑(∏ s ∈ Finset.Icc (1 : ℕ) (i + d - (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s)) : ℝ), withhrefl : ∏ l ∈ Finset.Icc (1 : ℕ) (i + d - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑(i + d) : ℤ))) = ∏ s ∈ Finset.Icc (1 : ℕ) (i + d - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ s)⁻¹).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.prod_nbij'Reorder a product. .Lean, lines 258–269
have hrefl : ∏ l ∈ Finset.Icc 1 (i + d - 1), (1 - (2 : ℝ) ^ ((l : ℤ) - ((i + d : ℕ) : ℤ))) = ∏ s ∈ Finset.Icc 1 (i + d - 1), (1 - ((2 : ℝ) ^ s)⁻¹) := by refine Finset.prod_nbij' (fun l => i + d - l) (fun s => i + d - s) ?_ ?_ ?_ ?_ ?_ · intro l hl; simp only [Finset.mem_Icc] at hl ⊢; omega · intro l hl; simp only [Finset.mem_Icc] at hl ⊢; omega · intro l hl; simp only [Finset.mem_Icc] at hl; omega · intro l hl; simp only [Finset.mem_Icc] at hl; omega · intro l hl simp only [Finset.mem_Icc] at hl rw [← zpow_natCast, ← zpow_neg] congr 2 push_cast [Nat.cast_sub (show l ≤ i + d by omega)] ringtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 258–269 at
b16ab29fc51b↗numerator_integral.residue_integral.hD1.hrefl.s1caseLeaves
∀ a ∈ Finset.Icc (1 : ℕ) (i + d - (1 : ℕ)), i + d - a ∈ Finset.Icc (1 : ℕ) (i + d - (1 : ℕ)).Uses library
Finset.mem_Icc.Lean, line 260
· intro l hl; simp only [Finset.mem_Icc] at hl ⊢; omega
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 260 at
b16ab29fc51b↗numerator_integral.residue_integral.hD1.hrefl.s2caseLeaves
∀ a ∈ Finset.Icc (1 : ℕ) (i + d - (1 : ℕ)), i + d - a ∈ Finset.Icc (1 : ℕ) (i + d - (1 : ℕ)).Uses library
Finset.mem_Icc.Lean, line 261
· intro l hl; simp only [Finset.mem_Icc] at hl ⊢; omega
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 261 at
b16ab29fc51b↗numerator_integral.residue_integral.hD1.hrefl.s3caseLeaves
∀ a ∈ Finset.Icc (1 : ℕ) (i + d - (1 : ℕ)), i + d - (i + d - a) = a.Uses library
Finset.mem_Icc.Lean, line 262
· intro l hl; simp only [Finset.mem_Icc] at hl; omega
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 262 at
b16ab29fc51b↗numerator_integral.residue_integral.hD1.hrefl.s4caseLeaves
∀ a ∈ Finset.Icc (1 : ℕ) (i + d - (1 : ℕ)), i + d - (i + d - a) = a.Uses library
Finset.mem_Icc.Lean, line 263
· intro l hl; simp only [Finset.mem_Icc] at hl; omega
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 263 at
b16ab29fc51b↗numerator_integral.residue_integral.hD1.hrefl.s5caseLeaves
∀ a ∈ Finset.Icc (1 : ℕ) (i + d - (1 : ℕ)), (1 : ℝ) - (2 : ℝ) ^ ((↑a : ℤ) - (↑(i + d) : ℤ)) = (1 : ℝ) - ((2 : ℝ) ^ (i + d - a))⁻¹.Uses library
Finset.mem_Icc,zpow_natCast,zpow_neg,Nat.cast_sub.Lean, lines 264–269
· intro l hl simp only [Finset.mem_Icc] at hl rw [← zpow_natCast, ← zpow_neg] congr 2 push_cast [Nat.cast_sub (show l ≤ i + d by omega)] ringtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 264–269 at
b16ab29fc51b↗
numerator_integral.residue_integral.hD1.h2shave(2 : ℝ) ^ s ≠ (0 : ℝ)routine: positivityLeaves
((1 : ℝ) - ((2 : ℝ) ^ s)⁻¹) * -(2 : ℝ) ^ s = (1 : ℝ) - (2 : ℝ) ^ s, withh2s : (2 : ℝ) ^ s ≠ (0 : ℝ).Lean, line 274
have h2s : (2 : ℝ) ^ s ≠ 0 := by positivity
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 274 at
b16ab29fc51b↗
numerator_integral.residue_integral.hD2have∏ l ∈ Finset.Icc (i + d + (1 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑(i + d) : ℤ))) = (↑(∏ s ∈ Finset.Icc (1 : ℕ) (n - (i + d)), ((1 : ℤ) - (2 : ℤ) ^ s)) : ℝ)Leaves
∃ (z : ℤ), (↑z : ℝ) = (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + (i + d)))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase (i + d), ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑(i + d) : ℤ))), withhD2 : ∏ l ∈ Finset.Icc (i + d + (1 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑(i + d) : ℤ))) = (↑(∏ s ∈ Finset.Icc (1 : ℕ) (n - (i + d)), ((1 : ℤ) - (2 : ℤ) ^ s)) : ℝ).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.prod_nbij'Reorder a product. .Lean, lines 277–289
have hD2 : ∏ l ∈ Finset.Icc (i + d + 1) n, (1 - (2 : ℝ) ^ ((l : ℤ) - ((i + d : ℕ) : ℤ))) = ((∏ s ∈ Finset.Icc 1 (n - (i + d)), ((1 : ℤ) - 2 ^ s) : ℤ) : ℝ) := by push_cast refine Finset.prod_nbij' (fun l => l - (i + d)) (fun s => s + (i + d)) ?_ ?_ ?_ ?_ ?_ · intro l hl; simp only [Finset.mem_Icc] at hl ⊢; omega · intro l hl; simp only [Finset.mem_Icc] at hl ⊢; omega · intro l hl; simp only [Finset.mem_Icc] at hl; omega · intro l hl; simp only [Finset.mem_Icc] at hl; omega · intro l hl simp only [Finset.mem_Icc] at hl rw [← zpow_natCast] congr 2 push_cast [Nat.cast_sub (show i + d ≤ l by omega)] ringtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 277–289 at
b16ab29fc51b↗numerator_integral.residue_integral.hD2.s1caseLeaves
∀ a ∈ Finset.Icc (i + d + (1 : ℕ)) n, a - (i + d) ∈ Finset.Icc (1 : ℕ) (n - (i + d)).Uses library
Finset.mem_Icc.Lean, line 280
· intro l hl; simp only [Finset.mem_Icc] at hl ⊢; omega
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 280 at
b16ab29fc51b↗numerator_integral.residue_integral.hD2.s2caseLeaves
∀ a ∈ Finset.Icc (1 : ℕ) (n - (i + d)), a + (i + d) ∈ Finset.Icc (i + d + (1 : ℕ)) n.Uses library
Finset.mem_Icc.Lean, line 281
· intro l hl; simp only [Finset.mem_Icc] at hl ⊢; omega
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 281 at
b16ab29fc51b↗numerator_integral.residue_integral.hD2.s3caseLeaves
∀ a ∈ Finset.Icc (i + d + (1 : ℕ)) n, a - (i + d) + (i + d) = a.Uses library
Finset.mem_Icc.Lean, line 282
· intro l hl; simp only [Finset.mem_Icc] at hl; omega
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 282 at
b16ab29fc51b↗numerator_integral.residue_integral.hD2.s4caseLeaves
∀ a ∈ Finset.Icc (1 : ℕ) (n - (i + d)), a + (i + d) - (i + d) = a.Uses library
Finset.mem_Icc.Lean, line 283
· intro l hl; simp only [Finset.mem_Icc] at hl; omega
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 283 at
b16ab29fc51b↗numerator_integral.residue_integral.hD2.s5caseLeaves
∀ a ∈ Finset.Icc (i + d + (1 : ℕ)) n, (1 : ℝ) - (2 : ℝ) ^ ((↑a : ℤ) - ((↑i : ℤ) + (↑d : ℤ))) = (1 : ℝ) - (2 : ℝ) ^ (a - (i + d)).Uses library
Finset.mem_Icc,zpow_natCast,Nat.cast_sub.Lean, lines 284–289
· intro l hl simp only [Finset.mem_Icc] at hl rw [← zpow_natCast] congr 2 push_cast [Nat.cast_sub (show i + d ≤ l by omega)] ringtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 284–289 at
b16ab29fc51b↗
numerator_integral.residue_integral.s12obtain∃ (z : ℤ), ∏ s ∈ Finset.Icc (1 : ℕ) (d + (n - (1 : ℕ))), ((1 : ℤ) - (2 : ℤ) ^ s) = z * ((∏ s ∈ Finset.Icc (1 : ℕ) d, ((1 : ℤ) - (2 : ℤ) ^ s)) * ∏ s ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s))Leaves
∃ (z : ℤ), (↑z : ℝ) = (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + (i + d)))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase (i + d), ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑(i + d) : ℤ))), withz1 : ℤ,hz1 : ∏ s ∈ Finset.Icc (1 : ℕ) (d + (n - (1 : ℕ))), ((1 : ℤ) - (2 : ℤ) ^ s) = z1 * ((∏ s ∈ Finset.Icc (1 : ℕ) d, ((1 : ℤ) - (2 : ℤ) ^ s)) * ∏ s ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s)).Uses library
rflrfl : a = ais the unique constructor of the equality type. .Lean, line 290
obtain ⟨z1, hz1⟩ := hG _ d (n - 1) rfl
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 290 at
b16ab29fc51b↗numerator_integral.residue_integral.s13obtain∃ (z : ℤ), ∏ s ∈ Finset.Icc (1 : ℕ) (i + d - (1 : ℕ) + (n - (i + d))), ((1 : ℤ) - (2 : ℤ) ^ s) = z * ((∏ s ∈ Finset.Icc (1 : ℕ) (i + d - (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s)) * ∏ s ∈ Finset.Icc (1 : ℕ) (n - (i + d)), ((1 : ℤ) - (2 : ℤ) ^ s))Leaves
∃ (z : ℤ), (↑z : ℝ) = (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + (i + d)))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase (i + d), ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑(i + d) : ℤ))), withz2 : ℤ,hz2 : ∏ s ∈ Finset.Icc (1 : ℕ) (i + d - (1 : ℕ) + (n - (i + d))), ((1 : ℤ) - (2 : ℤ) ^ s) = z2 * ((∏ s ∈ Finset.Icc (1 : ℕ) (i + d - (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s)) * ∏ s ∈ Finset.Icc (1 : ℕ) (n - (i + d)), ((1 : ℤ) - (2 : ℤ) ^ s)).Uses library
rflrfl : a = ais the unique constructor of the equality type. .Lean, line 291
obtain ⟨z2, hz2⟩ := hG _ (i + d - 1) (n - (i + d)) rfl
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 291 at
b16ab29fc51b↗numerator_integral.residue_integral.hNZhave∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ (t + d)) = z1 * z2 * ((∏ s ∈ Finset.Icc (1 : ℕ) (i + d - (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s)) * ∏ s ∈ Finset.Icc (1 : ℕ) (n - (i + d)), ((1 : ℤ) - (2 : ℤ) ^ s))Leaves
∃ (z : ℤ), (↑z : ℝ) = (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + (i + d)))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase (i + d), ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑(i + d) : ℤ))), withhNZ : ∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ (t + d)) = z1 * z2 * ((∏ s ∈ Finset.Icc (1 : ℕ) (i + d - (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s)) * ∏ s ∈ Finset.Icc (1 : ℕ) (n - (i + d)), ((1 : ℤ) - (2 : ℤ) ^ s)).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,mul_left_cancel₀.Lean, lines 293–296
have hNZ : (∏ t ∈ Finset.Icc 1 (n - 1), ((1 : ℤ) - 2 ^ (t + d))) = z1 * z2 * ((∏ s ∈ Finset.Icc 1 (i + d - 1), ((1 : ℤ) - 2 ^ s)) * (∏ s ∈ Finset.Icc 1 (n - (i + d)), ((1 : ℤ) - 2 ^ s))) := by apply mul_left_cancel₀ (hQne d) rw [hN (n - 1) d, hz1, hz2] ringtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 293–296 at
b16ab29fc51b↗numerator_integral.residue_integral.hNZ'have(↑(∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ (t + d))) : ℝ) = (↑z1 : ℝ) * (↑z2 : ℝ) * ((↑(∏ s ∈ Finset.Icc (1 : ℕ) (i + d - (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s)) : ℝ) * (↑(∏ s ∈ Finset.Icc (1 : ℕ) (n - (i + d)), ((1 : ℤ) - (2 : ℤ) ^ s)) : ℝ))Leaves
∃ (z : ℤ), (↑z : ℝ) = (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + (i + d)))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase (i + d), ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑(i + d) : ℤ))), withhNZ' : (↑(∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ (t + d))) : ℝ) = (↑z1 : ℝ) * (↑z2 : ℝ) * ((↑(∏ s ∈ Finset.Icc (1 : ℕ) (i + d - (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s)) : ℝ) * (↑(∏ s ∈ Finset.Icc (1 : ℕ) (n - (i + d)), ((1 : ℤ) - (2 : ℤ) ^ s)) : ℝ)).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. .Lean, lines 297–298
have hNZ' : ((∏ t ∈ Finset.Icc 1 (n - 1), ((1 : ℤ) - 2 ^ (t + d)) : ℤ) : ℝ) = (z1 : ℝ) * z2 * (((∏ s ∈ Finset.Icc 1 (i + d - 1), ((1 : ℤ) - 2 ^ s) : ℤ) : ℝ) * ((∏ s ∈ Finset.Icc 1 (n - (i + d)), ((1 : ℤ) - 2 ^ s) : ℤ) : ℝ)) := by exact_mod_cast hNZtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 297–298 at
b16ab29fc51b↗numerator_integral.residue_integral.hQ1have(↑(∏ s ∈ Finset.Icc (1 : ℕ) (i + d - (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s)) : ℝ) ≠ (0 : ℝ)Leaves
∃ (z : ℤ), (↑z : ℝ) = (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + (i + d)))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase (i + d), ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑(i + d) : ℤ))), withhQ1 : (↑(∏ s ∈ Finset.Icc (1 : ℕ) (i + d - (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s)) : ℝ) ≠ (0 : ℝ).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. .Lean, line 299
have hQ1 : ((∏ s ∈ Finset.Icc 1 (i + d - 1), ((1 : ℤ) - 2 ^ s) : ℤ) : ℝ) ≠ 0 := by exact_mod_cast hQne _
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 299 at
b16ab29fc51b↗numerator_integral.residue_integral.hQ2have(↑(∏ s ∈ Finset.Icc (1 : ℕ) (n - (i + d)), ((1 : ℤ) - (2 : ℤ) ^ s)) : ℝ) ≠ (0 : ℝ)Leaves
∃ (z : ℤ), (↑z : ℝ) = (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + (i + d)))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase (i + d), ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑(i + d) : ℤ))), withhQ2 : (↑(∏ s ∈ Finset.Icc (1 : ℕ) (n - (i + d)), ((1 : ℤ) - (2 : ℤ) ^ s)) : ℝ) ≠ (0 : ℝ).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. .Lean, line 300
have hQ2 : ((∏ s ∈ Finset.Icc 1 (n - (i + d)), ((1 : ℤ) - 2 ^ s) : ℤ) : ℝ) ≠ 0 := by exact_mod_cast hQne _
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 300 at
b16ab29fc51b↗numerator_integral.residue_integral.hDrhave(∏ l ∈ (Finset.Icc (1 : ℕ) n).erase (i + d), ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑(i + d) : ℤ)))) * (↑(∏ s ∈ Finset.Icc (1 : ℕ) (i + d - (1 : ℕ)), -(2 : ℤ) ^ s) : ℝ) = (↑(∏ s ∈ Finset.Icc (1 : ℕ) (i + d - (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s)) : ℝ) * (↑(∏ s ∈ Finset.Icc (1 : ℕ) (n - (i + d)), ((1 : ℤ) - (2 : ℤ) ^ s)) : ℝ)Leaves
∃ (z : ℤ), (↑z : ℝ) = (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + (i + d)))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase (i + d), ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑(i + d) : ℤ))), withhDr : (∏ l ∈ (Finset.Icc (1 : ℕ) n).erase (i + d), ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑(i + d) : ℤ)))) * (↑(∏ s ∈ Finset.Icc (1 : ℕ) (i + d - (1 : ℕ)), -(2 : ℤ) ^ s) : ℝ) = (↑(∏ s ∈ Finset.Icc (1 : ℕ) (i + d - (1 : ℕ)), ((1 : ℤ) - (2 : ℤ) ^ s)) : ℝ) * (↑(∏ s ∈ Finset.Icc (1 : ℕ) (n - (i + d)), ((1 : ℤ) - (2 : ℤ) ^ s)) : ℝ).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.prod_union.Lean, lines 301–303
have hDr : (∏ l ∈ (Finset.Icc 1 n).erase (i + d), (1 - (2 : ℝ) ^ ((l : ℤ) - ((i + d : ℕ) : ℤ)))) * ((∏ s ∈ Finset.Icc 1 (i + d - 1), (-(2 : ℤ) ^ s) : ℤ) : ℝ) = ((∏ s ∈ Finset.Icc 1 (i + d - 1), ((1 : ℤ) - 2 ^ s) : ℤ) : ℝ) * ((∏ s ∈ Finset.Icc 1 (n - (i + d)), ((1 : ℤ) - 2 ^ s) : ℤ) : ℝ) := by rw [hset, Finset.prod_union hdisj, hD2, ← hD1] ringtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 301–303 at
b16ab29fc51b↗numerator_integral.residue_integral.hDnehave∏ l ∈ (Finset.Icc (1 : ℕ) n).erase (i + d), ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑(i + d) : ℤ))) ≠ (0 : ℝ)Leaves
∃ (z : ℤ), (↑z : ℝ) = (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + (i + d)))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase (i + d), ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑(i + d) : ℤ))), withhDne : ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase (i + d), ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑(i + d) : ℤ))) ≠ (0 : ℝ).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,MulZeroClass.zero_mulZero is a left absorbing element for multiplication ,mul_ne_zero.Lean, lines 304–307
have hDne : (∏ l ∈ (Finset.Icc 1 n).erase (i + d), (1 - (2 : ℝ) ^ ((l : ℤ) - ((i + d : ℕ) : ℤ)))) ≠ 0 := by intro h0 rw [h0, zero_mul] at hDr exact mul_ne_zero hQ1 hQ2 hDr.symmtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 304–307 at
b16ab29fc51b↗
numerator_integral.polypart_integralhave∀ (n : ℕ), (1 : ℕ) ≤ n → ∃ (z : ℤ), (↑z : ℝ) = ((3 : ℝ) ^ n * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) n, (∑ k ∈ Finset.Icc i n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹)Leaves
∃ (a : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(a n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withpolypart_integral : ∀ (n : ℕ), (1 : ℕ) ≤ n → ∃ (z : ℤ), (↑z : ℝ) = ((3 : ℝ) ^ n * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) n, (∑ k ∈ Finset.Icc i n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.mul_sum,Finset.sum_sub_distrib,sub_mulAlias ofmul_sub_right_distrib. ,Finset.sum_congr,rflrfl : a = ais the unique constructor of the equality type. ,Finset.sum_comm,Exists.introExistential introduction. .Lean, lines 312–397
have polypart_integral : ∀ n : ℕ, 1 ≤ n → ∃ z : ℤ, (z : ℝ) = (3 : ℝ) ^ n * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, (1 - (2 : ℝ) ^ k)) * ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (∑ i ∈ Finset.Icc 1 k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹)) - (∑ i ∈ Finset.Icc 1 n, (∑ k ∈ Finset.Icc i n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹)) := by intro n hn obtain ⟨α, hα⟩ := hpoly n hn obtain ⟨D, hD⟩ : ∃ D : ℕ → ℝ, ∀ k, D k = ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))) := ⟨fun k => _, fun k => rfl⟩ have hA : ∀ (x : ℝ) (k : ℕ), ∏ t ∈ Finset.Icc 1 (n - 1), (1 - x * (2 : ℝ) ^ (t + k)) = ∑ j ∈ Finset.range n, (α j : ℝ) * (x * 2 ^ k) ^ j := by intro x k rw [← hα] refine Finset.prod_congr rfl (fun t _ => ?_) rw [pow_add]; ring simp only [← hD, hA] -- (a) one double sum have hswap : ∑ i ∈ Finset.Icc 1 n, (∑ k ∈ Finset.Icc i n, -(∑ j ∈ Finset.range n, (α j : ℝ) * (((2 : ℝ) ^ i)⁻¹ * 2 ^ k) ^ j) / D k) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = ∑ k ∈ Finset.Icc 1 n, ∑ i ∈ Finset.Icc 1 k, (-(∑ j ∈ Finset.range n, (α j : ℝ) * (((2 : ℝ) ^ i)⁻¹ * 2 ^ k) ^ j) / D k) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ := by simp only [Finset.sum_mul] refine Finset.sum_comm' (fun i k => ?_) simp only [Finset.mem_Icc] omega rw [hswap] simp only [Finset.mul_sum] rw [← Finset.sum_sub_distrib] simp only [← Finset.sum_sub_distrib, ← sub_mul] -- (b) per (k, i) have hb : ∀ (k i : ℕ), 1 ≤ i → (-(∑ j ∈ Finset.range n, (α j : ℝ) * ((8 / 3 : ℝ) * 2 ^ k) ^ j) / D k - -(∑ j ∈ Finset.range n, (α j : ℝ) * (((2 : ℝ) ^ i)⁻¹ * 2 ^ k) ^ j) / D k) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = (∑ j ∈ Finset.range n, ∑ s ∈ Finset.range j, (α j : ℝ) * ((2 : ℝ) ^ k) ^ j * ((8 / 3 : ℝ) ^ s * (((2 : ℝ) ^ i)⁻¹) ^ (j - s))) / D k := by intro k i hi have h2i : (2 : ℝ) ^ i ≠ 0 := by positivity have hne : (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i) ≠ 0 := by have : (2 : ℝ) ≤ 2 ^ i := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi intro h0 linarith have hch : (((2 : ℝ) ^ i)⁻¹ - (8 / 3 : ℝ)) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = ((2 : ℝ) ^ i)⁻¹ := by rw [show (((2 : ℝ) ^ i)⁻¹ - (8 / 3 : ℝ)) = ((2 : ℝ) ^ i)⁻¹ * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i) by field_simp, mul_assoc, mul_inv_cancel₀ hne, mul_one] have hj : ∀ j : ℕ, ((((2 : ℝ) ^ i)⁻¹) ^ j - (8 / 3 : ℝ) ^ j) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = ∑ s ∈ Finset.range j, (8 / 3 : ℝ) ^ s * (((2 : ℝ) ^ i)⁻¹) ^ (j - s) := by intro j have hg := geom_sum₂_mul (8 / 3 : ℝ) (((2 : ℝ) ^ i)⁻¹) j have hg' : (((2 : ℝ) ^ i)⁻¹) ^ j - (8 / 3 : ℝ) ^ j = (∑ s ∈ Finset.range j, (8 / 3 : ℝ) ^ s * (((2 : ℝ) ^ i)⁻¹) ^ (j - 1 - s)) * (((2 : ℝ) ^ i)⁻¹ - (8 / 3 : ℝ)) := by linear_combination hg rw [hg', mul_assoc, hch, Finset.sum_mul] refine Finset.sum_congr rfl (fun s hs => ?_) have hs' := Finset.mem_range.mp hs rw [mul_assoc, ← pow_succ, show j - 1 - s + 1 = j - s by omega] have e1 : (-(∑ j ∈ Finset.range n, (α j : ℝ) * ((8 / 3 : ℝ) * 2 ^ k) ^ j) / D k - -(∑ j ∈ Finset.range n, (α j : ℝ) * (((2 : ℝ) ^ i)⁻¹ * 2 ^ k) ^ j) / D k) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = ((∑ j ∈ Finset.range n, (α j : ℝ) * (((2 : ℝ) ^ i)⁻¹ * 2 ^ k) ^ j - ∑ j ∈ Finset.range n, (α j : ℝ) * ((8 / 3 : ℝ) * 2 ^ k) ^ j) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹) / D k := by ring rw [e1, ← Finset.sum_sub_distrib, Finset.sum_mul] congr 1 refine Finset.sum_congr rfl (fun j _ => ?_) rw [← Finset.mul_sum, ← hj j, mul_pow, mul_pow] ring -- (c) sum over i have hc : ∀ k : ℕ, ∑ i ∈ Finset.Icc 1 k, (-(∑ j ∈ Finset.range n, (α j : ℝ) * ((8 / 3 : ℝ) * 2 ^ k) ^ j) / D k - -(∑ j ∈ Finset.range n, (α j : ℝ) * (((2 : ℝ) ^ i)⁻¹ * 2 ^ k) ^ j) / D k) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = ∑ j ∈ Finset.range n, ∑ s ∈ Finset.range j, (α j : ℝ) * (8 / 3 : ℝ) ^ s * ((((2 : ℝ) ^ k) ^ j - ((2 : ℝ) ^ k) ^ s) / D k) / ((2 : ℝ) ^ (j - s) - 1) := by intro k rw [Finset.sum_congr rfl (fun i hi => hb k i (Finset.mem_Icc.mp hi).1), ← Finset.sum_div, Finset.sum_comm, Finset.sum_div] refine Finset.sum_congr rfl (fun j _ => ?_) rw [Finset.sum_comm, Finset.sum_div] refine Finset.sum_congr rfl (fun s hs => ?_) have hs' := Finset.mem_range.mp hs rw [Finset.sum_congr rfl (fun i _ => (mul_assoc _ _ _).symm), ← Finset.mul_sum, hgeo (j - s) (by omega) k] have hjs : ((2 : ℝ) ^ k) ^ j = ((2 : ℝ) ^ k) ^ s * ((2 : ℝ) ^ k) ^ (j - s) := by rw [← pow_add]; congr 1; omega have hZ : ((2 : ℝ) ^ k) ^ (j - s) * (((2 : ℝ) ^ k) ^ (j - s))⁻¹ = 1 := mul_inv_cancel₀ (by positivity) rw [hjs] linear_combination (-((α j : ℝ) * ((2 : ℝ) ^ k) ^ s * (8 / 3 : ℝ) ^ s / ((2 : ℝ) ^ (j - s) - 1) / D k)) * hZ rw [Finset.sum_congr rfl (fun k _ => hc k), Finset.sum_comm, Finset.mul_sum] refine hsumZ _ _ (fun j hj => ?_) rw [Finset.sum_comm, Finset.mul_sum] refine hsumZ _ _ (fun s hs => ?_) have hj' := Finset.mem_range.mp hj have hs' := Finset.mem_range.mp hs obtain ⟨wj, hwj⟩ := hW _ (Finset.Icc 1 n) j rfl obtain ⟨ws, hws⟩ := hW _ (Finset.Icc 1 n) s rfl obtain ⟨q, hq⟩ := hdvd n (j - s) (by omega) (by omega) have hqR : ∏ k ∈ Finset.Icc ((n + 1) / 2) n, ((1 : ℝ) - 2 ^ k) = ((2 : ℝ) ^ (j - s) - 1) * q := by exact_mod_cast hq have hB : (2 : ℝ) ^ (j - s) - 1 ≠ 0 := by have : (2 : ℝ) ≤ 2 ^ (j - s) := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ (j - s) := pow_le_pow_right₀ (by norm_num) (by omega) linarith have h3 : (3 : ℝ) ^ n = 3 ^ (n - s) * 3 ^ s := by rw [← pow_add]; congr 1; omega have h83 : (8 / 3 : ℝ) ^ s * 3 ^ s = 8 ^ s := by rw [← mul_pow]; norm_num refine ⟨3 ^ (n - s) * 8 ^ s * q * α j * (wj - ws), ?_⟩ simp only [← hD] at hwj hws push_cast rw [hwj, hws, hqR, h3, ← h83, ← Finset.sum_sub_distrib] rw [Finset.mul_sum, Finset.mul_sum] refine Finset.sum_congr rfl (fun k _ => ?_) field_simptargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 312–397 at
b16ab29fc51b↗numerator_integral.polypart_integral.s1obtain∃ (α : ℕ → ℤ), ∀ (y : ℝ), ∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ t * y) = ∑ j ∈ Finset.range n, (↑(α j) : ℝ) * y ^ jLeaves
∃ (z : ℤ), (↑z : ℝ) = ((3 : ℝ) ^ n * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) n, (∑ k ∈ Finset.Icc i n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹), withα : ℕ → ℤ,hα : ∀ (y : ℝ), ∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ t * y) = ∑ j ∈ Finset.range n, (↑(α j) : ℝ) * y ^ j.Lean, line 314
obtain ⟨α, hα⟩ := hpoly n hn
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 314 at
b16ab29fc51b↗numerator_integral.polypart_integral.s2obtain∃ (D : ℕ → ℝ), ∀ (k : ℕ), D k = ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))Leaves
∃ (z : ℤ), (↑z : ℝ) = ((3 : ℝ) ^ n * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) n, (∑ k ∈ Finset.Icc i n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹), withD : ℕ → ℝ,hD : ∀ (k : ℕ), D k = ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Exists.introExistential introduction. ,rflrfl : a = ais the unique constructor of the equality type. .Lean, line 315
obtain ⟨D, hD⟩ : ∃ D : ℕ → ℝ, ∀ k, D k = ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))) := ⟨fun k => _, fun k => rfl⟩
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 315 at
b16ab29fc51b↗numerator_integral.polypart_integral.hAhave∀ (x : ℝ) (k : ℕ), ∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - x * (2 : ℝ) ^ (t + k)) = ∑ j ∈ Finset.range n, (↑(α j) : ℝ) * (x * (2 : ℝ) ^ k) ^ jLeaves
∃ (z : ℤ), (↑z : ℝ) = ((3 : ℝ) ^ n * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) n, (∑ k ∈ Finset.Icc i n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹), withhA : ∀ (x : ℝ) (k : ℕ), ∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - x * (2 : ℝ) ^ (t + k)) = ∑ j ∈ Finset.range n, (↑(α j) : ℝ) * (x * (2 : ℝ) ^ k) ^ j.Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.rangerange nis the set of natural numbers less thann. ,Finset.prod_congr,rflrfl : a = ais the unique constructor of the equality type. ,pow_add.Lean, lines 316–320
have hA : ∀ (x : ℝ) (k : ℕ), ∏ t ∈ Finset.Icc 1 (n - 1), (1 - x * (2 : ℝ) ^ (t + k)) = ∑ j ∈ Finset.range n, (α j : ℝ) * (x * 2 ^ k) ^ j := by intro x k rw [← hα] refine Finset.prod_congr rfl (fun t _ => ?_) rw [pow_add]; ringtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 316–320 at
b16ab29fc51b↗numerator_integral.polypart_integral.hswaphave∑ i ∈ Finset.Icc (1 : ℕ) n, (∑ k ∈ Finset.Icc i n, (-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * (((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ k) ^ j) / D k) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ∑ i ∈ Finset.Icc (1 : ℕ) k, (-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * (((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ k) ^ j) / D k * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹Leaves
∃ (z : ℤ), (↑z : ℝ) = ((3 : ℝ) ^ n * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * (∑ x ∈ Finset.Icc (1 : ℕ) n, (-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * ((8 / 3 : ℝ) * (2 : ℝ) ^ x) ^ j) / D x * ∑ i ∈ Finset.Icc (1 : ℕ) x, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ x ∈ Finset.Icc (1 : ℕ) n, (∑ x_1 ∈ Finset.Icc x n, (-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * (((2 : ℝ) ^ x)⁻¹ * (2 : ℝ) ^ x_1) ^ j) / D x_1) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ x)⁻¹), withhswap : ∑ i ∈ Finset.Icc (1 : ℕ) n, (∑ k ∈ Finset.Icc i n, (-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * (((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ k) ^ j) / D k) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ∑ i ∈ Finset.Icc (1 : ℕ) k, (-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * (((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ k) ^ j) / D k * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹.Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.rangerange nis the set of natural numbers less thann. ,Finset.sum_mul,Finset.sum_comm'Generalization ofFinset.sum_commto the case when the innerFinsets depend on the outer variable. ,Finset.mem_Icc.Lean, lines 323–327
have hswap : ∑ i ∈ Finset.Icc 1 n, (∑ k ∈ Finset.Icc i n, -(∑ j ∈ Finset.range n, (α j : ℝ) * (((2 : ℝ) ^ i)⁻¹ * 2 ^ k) ^ j) / D k) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = ∑ k ∈ Finset.Icc 1 n, ∑ i ∈ Finset.Icc 1 k, (-(∑ j ∈ Finset.range n, (α j : ℝ) * (((2 : ℝ) ^ i)⁻¹ * 2 ^ k) ^ j) / D k) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ := by simp only [Finset.sum_mul] refine Finset.sum_comm' (fun i k => ?_) simp only [Finset.mem_Icc] omegatargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 323–327 at
b16ab29fc51b↗numerator_integral.polypart_integral.hbhave∀ (k i : ℕ), (1 : ℕ) ≤ i → ((-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j) / D k - (-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * (((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ k) ^ j) / D k) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = (∑ j ∈ Finset.range n, ∑ s ∈ Finset.range j, (↑(α j) : ℝ) * ((2 : ℝ) ^ k) ^ j * ((8 / 3 : ℝ) ^ s * ((2 : ℝ) ^ i)⁻¹ ^ (j - s))) / D kLeaves
∃ (z : ℤ), (↑z : ℝ) = ((3 : ℝ) ^ n * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ x ∈ Finset.Icc (1 : ℕ) n, ∑ x_1 ∈ Finset.Icc (1 : ℕ) x, ((-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * ((8 / 3 : ℝ) * (2 : ℝ) ^ x) ^ j) / D x - (-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * (((2 : ℝ) ^ x_1)⁻¹ * (2 : ℝ) ^ x) ^ j) / D x) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ x_1)⁻¹, withhb : ∀ (k i : ℕ), (1 : ℕ) ≤ i → ((-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j) / D k - (-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * (((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ k) ^ j) / D k) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = (∑ j ∈ Finset.range n, ∑ s ∈ Finset.range j, (↑(α j) : ℝ) * ((2 : ℝ) ^ k) ^ j * ((8 / 3 : ℝ) ^ s * ((2 : ℝ) ^ i)⁻¹ ^ (j - s))) / D k.Uses library
Finset.rangerange nis the set of natural numbers less thann. ,Finset.sum_sub_distrib,Finset.sum_mul,Finset.sum_congr,rflrfl : a = ais the unique constructor of the equality type. ,Finset.mul_sum,mul_pow.Lean, lines 333–359
have hb : ∀ (k i : ℕ), 1 ≤ i → (-(∑ j ∈ Finset.range n, (α j : ℝ) * ((8 / 3 : ℝ) * 2 ^ k) ^ j) / D k - -(∑ j ∈ Finset.range n, (α j : ℝ) * (((2 : ℝ) ^ i)⁻¹ * 2 ^ k) ^ j) / D k) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = (∑ j ∈ Finset.range n, ∑ s ∈ Finset.range j, (α j : ℝ) * ((2 : ℝ) ^ k) ^ j * ((8 / 3 : ℝ) ^ s * (((2 : ℝ) ^ i)⁻¹) ^ (j - s))) / D k := by intro k i hi have h2i : (2 : ℝ) ^ i ≠ 0 := by positivity have hne : (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i) ≠ 0 := by have : (2 : ℝ) ≤ 2 ^ i := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi intro h0 linarith have hch : (((2 : ℝ) ^ i)⁻¹ - (8 / 3 : ℝ)) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = ((2 : ℝ) ^ i)⁻¹ := by rw [show (((2 : ℝ) ^ i)⁻¹ - (8 / 3 : ℝ)) = ((2 : ℝ) ^ i)⁻¹ * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i) by field_simp, mul_assoc, mul_inv_cancel₀ hne, mul_one] have hj : ∀ j : ℕ, ((((2 : ℝ) ^ i)⁻¹) ^ j - (8 / 3 : ℝ) ^ j) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = ∑ s ∈ Finset.range j, (8 / 3 : ℝ) ^ s * (((2 : ℝ) ^ i)⁻¹) ^ (j - s) := by intro j have hg := geom_sum₂_mul (8 / 3 : ℝ) (((2 : ℝ) ^ i)⁻¹) j have hg' : (((2 : ℝ) ^ i)⁻¹) ^ j - (8 / 3 : ℝ) ^ j = (∑ s ∈ Finset.range j, (8 / 3 : ℝ) ^ s * (((2 : ℝ) ^ i)⁻¹) ^ (j - 1 - s)) * (((2 : ℝ) ^ i)⁻¹ - (8 / 3 : ℝ)) := by linear_combination hg rw [hg', mul_assoc, hch, Finset.sum_mul] refine Finset.sum_congr rfl (fun s hs => ?_) have hs' := Finset.mem_range.mp hs rw [mul_assoc, ← pow_succ, show j - 1 - s + 1 = j - s by omega] have e1 : (-(∑ j ∈ Finset.range n, (α j : ℝ) * ((8 / 3 : ℝ) * 2 ^ k) ^ j) / D k - -(∑ j ∈ Finset.range n, (α j : ℝ) * (((2 : ℝ) ^ i)⁻¹ * 2 ^ k) ^ j) / D k) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = ((∑ j ∈ Finset.range n, (α j : ℝ) * (((2 : ℝ) ^ i)⁻¹ * 2 ^ k) ^ j - ∑ j ∈ Finset.range n, (α j : ℝ) * ((8 / 3 : ℝ) * 2 ^ k) ^ j) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹) / D k := by ring rw [e1, ← Finset.sum_sub_distrib, Finset.sum_mul] congr 1 refine Finset.sum_congr rfl (fun j _ => ?_) rw [← Finset.mul_sum, ← hj j, mul_pow, mul_pow] ringtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 333–359 at
b16ab29fc51b↗numerator_integral.polypart_integral.hb.h2ihave(2 : ℝ) ^ i ≠ (0 : ℝ)routine: positivityLeaves
((-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j) / D k - (-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * (((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ k) ^ j) / D k) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = (∑ j ∈ Finset.range n, ∑ s ∈ Finset.range j, (↑(α j) : ℝ) * ((2 : ℝ) ^ k) ^ j * ((8 / 3 : ℝ) ^ s * ((2 : ℝ) ^ i)⁻¹ ^ (j - s))) / D k, withh2i : (2 : ℝ) ^ i ≠ (0 : ℝ).Lean, line 335
have h2i : (2 : ℝ) ^ i ≠ 0 := by positivity
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 335 at
b16ab29fc51b↗numerator_integral.polypart_integral.hb.hnehave(1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i ≠ (0 : ℝ)Leaves
((-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j) / D k - (-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * (((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ k) ^ j) / D k) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = (∑ j ∈ Finset.range n, ∑ s ∈ Finset.range j, (↑(α j) : ℝ) * ((2 : ℝ) ^ k) ^ j * ((8 / 3 : ℝ) ^ s * ((2 : ℝ) ^ i)⁻¹ ^ (j - s))) / D k, withhne : (1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i ≠ (0 : ℝ).Lean, lines 336–341
have hne : (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i) ≠ 0 := by have : (2 : ℝ) ≤ 2 ^ i := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi intro h0 linarithtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 336–341 at
b16ab29fc51b↗numerator_integral.polypart_integral.hb.hne.thishave(2 : ℝ) ≤ (2 : ℝ) ^ iLeaves
(1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i ≠ (0 : ℝ), withthis : (2 : ℝ) ≤ (2 : ℝ) ^ i.Lean, lines 337–339
have : (2 : ℝ) ≤ 2 ^ i := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hitargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 337–339 at
b16ab29fc51b↗numerator_integral.polypart_integral.hb.hne.this.s1calc(2 : ℝ) = (2 : ℝ) ^ (1 : ℕ)Closes the goal.
Uses library
pow_one.Lean, line 338
calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 338 at
b16ab29fc51b↗numerator_integral.polypart_integral.hb.hne.this.s2calc(2 : ℝ) ^ (1 : ℕ) ≤ (2 : ℝ) ^ iCloses the goal.
Uses library
pow_le_pow_right₀.Lean, line 339
_ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 339 at
b16ab29fc51b↗
numerator_integral.polypart_integral.hb.hchhave(((2 : ℝ) ^ i)⁻¹ - (8 / 3 : ℝ)) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = ((2 : ℝ) ^ i)⁻¹Leaves
((-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j) / D k - (-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * (((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ k) ^ j) / D k) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = (∑ j ∈ Finset.range n, ∑ s ∈ Finset.range j, (↑(α j) : ℝ) * ((2 : ℝ) ^ k) ^ j * ((8 / 3 : ℝ) ^ s * ((2 : ℝ) ^ i)⁻¹ ^ (j - s))) / D k, withhch : (((2 : ℝ) ^ i)⁻¹ - (8 / 3 : ℝ)) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = ((2 : ℝ) ^ i)⁻¹.Uses library
mul_assoc,mul_inv_cancel₀,mul_one.Lean, lines 342–343
have hch : (((2 : ℝ) ^ i)⁻¹ - (8 / 3 : ℝ)) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = ((2 : ℝ) ^ i)⁻¹ := by rw [show (((2 : ℝ) ^ i)⁻¹ - (8 / 3 : ℝ)) = ((2 : ℝ) ^ i)⁻¹ * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i) by field_simp, mul_assoc, mul_inv_cancel₀ hne, mul_one]targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 342–343 at
b16ab29fc51b↗numerator_integral.polypart_integral.hb.hjhave∀ (j : ℕ), (((2 : ℝ) ^ i)⁻¹ ^ j - (8 / 3 : ℝ) ^ j) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = ∑ s ∈ Finset.range j, (8 / 3 : ℝ) ^ s * ((2 : ℝ) ^ i)⁻¹ ^ (j - s)Leaves
((-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j) / D k - (-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * (((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ k) ^ j) / D k) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = (∑ j ∈ Finset.range n, ∑ s ∈ Finset.range j, (↑(α j) : ℝ) * ((2 : ℝ) ^ k) ^ j * ((8 / 3 : ℝ) ^ s * ((2 : ℝ) ^ i)⁻¹ ^ (j - s))) / D k, withhj : ∀ (j : ℕ), (((2 : ℝ) ^ i)⁻¹ ^ j - (8 / 3 : ℝ) ^ j) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = ∑ s ∈ Finset.range j, (8 / 3 : ℝ) ^ s * ((2 : ℝ) ^ i)⁻¹ ^ (j - s).Uses library
Finset.rangerange nis the set of natural numbers less thann. ,mul_assoc,Finset.sum_mul,Finset.sum_congr,rflrfl : a = ais the unique constructor of the equality type. ,pow_succ.Lean, lines 344–352
have hj : ∀ j : ℕ, ((((2 : ℝ) ^ i)⁻¹) ^ j - (8 / 3 : ℝ) ^ j) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = ∑ s ∈ Finset.range j, (8 / 3 : ℝ) ^ s * (((2 : ℝ) ^ i)⁻¹) ^ (j - s) := by intro j have hg := geom_sum₂_mul (8 / 3 : ℝ) (((2 : ℝ) ^ i)⁻¹) j have hg' : (((2 : ℝ) ^ i)⁻¹) ^ j - (8 / 3 : ℝ) ^ j = (∑ s ∈ Finset.range j, (8 / 3 : ℝ) ^ s * (((2 : ℝ) ^ i)⁻¹) ^ (j - 1 - s)) * (((2 : ℝ) ^ i)⁻¹ - (8 / 3 : ℝ)) := by linear_combination hg rw [hg', mul_assoc, hch, Finset.sum_mul] refine Finset.sum_congr rfl (fun s hs => ?_) have hs' := Finset.mem_range.mp hs rw [mul_assoc, ← pow_succ, show j - 1 - s + 1 = j - s by omega]targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 344–352 at
b16ab29fc51b↗numerator_integral.polypart_integral.hb.hj.hghave(∑ i_1 ∈ Finset.range j, (8 / 3 : ℝ) ^ i_1 * ((2 : ℝ) ^ i)⁻¹ ^ (j - (1 : ℕ) - i_1)) * ((8 / 3 : ℝ) - ((2 : ℝ) ^ i)⁻¹) = (8 / 3 : ℝ) ^ j - ((2 : ℝ) ^ i)⁻¹ ^ jLeaves
(((2 : ℝ) ^ i)⁻¹ ^ j - (8 / 3 : ℝ) ^ j) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = ∑ s ∈ Finset.range j, (8 / 3 : ℝ) ^ s * ((2 : ℝ) ^ i)⁻¹ ^ (j - s), withhg : (∑ i_1 ∈ Finset.range j, (8 / 3 : ℝ) ^ i_1 * ((2 : ℝ) ^ i)⁻¹ ^ (j - (1 : ℕ) - i_1)) * ((8 / 3 : ℝ) - ((2 : ℝ) ^ i)⁻¹) = (8 / 3 : ℝ) ^ j - ((2 : ℝ) ^ i)⁻¹ ^ j.Uses library
geom_sum₂_mul.Lean, line 346
have hg := geom_sum₂_mul (8 / 3 : ℝ) (((2 : ℝ) ^ i)⁻¹) j
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 346 at
b16ab29fc51b↗numerator_integral.polypart_integral.hb.hj.hg'have((2 : ℝ) ^ i)⁻¹ ^ j - (8 / 3 : ℝ) ^ j = (∑ s ∈ Finset.range j, (8 / 3 : ℝ) ^ s * ((2 : ℝ) ^ i)⁻¹ ^ (j - (1 : ℕ) - s)) * (((2 : ℝ) ^ i)⁻¹ - (8 / 3 : ℝ))Leaves
(((2 : ℝ) ^ i)⁻¹ ^ j - (8 / 3 : ℝ) ^ j) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = ∑ s ∈ Finset.range j, (8 / 3 : ℝ) ^ s * ((2 : ℝ) ^ i)⁻¹ ^ (j - s), withhg' : ((2 : ℝ) ^ i)⁻¹ ^ j - (8 / 3 : ℝ) ^ j = (∑ s ∈ Finset.range j, (8 / 3 : ℝ) ^ s * ((2 : ℝ) ^ i)⁻¹ ^ (j - (1 : ℕ) - s)) * (((2 : ℝ) ^ i)⁻¹ - (8 / 3 : ℝ)).Uses library
Finset.rangerange nis the set of natural numbers less thann. .Lean, lines 347–348
have hg' : (((2 : ℝ) ^ i)⁻¹) ^ j - (8 / 3 : ℝ) ^ j = (∑ s ∈ Finset.range j, (8 / 3 : ℝ) ^ s * (((2 : ℝ) ^ i)⁻¹) ^ (j - 1 - s)) * (((2 : ℝ) ^ i)⁻¹ - (8 / 3 : ℝ)) := by linear_combination hgtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 347–348 at
b16ab29fc51b↗numerator_integral.polypart_integral.hb.hj.hs'haves < jLeaves
(8 / 3 : ℝ) ^ s * ((2 : ℝ) ^ i)⁻¹ ^ (j - (1 : ℕ) - s) * ((2 : ℝ) ^ i)⁻¹ = (8 / 3 : ℝ) ^ s * ((2 : ℝ) ^ i)⁻¹ ^ (j - s), withhs' : s < j.Uses library
Finset.mem_range.Lean, line 351
have hs' := Finset.mem_range.mp hs
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 351 at
b16ab29fc51b↗
numerator_integral.polypart_integral.hb.e1have((-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j) / D k - (-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * (((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ k) ^ j) / D k) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = (∑ j ∈ Finset.range n, (↑(α j) : ℝ) * (((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ k) ^ j - ∑ j ∈ Finset.range n, (↑(α j) : ℝ) * ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ / D kroutine: ringLeaves
((-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j) / D k - (-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * (((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ k) ^ j) / D k) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = (∑ j ∈ Finset.range n, ∑ s ∈ Finset.range j, (↑(α j) : ℝ) * ((2 : ℝ) ^ k) ^ j * ((8 / 3 : ℝ) ^ s * ((2 : ℝ) ^ i)⁻¹ ^ (j - s))) / D k, withe1 : ((-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j) / D k - (-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * (((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ k) ^ j) / D k) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = (∑ j ∈ Finset.range n, (↑(α j) : ℝ) * (((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ k) ^ j - ∑ j ∈ Finset.range n, (↑(α j) : ℝ) * ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ / D k.Uses library
Finset.rangerange nis the set of natural numbers less thann. .Lean, lines 353–354
have e1 : (-(∑ j ∈ Finset.range n, (α j : ℝ) * ((8 / 3 : ℝ) * 2 ^ k) ^ j) / D k - -(∑ j ∈ Finset.range n, (α j : ℝ) * (((2 : ℝ) ^ i)⁻¹ * 2 ^ k) ^ j) / D k) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = ((∑ j ∈ Finset.range n, (α j : ℝ) * (((2 : ℝ) ^ i)⁻¹ * 2 ^ k) ^ j - ∑ j ∈ Finset.range n, (α j : ℝ) * ((8 / 3 : ℝ) * 2 ^ k) ^ j) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹) / D k := by ringtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 353–354 at
b16ab29fc51b↗
numerator_integral.polypart_integral.hchave∀ (k : ℕ), ∑ i ∈ Finset.Icc (1 : ℕ) k, ((-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j) / D k - (-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * (((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ k) ^ j) / D k) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = ∑ j ∈ Finset.range n, ∑ s ∈ Finset.range j, (↑(α j) : ℝ) * (8 / 3 : ℝ) ^ s * ((((2 : ℝ) ^ k) ^ j - ((2 : ℝ) ^ k) ^ s) / D k) / ((2 : ℝ) ^ (j - s) - (1 : ℝ))Leaves
∃ (z : ℤ), (↑z : ℝ) = ((3 : ℝ) ^ n * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ x ∈ Finset.Icc (1 : ℕ) n, ∑ x_1 ∈ Finset.Icc (1 : ℕ) x, ((-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * ((8 / 3 : ℝ) * (2 : ℝ) ^ x) ^ j) / D x - (-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * (((2 : ℝ) ^ x_1)⁻¹ * (2 : ℝ) ^ x) ^ j) / D x) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ x_1)⁻¹, withhc : ∀ (k : ℕ), ∑ i ∈ Finset.Icc (1 : ℕ) k, ((-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j) / D k - (-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * (((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ k) ^ j) / D k) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = ∑ j ∈ Finset.range n, ∑ s ∈ Finset.range j, (↑(α j) : ℝ) * (8 / 3 : ℝ) ^ s * ((((2 : ℝ) ^ k) ^ j - ((2 : ℝ) ^ k) ^ s) / D k) / ((2 : ℝ) ^ (j - s) - (1 : ℝ)).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.rangerange nis the set of natural numbers less thann. ,Finset.sum_congr,rflrfl : a = ais the unique constructor of the equality type. ,Finset.mem_Icc,Finset.sum_div,Finset.sum_comm,mul_assoc,Finset.mul_sum.Lean, lines 361–373
have hc : ∀ k : ℕ, ∑ i ∈ Finset.Icc 1 k, (-(∑ j ∈ Finset.range n, (α j : ℝ) * ((8 / 3 : ℝ) * 2 ^ k) ^ j) / D k - -(∑ j ∈ Finset.range n, (α j : ℝ) * (((2 : ℝ) ^ i)⁻¹ * 2 ^ k) ^ j) / D k) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = ∑ j ∈ Finset.range n, ∑ s ∈ Finset.range j, (α j : ℝ) * (8 / 3 : ℝ) ^ s * ((((2 : ℝ) ^ k) ^ j - ((2 : ℝ) ^ k) ^ s) / D k) / ((2 : ℝ) ^ (j - s) - 1) := by intro k rw [Finset.sum_congr rfl (fun i hi => hb k i (Finset.mem_Icc.mp hi).1), ← Finset.sum_div, Finset.sum_comm, Finset.sum_div] refine Finset.sum_congr rfl (fun j _ => ?_) rw [Finset.sum_comm, Finset.sum_div] refine Finset.sum_congr rfl (fun s hs => ?_) have hs' := Finset.mem_range.mp hs rw [Finset.sum_congr rfl (fun i _ => (mul_assoc _ _ _).symm), ← Finset.mul_sum, hgeo (j - s) (by omega) k] have hjs : ((2 : ℝ) ^ k) ^ j = ((2 : ℝ) ^ k) ^ s * ((2 : ℝ) ^ k) ^ (j - s) := by rw [← pow_add]; congr 1; omega have hZ : ((2 : ℝ) ^ k) ^ (j - s) * (((2 : ℝ) ^ k) ^ (j - s))⁻¹ = 1 := mul_inv_cancel₀ (by positivity) rw [hjs] linear_combination (-((α j : ℝ) * ((2 : ℝ) ^ k) ^ s * (8 / 3 : ℝ) ^ s / ((2 : ℝ) ^ (j - s) - 1) / D k)) * hZtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 361–373 at
b16ab29fc51b↗numerator_integral.polypart_integral.hc.hs'haves < jLeaves
(∑ x ∈ Finset.Icc (1 : ℕ) k, (↑(α j) : ℝ) * ((2 : ℝ) ^ k) ^ j * ((8 / 3 : ℝ) ^ s * ((2 : ℝ) ^ x)⁻¹ ^ (j - s))) / D k = (↑(α j) : ℝ) * (8 / 3 : ℝ) ^ s * ((((2 : ℝ) ^ k) ^ j - ((2 : ℝ) ^ k) ^ s) / D k) / ((2 : ℝ) ^ (j - s) - (1 : ℝ)), withhs' : s < j.Uses library
Finset.mem_range.Lean, line 367
have hs' := Finset.mem_range.mp hs
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 367 at
b16ab29fc51b↗numerator_integral.polypart_integral.hc.hjshave((2 : ℝ) ^ k) ^ j = ((2 : ℝ) ^ k) ^ s * ((2 : ℝ) ^ k) ^ (j - s)Leaves
(↑(α j) : ℝ) * ((2 : ℝ) ^ k) ^ j * (8 / 3 : ℝ) ^ s * (((1 : ℝ) - (((2 : ℝ) ^ k) ^ (j - s))⁻¹) / ((2 : ℝ) ^ (j - s) - (1 : ℝ))) / D k = (↑(α j) : ℝ) * (8 / 3 : ℝ) ^ s * ((((2 : ℝ) ^ k) ^ j - ((2 : ℝ) ^ k) ^ s) / D k) / ((2 : ℝ) ^ (j - s) - (1 : ℝ)), withhjs : ((2 : ℝ) ^ k) ^ j = ((2 : ℝ) ^ k) ^ s * ((2 : ℝ) ^ k) ^ (j - s).Uses library
pow_add.Lean, lines 369–370
have hjs : ((2 : ℝ) ^ k) ^ j = ((2 : ℝ) ^ k) ^ s * ((2 : ℝ) ^ k) ^ (j - s) := by rw [← pow_add]; congr 1; omegatargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 369–370 at
b16ab29fc51b↗numerator_integral.polypart_integral.hc.hZhave((2 : ℝ) ^ k) ^ (j - s) * (((2 : ℝ) ^ k) ^ (j - s))⁻¹ = (1 : ℝ)Leaves
(↑(α j) : ℝ) * ((2 : ℝ) ^ k) ^ j * (8 / 3 : ℝ) ^ s * (((1 : ℝ) - (((2 : ℝ) ^ k) ^ (j - s))⁻¹) / ((2 : ℝ) ^ (j - s) - (1 : ℝ))) / D k = (↑(α j) : ℝ) * (8 / 3 : ℝ) ^ s * ((((2 : ℝ) ^ k) ^ j - ((2 : ℝ) ^ k) ^ s) / D k) / ((2 : ℝ) ^ (j - s) - (1 : ℝ)), withhZ : ((2 : ℝ) ^ k) ^ (j - s) * (((2 : ℝ) ^ k) ^ (j - s))⁻¹ = (1 : ℝ).Uses library
mul_inv_cancel₀.Lean, line 371
have hZ : ((2 : ℝ) ^ k) ^ (j - s) * (((2 : ℝ) ^ k) ^ (j - s))⁻¹ = 1 := mul_inv_cancel₀ (by positivity)
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 371 at
b16ab29fc51b↗
numerator_integral.polypart_integral.hj'havej < nLeaves
∃ (z : ℤ), (↑z : ℝ) = ((3 : ℝ) ^ n * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ x ∈ Finset.Icc (1 : ℕ) n, (↑(α j) : ℝ) * (8 / 3 : ℝ) ^ s * ((((2 : ℝ) ^ x) ^ j - ((2 : ℝ) ^ x) ^ s) / D x) / ((2 : ℝ) ^ (j - s) - (1 : ℝ)), withhj' : j < n.Uses library
Finset.mem_range.Lean, line 378
have hj' := Finset.mem_range.mp hj
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 378 at
b16ab29fc51b↗numerator_integral.polypart_integral.hs'haves < jLeaves
∃ (z : ℤ), (↑z : ℝ) = ((3 : ℝ) ^ n * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ x ∈ Finset.Icc (1 : ℕ) n, (↑(α j) : ℝ) * (8 / 3 : ℝ) ^ s * ((((2 : ℝ) ^ x) ^ j - ((2 : ℝ) ^ x) ^ s) / D x) / ((2 : ℝ) ^ (j - s) - (1 : ℝ)), withhs' : s < j.Uses library
Finset.mem_range.Lean, line 379
have hs' := Finset.mem_range.mp hs
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 379 at
b16ab29fc51b↗numerator_integral.polypart_integral.s9obtain∃ (z : ℤ), (↑z : ℝ) = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((2 : ℝ) ^ k) ^ j / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))Leaves
∃ (z : ℤ), (↑z : ℝ) = ((3 : ℝ) ^ n * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ x ∈ Finset.Icc (1 : ℕ) n, (↑(α j) : ℝ) * (8 / 3 : ℝ) ^ s * ((((2 : ℝ) ^ x) ^ j - ((2 : ℝ) ^ x) ^ s) / D x) / ((2 : ℝ) ^ (j - s) - (1 : ℝ)), withwj : ℤ,hwj : (↑wj : ℝ) = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((2 : ℝ) ^ k) ^ j / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,rflrfl : a = ais the unique constructor of the equality type. .Lean, line 380
obtain ⟨wj, hwj⟩ := hW _ (Finset.Icc 1 n) j rfl
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 380 at
b16ab29fc51b↗numerator_integral.polypart_integral.s10obtain∃ (z : ℤ), (↑z : ℝ) = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((2 : ℝ) ^ k) ^ s / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))Leaves
∃ (z : ℤ), (↑z : ℝ) = ((3 : ℝ) ^ n * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ x ∈ Finset.Icc (1 : ℕ) n, (↑(α j) : ℝ) * (8 / 3 : ℝ) ^ s * ((((2 : ℝ) ^ x) ^ j - ((2 : ℝ) ^ x) ^ s) / D x) / ((2 : ℝ) ^ (j - s) - (1 : ℝ)), withws : ℤ,hws : (↑ws : ℝ) = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((2 : ℝ) ^ k) ^ s / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,rflrfl : a = ais the unique constructor of the equality type. .Lean, line 381
obtain ⟨ws, hws⟩ := hW _ (Finset.Icc 1 n) s rfl
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 381 at
b16ab29fc51b↗numerator_integral.polypart_integral.s11obtain(2 : ℤ) ^ (j - s) - (1 : ℤ) ∣ ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℤ) - (2 : ℤ) ^ k)Leaves
∃ (z : ℤ), (↑z : ℝ) = ((3 : ℝ) ^ n * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ x ∈ Finset.Icc (1 : ℕ) n, (↑(α j) : ℝ) * (8 / 3 : ℝ) ^ s * ((((2 : ℝ) ^ x) ^ j - ((2 : ℝ) ^ x) ^ s) / D x) / ((2 : ℝ) ^ (j - s) - (1 : ℝ)), withq : ℤ,hq : ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℤ) - (2 : ℤ) ^ k) = ((2 : ℤ) ^ (j - s) - (1 : ℤ)) * q.Lean, line 382
obtain ⟨q, hq⟩ := hdvd n (j - s) (by omega) (by omega)
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 382 at
b16ab29fc51b↗numerator_integral.polypart_integral.hqRhave∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k) = ((2 : ℝ) ^ (j - s) - (1 : ℝ)) * (↑q : ℝ)Leaves
∃ (z : ℤ), (↑z : ℝ) = ((3 : ℝ) ^ n * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ x ∈ Finset.Icc (1 : ℕ) n, (↑(α j) : ℝ) * (8 / 3 : ℝ) ^ s * ((((2 : ℝ) ^ x) ^ j - ((2 : ℝ) ^ x) ^ s) / D x) / ((2 : ℝ) ^ (j - s) - (1 : ℝ)), withhqR : ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k) = ((2 : ℝ) ^ (j - s) - (1 : ℝ)) * (↑q : ℝ).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. .Lean, line 383
have hqR : ∏ k ∈ Finset.Icc ((n + 1) / 2) n, ((1 : ℝ) - 2 ^ k) = ((2 : ℝ) ^ (j - s) - 1) * q := by exact_mod_cast hq
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 383 at
b16ab29fc51b↗numerator_integral.polypart_integral.hBhave(2 : ℝ) ^ (j - s) - (1 : ℝ) ≠ (0 : ℝ)Leaves
∃ (z : ℤ), (↑z : ℝ) = ((3 : ℝ) ^ n * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ x ∈ Finset.Icc (1 : ℕ) n, (↑(α j) : ℝ) * (8 / 3 : ℝ) ^ s * ((((2 : ℝ) ^ x) ^ j - ((2 : ℝ) ^ x) ^ s) / D x) / ((2 : ℝ) ^ (j - s) - (1 : ℝ)), withhB : (2 : ℝ) ^ (j - s) - (1 : ℝ) ≠ (0 : ℝ).Lean, lines 384–388
have hB : (2 : ℝ) ^ (j - s) - 1 ≠ 0 := by have : (2 : ℝ) ≤ 2 ^ (j - s) := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ (j - s) := pow_le_pow_right₀ (by norm_num) (by omega) linarithtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 384–388 at
b16ab29fc51b↗numerator_integral.polypart_integral.hB.thishave(2 : ℝ) ≤ (2 : ℝ) ^ (j - s)Leaves
(2 : ℝ) ^ (j - s) - (1 : ℝ) ≠ (0 : ℝ), withthis : (2 : ℝ) ≤ (2 : ℝ) ^ (j - s).Lean, lines 385–387
have : (2 : ℝ) ≤ 2 ^ (j - s) := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ (j - s) := pow_le_pow_right₀ (by norm_num) (by omega)targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 385–387 at
b16ab29fc51b↗numerator_integral.polypart_integral.hB.this.s1calc(2 : ℝ) = (2 : ℝ) ^ (1 : ℕ)Closes the goal.
Uses library
pow_one.Lean, line 386
calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 386 at
b16ab29fc51b↗numerator_integral.polypart_integral.hB.this.s2calc(2 : ℝ) ^ (1 : ℕ) ≤ (2 : ℝ) ^ (j - s)Closes the goal.
Uses library
pow_le_pow_right₀.Lean, line 387
_ ≤ 2 ^ (j - s) := pow_le_pow_right₀ (by norm_num) (by omega)
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 387 at
b16ab29fc51b↗
numerator_integral.polypart_integral.h3have(3 : ℝ) ^ n = (3 : ℝ) ^ (n - s) * (3 : ℝ) ^ sLeaves
∃ (z : ℤ), (↑z : ℝ) = ((3 : ℝ) ^ n * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ x ∈ Finset.Icc (1 : ℕ) n, (↑(α j) : ℝ) * (8 / 3 : ℝ) ^ s * ((((2 : ℝ) ^ x) ^ j - ((2 : ℝ) ^ x) ^ s) / D x) / ((2 : ℝ) ^ (j - s) - (1 : ℝ)), withh3 : (3 : ℝ) ^ n = (3 : ℝ) ^ (n - s) * (3 : ℝ) ^ s.Uses library
pow_add.Lean, line 389
have h3 : (3 : ℝ) ^ n = 3 ^ (n - s) * 3 ^ s := by rw [← pow_add]; congr 1; omega
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 389 at
b16ab29fc51b↗numerator_integral.polypart_integral.h83have(8 / 3 : ℝ) ^ s * (3 : ℝ) ^ s = (8 : ℝ) ^ sLeaves
∃ (z : ℤ), (↑z : ℝ) = ((3 : ℝ) ^ n * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ x ∈ Finset.Icc (1 : ℕ) n, (↑(α j) : ℝ) * (8 / 3 : ℝ) ^ s * ((((2 : ℝ) ^ x) ^ j - ((2 : ℝ) ^ x) ^ s) / D x) / ((2 : ℝ) ^ (j - s) - (1 : ℝ)), withh83 : (8 / 3 : ℝ) ^ s * (3 : ℝ) ^ s = (8 : ℝ) ^ s.Uses library
mul_pow.Lean, line 390
have h83 : (8 / 3 : ℝ) ^ s * 3 ^ s = 8 ^ s := by rw [← mul_pow]; norm_num
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 390 at
b16ab29fc51b↗
numerator_integral.head_integralhave∃ (a₁ : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(a₁ n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹Leaves
∃ (a : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(a n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withhead_integral : ∃ (a₁ : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(a₁ n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹.Uses library
Nat.factorialNat.factorial nis the factorial ofn. ,Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Exists.introExistential introduction. ,Classical.chooseGiven that there exists an element satisfyingp, returns one such element. ,dif_pos,Classical.choose_spec.Lean, lines 398–454
have head_integral : ∃ a₁ : ℕ → ℤ, ∀ n : ℕ, 1 ≤ n → (a₁ n : ℝ) = (9 : ℝ) ^ n * ((Nat.factorial (n - 2) : ℝ) * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, (1 - (2 : ℝ) ^ k))) * (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (∑ i ∈ Finset.Icc 1 k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹)) := by have hsumZ0 : ∀ (s : Finset ℕ) (g : ℕ → ℝ), (∀ i ∈ s, ∃ z : ℤ, (z : ℝ) = g i) → ∃ z : ℤ, (z : ℝ) = ∑ i ∈ s, g i := by intro s g induction s using Finset.induction_on with | empty => intro _; exact ⟨0, by simp⟩ | insert a s ha ih => intro h obtain ⟨za, hza⟩ := h a (Finset.mem_insert_self a s) obtain ⟨zs, hzs⟩ := ih (fun i hi => h i (Finset.mem_insert_of_mem hi)) exact ⟨za + zs, by rw [Finset.sum_insert ha]; push_cast; rw [hza, hzs]⟩ have hn : ∀ n : ℕ, 1 ≤ n → ∃ z : ℤ, (z : ℝ) = (9 : ℝ) ^ n * ((Nat.factorial (n - 2) : ℝ) * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, (1 - (2 : ℝ) ^ k))) * (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (∑ i ∈ Finset.Icc 1 k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹)) := by intro n hn obtain ⟨zE, hzE⟩ := polypart_integral n hn have hR : ∃ zR : ℤ, (zR : ℝ) = (3 : ℝ) ^ n * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * (∑ i ∈ Finset.Icc 1 n, (∑ k ∈ Finset.Icc i n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹) := by rw [Finset.mul_sum] refine hsumZ0 _ _ (fun i hi => ?_) have hi' := Finset.mem_Icc.mp hi obtain ⟨zb, hzb⟩ := residue_integral n i hi'.1 hi'.2 refine ⟨zb * (3 * ∏ j ∈ (Finset.Icc 1 n).erase i, ((3 : ℤ) - 8 * 2 ^ j)), ?_⟩ have hne : (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i) ≠ 0 := by have : (2 : ℝ) ≤ 2 ^ i := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi'.1 intro h0 linarith have hsplit : (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) = (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i) * ∏ k ∈ (Finset.Icc 1 n).erase i, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) := (Finset.mul_prod_erase _ (fun k => (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) hi).symm have he : ∏ k ∈ (Finset.Icc 1 n).erase i, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = (∏ k ∈ (Finset.Icc 1 n).erase i, ((3 : ℝ) - 8 * 2 ^ k)) * ((3 : ℝ) ^ (n - 1))⁻¹ := by rw [Finset.prod_congr rfl (fun k _ => (by ring : (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = ((3 : ℝ) - 8 * 2 ^ k) * (3 : ℝ)⁻¹)), Finset.prod_mul_distrib, Finset.prod_const, Finset.card_erase_of_mem hi, Nat.card_Icc, Nat.add_sub_cancel, inv_pow] have h3 : (3 : ℝ) ^ n = 3 * 3 ^ (n - 1) := by rw [← pow_succ']; congr 1; omega have h3ne : (3 : ℝ) ^ (n - 1) ≠ 0 := by positivity obtain ⟨b, hb⟩ : ∃ b : ℝ, b = (∑ k ∈ Finset.Icc i n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))) := ⟨_, rfl⟩ rw [← hb] at hzb ⊢ push_cast rw [hzb, hsplit, he, h3] have hne' : (3 : ℝ) - 8 * 2 ^ i ≠ 0 := by intro h0 apply hne linear_combination (1 / 3 : ℝ) * h0 field_simp obtain ⟨zR, hzR⟩ := hR have hPZ : ∏ k ∈ Finset.Icc 1 n, ((3 : ℝ) - 8 * 2 ^ k) = (3 : ℝ) ^ n * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) := by rw [Finset.prod_congr rfl (fun k _ => (by ring : (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = ((3 : ℝ) - 8 * 2 ^ k) * (3 : ℝ)⁻¹)), Finset.prod_mul_distrib, Finset.prod_const, Nat.card_Icc, Nat.add_sub_cancel, inv_pow] have h3n : (3 : ℝ) ^ n ≠ 0 := by positivity field_simp have h9 : (9 : ℝ) ^ n = 3 ^ n * 3 ^ n := by rw [show (9 : ℝ) = 3 * 3 by norm_num, mul_pow] refine ⟨(Nat.factorial (n - 2) : ℤ) * ((∏ k ∈ Finset.Icc 1 n, ((3 : ℤ) - 8 * 2 ^ k)) * zE + 3 ^ n * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, ((1 : ℤ) - 2 ^ k)) * zR), ?_⟩ push_cast rw [hzE, hzR, hPZ, h9] ring refine ⟨fun n => if h : 1 ≤ n then Classical.choose (hn n h) else 0, fun n hn' => ?_⟩ simp only [dif_pos hn'] exact Classical.choose_spec (hn n hn')targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 398–454 at
b16ab29fc51b↗numerator_integral.head_integral.hsumZ0have∀ (s : Finset ℕ) (g : ℕ → ℝ), (∀ i ∈ s, ∃ (z : ℤ), (↑z : ℝ) = g i) → ∃ (z : ℤ), (↑z : ℝ) = ∑ i ∈ s, g iLeaves
∃ (a₁ : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(a₁ n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹, withhsumZ0 : ∀ (s : Finset ℕ) (g : ℕ → ℝ), (∀ i ∈ s, ∃ (z : ℤ), (↑z : ℝ) = g i) → ∃ (z : ℤ), (↑z : ℝ) = ∑ i ∈ s, g i.Uses library
FinsetFinset αis the type of finite sets of elements ofα. ,Finset.induction_onTo prove a proposition about an arbitraryFinset α, it suffices to prove it for the emptyFinset, and to show that if it holds for someFinset α, then it holds for theFinsetobtained by inserting a new element. .Lean, lines 399–407
have hsumZ0 : ∀ (s : Finset ℕ) (g : ℕ → ℝ), (∀ i ∈ s, ∃ z : ℤ, (z : ℝ) = g i) → ∃ z : ℤ, (z : ℝ) = ∑ i ∈ s, g i := by intro s g induction s using Finset.induction_on with | empty => intro _; exact ⟨0, by simp⟩ | insert a s ha ih => intro h obtain ⟨za, hza⟩ := h a (Finset.mem_insert_self a s) obtain ⟨zs, hzs⟩ := ih (fun i hi => h i (Finset.mem_insert_of_mem hi)) exact ⟨za + zs, by rw [Finset.sum_insert ha]; push_cast; rw [hza, hzs]⟩targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 399–407 at
b16ab29fc51b↗numerator_integral.head_integral.hsumZ0.s1case printed form did not read back: shown as its Lean lines only| empty => intro _; exact ⟨0, by simp⟩
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 402 at
b16ab29fc51b↗numerator_integral.head_integral.hsumZ0.s2caseLeaves
(∀ i ∈ insert a s, ∃ (z : ℤ), (↑z : ℝ) = g i) → ∃ (z : ℤ), (↑z : ℝ) = ∑ i ∈ insert a s, g i, witha : ℕ,s : Finset ℕ,ha : a ∉ s,ih : (∀ i ∈ s, ∃ (z : ℤ), (↑z : ℝ) = g i) → ∃ (z : ℤ), (↑z : ℝ) = ∑ i ∈ s, g i.Uses library
Exists.introExistential introduction. ,Finset.sum_insert.Lean, lines 403–407
| insert a s ha ih => intro h obtain ⟨za, hza⟩ := h a (Finset.mem_insert_self a s) obtain ⟨zs, hzs⟩ := ih (fun i hi => h i (Finset.mem_insert_of_mem hi)) exact ⟨za + zs, by rw [Finset.sum_insert ha]; push_cast; rw [hza, hzs]⟩targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 403–407 at
b16ab29fc51b↗numerator_integral.head_integral.hsumZ0.s2.s1obtain∃ (z : ℤ), (↑z : ℝ) = g aLeaves
∃ (z : ℤ), (↑z : ℝ) = ∑ i ∈ insert a s, g i, withza : ℤ,hza : (↑za : ℝ) = g a.Uses library
Finset.mem_insert_self.Lean, line 405
obtain ⟨za, hza⟩ := h a (Finset.mem_insert_self a s)
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 405 at
b16ab29fc51b↗numerator_integral.head_integral.hsumZ0.s2.s2obtain∃ (z : ℤ), (↑z : ℝ) = ∑ i ∈ s, g iLeaves
∃ (z : ℤ), (↑z : ℝ) = ∑ i ∈ insert a s, g i, withzs : ℤ,hzs : (↑zs : ℝ) = ∑ i ∈ s, g i.Uses library
Finset.mem_insert_of_mem.Lean, line 406
obtain ⟨zs, hzs⟩ := ih (fun i hi => h i (Finset.mem_insert_of_mem hi))
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 406 at
b16ab29fc51b↗
numerator_integral.head_integral.hnhave∀ (n : ℕ), (1 : ℕ) ≤ n → ∃ (z : ℤ), (↑z : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹Leaves
∃ (a₁ : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(a₁ n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹, withhn : ∀ (n : ℕ), (1 : ℕ) ≤ n → ∃ (z : ℤ), (↑z : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹.Uses library
Nat.factorialNat.factorial nis the factorial ofn. ,Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Exists.introExistential introduction. .Lean, lines 408–451
have hn : ∀ n : ℕ, 1 ≤ n → ∃ z : ℤ, (z : ℝ) = (9 : ℝ) ^ n * ((Nat.factorial (n - 2) : ℝ) * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, (1 - (2 : ℝ) ^ k))) * (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (∑ i ∈ Finset.Icc 1 k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹)) := by intro n hn obtain ⟨zE, hzE⟩ := polypart_integral n hn have hR : ∃ zR : ℤ, (zR : ℝ) = (3 : ℝ) ^ n * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * (∑ i ∈ Finset.Icc 1 n, (∑ k ∈ Finset.Icc i n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹) := by rw [Finset.mul_sum] refine hsumZ0 _ _ (fun i hi => ?_) have hi' := Finset.mem_Icc.mp hi obtain ⟨zb, hzb⟩ := residue_integral n i hi'.1 hi'.2 refine ⟨zb * (3 * ∏ j ∈ (Finset.Icc 1 n).erase i, ((3 : ℤ) - 8 * 2 ^ j)), ?_⟩ have hne : (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i) ≠ 0 := by have : (2 : ℝ) ≤ 2 ^ i := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi'.1 intro h0 linarith have hsplit : (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) = (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i) * ∏ k ∈ (Finset.Icc 1 n).erase i, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) := (Finset.mul_prod_erase _ (fun k => (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) hi).symm have he : ∏ k ∈ (Finset.Icc 1 n).erase i, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = (∏ k ∈ (Finset.Icc 1 n).erase i, ((3 : ℝ) - 8 * 2 ^ k)) * ((3 : ℝ) ^ (n - 1))⁻¹ := by rw [Finset.prod_congr rfl (fun k _ => (by ring : (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = ((3 : ℝ) - 8 * 2 ^ k) * (3 : ℝ)⁻¹)), Finset.prod_mul_distrib, Finset.prod_const, Finset.card_erase_of_mem hi, Nat.card_Icc, Nat.add_sub_cancel, inv_pow] have h3 : (3 : ℝ) ^ n = 3 * 3 ^ (n - 1) := by rw [← pow_succ']; congr 1; omega have h3ne : (3 : ℝ) ^ (n - 1) ≠ 0 := by positivity obtain ⟨b, hb⟩ : ∃ b : ℝ, b = (∑ k ∈ Finset.Icc i n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))) := ⟨_, rfl⟩ rw [← hb] at hzb ⊢ push_cast rw [hzb, hsplit, he, h3] have hne' : (3 : ℝ) - 8 * 2 ^ i ≠ 0 := by intro h0 apply hne linear_combination (1 / 3 : ℝ) * h0 field_simp obtain ⟨zR, hzR⟩ := hR have hPZ : ∏ k ∈ Finset.Icc 1 n, ((3 : ℝ) - 8 * 2 ^ k) = (3 : ℝ) ^ n * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) := by rw [Finset.prod_congr rfl (fun k _ => (by ring : (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = ((3 : ℝ) - 8 * 2 ^ k) * (3 : ℝ)⁻¹)), Finset.prod_mul_distrib, Finset.prod_const, Nat.card_Icc, Nat.add_sub_cancel, inv_pow] have h3n : (3 : ℝ) ^ n ≠ 0 := by positivity field_simp have h9 : (9 : ℝ) ^ n = 3 ^ n * 3 ^ n := by rw [show (9 : ℝ) = 3 * 3 by norm_num, mul_pow] refine ⟨(Nat.factorial (n - 2) : ℤ) * ((∏ k ∈ Finset.Icc 1 n, ((3 : ℤ) - 8 * 2 ^ k)) * zE + 3 ^ n * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, ((1 : ℤ) - 2 ^ k)) * zR), ?_⟩ push_cast rw [hzE, hzR, hPZ, h9] ringtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 408–451 at
b16ab29fc51b↗numerator_integral.head_integral.hn.s1obtain∃ (z : ℤ), (↑z : ℝ) = ((3 : ℝ) ^ n * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) n, (∑ k ∈ Finset.Icc i n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹)Leaves
∃ (z : ℤ), (↑z : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹, withzE : ℤ,hzE : (↑zE : ℝ) = ((3 : ℝ) ^ n * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) n, (∑ k ∈ Finset.Icc i n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹).Lean, line 410
obtain ⟨zE, hzE⟩ := polypart_integral n hn
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 410 at
b16ab29fc51b↗numerator_integral.head_integral.hn.hRhave∃ (zR : ℤ), (↑zR : ℝ) = ((3 : ℝ) ^ n * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∑ i ∈ Finset.Icc (1 : ℕ) n, (∑ k ∈ Finset.Icc i n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹Leaves
∃ (z : ℤ), (↑z : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹, withhR : ∃ (zR : ℤ), (↑zR : ℝ) = ((3 : ℝ) ^ n * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∑ i ∈ Finset.Icc (1 : ℕ) n, (∑ k ∈ Finset.Icc i n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹.Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.mul_sum,Exists.introExistential introduction. .Lean, lines 411–439
have hR : ∃ zR : ℤ, (zR : ℝ) = (3 : ℝ) ^ n * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * (∑ i ∈ Finset.Icc 1 n, (∑ k ∈ Finset.Icc i n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹) := by rw [Finset.mul_sum] refine hsumZ0 _ _ (fun i hi => ?_) have hi' := Finset.mem_Icc.mp hi obtain ⟨zb, hzb⟩ := residue_integral n i hi'.1 hi'.2 refine ⟨zb * (3 * ∏ j ∈ (Finset.Icc 1 n).erase i, ((3 : ℤ) - 8 * 2 ^ j)), ?_⟩ have hne : (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i) ≠ 0 := by have : (2 : ℝ) ≤ 2 ^ i := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi'.1 intro h0 linarith have hsplit : (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) = (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i) * ∏ k ∈ (Finset.Icc 1 n).erase i, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) := (Finset.mul_prod_erase _ (fun k => (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) hi).symm have he : ∏ k ∈ (Finset.Icc 1 n).erase i, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = (∏ k ∈ (Finset.Icc 1 n).erase i, ((3 : ℝ) - 8 * 2 ^ k)) * ((3 : ℝ) ^ (n - 1))⁻¹ := by rw [Finset.prod_congr rfl (fun k _ => (by ring : (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = ((3 : ℝ) - 8 * 2 ^ k) * (3 : ℝ)⁻¹)), Finset.prod_mul_distrib, Finset.prod_const, Finset.card_erase_of_mem hi, Nat.card_Icc, Nat.add_sub_cancel, inv_pow] have h3 : (3 : ℝ) ^ n = 3 * 3 ^ (n - 1) := by rw [← pow_succ']; congr 1; omega have h3ne : (3 : ℝ) ^ (n - 1) ≠ 0 := by positivity obtain ⟨b, hb⟩ : ∃ b : ℝ, b = (∑ k ∈ Finset.Icc i n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))) := ⟨_, rfl⟩ rw [← hb] at hzb ⊢ push_cast rw [hzb, hsplit, he, h3] have hne' : (3 : ℝ) - 8 * 2 ^ i ≠ 0 := by intro h0 apply hne linear_combination (1 / 3 : ℝ) * h0 field_simptargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 411–439 at
b16ab29fc51b↗numerator_integral.head_integral.hn.hR.hi'have(1 : ℕ) ≤ i ∧ i ≤ nLeaves
∃ (z : ℤ), (↑z : ℝ) = ((3 : ℝ) ^ n * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ((∑ k ∈ Finset.Icc i n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹), withhi' : (1 : ℕ) ≤ i ∧ i ≤ n.Uses library
Finset.mem_Icc.Lean, line 414
have hi' := Finset.mem_Icc.mp hi
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 414 at
b16ab29fc51b↗numerator_integral.head_integral.hn.hR.s2obtain∃ (z : ℤ), (↑z : ℝ) = ∑ k ∈ Finset.Icc i n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))Leaves
∃ (z : ℤ), (↑z : ℝ) = ((3 : ℝ) ^ n * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ((∑ k ∈ Finset.Icc i n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹), withzb : ℤ,hzb : (↑zb : ℝ) = ∑ k ∈ Finset.Icc i n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))).Lean, line 415
obtain ⟨zb, hzb⟩ := residue_integral n i hi'.1 hi'.2
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 415 at
b16ab29fc51b↗numerator_integral.head_integral.hn.hR.hnehave(1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i ≠ (0 : ℝ)Leaves
(↑(zb * ((3 : ℤ) * ∏ j ∈ (Finset.Icc (1 : ℕ) n).erase i, ((3 : ℤ) - (8 : ℤ) * (2 : ℤ) ^ j))) : ℝ) = ((3 : ℝ) ^ n * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ((∑ k ∈ Finset.Icc i n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹), withhne : (1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i ≠ (0 : ℝ).Lean, lines 417–422
have hne : (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i) ≠ 0 := by have : (2 : ℝ) ≤ 2 ^ i := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi'.1 intro h0 linarithtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 417–422 at
b16ab29fc51b↗numerator_integral.head_integral.hn.hR.hne.thishave(2 : ℝ) ≤ (2 : ℝ) ^ iLeaves
(1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i ≠ (0 : ℝ), withthis : (2 : ℝ) ≤ (2 : ℝ) ^ i.Lean, lines 418–420
have : (2 : ℝ) ≤ 2 ^ i := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi'.1targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 418–420 at
b16ab29fc51b↗numerator_integral.head_integral.hn.hR.hne.this.s1calc(2 : ℝ) = (2 : ℝ) ^ (1 : ℕ)Closes the goal.
Uses library
pow_one.Lean, line 419
calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 419 at
b16ab29fc51b↗numerator_integral.head_integral.hn.hR.hne.this.s2calc(2 : ℝ) ^ (1 : ℕ) ≤ (2 : ℝ) ^ iCloses the goal.
Uses library
pow_le_pow_right₀.Lean, line 420
_ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi'.1
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 420 at
b16ab29fc51b↗
numerator_integral.head_integral.hn.hR.hsplithave∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i) * ∏ k ∈ (Finset.Icc (1 : ℕ) n).erase i, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)Leaves
(↑(zb * ((3 : ℤ) * ∏ j ∈ (Finset.Icc (1 : ℕ) n).erase i, ((3 : ℤ) - (8 : ℤ) * (2 : ℤ) ^ j))) : ℝ) = ((3 : ℝ) ^ n * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ((∑ k ∈ Finset.Icc i n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹), withhsplit : ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i) * ∏ k ∈ (Finset.Icc (1 : ℕ) n).erase i, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.mul_prod_eraseTaking a product overs : Finset ιis the same as multiplying the value on a single elementf aby the product ofs.erase a. .Lean, lines 423–424
have hsplit : (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) = (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i) * ∏ k ∈ (Finset.Icc 1 n).erase i, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) := (Finset.mul_prod_erase _ (fun k => (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) hi).symmtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 423–424 at
b16ab29fc51b↗numerator_integral.head_integral.hn.hR.hehave∏ k ∈ (Finset.Icc (1 : ℕ) n).erase i, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = (∏ k ∈ (Finset.Icc (1 : ℕ) n).erase i, ((3 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ k)) * ((3 : ℝ) ^ (n - (1 : ℕ)))⁻¹Leaves
(↑(zb * ((3 : ℤ) * ∏ j ∈ (Finset.Icc (1 : ℕ) n).erase i, ((3 : ℤ) - (8 : ℤ) * (2 : ℤ) ^ j))) : ℝ) = ((3 : ℝ) ^ n * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ((∑ k ∈ Finset.Icc i n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹), withhe : ∏ k ∈ (Finset.Icc (1 : ℕ) n).erase i, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = (∏ k ∈ (Finset.Icc (1 : ℕ) n).erase i, ((3 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ k)) * ((3 : ℝ) ^ (n - (1 : ℕ)))⁻¹.Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.prod_congr,rflrfl : a = ais the unique constructor of the equality type. ,Finset.prod_mul_distrib,Finset.prod_const,Finset.card_erase_of_mem$\#(s \setminus \{a\}) = \#s - 1$ if $a \in s$. ,Nat.card_Icc,Nat.add_sub_cancel,inv_pow.Lean, lines 425–427
have he : ∏ k ∈ (Finset.Icc 1 n).erase i, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = (∏ k ∈ (Finset.Icc 1 n).erase i, ((3 : ℝ) - 8 * 2 ^ k)) * ((3 : ℝ) ^ (n - 1))⁻¹ := by rw [Finset.prod_congr rfl (fun k _ => (by ring : (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = ((3 : ℝ) - 8 * 2 ^ k) * (3 : ℝ)⁻¹)), Finset.prod_mul_distrib, Finset.prod_const, Finset.card_erase_of_mem hi, Nat.card_Icc, Nat.add_sub_cancel, inv_pow]targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 425–427 at
b16ab29fc51b↗numerator_integral.head_integral.hn.hR.h3have(3 : ℝ) ^ n = (3 : ℝ) * (3 : ℝ) ^ (n - (1 : ℕ))Leaves
(↑(zb * ((3 : ℤ) * ∏ j ∈ (Finset.Icc (1 : ℕ) n).erase i, ((3 : ℤ) - (8 : ℤ) * (2 : ℤ) ^ j))) : ℝ) = ((3 : ℝ) ^ n * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ((∑ k ∈ Finset.Icc i n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹), withh3 : (3 : ℝ) ^ n = (3 : ℝ) * (3 : ℝ) ^ (n - (1 : ℕ)).Uses library
pow_succ'.Lean, lines 428–429
have h3 : (3 : ℝ) ^ n = 3 * 3 ^ (n - 1) := by rw [← pow_succ']; congr 1; omegatargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 428–429 at
b16ab29fc51b↗numerator_integral.head_integral.hn.hR.h3nehave(3 : ℝ) ^ (n - (1 : ℕ)) ≠ (0 : ℝ)routine: positivityLeaves
(↑(zb * ((3 : ℤ) * ∏ j ∈ (Finset.Icc (1 : ℕ) n).erase i, ((3 : ℤ) - (8 : ℤ) * (2 : ℤ) ^ j))) : ℝ) = ((3 : ℝ) ^ n * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ((∑ k ∈ Finset.Icc i n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹), withh3ne : (3 : ℝ) ^ (n - (1 : ℕ)) ≠ (0 : ℝ).Lean, line 430
have h3ne : (3 : ℝ) ^ (n - 1) ≠ 0 := by positivity
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 430 at
b16ab29fc51b↗numerator_integral.head_integral.hn.hR.s8obtain∃ (b : ℝ), b = ∑ k ∈ Finset.Icc i n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))Leaves
(↑(zb * ((3 : ℤ) * ∏ j ∈ (Finset.Icc (1 : ℕ) n).erase i, ((3 : ℤ) - (8 : ℤ) * (2 : ℤ) ^ j))) : ℝ) = ((3 : ℝ) ^ n * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ((∑ k ∈ Finset.Icc i n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹), withb : ℝ,hb : b = ∑ k ∈ Finset.Icc i n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Exists.introExistential introduction. ,rflrfl : a = ais the unique constructor of the equality type. .Lean, line 431
obtain ⟨b, hb⟩ : ∃ b : ℝ, b = (∑ k ∈ Finset.Icc i n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))) := ⟨_, rfl⟩
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 431 at
b16ab29fc51b↗numerator_integral.head_integral.hn.hR.hne'have(3 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ i ≠ (0 : ℝ)Leaves
b * ((3 : ℝ) * ∏ x ∈ (Finset.Icc (1 : ℕ) n).erase i, ((3 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ x)) = (3 : ℝ) * (3 : ℝ) ^ (n - (1 : ℕ)) * (((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i) * ((∏ k ∈ (Finset.Icc (1 : ℕ) n).erase i, ((3 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ k)) * ((3 : ℝ) ^ (n - (1 : ℕ)))⁻¹)) * (b * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹), withhne' : (3 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ i ≠ (0 : ℝ).Lean, lines 435–438
have hne' : (3 : ℝ) - 8 * 2 ^ i ≠ 0 := by intro h0 apply hne linear_combination (1 / 3 : ℝ) * h0targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 435–438 at
b16ab29fc51b↗
numerator_integral.head_integral.hn.s3obtain∃ (zR : ℤ), (↑zR : ℝ) = ((3 : ℝ) ^ n * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∑ i ∈ Finset.Icc (1 : ℕ) n, (∑ k ∈ Finset.Icc i n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹Leaves
∃ (z : ℤ), (↑z : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹, withzR : ℤ,hzR : (↑zR : ℝ) = ((3 : ℝ) ^ n * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∑ i ∈ Finset.Icc (1 : ℕ) n, (∑ k ∈ Finset.Icc i n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹.Lean, line 440
obtain ⟨zR, hzR⟩ := hR
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 440 at
b16ab29fc51b↗numerator_integral.head_integral.hn.hPZhave∏ k ∈ Finset.Icc (1 : ℕ) n, ((3 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ k) = (3 : ℝ) ^ n * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)Leaves
∃ (z : ℤ), (↑z : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹, withhPZ : ∏ k ∈ Finset.Icc (1 : ℕ) n, ((3 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ k) = (3 : ℝ) ^ n * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.prod_congr,rflrfl : a = ais the unique constructor of the equality type. ,Finset.prod_mul_distrib,Finset.prod_const,Nat.card_Icc,Nat.add_sub_cancel,inv_pow.Lean, lines 441–445
have hPZ : ∏ k ∈ Finset.Icc 1 n, ((3 : ℝ) - 8 * 2 ^ k) = (3 : ℝ) ^ n * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) := by rw [Finset.prod_congr rfl (fun k _ => (by ring : (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = ((3 : ℝ) - 8 * 2 ^ k) * (3 : ℝ)⁻¹)), Finset.prod_mul_distrib, Finset.prod_const, Nat.card_Icc, Nat.add_sub_cancel, inv_pow] have h3n : (3 : ℝ) ^ n ≠ 0 := by positivity field_simptargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 441–445 at
b16ab29fc51b↗numerator_integral.head_integral.hn.hPZ.h3nhave(3 : ℝ) ^ n ≠ (0 : ℝ)routine: positivityLeaves
∏ k ∈ Finset.Icc (1 : ℕ) n, ((3 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ k) = (3 : ℝ) ^ n * ((∏ x ∈ Finset.Icc (1 : ℕ) n, ((3 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ x)) * ((3 : ℝ) ^ n)⁻¹), withh3n : (3 : ℝ) ^ n ≠ (0 : ℝ).Lean, line 444
have h3n : (3 : ℝ) ^ n ≠ 0 := by positivity
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 444 at
b16ab29fc51b↗
numerator_integral.head_integral.hn.h9have(9 : ℝ) ^ n = (3 : ℝ) ^ n * (3 : ℝ) ^ nLeaves
∃ (z : ℤ), (↑z : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹, withh9 : (9 : ℝ) ^ n = (3 : ℝ) ^ n * (3 : ℝ) ^ n.Uses library
mul_pow.Lean, lines 446–447
have h9 : (9 : ℝ) ^ n = 3 ^ n * 3 ^ n := by rw [show (9 : ℝ) = 3 * 3 by norm_num, mul_pow]targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 446–447 at
b16ab29fc51b↗
numerator_integral.s4obtain∃ (a₁ : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(a₁ n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹Leaves
∃ (a : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(a n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), witha₁ : ℕ → ℤ,h₁ : ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(a₁ n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹.Lean, line 455
obtain ⟨a₁, h₁⟩ := head_integral
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 455 at
b16ab29fc51b↗numerator_integral.hmerhave∃ (a₂ : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(a₂ n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))Leaves
∃ (a : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(a n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withhmer : ∃ (a₂ : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(a₂ n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ)).Uses library
Nat.factorialNat.factorial nis the factorial ofn. ,Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Exists.introExistential introduction. ,Classical.chooseGiven that there exists an element satisfyingp, returns one such element. ,dif_pos,Classical.choose_spec.Lean, lines 456–556
have hmer : ∃ a₂ : ℕ → ℤ, ∀ n : ℕ, 1 ≤ n → (a₂ n : ℝ) = (9 : ℝ) ^ n * ((Nat.factorial (n - 2) : ℝ) * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, (1 - (2 : ℝ) ^ k))) * (∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - 1)) := by have key : ∀ n : ℕ, 1 ≤ n → ∀ i : ℕ, 1 ≤ i → i ≤ n - 1 → ∃ z : ℤ, (z : ℝ) = (3 : ℝ) ^ (n - 1 - i) * (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) := by intro n hn i hi1 hi2 obtain ⟨α, hα⟩ := hpoly n hn have hA : ∀ k : ℕ, ∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k)) = ∑ j ∈ Finset.range n, (α j : ℝ) * ((8 / 3 : ℝ) * 2 ^ k) ^ j := by intro k rw [← hα] refine Finset.prod_congr rfl (fun t _ => ?_) rw [pow_add]; ring simp only [hA] have e1 : ∑ k ∈ Finset.Icc 1 n, (-(∑ j ∈ Finset.range n, (α j : ℝ) * ((8 / 3 : ℝ) * 2 ^ k) ^ j) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) * ((((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) = ∑ j ∈ Finset.range n, ∑ k ∈ Finset.Icc 1 n, (-(α j : ℝ)) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) := by rw [Finset.sum_comm] refine Finset.sum_congr rfl (fun k _ => ?_) rw [neg_div, neg_mul, Finset.sum_div, Finset.sum_mul, ← Finset.sum_neg_distrib] refine Finset.sum_congr rfl (fun j _ => ?_) ring rw [e1, Finset.mul_sum] refine hsumZ _ _ (fun j hj => ?_) have hj' := Finset.mem_range.mp hj rw [← Finset.mul_sum] have hcX : ∀ k : ℕ, ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ≠ 0 := fun k => by positivity rcases lt_or_ge j i with hji | hji · refine ⟨0, ?_⟩ have hvan : ∑ k ∈ Finset.Icc 1 n, (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) = ((8 / 3 : ℝ) ^ (i - j))⁻¹ * ∑ k ∈ Finset.Icc 1 n, (((2 : ℝ) ^ k) ^ (i - j - 1 + 1))⁻¹ / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))) := by rw [Finset.mul_sum] refine Finset.sum_congr rfl (fun k _ => ?_) have hk : ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) = ((8 / 3 : ℝ) ^ (i - j))⁻¹ * (((2 : ℝ) ^ k) ^ (i - j))⁻¹ := by rw [show ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i = ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ (i - j) from by rw [← pow_add]; congr 1; omega, mul_inv, ← mul_assoc, mul_inv_cancel₀ (pow_ne_zero _ (hcX k)), one_mul, mul_pow, mul_inv] rw [hk, mul_div_assoc, show i - j - 1 + 1 = i - j by omega] rw [hvan, hV (i - j - 1) (Finset.Icc 1 n) (by rw [Nat.card_Icc]; omega)] simp · obtain ⟨w, hw⟩ := hW _ (Finset.Icc 1 n) (j - i) rfl refine ⟨-(α j) * 3 ^ (n - 1 - j) * 8 ^ (j - i) * w, ?_⟩ have hpos : ∑ k ∈ Finset.Icc 1 n, (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) = (8 / 3 : ℝ) ^ (j - i) * ∑ k ∈ Finset.Icc 1 n, ((2 : ℝ) ^ k) ^ (j - i) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))) := by rw [Finset.mul_sum] refine Finset.sum_congr rfl (fun k _ => ?_) have hk : ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) = (8 / 3 : ℝ) ^ (j - i) * ((2 : ℝ) ^ k) ^ (j - i) := by rw [show ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j = ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ (j - i) * ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i from by rw [← pow_add]; congr 1; omega, mul_assoc, mul_inv_cancel₀ (pow_ne_zero _ (hcX k)), mul_one, mul_pow] rw [hk, mul_div_assoc] have h3 : (3 : ℝ) ^ (n - 1 - i) = 3 ^ (n - 1 - j) * 3 ^ (j - i) := by rw [← pow_add]; congr 1; omega have h83 : (8 / 3 : ℝ) ^ (j - i) * 3 ^ (j - i) = 8 ^ (j - i) := by rw [← mul_pow]; norm_num push_cast rw [hpos, hw, h3, ← h83] ring have hW3 : ∀ n : ℕ, ∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = (∏ k ∈ Finset.Icc 1 n, ((3 : ℝ) - 8 * 2 ^ k)) * ((3 : ℝ) ^ n)⁻¹ := by intro n rw [Finset.prod_congr rfl (fun k _ => (by ring : (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = ((3 : ℝ) - 8 * 2 ^ k) * (3 : ℝ)⁻¹)), Finset.prod_mul_distrib, Finset.prod_const, Nat.card_Icc, Nat.add_sub_cancel, inv_pow] have hdvd : ∀ n i : ℕ, 1 ≤ i → i ≤ n - 1 → ((2 : ℤ) ^ i - 1) ∣ ∏ k ∈ Finset.Icc ((n + 1) / 2) n, ((1 : ℤ) - 2 ^ k) := by intro n i hi1 hi2 obtain ⟨k0, hk0⟩ : ∃ k0, k0 = i * (n / i) := ⟨_, rfl⟩ have hle : k0 ≤ n := by rw [hk0, mul_comm]; exact Nat.div_mul_le_self n i have hlt : n < k0 + i := by rw [hk0]; have := Nat.lt_mul_div_succ n (by omega : 0 < i); linarith have hge : i ≤ k0 := by rw [hk0]; exact Nat.le_mul_of_pos_right i (Nat.div_pos (by omega) (by omega)) have hmem : k0 ∈ Finset.Icc ((n + 1) / 2) n := Finset.mem_Icc.mpr ⟨by omega, hle⟩ have h1 : ((2 : ℤ) ^ i - 1) ∣ (2 : ℤ) ^ k0 - 1 := by have := sub_dvd_pow_sub_pow ((2 : ℤ) ^ i) 1 (n / i) rw [one_pow, ← pow_mul, ← hk0] at this exact this have h2 : ((2 : ℤ) ^ i - 1) ∣ (1 : ℤ) - 2 ^ k0 := by have : (1 : ℤ) - 2 ^ k0 = -((2 : ℤ) ^ k0 - 1) := by ring rw [this]; exact (dvd_neg).mpr h1 exact h2.trans (Finset.dvd_prod_of_mem (fun k => (1 : ℤ) - 2 ^ k) hmem) have hsumZ : ∀ (s : Finset ℕ) (g : ℕ → ℝ), (∀ i ∈ s, ∃ z : ℤ, (z : ℝ) = g i) → ∃ z : ℤ, (z : ℝ) = ∑ i ∈ s, g i := by intro s g induction s using Finset.induction_on with | empty => intro _; exact ⟨0, by simp⟩ | insert a s ha ih => intro h obtain ⟨za, hza⟩ := h a (Finset.mem_insert_self a s) obtain ⟨zs, hzs⟩ := ih (fun i hi => h i (Finset.mem_insert_of_mem hi)) exact ⟨za + zs, by rw [Finset.sum_insert ha]; push_cast; rw [hza, hzs]⟩ have hn : ∀ n : ℕ, 1 ≤ n → ∃ z : ℤ, (z : ℝ) = (9 : ℝ) ^ n * ((Nat.factorial (n - 2) : ℝ) * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, (1 - (2 : ℝ) ^ k))) * (∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - 1)) := by intro n hn rw [Finset.mul_sum] refine hsumZ _ _ (fun i hi => ?_) have hi' := Finset.mem_Icc.mp hi obtain ⟨z1, hz1⟩ := key n hn i hi'.1 hi'.2 obtain ⟨q, hq⟩ := hdvd n i hi'.1 hi'.2 have hqR : ∏ k ∈ Finset.Icc ((n + 1) / 2) n, ((1 : ℝ) - 2 ^ k) = ((2 : ℝ) ^ i - 1) * q := by exact_mod_cast hq have h2i : (2 : ℝ) ^ i - 1 ≠ 0 := by have : (2 : ℝ) ≤ 2 ^ i := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi'.1 linarith have h9 : (9 : ℝ) ^ n = 3 ^ (i + 1) * 3 ^ (n - 1 - i) * 3 ^ n := by rw [show (9 : ℝ) = 3 * 3 by norm_num, mul_pow] congr 1 rw [← pow_add] congr 1 omega refine ⟨3 ^ (i + 1) * (Nat.factorial (n - 2) : ℤ) * (∏ k ∈ Finset.Icc 1 n, ((3 : ℤ) - 8 * 2 ^ k)) * q * z1, ?_⟩ push_cast rw [hz1, hW3 n, hqR, h9] have h3n : (3 : ℝ) ^ n ≠ 0 := by positivity field_simp refine ⟨fun n => if h : 1 ≤ n then Classical.choose (hn n h) else 0, fun n hn' => ?_⟩ simp only [dif_pos hn'] exact Classical.choose_spec (hn n hn')targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 456–556 at
b16ab29fc51b↗numerator_integral.hmer.keyhave∀ (n : ℕ), (1 : ℕ) ≤ n → ∀ (i : ℕ), (1 : ℕ) ≤ i → i ≤ n - (1 : ℕ) → ∃ (z : ℤ), (↑z : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ) - i) * ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹Leaves
∃ (a₂ : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(a₂ n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ)), withkey : ∀ (n : ℕ), (1 : ℕ) ≤ n → ∀ (i : ℕ), (1 : ℕ) ≤ i → i ≤ n - (1 : ℕ) → ∃ (z : ℤ), (↑z : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ) - i) * ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹.Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.mul_sum,lt_or_ge.Lean, lines 457–501
have key : ∀ n : ℕ, 1 ≤ n → ∀ i : ℕ, 1 ≤ i → i ≤ n - 1 → ∃ z : ℤ, (z : ℝ) = (3 : ℝ) ^ (n - 1 - i) * (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) := by intro n hn i hi1 hi2 obtain ⟨α, hα⟩ := hpoly n hn have hA : ∀ k : ℕ, ∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k)) = ∑ j ∈ Finset.range n, (α j : ℝ) * ((8 / 3 : ℝ) * 2 ^ k) ^ j := by intro k rw [← hα] refine Finset.prod_congr rfl (fun t _ => ?_) rw [pow_add]; ring simp only [hA] have e1 : ∑ k ∈ Finset.Icc 1 n, (-(∑ j ∈ Finset.range n, (α j : ℝ) * ((8 / 3 : ℝ) * 2 ^ k) ^ j) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) * ((((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) = ∑ j ∈ Finset.range n, ∑ k ∈ Finset.Icc 1 n, (-(α j : ℝ)) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) := by rw [Finset.sum_comm] refine Finset.sum_congr rfl (fun k _ => ?_) rw [neg_div, neg_mul, Finset.sum_div, Finset.sum_mul, ← Finset.sum_neg_distrib] refine Finset.sum_congr rfl (fun j _ => ?_) ring rw [e1, Finset.mul_sum] refine hsumZ _ _ (fun j hj => ?_) have hj' := Finset.mem_range.mp hj rw [← Finset.mul_sum] have hcX : ∀ k : ℕ, ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ≠ 0 := fun k => by positivity rcases lt_or_ge j i with hji | hji · refine ⟨0, ?_⟩ have hvan : ∑ k ∈ Finset.Icc 1 n, (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) = ((8 / 3 : ℝ) ^ (i - j))⁻¹ * ∑ k ∈ Finset.Icc 1 n, (((2 : ℝ) ^ k) ^ (i - j - 1 + 1))⁻¹ / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))) := by rw [Finset.mul_sum] refine Finset.sum_congr rfl (fun k _ => ?_) have hk : ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) = ((8 / 3 : ℝ) ^ (i - j))⁻¹ * (((2 : ℝ) ^ k) ^ (i - j))⁻¹ := by rw [show ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i = ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ (i - j) from by rw [← pow_add]; congr 1; omega, mul_inv, ← mul_assoc, mul_inv_cancel₀ (pow_ne_zero _ (hcX k)), one_mul, mul_pow, mul_inv] rw [hk, mul_div_assoc, show i - j - 1 + 1 = i - j by omega] rw [hvan, hV (i - j - 1) (Finset.Icc 1 n) (by rw [Nat.card_Icc]; omega)] simp · obtain ⟨w, hw⟩ := hW _ (Finset.Icc 1 n) (j - i) rfl refine ⟨-(α j) * 3 ^ (n - 1 - j) * 8 ^ (j - i) * w, ?_⟩ have hpos : ∑ k ∈ Finset.Icc 1 n, (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) = (8 / 3 : ℝ) ^ (j - i) * ∑ k ∈ Finset.Icc 1 n, ((2 : ℝ) ^ k) ^ (j - i) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))) := by rw [Finset.mul_sum] refine Finset.sum_congr rfl (fun k _ => ?_) have hk : ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) = (8 / 3 : ℝ) ^ (j - i) * ((2 : ℝ) ^ k) ^ (j - i) := by rw [show ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j = ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ (j - i) * ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i from by rw [← pow_add]; congr 1; omega, mul_assoc, mul_inv_cancel₀ (pow_ne_zero _ (hcX k)), mul_one, mul_pow] rw [hk, mul_div_assoc] have h3 : (3 : ℝ) ^ (n - 1 - i) = 3 ^ (n - 1 - j) * 3 ^ (j - i) := by rw [← pow_add]; congr 1; omega have h83 : (8 / 3 : ℝ) ^ (j - i) * 3 ^ (j - i) = 8 ^ (j - i) := by rw [← mul_pow]; norm_num push_cast rw [hpos, hw, h3, ← h83] ringtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 457–501 at
b16ab29fc51b↗numerator_integral.hmer.key.s1obtain∃ (α : ℕ → ℤ), ∀ (y : ℝ), ∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ t * y) = ∑ j ∈ Finset.range n, (↑(α j) : ℝ) * y ^ jLeaves
∃ (z : ℤ), (↑z : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ) - i) * ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹, withα : ℕ → ℤ,hα : ∀ (y : ℝ), ∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ t * y) = ∑ j ∈ Finset.range n, (↑(α j) : ℝ) * y ^ j.Lean, line 459
obtain ⟨α, hα⟩ := hpoly n hn
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 459 at
b16ab29fc51b↗numerator_integral.hmer.key.hAhave∀ (k : ℕ), ∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k)) = ∑ j ∈ Finset.range n, (↑(α j) : ℝ) * ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ jLeaves
∃ (z : ℤ), (↑z : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ) - i) * ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹, withhA : ∀ (k : ℕ), ∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k)) = ∑ j ∈ Finset.range n, (↑(α j) : ℝ) * ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j.Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.rangerange nis the set of natural numbers less thann. ,Finset.prod_congr,rflrfl : a = ais the unique constructor of the equality type. ,pow_add.Lean, lines 460–464
have hA : ∀ k : ℕ, ∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k)) = ∑ j ∈ Finset.range n, (α j : ℝ) * ((8 / 3 : ℝ) * 2 ^ k) ^ j := by intro k rw [← hα] refine Finset.prod_congr rfl (fun t _ => ?_) rw [pow_add]; ringtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 460–464 at
b16ab29fc51b↗numerator_integral.hmer.key.e1have∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹ = ∑ j ∈ Finset.range n, ∑ k ∈ Finset.Icc (1 : ℕ) n, -(↑(α j) : ℝ) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹ / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))))Leaves
∃ (z : ℤ), (↑z : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ) - i) * ∑ x ∈ Finset.Icc (1 : ℕ) n, ((-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * ((8 / 3 : ℝ) * (2 : ℝ) ^ x) ^ j) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase x, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑x : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ x) ^ i)⁻¹, withe1 : ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹ = ∑ j ∈ Finset.range n, ∑ k ∈ Finset.Icc (1 : ℕ) n, -(↑(α j) : ℝ) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹ / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.rangerange nis the set of natural numbers less thann. ,Finset.sum_comm,Finset.sum_congr,rflrfl : a = ais the unique constructor of the equality type. ,neg_div,neg_mul,Finset.sum_div,Finset.sum_mul,Finset.sum_neg_distrib.Lean, lines 466–471
have e1 : ∑ k ∈ Finset.Icc 1 n, (-(∑ j ∈ Finset.range n, (α j : ℝ) * ((8 / 3 : ℝ) * 2 ^ k) ^ j) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) * ((((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) = ∑ j ∈ Finset.range n, ∑ k ∈ Finset.Icc 1 n, (-(α j : ℝ)) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) := by rw [Finset.sum_comm] refine Finset.sum_congr rfl (fun k _ => ?_) rw [neg_div, neg_mul, Finset.sum_div, Finset.sum_mul, ← Finset.sum_neg_distrib] refine Finset.sum_congr rfl (fun j _ => ?_) ringtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 466–471 at
b16ab29fc51b↗numerator_integral.hmer.key.hj'havej < nLeaves
∃ (z : ℤ), (↑z : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ) - i) * ∑ k ∈ Finset.Icc (1 : ℕ) n, -(↑(α j) : ℝ) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹ / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))), withhj' : j < n.Uses library
Finset.mem_range.Lean, line 474
have hj' := Finset.mem_range.mp hj
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 474 at
b16ab29fc51b↗numerator_integral.hmer.key.hcXhave∀ (k : ℕ), (8 / 3 : ℝ) * (2 : ℝ) ^ k ≠ (0 : ℝ)Leaves
∃ (z : ℤ), (↑z : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ) - i) * (-(↑(α j) : ℝ) * ∑ i_1 ∈ Finset.Icc (1 : ℕ) n, ((8 / 3 : ℝ) * (2 : ℝ) ^ i_1) ^ j * (((8 / 3 : ℝ) * (2 : ℝ) ^ i_1) ^ i)⁻¹ / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase i_1, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑i_1 : ℤ)))), withhcX : ∀ (k : ℕ), (8 / 3 : ℝ) * (2 : ℝ) ^ k ≠ (0 : ℝ).Lean, line 476
have hcX : ∀ k : ℕ, ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ≠ 0 := fun k => by positivity
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 476 at
b16ab29fc51b↗numerator_integral.hmer.key.s6caseLeaves
∃ (z : ℤ), (↑z : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ) - i) * (-(↑(α j) : ℝ) * ∑ i_1 ∈ Finset.Icc (1 : ℕ) n, ((8 / 3 : ℝ) * (2 : ℝ) ^ i_1) ^ j * (((8 / 3 : ℝ) * (2 : ℝ) ^ i_1) ^ i)⁻¹ / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase i_1, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑i_1 : ℤ)))).Uses library
Exists.introExistential introduction. ,Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Nat.card_Icc.Lean, lines 478–487
· refine ⟨0, ?_⟩ have hvan : ∑ k ∈ Finset.Icc 1 n, (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) = ((8 / 3 : ℝ) ^ (i - j))⁻¹ * ∑ k ∈ Finset.Icc 1 n, (((2 : ℝ) ^ k) ^ (i - j - 1 + 1))⁻¹ / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))) := by rw [Finset.mul_sum] refine Finset.sum_congr rfl (fun k _ => ?_) have hk : ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) = ((8 / 3 : ℝ) ^ (i - j))⁻¹ * (((2 : ℝ) ^ k) ^ (i - j))⁻¹ := by rw [show ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i = ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ (i - j) from by rw [← pow_add]; congr 1; omega, mul_inv, ← mul_assoc, mul_inv_cancel₀ (pow_ne_zero _ (hcX k)), one_mul, mul_pow, mul_inv] rw [hk, mul_div_assoc, show i - j - 1 + 1 = i - j by omega] rw [hvan, hV (i - j - 1) (Finset.Icc 1 n) (by rw [Nat.card_Icc]; omega)] simptargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 478–487 at
b16ab29fc51b↗numerator_integral.hmer.key.s6.hvanhave∑ k ∈ Finset.Icc (1 : ℕ) n, ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹ / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = ((8 / 3 : ℝ) ^ (i - j))⁻¹ * ∑ k ∈ Finset.Icc (1 : ℕ) n, (((2 : ℝ) ^ k) ^ (i - j - (1 : ℕ) + (1 : ℕ)))⁻¹ / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))Leaves
(↑(0 : ℤ) : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ) - i) * (-(↑(α j) : ℝ) * ∑ i_1 ∈ Finset.Icc (1 : ℕ) n, ((8 / 3 : ℝ) * (2 : ℝ) ^ i_1) ^ j * (((8 / 3 : ℝ) * (2 : ℝ) ^ i_1) ^ i)⁻¹ / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase i_1, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑i_1 : ℤ)))), withhvan : ∑ k ∈ Finset.Icc (1 : ℕ) n, ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹ / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = ((8 / 3 : ℝ) ^ (i - j))⁻¹ * ∑ k ∈ Finset.Icc (1 : ℕ) n, (((2 : ℝ) ^ k) ^ (i - j - (1 : ℕ) + (1 : ℕ)))⁻¹ / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.mul_sum,Finset.sum_congr,rflrfl : a = ais the unique constructor of the equality type. ,mul_div_assoc.Lean, lines 479–485
have hvan : ∑ k ∈ Finset.Icc 1 n, (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) = ((8 / 3 : ℝ) ^ (i - j))⁻¹ * ∑ k ∈ Finset.Icc 1 n, (((2 : ℝ) ^ k) ^ (i - j - 1 + 1))⁻¹ / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))) := by rw [Finset.mul_sum] refine Finset.sum_congr rfl (fun k _ => ?_) have hk : ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) = ((8 / 3 : ℝ) ^ (i - j))⁻¹ * (((2 : ℝ) ^ k) ^ (i - j))⁻¹ := by rw [show ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i = ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ (i - j) from by rw [← pow_add]; congr 1; omega, mul_inv, ← mul_assoc, mul_inv_cancel₀ (pow_ne_zero _ (hcX k)), one_mul, mul_pow, mul_inv] rw [hk, mul_div_assoc, show i - j - 1 + 1 = i - j by omega]targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 479–485 at
b16ab29fc51b↗numerator_integral.hmer.key.s6.hvan.hkhave((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹ = ((8 / 3 : ℝ) ^ (i - j))⁻¹ * (((2 : ℝ) ^ k) ^ (i - j))⁻¹Leaves
((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹ / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = ((8 / 3 : ℝ) ^ (i - j))⁻¹ * ((((2 : ℝ) ^ k) ^ (i - j - (1 : ℕ) + (1 : ℕ)))⁻¹ / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))), withhk : ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹ = ((8 / 3 : ℝ) ^ (i - j))⁻¹ * (((2 : ℝ) ^ k) ^ (i - j))⁻¹.Uses library
pow_add,mul_inv,mul_assoc,mul_inv_cancel₀,pow_ne_zero,one_mul,mul_pow.Lean, lines 482–484
have hk : ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) = ((8 / 3 : ℝ) ^ (i - j))⁻¹ * (((2 : ℝ) ^ k) ^ (i - j))⁻¹ := by rw [show ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i = ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ (i - j) from by rw [← pow_add]; congr 1; omega, mul_inv, ← mul_assoc, mul_inv_cancel₀ (pow_ne_zero _ (hcX k)), one_mul, mul_pow, mul_inv]targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 482–484 at
b16ab29fc51b↗
numerator_integral.hmer.key.s7caseLeaves
∃ (z : ℤ), (↑z : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ) - i) * (-(↑(α j) : ℝ) * ∑ i_1 ∈ Finset.Icc (1 : ℕ) n, ((8 / 3 : ℝ) * (2 : ℝ) ^ i_1) ^ j * (((8 / 3 : ℝ) * (2 : ℝ) ^ i_1) ^ i)⁻¹ / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase i_1, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑i_1 : ℤ)))).Uses library
Exists.introExistential introduction. .Lean, lines 488–501
· obtain ⟨w, hw⟩ := hW _ (Finset.Icc 1 n) (j - i) rfl refine ⟨-(α j) * 3 ^ (n - 1 - j) * 8 ^ (j - i) * w, ?_⟩ have hpos : ∑ k ∈ Finset.Icc 1 n, (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) = (8 / 3 : ℝ) ^ (j - i) * ∑ k ∈ Finset.Icc 1 n, ((2 : ℝ) ^ k) ^ (j - i) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))) := by rw [Finset.mul_sum] refine Finset.sum_congr rfl (fun k _ => ?_) have hk : ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) = (8 / 3 : ℝ) ^ (j - i) * ((2 : ℝ) ^ k) ^ (j - i) := by rw [show ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j = ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ (j - i) * ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i from by rw [← pow_add]; congr 1; omega, mul_assoc, mul_inv_cancel₀ (pow_ne_zero _ (hcX k)), mul_one, mul_pow] rw [hk, mul_div_assoc] have h3 : (3 : ℝ) ^ (n - 1 - i) = 3 ^ (n - 1 - j) * 3 ^ (j - i) := by rw [← pow_add]; congr 1; omega have h83 : (8 / 3 : ℝ) ^ (j - i) * 3 ^ (j - i) = 8 ^ (j - i) := by rw [← mul_pow]; norm_num push_cast rw [hpos, hw, h3, ← h83] ringtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 488–501 at
b16ab29fc51b↗numerator_integral.hmer.key.s7.s1obtain∃ (z : ℤ), (↑z : ℝ) = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((2 : ℝ) ^ k) ^ (j - i) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))Leaves
∃ (z : ℤ), (↑z : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ) - i) * (-(↑(α j) : ℝ) * ∑ i_1 ∈ Finset.Icc (1 : ℕ) n, ((8 / 3 : ℝ) * (2 : ℝ) ^ i_1) ^ j * (((8 / 3 : ℝ) * (2 : ℝ) ^ i_1) ^ i)⁻¹ / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase i_1, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑i_1 : ℤ)))), withw : ℤ,hw : (↑w : ℝ) = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((2 : ℝ) ^ k) ^ (j - i) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,rflrfl : a = ais the unique constructor of the equality type. .Lean, line 488
· obtain ⟨w, hw⟩ := hW _ (Finset.Icc 1 n) (j - i) rfl
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 488 at
b16ab29fc51b↗numerator_integral.hmer.key.s7.hposhave∑ k ∈ Finset.Icc (1 : ℕ) n, ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹ / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = (8 / 3 : ℝ) ^ (j - i) * ∑ k ∈ Finset.Icc (1 : ℕ) n, ((2 : ℝ) ^ k) ^ (j - i) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))Leaves
(↑(-α j * (3 : ℤ) ^ (n - (1 : ℕ) - j) * (8 : ℤ) ^ (j - i) * w) : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ) - i) * (-(↑(α j) : ℝ) * ∑ i_1 ∈ Finset.Icc (1 : ℕ) n, ((8 / 3 : ℝ) * (2 : ℝ) ^ i_1) ^ j * (((8 / 3 : ℝ) * (2 : ℝ) ^ i_1) ^ i)⁻¹ / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase i_1, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑i_1 : ℤ)))), withhpos : ∑ k ∈ Finset.Icc (1 : ℕ) n, ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹ / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = (8 / 3 : ℝ) ^ (j - i) * ∑ k ∈ Finset.Icc (1 : ℕ) n, ((2 : ℝ) ^ k) ^ (j - i) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.mul_sum,Finset.sum_congr,rflrfl : a = ais the unique constructor of the equality type. ,mul_div_assoc.Lean, lines 490–496
have hpos : ∑ k ∈ Finset.Icc 1 n, (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) = (8 / 3 : ℝ) ^ (j - i) * ∑ k ∈ Finset.Icc 1 n, ((2 : ℝ) ^ k) ^ (j - i) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))) := by rw [Finset.mul_sum] refine Finset.sum_congr rfl (fun k _ => ?_) have hk : ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) = (8 / 3 : ℝ) ^ (j - i) * ((2 : ℝ) ^ k) ^ (j - i) := by rw [show ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j = ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ (j - i) * ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i from by rw [← pow_add]; congr 1; omega, mul_assoc, mul_inv_cancel₀ (pow_ne_zero _ (hcX k)), mul_one, mul_pow] rw [hk, mul_div_assoc]targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 490–496 at
b16ab29fc51b↗numerator_integral.hmer.key.s7.hpos.hkhave((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹ = (8 / 3 : ℝ) ^ (j - i) * ((2 : ℝ) ^ k) ^ (j - i)Leaves
((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹ / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = (8 / 3 : ℝ) ^ (j - i) * (((2 : ℝ) ^ k) ^ (j - i) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))), withhk : ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹ = (8 / 3 : ℝ) ^ (j - i) * ((2 : ℝ) ^ k) ^ (j - i).Uses library
pow_add,mul_assoc,mul_inv_cancel₀,pow_ne_zero,mul_one,mul_pow.Lean, lines 493–495
have hk : ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) = (8 / 3 : ℝ) ^ (j - i) * ((2 : ℝ) ^ k) ^ (j - i) := by rw [show ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j = ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ (j - i) * ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i from by rw [← pow_add]; congr 1; omega, mul_assoc, mul_inv_cancel₀ (pow_ne_zero _ (hcX k)), mul_one, mul_pow]targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 493–495 at
b16ab29fc51b↗
numerator_integral.hmer.key.s7.h3have(3 : ℝ) ^ (n - (1 : ℕ) - i) = (3 : ℝ) ^ (n - (1 : ℕ) - j) * (3 : ℝ) ^ (j - i)Leaves
(↑(-α j * (3 : ℤ) ^ (n - (1 : ℕ) - j) * (8 : ℤ) ^ (j - i) * w) : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ) - i) * (-(↑(α j) : ℝ) * ∑ i_1 ∈ Finset.Icc (1 : ℕ) n, ((8 / 3 : ℝ) * (2 : ℝ) ^ i_1) ^ j * (((8 / 3 : ℝ) * (2 : ℝ) ^ i_1) ^ i)⁻¹ / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase i_1, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑i_1 : ℤ)))), withh3 : (3 : ℝ) ^ (n - (1 : ℕ) - i) = (3 : ℝ) ^ (n - (1 : ℕ) - j) * (3 : ℝ) ^ (j - i).Uses library
pow_add.Lean, line 497
have h3 : (3 : ℝ) ^ (n - 1 - i) = 3 ^ (n - 1 - j) * 3 ^ (j - i) := by rw [← pow_add]; congr 1; omega
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 497 at
b16ab29fc51b↗numerator_integral.hmer.key.s7.h83have(8 / 3 : ℝ) ^ (j - i) * (3 : ℝ) ^ (j - i) = (8 : ℝ) ^ (j - i)Leaves
(↑(-α j * (3 : ℤ) ^ (n - (1 : ℕ) - j) * (8 : ℤ) ^ (j - i) * w) : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ) - i) * (-(↑(α j) : ℝ) * ∑ i_1 ∈ Finset.Icc (1 : ℕ) n, ((8 / 3 : ℝ) * (2 : ℝ) ^ i_1) ^ j * (((8 / 3 : ℝ) * (2 : ℝ) ^ i_1) ^ i)⁻¹ / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase i_1, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑i_1 : ℤ)))), withh83 : (8 / 3 : ℝ) ^ (j - i) * (3 : ℝ) ^ (j - i) = (8 : ℝ) ^ (j - i).Uses library
mul_pow.Lean, line 498
have h83 : (8 / 3 : ℝ) ^ (j - i) * 3 ^ (j - i) = 8 ^ (j - i) := by rw [← mul_pow]; norm_num
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 498 at
b16ab29fc51b↗
numerator_integral.hmer.hW3have∀ (n : ℕ), ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = (∏ k ∈ Finset.Icc (1 : ℕ) n, ((3 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ k)) * ((3 : ℝ) ^ n)⁻¹Leaves
∃ (a₂ : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(a₂ n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ)), withhW3 : ∀ (n : ℕ), ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = (∏ k ∈ Finset.Icc (1 : ℕ) n, ((3 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ k)) * ((3 : ℝ) ^ n)⁻¹.Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.prod_congr,rflrfl : a = ais the unique constructor of the equality type. ,Finset.prod_mul_distrib,Finset.prod_const,Nat.card_Icc,Nat.add_sub_cancel,inv_pow.Lean, lines 502–505
have hW3 : ∀ n : ℕ, ∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = (∏ k ∈ Finset.Icc 1 n, ((3 : ℝ) - 8 * 2 ^ k)) * ((3 : ℝ) ^ n)⁻¹ := by intro n rw [Finset.prod_congr rfl (fun k _ => (by ring : (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = ((3 : ℝ) - 8 * 2 ^ k) * (3 : ℝ)⁻¹)), Finset.prod_mul_distrib, Finset.prod_const, Nat.card_Icc, Nat.add_sub_cancel, inv_pow]targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 502–505 at
b16ab29fc51b↗numerator_integral.hmer.hdvdhave∀ (n i : ℕ), (1 : ℕ) ≤ i → i ≤ n - (1 : ℕ) → (2 : ℤ) ^ i - (1 : ℤ) ∣ ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℤ) - (2 : ℤ) ^ k)Leaves
∃ (a₂ : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(a₂ n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ)), withhdvd : ∀ (n i : ℕ), (1 : ℕ) ≤ i → i ≤ n - (1 : ℕ) → (2 : ℤ) ^ i - (1 : ℤ) ∣ ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℤ) - (2 : ℤ) ^ k).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.dvd_prod_of_mem.Lean, lines 506–520
have hdvd : ∀ n i : ℕ, 1 ≤ i → i ≤ n - 1 → ((2 : ℤ) ^ i - 1) ∣ ∏ k ∈ Finset.Icc ((n + 1) / 2) n, ((1 : ℤ) - 2 ^ k) := by intro n i hi1 hi2 obtain ⟨k0, hk0⟩ : ∃ k0, k0 = i * (n / i) := ⟨_, rfl⟩ have hle : k0 ≤ n := by rw [hk0, mul_comm]; exact Nat.div_mul_le_self n i have hlt : n < k0 + i := by rw [hk0]; have := Nat.lt_mul_div_succ n (by omega : 0 < i); linarith have hge : i ≤ k0 := by rw [hk0]; exact Nat.le_mul_of_pos_right i (Nat.div_pos (by omega) (by omega)) have hmem : k0 ∈ Finset.Icc ((n + 1) / 2) n := Finset.mem_Icc.mpr ⟨by omega, hle⟩ have h1 : ((2 : ℤ) ^ i - 1) ∣ (2 : ℤ) ^ k0 - 1 := by have := sub_dvd_pow_sub_pow ((2 : ℤ) ^ i) 1 (n / i) rw [one_pow, ← pow_mul, ← hk0] at this exact this have h2 : ((2 : ℤ) ^ i - 1) ∣ (1 : ℤ) - 2 ^ k0 := by have : (1 : ℤ) - 2 ^ k0 = -((2 : ℤ) ^ k0 - 1) := by ring rw [this]; exact (dvd_neg).mpr h1 exact h2.trans (Finset.dvd_prod_of_mem (fun k => (1 : ℤ) - 2 ^ k) hmem)targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 506–520 at
b16ab29fc51b↗numerator_integral.hmer.hdvd.s1obtain∃ (k0 : ℕ), k0 = i * (n / i)Leaves
(2 : ℤ) ^ i - (1 : ℤ) ∣ ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℤ) - (2 : ℤ) ^ k), withk0 : ℕ,hk0 : k0 = i * (n / i).Uses library
Exists.introExistential introduction. ,rflrfl : a = ais the unique constructor of the equality type. .Lean, line 508
obtain ⟨k0, hk0⟩ : ∃ k0, k0 = i * (n / i) := ⟨_, rfl⟩
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 508 at
b16ab29fc51b↗numerator_integral.hmer.hdvd.hlehavek0 ≤ nLeaves
(2 : ℤ) ^ i - (1 : ℤ) ∣ ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℤ) - (2 : ℤ) ^ k), withhle : k0 ≤ n.Uses library
mul_comm,Nat.div_mul_le_self.Lean, line 509
have hle : k0 ≤ n := by rw [hk0, mul_comm]; exact Nat.div_mul_le_self n i
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 509 at
b16ab29fc51b↗numerator_integral.hmer.hdvd.hlthaven < k0 + iLeaves
(2 : ℤ) ^ i - (1 : ℤ) ∣ ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℤ) - (2 : ℤ) ^ k), withhlt : n < k0 + i.Lean, line 510
have hlt : n < k0 + i := by rw [hk0]; have := Nat.lt_mul_div_succ n (by omega : 0 < i); linarith
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 510 at
b16ab29fc51b↗numerator_integral.hmer.hdvd.hlt.thishaven < i * (n / i + (1 : ℕ))Leaves
n < i * (n / i) + i, withthis : n < i * (n / i + (1 : ℕ)).Uses library
Nat.lt_mul_div_succ.Lean, line 510
have hlt : n < k0 + i := by rw [hk0]; have := Nat.lt_mul_div_succ n (by omega : 0 < i); linarith
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 510 at
b16ab29fc51b↗
numerator_integral.hmer.hdvd.hgehavei ≤ k0Leaves
(2 : ℤ) ^ i - (1 : ℤ) ∣ ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℤ) - (2 : ℤ) ^ k), withhge : i ≤ k0.Uses library
Nat.le_mul_of_pos_right,Nat.div_pos.Lean, line 511
have hge : i ≤ k0 := by rw [hk0]; exact Nat.le_mul_of_pos_right i (Nat.div_pos (by omega) (by omega))
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 511 at
b16ab29fc51b↗numerator_integral.hmer.hdvd.hmemhavek0 ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) nLeaves
(2 : ℤ) ^ i - (1 : ℤ) ∣ ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℤ) - (2 : ℤ) ^ k), withhmem : k0 ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n.Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.mem_Icc,And.introAnd.intro : a → b → a ∧ bis the constructor for the And operation. .Lean, line 512
have hmem : k0 ∈ Finset.Icc ((n + 1) / 2) n := Finset.mem_Icc.mpr ⟨by omega, hle⟩
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 512 at
b16ab29fc51b↗numerator_integral.hmer.hdvd.h1have(2 : ℤ) ^ i - (1 : ℤ) ∣ (2 : ℤ) ^ k0 - (1 : ℤ)Leaves
(2 : ℤ) ^ i - (1 : ℤ) ∣ ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℤ) - (2 : ℤ) ^ k), withh1 : (2 : ℤ) ^ i - (1 : ℤ) ∣ (2 : ℤ) ^ k0 - (1 : ℤ).Uses library
one_pow,pow_mul.Lean, lines 513–516
have h1 : ((2 : ℤ) ^ i - 1) ∣ (2 : ℤ) ^ k0 - 1 := by have := sub_dvd_pow_sub_pow ((2 : ℤ) ^ i) 1 (n / i) rw [one_pow, ← pow_mul, ← hk0] at this exact thistargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 513–516 at
b16ab29fc51b↗numerator_integral.hmer.hdvd.h1.thishave(2 : ℤ) ^ i - (1 : ℤ) ∣ ((2 : ℤ) ^ i) ^ (n / i) - (1 : ℤ) ^ (n / i)Leaves
(2 : ℤ) ^ i - (1 : ℤ) ∣ (2 : ℤ) ^ k0 - (1 : ℤ), withthis : (2 : ℤ) ^ i - (1 : ℤ) ∣ ((2 : ℤ) ^ i) ^ (n / i) - (1 : ℤ) ^ (n / i).Uses library
sub_dvd_pow_sub_pow.Lean, line 514
have := sub_dvd_pow_sub_pow ((2 : ℤ) ^ i) 1 (n / i)
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 514 at
b16ab29fc51b↗
numerator_integral.hmer.hdvd.h2have(2 : ℤ) ^ i - (1 : ℤ) ∣ (1 : ℤ) - (2 : ℤ) ^ k0Leaves
(2 : ℤ) ^ i - (1 : ℤ) ∣ ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℤ) - (2 : ℤ) ^ k), withh2 : (2 : ℤ) ^ i - (1 : ℤ) ∣ (1 : ℤ) - (2 : ℤ) ^ k0.Uses library
dvd_negAn elementaof a semigroup with a distributive negation divides the negation of an elementbiffadividesb. .Lean, lines 517–519
have h2 : ((2 : ℤ) ^ i - 1) ∣ (1 : ℤ) - 2 ^ k0 := by have : (1 : ℤ) - 2 ^ k0 = -((2 : ℤ) ^ k0 - 1) := by ring rw [this]; exact (dvd_neg).mpr h1targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 517–519 at
b16ab29fc51b↗numerator_integral.hmer.hdvd.h2.thishave(1 : ℤ) - (2 : ℤ) ^ k0 = -((2 : ℤ) ^ k0 - (1 : ℤ))routine: ringLeaves
(2 : ℤ) ^ i - (1 : ℤ) ∣ (1 : ℤ) - (2 : ℤ) ^ k0, withthis : (1 : ℤ) - (2 : ℤ) ^ k0 = -((2 : ℤ) ^ k0 - (1 : ℤ)).Lean, line 518
have : (1 : ℤ) - 2 ^ k0 = -((2 : ℤ) ^ k0 - 1) := by ring
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 518 at
b16ab29fc51b↗
numerator_integral.hmer.hsumZhave∀ (s : Finset ℕ) (g : ℕ → ℝ), (∀ i ∈ s, ∃ (z : ℤ), (↑z : ℝ) = g i) → ∃ (z : ℤ), (↑z : ℝ) = ∑ i ∈ s, g iLeaves
∃ (a₂ : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(a₂ n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ)), withhsumZ : ∀ (s : Finset ℕ) (g : ℕ → ℝ), (∀ i ∈ s, ∃ (z : ℤ), (↑z : ℝ) = g i) → ∃ (z : ℤ), (↑z : ℝ) = ∑ i ∈ s, g i.Uses library
FinsetFinset αis the type of finite sets of elements ofα. ,Finset.induction_onTo prove a proposition about an arbitraryFinset α, it suffices to prove it for the emptyFinset, and to show that if it holds for someFinset α, then it holds for theFinsetobtained by inserting a new element. .Lean, lines 521–529
have hsumZ : ∀ (s : Finset ℕ) (g : ℕ → ℝ), (∀ i ∈ s, ∃ z : ℤ, (z : ℝ) = g i) → ∃ z : ℤ, (z : ℝ) = ∑ i ∈ s, g i := by intro s g induction s using Finset.induction_on with | empty => intro _; exact ⟨0, by simp⟩ | insert a s ha ih => intro h obtain ⟨za, hza⟩ := h a (Finset.mem_insert_self a s) obtain ⟨zs, hzs⟩ := ih (fun i hi => h i (Finset.mem_insert_of_mem hi)) exact ⟨za + zs, by rw [Finset.sum_insert ha]; push_cast; rw [hza, hzs]⟩targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 521–529 at
b16ab29fc51b↗numerator_integral.hmer.hsumZ.s1case printed form did not read back: shown as its Lean lines only| empty => intro _; exact ⟨0, by simp⟩
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 524 at
b16ab29fc51b↗numerator_integral.hmer.hsumZ.s2caseLeaves
(∀ i ∈ insert a s, ∃ (z : ℤ), (↑z : ℝ) = g i) → ∃ (z : ℤ), (↑z : ℝ) = ∑ i ∈ insert a s, g i, witha : ℕ,s : Finset ℕ,ha : a ∉ s,ih : (∀ i ∈ s, ∃ (z : ℤ), (↑z : ℝ) = g i) → ∃ (z : ℤ), (↑z : ℝ) = ∑ i ∈ s, g i.Uses library
Exists.introExistential introduction. ,Finset.sum_insert.Lean, lines 525–529
| insert a s ha ih => intro h obtain ⟨za, hza⟩ := h a (Finset.mem_insert_self a s) obtain ⟨zs, hzs⟩ := ih (fun i hi => h i (Finset.mem_insert_of_mem hi)) exact ⟨za + zs, by rw [Finset.sum_insert ha]; push_cast; rw [hza, hzs]⟩targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 525–529 at
b16ab29fc51b↗numerator_integral.hmer.hsumZ.s2.s1obtain∃ (z : ℤ), (↑z : ℝ) = g aLeaves
∃ (z : ℤ), (↑z : ℝ) = ∑ i ∈ insert a s, g i, withza : ℤ,hza : (↑za : ℝ) = g a.Uses library
Finset.mem_insert_self.Lean, line 527
obtain ⟨za, hza⟩ := h a (Finset.mem_insert_self a s)
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 527 at
b16ab29fc51b↗numerator_integral.hmer.hsumZ.s2.s2obtain∃ (z : ℤ), (↑z : ℝ) = ∑ i ∈ s, g iLeaves
∃ (z : ℤ), (↑z : ℝ) = ∑ i ∈ insert a s, g i, withzs : ℤ,hzs : (↑zs : ℝ) = ∑ i ∈ s, g i.Uses library
Finset.mem_insert_of_mem.Lean, line 528
obtain ⟨zs, hzs⟩ := ih (fun i hi => h i (Finset.mem_insert_of_mem hi))
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 528 at
b16ab29fc51b↗
numerator_integral.hmer.hnhave∀ (n : ℕ), (1 : ℕ) ≤ n → ∃ (z : ℤ), (↑z : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))Leaves
∃ (a₂ : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(a₂ n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ)), withhn : ∀ (n : ℕ), (1 : ℕ) ≤ n → ∃ (z : ℤ), (↑z : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ)).Uses library
Nat.factorialNat.factorial nis the factorial ofn. ,Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.mul_sum,Exists.introExistential introduction. .Lean, lines 530–553
have hn : ∀ n : ℕ, 1 ≤ n → ∃ z : ℤ, (z : ℝ) = (9 : ℝ) ^ n * ((Nat.factorial (n - 2) : ℝ) * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, (1 - (2 : ℝ) ^ k))) * (∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - 1)) := by intro n hn rw [Finset.mul_sum] refine hsumZ _ _ (fun i hi => ?_) have hi' := Finset.mem_Icc.mp hi obtain ⟨z1, hz1⟩ := key n hn i hi'.1 hi'.2 obtain ⟨q, hq⟩ := hdvd n i hi'.1 hi'.2 have hqR : ∏ k ∈ Finset.Icc ((n + 1) / 2) n, ((1 : ℝ) - 2 ^ k) = ((2 : ℝ) ^ i - 1) * q := by exact_mod_cast hq have h2i : (2 : ℝ) ^ i - 1 ≠ 0 := by have : (2 : ℝ) ≤ 2 ^ i := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi'.1 linarith have h9 : (9 : ℝ) ^ n = 3 ^ (i + 1) * 3 ^ (n - 1 - i) * 3 ^ n := by rw [show (9 : ℝ) = 3 * 3 by norm_num, mul_pow] congr 1 rw [← pow_add] congr 1 omega refine ⟨3 ^ (i + 1) * (Nat.factorial (n - 2) : ℤ) * (∏ k ∈ Finset.Icc 1 n, ((3 : ℤ) - 8 * 2 ^ k)) * q * z1, ?_⟩ push_cast rw [hz1, hW3 n, hqR, h9] have h3n : (3 : ℝ) ^ n ≠ 0 := by positivity field_simptargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 530–553 at
b16ab29fc51b↗numerator_integral.hmer.hn.hi'have(1 : ℕ) ≤ i ∧ i ≤ n - (1 : ℕ)Leaves
∃ (z : ℤ), (↑z : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ((∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withhi' : (1 : ℕ) ≤ i ∧ i ≤ n - (1 : ℕ).Uses library
Finset.mem_Icc.Lean, line 534
have hi' := Finset.mem_Icc.mp hi
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 534 at
b16ab29fc51b↗numerator_integral.hmer.hn.s2obtain∃ (z : ℤ), (↑z : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ) - i) * ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹Leaves
∃ (z : ℤ), (↑z : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ((∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withz1 : ℤ,hz1 : (↑z1 : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ) - i) * ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹.Lean, line 535
obtain ⟨z1, hz1⟩ := key n hn i hi'.1 hi'.2
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 535 at
b16ab29fc51b↗numerator_integral.hmer.hn.s3obtain(2 : ℤ) ^ i - (1 : ℤ) ∣ ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℤ) - (2 : ℤ) ^ k)Leaves
∃ (z : ℤ), (↑z : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ((∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withq : ℤ,hq : ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℤ) - (2 : ℤ) ^ k) = ((2 : ℤ) ^ i - (1 : ℤ)) * q.Lean, line 536
obtain ⟨q, hq⟩ := hdvd n i hi'.1 hi'.2
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 536 at
b16ab29fc51b↗numerator_integral.hmer.hn.hqRhave∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k) = ((2 : ℝ) ^ i - (1 : ℝ)) * (↑q : ℝ)Leaves
∃ (z : ℤ), (↑z : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ((∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withhqR : ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k) = ((2 : ℝ) ^ i - (1 : ℝ)) * (↑q : ℝ).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. .Lean, line 537
have hqR : ∏ k ∈ Finset.Icc ((n + 1) / 2) n, ((1 : ℝ) - 2 ^ k) = ((2 : ℝ) ^ i - 1) * q := by exact_mod_cast hq
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 537 at
b16ab29fc51b↗numerator_integral.hmer.hn.h2ihave(2 : ℝ) ^ i - (1 : ℝ) ≠ (0 : ℝ)Leaves
∃ (z : ℤ), (↑z : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ((∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withh2i : (2 : ℝ) ^ i - (1 : ℝ) ≠ (0 : ℝ).Lean, lines 538–542
have h2i : (2 : ℝ) ^ i - 1 ≠ 0 := by have : (2 : ℝ) ≤ 2 ^ i := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi'.1 linarithtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 538–542 at
b16ab29fc51b↗numerator_integral.hmer.hn.h2i.thishave(2 : ℝ) ≤ (2 : ℝ) ^ iLeaves
(2 : ℝ) ^ i - (1 : ℝ) ≠ (0 : ℝ), withthis : (2 : ℝ) ≤ (2 : ℝ) ^ i.Lean, lines 539–541
have : (2 : ℝ) ≤ 2 ^ i := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi'.1targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 539–541 at
b16ab29fc51b↗numerator_integral.hmer.hn.h2i.this.s1calc(2 : ℝ) = (2 : ℝ) ^ (1 : ℕ)Closes the goal.
Uses library
pow_one.Lean, line 540
calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 540 at
b16ab29fc51b↗numerator_integral.hmer.hn.h2i.this.s2calc(2 : ℝ) ^ (1 : ℕ) ≤ (2 : ℝ) ^ iCloses the goal.
Uses library
pow_le_pow_right₀.Lean, line 541
_ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi'.1
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 541 at
b16ab29fc51b↗
numerator_integral.hmer.hn.h9have(9 : ℝ) ^ n = (3 : ℝ) ^ (i + (1 : ℕ)) * (3 : ℝ) ^ (n - (1 : ℕ) - i) * (3 : ℝ) ^ nLeaves
∃ (z : ℤ), (↑z : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ((∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withh9 : (9 : ℝ) ^ n = (3 : ℝ) ^ (i + (1 : ℕ)) * (3 : ℝ) ^ (n - (1 : ℕ) - i) * (3 : ℝ) ^ n.Uses library
mul_pow,pow_add.Lean, lines 543–548
have h9 : (9 : ℝ) ^ n = 3 ^ (i + 1) * 3 ^ (n - 1 - i) * 3 ^ n := by rw [show (9 : ℝ) = 3 * 3 by norm_num, mul_pow] congr 1 rw [← pow_add] congr 1 omegatargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 543–548 at
b16ab29fc51b↗numerator_integral.hmer.hn.h3nhave(3 : ℝ) ^ n ≠ (0 : ℝ)routine: positivityLeaves
((3 : ℝ) ^ (i + (1 : ℕ)) * (↑(n - (2 : ℕ)).factorial : ℝ) * ∏ x ∈ Finset.Icc (1 : ℕ) n, ((3 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ x)) * (↑q : ℝ) * ((3 : ℝ) ^ (n - (1 : ℕ) - i) * ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) = (3 : ℝ) ^ (i + (1 : ℕ)) * (3 : ℝ) ^ (n - (1 : ℕ) - i) * (3 : ℝ) ^ n * ((↑(n - (2 : ℕ)).factorial : ℝ) * ((∏ k ∈ Finset.Icc (1 : ℕ) n, ((3 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ k)) * ((3 : ℝ) ^ n)⁻¹) * (((2 : ℝ) ^ i - (1 : ℝ)) * (↑q : ℝ))) * ((∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withh3n : (3 : ℝ) ^ n ≠ (0 : ℝ).Lean, line 552
have h3n : (3 : ℝ) ^ n ≠ 0 := by positivity
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 552 at
b16ab29fc51b↗
numerator_integral.s6obtain∃ (a₂ : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(a₂ n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))Leaves
∃ (a : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(a n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), witha₂ : ℕ → ℤ,h₂ : ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(a₂ n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ)).Lean, line 557
obtain ⟨a₂, h₂⟩ := hmer
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 557 at
b16ab29fc51b↗
s10obtain∃ (a : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(a n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ)))Leaves
∃ (a : ℕ → ℤ) (b : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(b n) : ℝ) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (↑(a n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹, witha : ℕ → ℤ,ha : ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(a n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))).Lean, line 562
obtain ⟨a, ha⟩ := numerator_integral
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 562 at
b16ab29fc51b↗hdenhave∃ (b : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(b n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))Leaves
∃ (a : ℕ → ℤ) (b : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(b n) : ℝ) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (↑(a n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹, withhden : ∃ (b : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(b n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))).Uses library
Nat.factorialNat.factorial nis the factorial ofn. ,Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Exists.introExistential introduction. ,Classical.chooseGiven that there exists an element satisfyingp, returns one such element. ,dif_pos,Classical.choose_spec.Lean, lines 564–609
have hden : ∃ b : ℕ → ℤ, ∀ n : ℕ, 1 ≤ n → (b n : ℝ) = (9 : ℝ) ^ n * ((Nat.factorial (n - 2) : ℝ) * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, (1 - (2 : ℝ) ^ k))) * (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))) := by have key : ∀ n : ℕ, 1 ≤ n → ∃ z : ℤ, (z : ℝ) = (3 : ℝ) ^ (n - 1) * (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))) := by intro n hn obtain ⟨α, hα⟩ := hpoly n hn have hA : ∀ k : ℕ, ∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k)) = ∑ j ∈ Finset.range n, (α j : ℝ) * ((8 / 3 : ℝ) * 2 ^ k) ^ j := by intro k rw [← hα] refine Finset.prod_congr rfl (fun t _ => ?_) rw [pow_add]; ring simp only [hA] have e1 : ∑ k ∈ Finset.Icc 1 n, (-(∑ j ∈ Finset.range n, (α j : ℝ) * ((8 / 3 : ℝ) * 2 ^ k) ^ j) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) = ∑ j ∈ Finset.range n, ∑ k ∈ Finset.Icc 1 n, (-(α j : ℝ)) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) := by rw [Finset.sum_comm] refine Finset.sum_congr rfl (fun k _ => ?_) rw [neg_div, Finset.sum_div, ← Finset.sum_neg_distrib] refine Finset.sum_congr rfl (fun j _ => ?_) ring rw [e1, Finset.mul_sum] refine hsumZ _ _ (fun j hj => ?_) have hj' := Finset.mem_range.mp hj rw [← Finset.mul_sum] obtain ⟨w, hw⟩ := hW _ (Finset.Icc 1 n) j rfl refine ⟨-(α j) * 3 ^ (n - 1 - j) * 8 ^ j * w, ?_⟩ have hpos : ∑ k ∈ Finset.Icc 1 n, ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))) = (8 / 3 : ℝ) ^ j * ∑ k ∈ Finset.Icc 1 n, ((2 : ℝ) ^ k) ^ j / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))) := by rw [Finset.mul_sum] refine Finset.sum_congr rfl (fun k _ => ?_) rw [mul_pow, mul_div_assoc] have h3 : (3 : ℝ) ^ (n - 1) = 3 ^ (n - 1 - j) * 3 ^ j := by rw [← pow_add]; congr 1; omega have h83 : (8 / 3 : ℝ) ^ j * 3 ^ j = 8 ^ j := by rw [← mul_pow]; norm_num push_cast rw [hpos, hw, h3, ← h83] ring have hW3 : ∀ n : ℕ, ∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = (∏ k ∈ Finset.Icc 1 n, ((3 : ℝ) - 8 * 2 ^ k)) * ((3 : ℝ) ^ n)⁻¹ := by intro n rw [Finset.prod_congr rfl (fun k _ => (by ring : (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = ((3 : ℝ) - 8 * 2 ^ k) * (3 : ℝ)⁻¹)), Finset.prod_mul_distrib, Finset.prod_const, Nat.card_Icc, Nat.add_sub_cancel, inv_pow] refine ⟨fun n => if h : 1 ≤ n then 3 * (Nat.factorial (n - 2) : ℤ) * (∏ k ∈ Finset.Icc 1 n, ((3 : ℤ) - 8 * 2 ^ k)) * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, ((1 : ℤ) - 2 ^ k)) * Classical.choose (key n h) else 0, fun n hn => ?_⟩ simp only [dif_pos hn] push_cast rw [Classical.choose_spec (key n hn), hW3 n] have h9 : (9 : ℝ) ^ n = 3 * (3 : ℝ) ^ (n - 1) * (3 : ℝ) ^ n := by rw [show (9 : ℝ) = 3 * 3 by norm_num, mul_pow, mul_comm (3 : ℝ) _, ← pow_succ, Nat.sub_add_cancel hn] have h3 : ((3 : ℝ) ^ n)⁻¹ * (3 : ℝ) ^ n = 1 := inv_mul_cancel₀ (by positivity) rw [h9] linear_combination (-(3 : ℝ) * (Nat.factorial (n - 2) : ℝ) * (∏ k ∈ Finset.Icc 1 n, ((3 : ℝ) - 8 * 2 ^ k)) * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, ((1 : ℝ) - 2 ^ k)) * ((3 : ℝ) ^ (n - 1) * (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))))) * h3targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 564–609 at
b16ab29fc51b↗hden.keyhave∀ (n : ℕ), (1 : ℕ) ≤ n → ∃ (z : ℤ), (↑z : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))Leaves
∃ (b : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(b n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))), withkey : ∀ (n : ℕ), (1 : ℕ) ≤ n → ∃ (z : ℤ), (↑z : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.mul_sum,Exists.introExistential introduction. .Lean, lines 565–594
have key : ∀ n : ℕ, 1 ≤ n → ∃ z : ℤ, (z : ℝ) = (3 : ℝ) ^ (n - 1) * (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))) := by intro n hn obtain ⟨α, hα⟩ := hpoly n hn have hA : ∀ k : ℕ, ∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k)) = ∑ j ∈ Finset.range n, (α j : ℝ) * ((8 / 3 : ℝ) * 2 ^ k) ^ j := by intro k rw [← hα] refine Finset.prod_congr rfl (fun t _ => ?_) rw [pow_add]; ring simp only [hA] have e1 : ∑ k ∈ Finset.Icc 1 n, (-(∑ j ∈ Finset.range n, (α j : ℝ) * ((8 / 3 : ℝ) * 2 ^ k) ^ j) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) = ∑ j ∈ Finset.range n, ∑ k ∈ Finset.Icc 1 n, (-(α j : ℝ)) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) := by rw [Finset.sum_comm] refine Finset.sum_congr rfl (fun k _ => ?_) rw [neg_div, Finset.sum_div, ← Finset.sum_neg_distrib] refine Finset.sum_congr rfl (fun j _ => ?_) ring rw [e1, Finset.mul_sum] refine hsumZ _ _ (fun j hj => ?_) have hj' := Finset.mem_range.mp hj rw [← Finset.mul_sum] obtain ⟨w, hw⟩ := hW _ (Finset.Icc 1 n) j rfl refine ⟨-(α j) * 3 ^ (n - 1 - j) * 8 ^ j * w, ?_⟩ have hpos : ∑ k ∈ Finset.Icc 1 n, ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))) = (8 / 3 : ℝ) ^ j * ∑ k ∈ Finset.Icc 1 n, ((2 : ℝ) ^ k) ^ j / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))) := by rw [Finset.mul_sum] refine Finset.sum_congr rfl (fun k _ => ?_) rw [mul_pow, mul_div_assoc] have h3 : (3 : ℝ) ^ (n - 1) = 3 ^ (n - 1 - j) * 3 ^ j := by rw [← pow_add]; congr 1; omega have h83 : (8 / 3 : ℝ) ^ j * 3 ^ j = 8 ^ j := by rw [← mul_pow]; norm_num push_cast rw [hpos, hw, h3, ← h83] ringtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 565–594 at
b16ab29fc51b↗hden.key.s1obtain∃ (α : ℕ → ℤ), ∀ (y : ℝ), ∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ t * y) = ∑ j ∈ Finset.range n, (↑(α j) : ℝ) * y ^ jLeaves
∃ (z : ℤ), (↑z : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))), withα : ℕ → ℤ,hα : ∀ (y : ℝ), ∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ t * y) = ∑ j ∈ Finset.range n, (↑(α j) : ℝ) * y ^ j.Lean, line 567
obtain ⟨α, hα⟩ := hpoly n hn
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 567 at
b16ab29fc51b↗hden.key.hAhave∀ (k : ℕ), ∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k)) = ∑ j ∈ Finset.range n, (↑(α j) : ℝ) * ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ jLeaves
∃ (z : ℤ), (↑z : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))), withhA : ∀ (k : ℕ), ∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k)) = ∑ j ∈ Finset.range n, (↑(α j) : ℝ) * ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j.Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.rangerange nis the set of natural numbers less thann. ,Finset.prod_congr,rflrfl : a = ais the unique constructor of the equality type. ,pow_add.Lean, lines 568–572
have hA : ∀ k : ℕ, ∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k)) = ∑ j ∈ Finset.range n, (α j : ℝ) * ((8 / 3 : ℝ) * 2 ^ k) ^ j := by intro k rw [← hα] refine Finset.prod_congr rfl (fun t _ => ?_) rw [pow_add]; ringtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 568–572 at
b16ab29fc51b↗hden.key.e1have∑ k ∈ Finset.Icc (1 : ℕ) n, (-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = ∑ j ∈ Finset.range n, ∑ k ∈ Finset.Icc (1 : ℕ) n, -(↑(α j) : ℝ) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))))Leaves
∃ (z : ℤ), (↑z : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ)) * ∑ x ∈ Finset.Icc (1 : ℕ) n, (-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * ((8 / 3 : ℝ) * (2 : ℝ) ^ x) ^ j) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase x, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑x : ℤ))), withe1 : ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∑ j ∈ Finset.range n, (↑(α j) : ℝ) * ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = ∑ j ∈ Finset.range n, ∑ k ∈ Finset.Icc (1 : ℕ) n, -(↑(α j) : ℝ) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.rangerange nis the set of natural numbers less thann. ,Finset.sum_comm,Finset.sum_congr,rflrfl : a = ais the unique constructor of the equality type. ,neg_div,Finset.sum_div,Finset.sum_neg_distrib.Lean, lines 574–579
have e1 : ∑ k ∈ Finset.Icc 1 n, (-(∑ j ∈ Finset.range n, (α j : ℝ) * ((8 / 3 : ℝ) * 2 ^ k) ^ j) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) = ∑ j ∈ Finset.range n, ∑ k ∈ Finset.Icc 1 n, (-(α j : ℝ)) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) := by rw [Finset.sum_comm] refine Finset.sum_congr rfl (fun k _ => ?_) rw [neg_div, Finset.sum_div, ← Finset.sum_neg_distrib] refine Finset.sum_congr rfl (fun j _ => ?_) ringtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 574–579 at
b16ab29fc51b↗hden.key.hj'havej < nLeaves
∃ (z : ℤ), (↑z : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, -(↑(α j) : ℝ) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))), withhj' : j < n.Uses library
Finset.mem_range.Lean, line 582
have hj' := Finset.mem_range.mp hj
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 582 at
b16ab29fc51b↗hden.key.s5obtain∃ (z : ℤ), (↑z : ℝ) = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((2 : ℝ) ^ k) ^ j / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))Leaves
∃ (z : ℤ), (↑z : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ)) * (-(↑(α j) : ℝ) * ∑ i ∈ Finset.Icc (1 : ℕ) n, ((8 / 3 : ℝ) * (2 : ℝ) ^ i) ^ j / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase i, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑i : ℤ)))), withw : ℤ,hw : (↑w : ℝ) = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((2 : ℝ) ^ k) ^ j / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,rflrfl : a = ais the unique constructor of the equality type. .Lean, line 584
obtain ⟨w, hw⟩ := hW _ (Finset.Icc 1 n) j rfl
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 584 at
b16ab29fc51b↗hden.key.hposhave∑ k ∈ Finset.Icc (1 : ℕ) n, ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = (8 / 3 : ℝ) ^ j * ∑ k ∈ Finset.Icc (1 : ℕ) n, ((2 : ℝ) ^ k) ^ j / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))Leaves
(↑(-α j * (3 : ℤ) ^ (n - (1 : ℕ) - j) * (8 : ℤ) ^ j * w) : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ)) * (-(↑(α j) : ℝ) * ∑ i ∈ Finset.Icc (1 : ℕ) n, ((8 / 3 : ℝ) * (2 : ℝ) ^ i) ^ j / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase i, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑i : ℤ)))), withhpos : ∑ k ∈ Finset.Icc (1 : ℕ) n, ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))) = (8 / 3 : ℝ) ^ j * ∑ k ∈ Finset.Icc (1 : ℕ) n, ((2 : ℝ) ^ k) ^ j / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.mul_sum,Finset.sum_congr,rflrfl : a = ais the unique constructor of the equality type. ,mul_pow,mul_div_assoc.Lean, lines 586–589
have hpos : ∑ k ∈ Finset.Icc 1 n, ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))) = (8 / 3 : ℝ) ^ j * ∑ k ∈ Finset.Icc 1 n, ((2 : ℝ) ^ k) ^ j / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))) := by rw [Finset.mul_sum] refine Finset.sum_congr rfl (fun k _ => ?_) rw [mul_pow, mul_div_assoc]targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 586–589 at
b16ab29fc51b↗hden.key.h3have(3 : ℝ) ^ (n - (1 : ℕ)) = (3 : ℝ) ^ (n - (1 : ℕ) - j) * (3 : ℝ) ^ jLeaves
(↑(-α j * (3 : ℤ) ^ (n - (1 : ℕ) - j) * (8 : ℤ) ^ j * w) : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ)) * (-(↑(α j) : ℝ) * ∑ i ∈ Finset.Icc (1 : ℕ) n, ((8 / 3 : ℝ) * (2 : ℝ) ^ i) ^ j / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase i, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑i : ℤ)))), withh3 : (3 : ℝ) ^ (n - (1 : ℕ)) = (3 : ℝ) ^ (n - (1 : ℕ) - j) * (3 : ℝ) ^ j.Uses library
pow_add.Lean, line 590
have h3 : (3 : ℝ) ^ (n - 1) = 3 ^ (n - 1 - j) * 3 ^ j := by rw [← pow_add]; congr 1; omega
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 590 at
b16ab29fc51b↗hden.key.h83have(8 / 3 : ℝ) ^ j * (3 : ℝ) ^ j = (8 : ℝ) ^ jLeaves
(↑(-α j * (3 : ℤ) ^ (n - (1 : ℕ) - j) * (8 : ℤ) ^ j * w) : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ)) * (-(↑(α j) : ℝ) * ∑ i ∈ Finset.Icc (1 : ℕ) n, ((8 / 3 : ℝ) * (2 : ℝ) ^ i) ^ j / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase i, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑i : ℤ)))), withh83 : (8 / 3 : ℝ) ^ j * (3 : ℝ) ^ j = (8 : ℝ) ^ j.Uses library
mul_pow.Lean, line 591
have h83 : (8 / 3 : ℝ) ^ j * 3 ^ j = 8 ^ j := by rw [← mul_pow]; norm_num
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 591 at
b16ab29fc51b↗
hden.hW3have∀ (n : ℕ), ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = (∏ k ∈ Finset.Icc (1 : ℕ) n, ((3 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ k)) * ((3 : ℝ) ^ n)⁻¹Leaves
∃ (b : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(b n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))), withhW3 : ∀ (n : ℕ), ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = (∏ k ∈ Finset.Icc (1 : ℕ) n, ((3 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ k)) * ((3 : ℝ) ^ n)⁻¹.Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.prod_congr,rflrfl : a = ais the unique constructor of the equality type. ,Finset.prod_mul_distrib,Finset.prod_const,Nat.card_Icc,Nat.add_sub_cancel,inv_pow.Lean, lines 595–598
have hW3 : ∀ n : ℕ, ∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = (∏ k ∈ Finset.Icc 1 n, ((3 : ℝ) - 8 * 2 ^ k)) * ((3 : ℝ) ^ n)⁻¹ := by intro n rw [Finset.prod_congr rfl (fun k _ => (by ring : (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = ((3 : ℝ) - 8 * 2 ^ k) * (3 : ℝ)⁻¹)), Finset.prod_mul_distrib, Finset.prod_const, Nat.card_Icc, Nat.add_sub_cancel, inv_pow]targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 595–598 at
b16ab29fc51b↗hden.h9have(9 : ℝ) ^ n = (3 : ℝ) * (3 : ℝ) ^ (n - (1 : ℕ)) * (3 : ℝ) ^ nLeaves
(((3 : ℝ) * (↑(n - (2 : ℕ)).factorial : ℝ) * ∏ x ∈ Finset.Icc (1 : ℕ) n, ((3 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ x)) * ∏ x ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ x)) * ((3 : ℝ) ^ (n - (1 : ℕ)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) = (9 : ℝ) ^ n * ((↑(n - (2 : ℕ)).factorial : ℝ) * ((∏ k ∈ Finset.Icc (1 : ℕ) n, ((3 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ k)) * ((3 : ℝ) ^ n)⁻¹) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))), withh9 : (9 : ℝ) ^ n = (3 : ℝ) * (3 : ℝ) ^ (n - (1 : ℕ)) * (3 : ℝ) ^ n.Uses library
mul_pow,mul_comm,pow_succ,Nat.sub_add_cancel.Lean, lines 604–605
have h9 : (9 : ℝ) ^ n = 3 * (3 : ℝ) ^ (n - 1) * (3 : ℝ) ^ n := by rw [show (9 : ℝ) = 3 * 3 by norm_num, mul_pow, mul_comm (3 : ℝ) _, ← pow_succ, Nat.sub_add_cancel hn]targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 604–605 at
b16ab29fc51b↗hden.h3have((3 : ℝ) ^ n)⁻¹ * (3 : ℝ) ^ n = (1 : ℝ)Leaves
(((3 : ℝ) * (↑(n - (2 : ℕ)).factorial : ℝ) * ∏ x ∈ Finset.Icc (1 : ℕ) n, ((3 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ x)) * ∏ x ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ x)) * ((3 : ℝ) ^ (n - (1 : ℕ)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) = (9 : ℝ) ^ n * ((↑(n - (2 : ℕ)).factorial : ℝ) * ((∏ k ∈ Finset.Icc (1 : ℕ) n, ((3 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ k)) * ((3 : ℝ) ^ n)⁻¹) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))), withh3 : ((3 : ℝ) ^ n)⁻¹ * (3 : ℝ) ^ n = (1 : ℝ).Uses library
inv_mul_cancel₀.Lean, line 606
have h3 : ((3 : ℝ) ^ n)⁻¹ * (3 : ℝ) ^ n = 1 := inv_mul_cancel₀ (by positivity)
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 606 at
b16ab29fc51b↗
s12obtain∃ (b : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(b n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))Leaves
∃ (a : ℕ → ℤ) (b : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(b n) : ℝ) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (↑(a n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹, withb : ℕ → ℤ,hb : ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(b n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))).Lean, line 610
obtain ⟨b, hb⟩ := hden
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 610 at
b16ab29fc51b↗hpfhave∀ (n : ℕ), (1 : ℕ) ≤ n → ∀ (m : ℕ), (1 : ℕ) ≤ m → -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹Leaves
∃ (a : ℕ → ℤ) (b : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(b n) : ℝ) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (↑(a n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹, withhpf : ∀ (n : ℕ), (1 : ℕ) ≤ n → ∀ (m : ℕ), (1 : ℕ) ≤ m → -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹.Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Polynomial.eval_neg,Polynomial.eval_prodPolynomial evaluation commutes withFinset.prod,Polynomial.eval_sub,Polynomial.eval_X,Polynomial.eval_C.Lean, lines 612–742
have hpf : ∀ n : ℕ, 1 ≤ n → ∀ m : ℕ, 1 ≤ m → (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (((m : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - (m : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (m : ℕ)))⁻¹) = ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹) + ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹) := by intro n hn m hm -- General partial fractions, from Mathlib's Lagrange interpolation. have lag : ∀ (s : Finset ℕ) (p : ℕ → ℝ) (Q : Polynomial ℝ), (∀ k ∈ s, p k ≠ 0) → Set.InjOn p s → Q.degree < s.card → ∀ x : ℝ, (∀ k ∈ s, 1 - p k * x ≠ 0) → Q.eval x * ∏ k ∈ s, (1 - p k * x)⁻¹ = ∑ k ∈ s, Q.eval (p k)⁻¹ * (∏ j ∈ s.erase k, (1 - p j / p k))⁻¹ * (1 - p k * x)⁻¹ := by intro s p Q hp hinj hdeg x hx have hinj' : Set.InjOn (fun k => (p k)⁻¹) s := by intro a ha b hb hab exact hinj ha hb (inv_injective hab) have hxv : ∀ k ∈ s, x ≠ (p k)⁻¹ := by intro k hk hxk apply hx k hk rw [hxk, mul_inv_cancel₀ (hp k hk), sub_self] have hQ := Lagrange.eq_interpolate hinj' hdeg have hev := Lagrange.eval_interpolate_not_at_node (s := s) (v := fun k => (p k)⁻¹) (fun i => Q.eval (p i)⁻¹) hxv rw [← hQ, Lagrange.eval_nodal] at hev have hfac : ∀ k ∈ s, (1 - p k * x)⁻¹ = (x - (p k)⁻¹)⁻¹ * (-(p k)⁻¹) := by intro k hk have h1 := hp k hk have h3 : (x - (p k)⁻¹) * (-(p k)) = 1 - p k * x := by rw [sub_mul, mul_neg, mul_neg, inv_mul_cancel₀ h1]; ring rw [← h3, mul_inv, inv_neg] rw [Finset.prod_congr rfl hfac, Finset.prod_mul_distrib, hev] have hne : ∏ i ∈ s, (x - (p i)⁻¹) ≠ 0 := Finset.prod_ne_zero_iff.mpr (fun i hi => sub_ne_zero.mpr (hxv i hi)) rw [Finset.prod_inv_distrib, mul_assoc, ← mul_assoc (∑ i ∈ s, _), mul_comm (∑ i ∈ s, _), ← mul_assoc, ← mul_assoc, mul_inv_cancel₀ hne, one_mul, Finset.sum_mul] refine Finset.sum_congr rfl (fun k hk => ?_) rw [Lagrange.nodalWeight, ← Finset.mul_prod_erase s (fun i => -(p i)⁻¹) hk] have hj : ∀ j ∈ s.erase k, ((p k)⁻¹ - (p j)⁻¹)⁻¹ * -(p j)⁻¹ = (1 - p j / p k)⁻¹ := by intro j hj have hjs := Finset.mem_of_mem_erase hj have hjk := Finset.ne_of_mem_erase hj have hpj := hp j hjs have hpk := hp k hk have hne : p j ≠ p k := fun h => hjk (hinj hjs hk h) have hsub : p k - p j ≠ 0 := sub_ne_zero.mpr (Ne.symm hne) field_simp ring calc (∏ j ∈ s.erase k, ((p k)⁻¹ - (p j)⁻¹)⁻¹) * (x - (p k)⁻¹)⁻¹ * Q.eval (p k)⁻¹ * (-(p k)⁻¹ * ∏ j ∈ s.erase k, -(p j)⁻¹) = Q.eval (p k)⁻¹ * (∏ j ∈ s.erase k, (((p k)⁻¹ - (p j)⁻¹)⁻¹ * -(p j)⁻¹)) * ((x - (p k)⁻¹)⁻¹ * -(p k)⁻¹) := by rw [Finset.prod_mul_distrib]; ring _ = Q.eval (p k)⁻¹ * (∏ j ∈ s.erase k, (1 - p j / p k))⁻¹ * (1 - p k * x)⁻¹ := by rw [Finset.prod_congr rfl hj, ← Finset.prod_inv_distrib, hfac k hk] have hx2 : (2 : ℝ) ≤ (2 : ℝ) ^ m := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ m := pow_le_pow_right₀ (by norm_num) hm have hx0 : (2 : ℝ) ^ m ≠ 0 := by positivity have hp0 : ∀ k : ℕ, (8 / 3 : ℝ) * 2 ^ k ≠ 0 := fun k => by positivity have hpx : ∀ k : ℕ, 1 - (8 / 3 : ℝ) * 2 ^ k * 2 ^ m ≠ 0 := by intro k have h1 : (1 : ℝ) ≤ 2 ^ k := one_le_pow₀ (by norm_num) nlinarith have hinj : Set.InjOn (fun k : ℕ => (8 / 3 : ℝ) * 2 ^ k) (Finset.Icc 1 n : Set ℕ) := by intro a _ b _ hab have h : (2 : ℝ) ^ a = 2 ^ b := by have := hab; simp only at this exact mul_left_cancel₀ (by norm_num : (8 / 3 : ℝ) ≠ 0) this exact pow_right_injective₀ (by norm_num : (0 : ℝ) < 2) (by norm_num) h have hdeg : (-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))).degree < ((Finset.Icc 1 n).card : WithBot ℕ) := by rw [Polynomial.degree_neg, Polynomial.degree_prod] simp only [Polynomial.degree_X_sub_C, Finset.sum_const, Nat.card_Icc] rw [show n - 1 + 1 - 1 = n - 1 by omega, show n + 1 - 1 = n by omega, nsmul_one] exact_mod_cast (by omega : n - 1 < n) have hL := lag (Finset.Icc 1 n) (fun k => (8 / 3 : ℝ) * 2 ^ k) (-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))) (fun k _ => hp0 k) hinj hdeg ((2 : ℝ) ^ m) (fun k _ => hpx k) simp only [Polynomial.eval_neg, Polynomial.eval_prod, Polynomial.eval_sub, Polynomial.eval_X, Polynomial.eval_C] at hL have hcard : (Finset.Icc 1 (n - 1)).card = n - 1 := by rw [Nat.card_Icc]; omega -- geometric sums have hgeo : ∀ u : ℝ, u ≠ 0 → 1 - u ≠ 0 → ∀ N : ℕ, (1 - u)⁻¹ + ∑ i ∈ Finset.Icc 1 N, (u ^ i)⁻¹ = (u ^ N)⁻¹ * (1 - u)⁻¹ := by intro u hu hu1 N induction N with | zero => simp | succ N ih => rw [Finset.sum_Icc_succ_top (by omega), ← add_assoc, ih] have hN : u ^ N ≠ 0 := pow_ne_zero _ hu field_simp ring -- the left side, in terms of the Lagrange data have hz1 : ∀ k : ℕ, (2 : ℝ) ^ ((k : ℤ) - (m : ℤ)) = 2 ^ k * ((2 : ℝ) ^ m)⁻¹ := fun k => by rw [zpow_sub₀ two_ne_zero, zpow_natCast, zpow_natCast, div_eq_mul_inv] have hz2 : ∀ k : ℕ, (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (m : ℤ)) = ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m := fun k => by rw [zpow_add₀ two_ne_zero, zpow_natCast, zpow_natCast, mul_assoc] have hz3 : (8 / 3 : ℝ) * (2 : ℝ) ^ ((m : ℤ) + (n : ℤ)) = ((8 / 3 : ℝ) * 2 ^ n) * (2 : ℝ) ^ m := by rw [zpow_add₀ two_ne_zero, zpow_natCast, zpow_natCast, mul_comm ((2 : ℝ) ^ m), mul_assoc] have hsplit : ∏ k ∈ Finset.Icc 1 n, (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹ = (∏ k ∈ Finset.Icc 1 (n - 1), (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) * (1 - ((8 / 3 : ℝ) * 2 ^ n) * (2 : ℝ) ^ m)⁻¹ := by have hn' : n = n - 1 + 1 := by omega conv_lhs => rw [hn'] rw [Finset.prod_Icc_succ_top (by omega), ← hn'] have hfac : ∀ k : ℕ, 1 - 2 ^ k * ((2 : ℝ) ^ m)⁻¹ = ((2 : ℝ) ^ m)⁻¹ * ((2 : ℝ) ^ m - (2 : ℝ) ^ k) := fun k => by rw [mul_sub, inv_mul_cancel₀ hx0]; ring have hLHS : (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (((m : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - (m : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (m : ℕ)))⁻¹) = (((2 : ℝ) ^ m) ^ (n - 1))⁻¹ * ((-∏ t ∈ Finset.Icc 1 (n - 1), ((2 : ℝ) ^ m - (2 : ℝ) ^ t)) * ∏ k ∈ Finset.Icc 1 n, (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) := by simp only [hz1, hz2, hz3] rw [Finset.prod_mul_distrib, hsplit, Finset.prod_congr rfl (fun k _ => hfac k), Finset.prod_mul_distrib, Finset.prod_const, hcard, inv_pow] ring -- the right side have hpk : ∀ k : ℕ, (8 / 3 : ℝ) * 2 ^ (k + m) = ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m := fun k => by rw [pow_add, mul_assoc] have hswap : ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹ = ∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * ∑ i ∈ Finset.Icc 1 (n - 1), ((((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m) ^ i)⁻¹ := by simp only [Finset.sum_mul, Finset.mul_sum] rw [Finset.sum_comm] refine Finset.sum_congr rfl (fun k _ => Finset.sum_congr rfl (fun i _ => ?_)) rw [mul_pow, mul_inv]; ring have hRHS : ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹) + ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹) = (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * ((((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m) ^ (n - 1))⁻¹ * (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) := by simp only [hpk] rw [hswap, ← Finset.sum_add_distrib] refine Finset.sum_congr rfl (fun k hk => ?_) rw [← mul_add, hgeo _ (mul_ne_zero (hp0 k) hx0) (hpx k) (n - 1)] ring -- matching the coefficients have hcoef : ∀ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * 2 ^ k) ^ (n - 1))⁻¹ = (-∏ t ∈ Finset.Icc 1 (n - 1), (((8 / 3 : ℝ) * 2 ^ k)⁻¹ - (2 : ℝ) ^ t)) * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 / 3 : ℝ) * 2 ^ j) / ((8 / 3 : ℝ) * 2 ^ k)))⁻¹ := by intro k hk have hq : ∀ t : ℕ, ((8 / 3 : ℝ) * 2 ^ k)⁻¹ - (2 : ℝ) ^ t = ((8 / 3 : ℝ) * 2 ^ k)⁻¹ * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k)) := fun t => by rw [mul_sub, mul_one, pow_add, show ((8 / 3 : ℝ) * 2 ^ k)⁻¹ * ((8 / 3 : ℝ) * (2 ^ t * 2 ^ k)) = 2 ^ t * (((8 / 3 : ℝ) * 2 ^ k)⁻¹ * ((8 / 3 : ℝ) * 2 ^ k)) by ring, inv_mul_cancel₀ (hp0 k), mul_one] have hw : ∀ j : ℕ, ((8 / 3 : ℝ) * 2 ^ j) / ((8 / 3 : ℝ) * 2 ^ k) = (2 : ℝ) ^ ((j : ℤ) - (k : ℤ)) := fun j => by rw [zpow_sub₀ two_ne_zero, zpow_natCast, zpow_natCast] field_simp rw [Finset.prod_congr rfl (fun t _ => hq t), Finset.prod_mul_distrib, Finset.prod_const, hcard, inv_pow] simp only [hw] ring calc (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (((m : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - (m : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (m : ℕ)))⁻¹) = (((2 : ℝ) ^ m) ^ (n - 1))⁻¹ * ((-∏ t ∈ Finset.Icc 1 (n - 1), ((2 : ℝ) ^ m - (2 : ℝ) ^ t)) * ∏ k ∈ Finset.Icc 1 n, (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) := hLHS _ = (((2 : ℝ) ^ m) ^ (n - 1))⁻¹ * (∑ k ∈ Finset.Icc 1 n, (-∏ t ∈ Finset.Icc 1 (n - 1), (((8 / 3 : ℝ) * 2 ^ k)⁻¹ - (2 : ℝ) ^ t)) * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 / 3 : ℝ) * 2 ^ j) / ((8 / 3 : ℝ) * 2 ^ k)))⁻¹ * (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) := by rw [hL] _ = (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * ((((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m) ^ (n - 1))⁻¹ * (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) := by rw [Finset.mul_sum] refine Finset.sum_congr rfl (fun k hk => ?_) rw [← hcoef k hk, mul_pow, mul_inv] ring _ = ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹) + ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹) := hRHS.symmtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 612–742 at
b16ab29fc51b↗hpf.laghave∀ (s : Finset ℕ) (p : ℕ → ℝ) (Q : Polynomial ℝ), (∀ k ∈ s, p k ≠ (0 : ℝ)) → Set.InjOn p (↑s : Set ℕ) → Q.degree < (↑s.card : WithBot ℕ) → ∀ (x : ℝ), (∀ k ∈ s, (1 : ℝ) - p k * x ≠ (0 : ℝ)) → Polynomial.eval x Q * ∏ k ∈ s, ((1 : ℝ) - p k * x)⁻¹ = ∑ k ∈ s, Polynomial.eval (p k)⁻¹ Q * (∏ j ∈ s.erase k, ((1 : ℝ) - p j / p k))⁻¹ * ((1 : ℝ) - p k * x)⁻¹Leaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withlag : ∀ (s : Finset ℕ) (p : ℕ → ℝ) (Q : Polynomial ℝ), (∀ k ∈ s, p k ≠ (0 : ℝ)) → Set.InjOn p (↑s : Set ℕ) → Q.degree < (↑s.card : WithBot ℕ) → ∀ (x : ℝ), (∀ k ∈ s, (1 : ℝ) - p k * x ≠ (0 : ℝ)) → Polynomial.eval x Q * ∏ k ∈ s, ((1 : ℝ) - p k * x)⁻¹ = ∑ k ∈ s, Polynomial.eval (p k)⁻¹ Q * (∏ j ∈ s.erase k, ((1 : ℝ) - p j / p k))⁻¹ * ((1 : ℝ) - p k * x)⁻¹.Uses library
FinsetFinset αis the type of finite sets of elements ofα. ,PolynomialPolynomial Ris the type of univariate polynomials overR, denoted asR[X]within thePolynomialnamespace. ,Set.InjOnfis injective onsif the restriction offtosis injective. ,Lagrange.eval_nodal,Finset.prod_congr,rflrfl : a = ais the unique constructor of the equality type. ,Finset.prod_mul_distrib,Finset.prod_inv_distrib,mul_assoc,mul_comm,mul_inv_cancel₀,one_mul,Finset.sum_mul,Finset.sum_congr,Lagrange.nodalWeightThis defines the nodal weight for a given set of node indexes and node mapping functionv. ,Finset.mul_prod_eraseTaking a product overs : Finset ιis the same as multiplying the value on a single elementf aby the product ofs.erase a. .Lean, lines 615–657
have lag : ∀ (s : Finset ℕ) (p : ℕ → ℝ) (Q : Polynomial ℝ), (∀ k ∈ s, p k ≠ 0) → Set.InjOn p s → Q.degree < s.card → ∀ x : ℝ, (∀ k ∈ s, 1 - p k * x ≠ 0) → Q.eval x * ∏ k ∈ s, (1 - p k * x)⁻¹ = ∑ k ∈ s, Q.eval (p k)⁻¹ * (∏ j ∈ s.erase k, (1 - p j / p k))⁻¹ * (1 - p k * x)⁻¹ := by intro s p Q hp hinj hdeg x hx have hinj' : Set.InjOn (fun k => (p k)⁻¹) s := by intro a ha b hb hab exact hinj ha hb (inv_injective hab) have hxv : ∀ k ∈ s, x ≠ (p k)⁻¹ := by intro k hk hxk apply hx k hk rw [hxk, mul_inv_cancel₀ (hp k hk), sub_self] have hQ := Lagrange.eq_interpolate hinj' hdeg have hev := Lagrange.eval_interpolate_not_at_node (s := s) (v := fun k => (p k)⁻¹) (fun i => Q.eval (p i)⁻¹) hxv rw [← hQ, Lagrange.eval_nodal] at hev have hfac : ∀ k ∈ s, (1 - p k * x)⁻¹ = (x - (p k)⁻¹)⁻¹ * (-(p k)⁻¹) := by intro k hk have h1 := hp k hk have h3 : (x - (p k)⁻¹) * (-(p k)) = 1 - p k * x := by rw [sub_mul, mul_neg, mul_neg, inv_mul_cancel₀ h1]; ring rw [← h3, mul_inv, inv_neg] rw [Finset.prod_congr rfl hfac, Finset.prod_mul_distrib, hev] have hne : ∏ i ∈ s, (x - (p i)⁻¹) ≠ 0 := Finset.prod_ne_zero_iff.mpr (fun i hi => sub_ne_zero.mpr (hxv i hi)) rw [Finset.prod_inv_distrib, mul_assoc, ← mul_assoc (∑ i ∈ s, _), mul_comm (∑ i ∈ s, _), ← mul_assoc, ← mul_assoc, mul_inv_cancel₀ hne, one_mul, Finset.sum_mul] refine Finset.sum_congr rfl (fun k hk => ?_) rw [Lagrange.nodalWeight, ← Finset.mul_prod_erase s (fun i => -(p i)⁻¹) hk] have hj : ∀ j ∈ s.erase k, ((p k)⁻¹ - (p j)⁻¹)⁻¹ * -(p j)⁻¹ = (1 - p j / p k)⁻¹ := by intro j hj have hjs := Finset.mem_of_mem_erase hj have hjk := Finset.ne_of_mem_erase hj have hpj := hp j hjs have hpk := hp k hk have hne : p j ≠ p k := fun h => hjk (hinj hjs hk h) have hsub : p k - p j ≠ 0 := sub_ne_zero.mpr (Ne.symm hne) field_simp ring calc (∏ j ∈ s.erase k, ((p k)⁻¹ - (p j)⁻¹)⁻¹) * (x - (p k)⁻¹)⁻¹ * Q.eval (p k)⁻¹ * (-(p k)⁻¹ * ∏ j ∈ s.erase k, -(p j)⁻¹) = Q.eval (p k)⁻¹ * (∏ j ∈ s.erase k, (((p k)⁻¹ - (p j)⁻¹)⁻¹ * -(p j)⁻¹)) * ((x - (p k)⁻¹)⁻¹ * -(p k)⁻¹) := by rw [Finset.prod_mul_distrib]; ring _ = Q.eval (p k)⁻¹ * (∏ j ∈ s.erase k, (1 - p j / p k))⁻¹ * (1 - p k * x)⁻¹ := by rw [Finset.prod_congr rfl hj, ← Finset.prod_inv_distrib, hfac k hk]targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 615–657 at
b16ab29fc51b↗hpf.lag.hinj'haveSet.InjOn (fun (k : ℕ) => (p k)⁻¹) (↑s : Set ℕ)Leaves
Polynomial.eval x Q * ∏ k ∈ s, ((1 : ℝ) - p k * x)⁻¹ = ∑ k ∈ s, Polynomial.eval (p k)⁻¹ Q * (∏ j ∈ s.erase k, ((1 : ℝ) - p j / p k))⁻¹ * ((1 : ℝ) - p k * x)⁻¹, withhinj' : Set.InjOn (fun (k : ℕ) => (p k)⁻¹) (↑s : Set ℕ).Uses library
Set.InjOnfis injective onsif the restriction offtosis injective. ,inv_injective.Lean, lines 620–622
have hinj' : Set.InjOn (fun k => (p k)⁻¹) s := by intro a ha b hb hab exact hinj ha hb (inv_injective hab)targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 620–622 at
b16ab29fc51b↗hpf.lag.hxvhave∀ k ∈ s, x ≠ (p k)⁻¹Leaves
Polynomial.eval x Q * ∏ k ∈ s, ((1 : ℝ) - p k * x)⁻¹ = ∑ k ∈ s, Polynomial.eval (p k)⁻¹ Q * (∏ j ∈ s.erase k, ((1 : ℝ) - p j / p k))⁻¹ * ((1 : ℝ) - p k * x)⁻¹, withhxv : ∀ k ∈ s, x ≠ (p k)⁻¹.Uses library
mul_inv_cancel₀,sub_self.Lean, lines 623–626
have hxv : ∀ k ∈ s, x ≠ (p k)⁻¹ := by intro k hk hxk apply hx k hk rw [hxk, mul_inv_cancel₀ (hp k hk), sub_self]targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 623–626 at
b16ab29fc51b↗hpf.lag.hQhaveQ = (Lagrange.interpolate s fun (k : ℕ) => (p k)⁻¹ : (ℕ → ℝ) → Polynomial ℝ) fun (i : ℕ) => Polynomial.eval (p i)⁻¹ QLeaves
Polynomial.eval x Q * ∏ k ∈ s, ((1 : ℝ) - p k * x)⁻¹ = ∑ k ∈ s, Polynomial.eval (p k)⁻¹ Q * (∏ j ∈ s.erase k, ((1 : ℝ) - p j / p k))⁻¹ * ((1 : ℝ) - p k * x)⁻¹, withhQ : Q = (Lagrange.interpolate s fun (k : ℕ) => (p k)⁻¹ : (ℕ → ℝ) → Polynomial ℝ) fun (i : ℕ) => Polynomial.eval (p i)⁻¹ Q.Uses library
Lagrange.eq_interpolate.Lean, line 627
have hQ := Lagrange.eq_interpolate hinj' hdeg
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 627 at
b16ab29fc51b↗hpf.lag.hevhavePolynomial.eval x ((Lagrange.interpolate s fun (k : ℕ) => (p k)⁻¹ : (ℕ → ℝ) → Polynomial ℝ) fun (i : ℕ) => Polynomial.eval (p i)⁻¹ Q) = Polynomial.eval x (Lagrange.nodal s fun (k : ℕ) => (p k)⁻¹) * ∑ i ∈ s, Lagrange.nodalWeight s (fun (k : ℕ) => (p k)⁻¹) i * (x - (p i)⁻¹)⁻¹ * Polynomial.eval (p i)⁻¹ QLeaves
Polynomial.eval x Q * ∏ k ∈ s, ((1 : ℝ) - p k * x)⁻¹ = ∑ k ∈ s, Polynomial.eval (p k)⁻¹ Q * (∏ j ∈ s.erase k, ((1 : ℝ) - p j / p k))⁻¹ * ((1 : ℝ) - p k * x)⁻¹, withhev : Polynomial.eval x ((Lagrange.interpolate s fun (k : ℕ) => (p k)⁻¹ : (ℕ → ℝ) → Polynomial ℝ) fun (i : ℕ) => Polynomial.eval (p i)⁻¹ Q) = Polynomial.eval x (Lagrange.nodal s fun (k : ℕ) => (p k)⁻¹) * ∑ i ∈ s, Lagrange.nodalWeight s (fun (k : ℕ) => (p k)⁻¹) i * (x - (p i)⁻¹)⁻¹ * Polynomial.eval (p i)⁻¹ Q.Uses library
Lagrange.eval_interpolate_not_at_nodeThis is the first barycentric form of the Lagrange interpolant. .Lean, line 628
have hev := Lagrange.eval_interpolate_not_at_node (s := s) (v := fun k => (p k)⁻¹) (fun i => Q.eval (p i)⁻¹) hxv
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 628 at
b16ab29fc51b↗hpf.lag.hfachave∀ k ∈ s, ((1 : ℝ) - p k * x)⁻¹ = (x - (p k)⁻¹)⁻¹ * -(p k)⁻¹Leaves
Polynomial.eval x Q * ∏ k ∈ s, ((1 : ℝ) - p k * x)⁻¹ = ∑ k ∈ s, Polynomial.eval (p k)⁻¹ Q * (∏ j ∈ s.erase k, ((1 : ℝ) - p j / p k))⁻¹ * ((1 : ℝ) - p k * x)⁻¹, withhfac : ∀ k ∈ s, ((1 : ℝ) - p k * x)⁻¹ = (x - (p k)⁻¹)⁻¹ * -(p k)⁻¹.Uses library
mul_inv,inv_neg.Lean, lines 630–635
have hfac : ∀ k ∈ s, (1 - p k * x)⁻¹ = (x - (p k)⁻¹)⁻¹ * (-(p k)⁻¹) := by intro k hk have h1 := hp k hk have h3 : (x - (p k)⁻¹) * (-(p k)) = 1 - p k * x := by rw [sub_mul, mul_neg, mul_neg, inv_mul_cancel₀ h1]; ring rw [← h3, mul_inv, inv_neg]targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 630–635 at
b16ab29fc51b↗hpf.lag.hfac.h1havep k ≠ (0 : ℝ)Leaves
((1 : ℝ) - p k * x)⁻¹ = (x - (p k)⁻¹)⁻¹ * -(p k)⁻¹, withh1 : p k ≠ (0 : ℝ).Lean, line 632
have h1 := hp k hk
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 632 at
b16ab29fc51b↗hpf.lag.hfac.h3have(x - (p k)⁻¹) * -p k = (1 : ℝ) - p k * xLeaves
((1 : ℝ) - p k * x)⁻¹ = (x - (p k)⁻¹)⁻¹ * -(p k)⁻¹, withh3 : (x - (p k)⁻¹) * -p k = (1 : ℝ) - p k * x.Uses library
sub_mulAlias ofmul_sub_right_distrib. ,mul_neg,inv_mul_cancel₀.Lean, lines 633–634
have h3 : (x - (p k)⁻¹) * (-(p k)) = 1 - p k * x := by rw [sub_mul, mul_neg, mul_neg, inv_mul_cancel₀ h1]; ringtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 633–634 at
b16ab29fc51b↗
hpf.lag.hnehave∏ i ∈ s, (x - (p i)⁻¹) ≠ (0 : ℝ)Leaves
((∏ i ∈ s, (x - (p i)⁻¹)) * ∑ i ∈ s, Lagrange.nodalWeight s (fun (k : ℕ) => (p k)⁻¹) i * (x - (p i)⁻¹)⁻¹ * Polynomial.eval (p i)⁻¹ Q) * ((∏ x_1 ∈ s, (x - (p x_1)⁻¹)⁻¹) * ∏ x ∈ s, -(p x)⁻¹) = ∑ k ∈ s, Polynomial.eval (p k)⁻¹ Q * (∏ j ∈ s.erase k, ((1 : ℝ) - p j / p k))⁻¹ * ((1 : ℝ) - p k * x)⁻¹, withhne : ∏ i ∈ s, (x - (p i)⁻¹) ≠ (0 : ℝ).Uses library
Finset.prod_ne_zero_iff,sub_ne_zero.Lean, line 637
have hne : ∏ i ∈ s, (x - (p i)⁻¹) ≠ 0 := Finset.prod_ne_zero_iff.mpr (fun i hi => sub_ne_zero.mpr (hxv i hi))
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 637 at
b16ab29fc51b↗hpf.lag.hjhave∀ j ∈ s.erase k, ((p k)⁻¹ - (p j)⁻¹)⁻¹ * -(p j)⁻¹ = ((1 : ℝ) - p j / p k)⁻¹Leaves
(∏ j ∈ s.erase k, ((p k)⁻¹ - (p j)⁻¹)⁻¹) * (x - (p k)⁻¹)⁻¹ * Polynomial.eval (p k)⁻¹ Q * (-(p k)⁻¹ * ∏ x ∈ s.erase k, -(p x)⁻¹) = Polynomial.eval (p k)⁻¹ Q * (∏ j ∈ s.erase k, ((1 : ℝ) - p j / p k))⁻¹ * ((1 : ℝ) - p k * x)⁻¹, withhj : ∀ j ∈ s.erase k, ((p k)⁻¹ - (p j)⁻¹)⁻¹ * -(p j)⁻¹ = ((1 : ℝ) - p j / p k)⁻¹.Lean, lines 642–651
have hj : ∀ j ∈ s.erase k, ((p k)⁻¹ - (p j)⁻¹)⁻¹ * -(p j)⁻¹ = (1 - p j / p k)⁻¹ := by intro j hj have hjs := Finset.mem_of_mem_erase hj have hjk := Finset.ne_of_mem_erase hj have hpj := hp j hjs have hpk := hp k hk have hne : p j ≠ p k := fun h => hjk (hinj hjs hk h) have hsub : p k - p j ≠ 0 := sub_ne_zero.mpr (Ne.symm hne) field_simp ringtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 642–651 at
b16ab29fc51b↗hpf.lag.hj.hjshavej ∈ sLeaves
((p k)⁻¹ - (p j)⁻¹)⁻¹ * -(p j)⁻¹ = ((1 : ℝ) - p j / p k)⁻¹, withhjs : j ∈ s.Uses library
Finset.mem_of_mem_erase.Lean, line 644
have hjs := Finset.mem_of_mem_erase hj
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 644 at
b16ab29fc51b↗hpf.lag.hj.hjkhavej ≠ kLeaves
((p k)⁻¹ - (p j)⁻¹)⁻¹ * -(p j)⁻¹ = ((1 : ℝ) - p j / p k)⁻¹, withhjk : j ≠ k.Uses library
Finset.ne_of_mem_erase.Lean, line 645
have hjk := Finset.ne_of_mem_erase hj
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 645 at
b16ab29fc51b↗hpf.lag.hj.hpjhavep j ≠ (0 : ℝ)Leaves
((p k)⁻¹ - (p j)⁻¹)⁻¹ * -(p j)⁻¹ = ((1 : ℝ) - p j / p k)⁻¹, withhpj : p j ≠ (0 : ℝ).Lean, line 646
have hpj := hp j hjs
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 646 at
b16ab29fc51b↗hpf.lag.hj.hpkhavep k ≠ (0 : ℝ)Leaves
((p k)⁻¹ - (p j)⁻¹)⁻¹ * -(p j)⁻¹ = ((1 : ℝ) - p j / p k)⁻¹, withhpk : p k ≠ (0 : ℝ).Lean, line 647
have hpk := hp k hk
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 647 at
b16ab29fc51b↗hpf.lag.hj.hnehavep j ≠ p kLeaves
((p k)⁻¹ - (p j)⁻¹)⁻¹ * -(p j)⁻¹ = ((1 : ℝ) - p j / p k)⁻¹, withhne : p j ≠ p k.Lean, line 648
have hne : p j ≠ p k := fun h => hjk (hinj hjs hk h)
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 648 at
b16ab29fc51b↗hpf.lag.hj.hsubhavep k - p j ≠ (0 : ℝ)Leaves
((p k)⁻¹ - (p j)⁻¹)⁻¹ * -(p j)⁻¹ = ((1 : ℝ) - p j / p k)⁻¹, withhsub : p k - p j ≠ (0 : ℝ).Uses library
sub_ne_zero,Ne.symm.Lean, line 649
have hsub : p k - p j ≠ 0 := sub_ne_zero.mpr (Ne.symm hne)
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 649 at
b16ab29fc51b↗
hpf.lag.s8calc(∏ j ∈ s.erase k, ((p k)⁻¹ - (p j)⁻¹)⁻¹) * (x - (p k)⁻¹)⁻¹ * Polynomial.eval (p k)⁻¹ Q * (-(p k)⁻¹ * ∏ j ∈ s.erase k, -(p j)⁻¹) = (Polynomial.eval (p k)⁻¹ Q * ∏ j ∈ s.erase k, ((p k)⁻¹ - (p j)⁻¹)⁻¹ * -(p j)⁻¹) * ((x - (p k)⁻¹)⁻¹ * -(p k)⁻¹)Closes the goal.
Uses library
Finset.prod_mul_distrib.Lean, lines 652–655
calc (∏ j ∈ s.erase k, ((p k)⁻¹ - (p j)⁻¹)⁻¹) * (x - (p k)⁻¹)⁻¹ * Q.eval (p k)⁻¹ * (-(p k)⁻¹ * ∏ j ∈ s.erase k, -(p j)⁻¹) = Q.eval (p k)⁻¹ * (∏ j ∈ s.erase k, (((p k)⁻¹ - (p j)⁻¹)⁻¹ * -(p j)⁻¹)) * ((x - (p k)⁻¹)⁻¹ * -(p k)⁻¹) := by rw [Finset.prod_mul_distrib]; ringtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 652–655 at
b16ab29fc51b↗hpf.lag.s9calcCloses the goal.
Uses library
Finset.prod_congr,rflrfl : a = ais the unique constructor of the equality type. ,Finset.prod_inv_distrib.Lean, lines 656–657
_ = Q.eval (p k)⁻¹ * (∏ j ∈ s.erase k, (1 - p j / p k))⁻¹ * (1 - p k * x)⁻¹ := by rw [Finset.prod_congr rfl hj, ← Finset.prod_inv_distrib, hfac k hk]targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 656–657 at
b16ab29fc51b↗
hpf.hx2have(2 : ℝ) ≤ (2 : ℝ) ^ mLeaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhx2 : (2 : ℝ) ≤ (2 : ℝ) ^ m.Lean, lines 658–660
have hx2 : (2 : ℝ) ≤ (2 : ℝ) ^ m := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ m := pow_le_pow_right₀ (by norm_num) hmtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 658–660 at
b16ab29fc51b↗hpf.hx2.s1calc(2 : ℝ) = (2 : ℝ) ^ (1 : ℕ)Closes the goal.
Uses library
pow_one.Lean, line 659
calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 659 at
b16ab29fc51b↗hpf.hx2.s2calc(2 : ℝ) ^ (1 : ℕ) ≤ (2 : ℝ) ^ mCloses the goal.
Uses library
pow_le_pow_right₀.Lean, line 660
_ ≤ 2 ^ m := pow_le_pow_right₀ (by norm_num) hm
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 660 at
b16ab29fc51b↗
hpf.hx0have(2 : ℝ) ^ m ≠ (0 : ℝ)routine: positivityLeaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhx0 : (2 : ℝ) ^ m ≠ (0 : ℝ).Lean, line 661
have hx0 : (2 : ℝ) ^ m ≠ 0 := by positivity
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 661 at
b16ab29fc51b↗hpf.hp0have∀ (k : ℕ), (8 / 3 : ℝ) * (2 : ℝ) ^ k ≠ (0 : ℝ)Leaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhp0 : ∀ (k : ℕ), (8 / 3 : ℝ) * (2 : ℝ) ^ k ≠ (0 : ℝ).Lean, line 662
have hp0 : ∀ k : ℕ, (8 / 3 : ℝ) * 2 ^ k ≠ 0 := fun k => by positivity
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 662 at
b16ab29fc51b↗hpf.hpxhave∀ (k : ℕ), (1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m ≠ (0 : ℝ)Leaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhpx : ∀ (k : ℕ), (1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m ≠ (0 : ℝ).Lean, lines 663–666
have hpx : ∀ k : ℕ, 1 - (8 / 3 : ℝ) * 2 ^ k * 2 ^ m ≠ 0 := by intro k have h1 : (1 : ℝ) ≤ 2 ^ k := one_le_pow₀ (by norm_num) nlinarithtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 663–666 at
b16ab29fc51b↗hpf.hpx.h1have(1 : ℝ) ≤ (2 : ℝ) ^ kLeaves
(1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m ≠ (0 : ℝ), withh1 : (1 : ℝ) ≤ (2 : ℝ) ^ k.Uses library
one_le_pow₀.Lean, line 665
have h1 : (1 : ℝ) ≤ 2 ^ k := one_le_pow₀ (by norm_num)
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 665 at
b16ab29fc51b↗
hpf.hinjhaveSet.InjOn (fun (k : ℕ) => (8 / 3 : ℝ) * (2 : ℝ) ^ k) (↑(Finset.Icc (1 : ℕ) n) : Set ℕ)Leaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhinj : Set.InjOn (fun (k : ℕ) => (8 / 3 : ℝ) * (2 : ℝ) ^ k) (↑(Finset.Icc (1 : ℕ) n) : Set ℕ).Uses library
Set.InjOnfis injective onsif the restriction offtosis injective. ,Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,SetA set is a collection of elements of some typeα. ,pow_right_injective₀.Lean, lines 667–672
have hinj : Set.InjOn (fun k : ℕ => (8 / 3 : ℝ) * 2 ^ k) (Finset.Icc 1 n : Set ℕ) := by intro a _ b _ hab have h : (2 : ℝ) ^ a = 2 ^ b := by have := hab; simp only at this exact mul_left_cancel₀ (by norm_num : (8 / 3 : ℝ) ≠ 0) this exact pow_right_injective₀ (by norm_num : (0 : ℝ) < 2) (by norm_num) htargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 667–672 at
b16ab29fc51b↗hpf.hinj.hhave(2 : ℝ) ^ a = (2 : ℝ) ^ bLeaves
a = b, withh : (2 : ℝ) ^ a = (2 : ℝ) ^ b.Uses library
mul_left_cancel₀.Lean, lines 669–671
have h : (2 : ℝ) ^ a = 2 ^ b := by have := hab; simp only at this exact mul_left_cancel₀ (by norm_num : (8 / 3 : ℝ) ≠ 0) thistargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 669–671 at
b16ab29fc51b↗hpf.hinj.h.thishave(fun (k : ℕ) => (8 / 3 : ℝ) * (2 : ℝ) ^ k) a = (fun (k : ℕ) => (8 / 3 : ℝ) * (2 : ℝ) ^ k) bLeaves
(2 : ℝ) ^ a = (2 : ℝ) ^ b, withthis : (fun (k : ℕ) => (8 / 3 : ℝ) * (2 : ℝ) ^ k) a = (fun (k : ℕ) => (8 / 3 : ℝ) * (2 : ℝ) ^ k) b.Lean, line 670
have := hab; simp only at this
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 670 at
b16ab29fc51b↗
hpf.hdeghave(-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))).degree < (↑(Finset.Icc (1 : ℕ) n).card : WithBot ℕ)Leaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhdeg : (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))).degree < (↑(Finset.Icc (1 : ℕ) n).card : WithBot ℕ).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Polynomial.XXis the polynomial variable (aka indeterminate). ,Polynomial.CC ais the constant polynomiala. ,WithBotAttach⊥to a type. ,Polynomial.degree_neg,Polynomial.degree_prodThe degree of a product of polynomials is equal to the sum of the degrees, where the degree of the zero polynomial is ⊥. ,Polynomial.degree_X_sub_C,Finset.sum_const,Nat.card_Icc,nsmul_one.Lean, lines 673–677
have hdeg : (-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))).degree < ((Finset.Icc 1 n).card : WithBot ℕ) := by rw [Polynomial.degree_neg, Polynomial.degree_prod] simp only [Polynomial.degree_X_sub_C, Finset.sum_const, Nat.card_Icc] rw [show n - 1 + 1 - 1 = n - 1 by omega, show n + 1 - 1 = n by omega, nsmul_one] exact_mod_cast (by omega : n - 1 < n)targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 673–677 at
b16ab29fc51b↗hpf.hLhavePolynomial.eval ((2 : ℝ) ^ m) (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m)⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, Polynomial.eval ((8 / 3 : ℝ) * (2 : ℝ) ^ k)⁻¹ (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))) * (∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ j / ((8 / 3 : ℝ) * (2 : ℝ) ^ k)))⁻¹ * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m)⁻¹Leaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhL : Polynomial.eval ((2 : ℝ) ^ m) (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m)⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, Polynomial.eval ((8 / 3 : ℝ) * (2 : ℝ) ^ k)⁻¹ (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))) * (∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ j / ((8 / 3 : ℝ) * (2 : ℝ) ^ k)))⁻¹ * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m)⁻¹.Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Polynomial.XXis the polynomial variable (aka indeterminate). ,Polynomial.CC ais the constant polynomiala. .Lean, lines 678–679
have hL := lag (Finset.Icc 1 n) (fun k => (8 / 3 : ℝ) * 2 ^ k) (-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))) (fun k _ => hp0 k) hinj hdeg ((2 : ℝ) ^ m) (fun k _ => hpx k)targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 678–679 at
b16ab29fc51b↗hpf.hcardhave(Finset.Icc (1 : ℕ) (n - (1 : ℕ))).card = n - (1 : ℕ)Leaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhcard : (Finset.Icc (1 : ℕ) (n - (1 : ℕ))).card = n - (1 : ℕ).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Nat.card_Icc.Lean, line 681
have hcard : (Finset.Icc 1 (n - 1)).card = n - 1 := by rw [Nat.card_Icc]; omega
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 681 at
b16ab29fc51b↗hpf.hgeohave∀ (u : ℝ), u ≠ (0 : ℝ) → (1 : ℝ) - u ≠ (0 : ℝ) → ∀ (N : ℕ), ((1 : ℝ) - u)⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) N, (u ^ i)⁻¹ = (u ^ N)⁻¹ * ((1 : ℝ) - u)⁻¹Leaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhgeo : ∀ (u : ℝ), u ≠ (0 : ℝ) → (1 : ℝ) - u ≠ (0 : ℝ) → ∀ (N : ℕ), ((1 : ℝ) - u)⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) N, (u ^ i)⁻¹ = (u ^ N)⁻¹ * ((1 : ℝ) - u)⁻¹.Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. .Lean, lines 683–691
have hgeo : ∀ u : ℝ, u ≠ 0 → 1 - u ≠ 0 → ∀ N : ℕ, (1 - u)⁻¹ + ∑ i ∈ Finset.Icc 1 N, (u ^ i)⁻¹ = (u ^ N)⁻¹ * (1 - u)⁻¹ := by intro u hu hu1 N induction N with | zero => simp | succ N ih => rw [Finset.sum_Icc_succ_top (by omega), ← add_assoc, ih] have hN : u ^ N ≠ 0 := pow_ne_zero _ hu field_simp ringtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 683–691 at
b16ab29fc51b↗hpf.hgeo.s1case routine: simpLeaves
((1 : ℝ) - u)⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (0 : ℕ), (u ^ i)⁻¹ = (u ^ (0 : ℕ))⁻¹ * ((1 : ℝ) - u)⁻¹.Uses library
Nat.zeroZero, the smallest natural number. .Lean, line 686
| zero => simp
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 686 at
b16ab29fc51b↗hpf.hgeo.s2caseLeaves
((1 : ℝ) - u)⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (N + (1 : ℕ)), (u ^ i)⁻¹ = (u ^ (N + (1 : ℕ)))⁻¹ * ((1 : ℝ) - u)⁻¹, withN : ℕ,ih : ((1 : ℝ) - u)⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) N, (u ^ i)⁻¹ = (u ^ N)⁻¹ * ((1 : ℝ) - u)⁻¹.Uses library
Nat.succThe successor of a natural numbern. ,Finset.sum_Icc_succ_top,add_assoc.Lean, lines 687–691
| succ N ih => rw [Finset.sum_Icc_succ_top (by omega), ← add_assoc, ih] have hN : u ^ N ≠ 0 := pow_ne_zero _ hu field_simp ringtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 687–691 at
b16ab29fc51b↗hpf.hgeo.s2.hNhaveu ^ N ≠ (0 : ℝ)Leaves
(u ^ N)⁻¹ * ((1 : ℝ) - u)⁻¹ + (u ^ (N + (1 : ℕ)))⁻¹ = (u ^ (N + (1 : ℕ)))⁻¹ * ((1 : ℝ) - u)⁻¹, withhN : u ^ N ≠ (0 : ℝ).Uses library
pow_ne_zero.Lean, line 689
have hN : u ^ N ≠ 0 := pow_ne_zero _ hu
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 689 at
b16ab29fc51b↗
hpf.hz1have∀ (k : ℕ), (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ)) = (2 : ℝ) ^ k * ((2 : ℝ) ^ m)⁻¹Leaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhz1 : ∀ (k : ℕ), (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ)) = (2 : ℝ) ^ k * ((2 : ℝ) ^ m)⁻¹.Uses library
zpow_sub₀,two_ne_zero,zpow_natCast,div_eq_mul_invDividing by an element is the same as multiplying by its inverse. .Lean, lines 693–694
have hz1 : ∀ k : ℕ, (2 : ℝ) ^ ((k : ℤ) - (m : ℤ)) = 2 ^ k * ((2 : ℝ) ^ m)⁻¹ := fun k => by rw [zpow_sub₀ two_ne_zero, zpow_natCast, zpow_natCast, div_eq_mul_inv]targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 693–694 at
b16ab29fc51b↗hpf.hz2have∀ (k : ℕ), (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)) = (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ mLeaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhz2 : ∀ (k : ℕ), (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)) = (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m.Uses library
zpow_add₀,two_ne_zero,zpow_natCast,mul_assoc.Lean, lines 695–696
have hz2 : ∀ k : ℕ, (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (m : ℤ)) = ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m := fun k => by rw [zpow_add₀ two_ne_zero, zpow_natCast, zpow_natCast, mul_assoc]targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 695–696 at
b16ab29fc51b↗hpf.hz3have(8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)) = (8 / 3 : ℝ) * (2 : ℝ) ^ n * (2 : ℝ) ^ mLeaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhz3 : (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)) = (8 / 3 : ℝ) * (2 : ℝ) ^ n * (2 : ℝ) ^ m.Uses library
zpow_add₀,two_ne_zero,zpow_natCast,mul_comm,mul_assoc.Lean, lines 697–698
have hz3 : (8 / 3 : ℝ) * (2 : ℝ) ^ ((m : ℤ) + (n : ℤ)) = ((8 / 3 : ℝ) * 2 ^ n) * (2 : ℝ) ^ m := by rw [zpow_add₀ two_ne_zero, zpow_natCast, zpow_natCast, mul_comm ((2 : ℝ) ^ m), mul_assoc]targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 697–698 at
b16ab29fc51b↗hpf.hsplithave∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m)⁻¹ = (∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m)⁻¹) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ n * (2 : ℝ) ^ m)⁻¹Leaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhsplit : ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m)⁻¹ = (∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m)⁻¹) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ n * (2 : ℝ) ^ m)⁻¹.Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.prod_Icc_succ_top.Lean, lines 699–702
have hsplit : ∏ k ∈ Finset.Icc 1 n, (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹ = (∏ k ∈ Finset.Icc 1 (n - 1), (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) * (1 - ((8 / 3 : ℝ) * 2 ^ n) * (2 : ℝ) ^ m)⁻¹ := by have hn' : n = n - 1 + 1 := by omega conv_lhs => rw [hn'] rw [Finset.prod_Icc_succ_top (by omega), ← hn']targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 699–702 at
b16ab29fc51b↗hpf.hsplit.hn'haven = n - (1 : ℕ) + (1 : ℕ)routine: omegaLeaves
∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m)⁻¹ = (∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m)⁻¹) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ n * (2 : ℝ) ^ m)⁻¹, withhn' : n = n - (1 : ℕ) + (1 : ℕ).Lean, line 700
have hn' : n = n - 1 + 1 := by omega
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 700 at
b16ab29fc51b↗
hpf.hfachave∀ (k : ℕ), (1 : ℝ) - (2 : ℝ) ^ k * ((2 : ℝ) ^ m)⁻¹ = ((2 : ℝ) ^ m)⁻¹ * ((2 : ℝ) ^ m - (2 : ℝ) ^ k)Leaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhfac : ∀ (k : ℕ), (1 : ℝ) - (2 : ℝ) ^ k * ((2 : ℝ) ^ m)⁻¹ = ((2 : ℝ) ^ m)⁻¹ * ((2 : ℝ) ^ m - (2 : ℝ) ^ k).Uses library
mul_subAlias ofmul_sub_left_distrib. ,inv_mul_cancel₀.Lean, lines 703–704
have hfac : ∀ k : ℕ, 1 - 2 ^ k * ((2 : ℝ) ^ m)⁻¹ = ((2 : ℝ) ^ m)⁻¹ * ((2 : ℝ) ^ m - (2 : ℝ) ^ k) := fun k => by rw [mul_sub, inv_mul_cancel₀ hx0]; ringtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 703–704 at
b16ab29fc51b↗hpf.hLHShave-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = (((2 : ℝ) ^ m) ^ (n - (1 : ℕ)))⁻¹ * ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((2 : ℝ) ^ m - (2 : ℝ) ^ t)) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m)⁻¹)Leaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhLHS : -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = (((2 : ℝ) ^ m) ^ (n - (1 : ℕ)))⁻¹ * ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((2 : ℝ) ^ m - (2 : ℝ) ^ t)) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m)⁻¹).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.prod_mul_distrib,Finset.prod_congr,rflrfl : a = ais the unique constructor of the equality type. ,Finset.prod_const,inv_pow.Lean, lines 705–709
have hLHS : (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (((m : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - (m : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (m : ℕ)))⁻¹) = (((2 : ℝ) ^ m) ^ (n - 1))⁻¹ * ((-∏ t ∈ Finset.Icc 1 (n - 1), ((2 : ℝ) ^ m - (2 : ℝ) ^ t)) * ∏ k ∈ Finset.Icc 1 n, (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) := by simp only [hz1, hz2, hz3] rw [Finset.prod_mul_distrib, hsplit, Finset.prod_congr rfl (fun k _ => hfac k), Finset.prod_mul_distrib, Finset.prod_const, hcard, inv_pow] ringtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 705–709 at
b16ab29fc51b↗hpf.hpkhave∀ (k : ℕ), (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m) = (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ mLeaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhpk : ∀ (k : ℕ), (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m) = (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m.Uses library
pow_add,mul_assoc.Lean, line 711
have hpk : ∀ k : ℕ, (8 / 3 : ℝ) * 2 ^ (k + m) = ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m := fun k => by rw [pow_add, mul_assoc]
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 711 at
b16ab29fc51b↗hpf.hswaphave∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (((8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m) ^ i)⁻¹Leaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhswap : ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (((8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m) ^ i)⁻¹.Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.sum_mul,Finset.mul_sum,Finset.sum_comm,Finset.sum_congr,rflrfl : a = ais the unique constructor of the equality type. ,mul_pow,mul_inv.Lean, lines 712–716
have hswap : ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹ = ∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * ∑ i ∈ Finset.Icc 1 (n - 1), ((((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m) ^ i)⁻¹ := by simp only [Finset.sum_mul, Finset.mul_sum] rw [Finset.sum_comm] refine Finset.sum_congr rfl (fun k _ => Finset.sum_congr rfl (fun i _ => ?_)) rw [mul_pow, mul_inv]; ringtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 712–716 at
b16ab29fc51b↗hpf.hRHShave∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m) ^ (n - (1 : ℕ)))⁻¹ * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m)⁻¹Leaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhRHS : ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m) ^ (n - (1 : ℕ)))⁻¹ * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m)⁻¹.Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.sum_add_distrib,Finset.sum_congr,rflrfl : a = ais the unique constructor of the equality type. ,mul_addAlias ofleft_distrib. ,mul_ne_zero.Lean, lines 717–722
have hRHS : ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹) + ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹) = (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * ((((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m) ^ (n - 1))⁻¹ * (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) := by simp only [hpk] rw [hswap, ← Finset.sum_add_distrib] refine Finset.sum_congr rfl (fun k hk => ?_) rw [← mul_add, hgeo _ (mul_ne_zero (hp0 k) hx0) (hpx k) (n - 1)] ringtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 717–722 at
b16ab29fc51b↗hpf.hcoefhave∀ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ (n - (1 : ℕ)))⁻¹ = (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (((8 / 3 : ℝ) * (2 : ℝ) ^ k)⁻¹ - (2 : ℝ) ^ t)) * (∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ j / ((8 / 3 : ℝ) * (2 : ℝ) ^ k)))⁻¹Leaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhcoef : ∀ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ (n - (1 : ℕ)))⁻¹ = (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (((8 / 3 : ℝ) * (2 : ℝ) ^ k)⁻¹ - (2 : ℝ) ^ t)) * (∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ j / ((8 / 3 : ℝ) * (2 : ℝ) ^ k)))⁻¹.Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.prod_congr,rflrfl : a = ais the unique constructor of the equality type. ,Finset.prod_mul_distrib,Finset.prod_const,inv_pow.Lean, lines 724–734
have hcoef : ∀ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * 2 ^ k) ^ (n - 1))⁻¹ = (-∏ t ∈ Finset.Icc 1 (n - 1), (((8 / 3 : ℝ) * 2 ^ k)⁻¹ - (2 : ℝ) ^ t)) * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 / 3 : ℝ) * 2 ^ j) / ((8 / 3 : ℝ) * 2 ^ k)))⁻¹ := by intro k hk have hq : ∀ t : ℕ, ((8 / 3 : ℝ) * 2 ^ k)⁻¹ - (2 : ℝ) ^ t = ((8 / 3 : ℝ) * 2 ^ k)⁻¹ * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k)) := fun t => by rw [mul_sub, mul_one, pow_add, show ((8 / 3 : ℝ) * 2 ^ k)⁻¹ * ((8 / 3 : ℝ) * (2 ^ t * 2 ^ k)) = 2 ^ t * (((8 / 3 : ℝ) * 2 ^ k)⁻¹ * ((8 / 3 : ℝ) * 2 ^ k)) by ring, inv_mul_cancel₀ (hp0 k), mul_one] have hw : ∀ j : ℕ, ((8 / 3 : ℝ) * 2 ^ j) / ((8 / 3 : ℝ) * 2 ^ k) = (2 : ℝ) ^ ((j : ℤ) - (k : ℤ)) := fun j => by rw [zpow_sub₀ two_ne_zero, zpow_natCast, zpow_natCast] field_simp rw [Finset.prod_congr rfl (fun t _ => hq t), Finset.prod_mul_distrib, Finset.prod_const, hcard, inv_pow] simp only [hw] ringtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 724–734 at
b16ab29fc51b↗hpf.hcoef.hqhave∀ (t : ℕ), ((8 / 3 : ℝ) * (2 : ℝ) ^ k)⁻¹ - (2 : ℝ) ^ t = ((8 / 3 : ℝ) * (2 : ℝ) ^ k)⁻¹ * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))Leaves
((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ (n - (1 : ℕ)))⁻¹ = (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (((8 / 3 : ℝ) * (2 : ℝ) ^ k)⁻¹ - (2 : ℝ) ^ t)) * (∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ j / ((8 / 3 : ℝ) * (2 : ℝ) ^ k)))⁻¹, withhq : ∀ (t : ℕ), ((8 / 3 : ℝ) * (2 : ℝ) ^ k)⁻¹ - (2 : ℝ) ^ t = ((8 / 3 : ℝ) * (2 : ℝ) ^ k)⁻¹ * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k)).Uses library
mul_subAlias ofmul_sub_left_distrib. ,mul_one,pow_add,inv_mul_cancel₀.Lean, lines 726–728
have hq : ∀ t : ℕ, ((8 / 3 : ℝ) * 2 ^ k)⁻¹ - (2 : ℝ) ^ t = ((8 / 3 : ℝ) * 2 ^ k)⁻¹ * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k)) := fun t => by rw [mul_sub, mul_one, pow_add, show ((8 / 3 : ℝ) * 2 ^ k)⁻¹ * ((8 / 3 : ℝ) * (2 ^ t * 2 ^ k)) = 2 ^ t * (((8 / 3 : ℝ) * 2 ^ k)⁻¹ * ((8 / 3 : ℝ) * 2 ^ k)) by ring, inv_mul_cancel₀ (hp0 k), mul_one]targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 726–728 at
b16ab29fc51b↗hpf.hcoef.hwhave∀ (j : ℕ), (8 / 3 : ℝ) * (2 : ℝ) ^ j / ((8 / 3 : ℝ) * (2 : ℝ) ^ k) = (2 : ℝ) ^ ((↑j : ℤ) - (↑k : ℤ))Leaves
((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ (n - (1 : ℕ)))⁻¹ = (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (((8 / 3 : ℝ) * (2 : ℝ) ^ k)⁻¹ - (2 : ℝ) ^ t)) * (∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ j / ((8 / 3 : ℝ) * (2 : ℝ) ^ k)))⁻¹, withhw : ∀ (j : ℕ), (8 / 3 : ℝ) * (2 : ℝ) ^ j / ((8 / 3 : ℝ) * (2 : ℝ) ^ k) = (2 : ℝ) ^ ((↑j : ℤ) - (↑k : ℤ)).Uses library
zpow_sub₀,two_ne_zero,zpow_natCast.Lean, lines 729–731
have hw : ∀ j : ℕ, ((8 / 3 : ℝ) * 2 ^ j) / ((8 / 3 : ℝ) * 2 ^ k) = (2 : ℝ) ^ ((j : ℤ) - (k : ℤ)) := fun j => by rw [zpow_sub₀ two_ne_zero, zpow_natCast, zpow_natCast] field_simptargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 729–731 at
b16ab29fc51b↗
hpf.s21calc-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = (((2 : ℝ) ^ m) ^ (n - (1 : ℕ)))⁻¹ * ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((2 : ℝ) ^ m - (2 : ℝ) ^ t)) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m)⁻¹)Closes the goal.
Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. .Lean, line 735
calc (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (((m : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - (m : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (m : ℕ)))⁻¹) = (((2 : ℝ) ^ m) ^ (n - 1))⁻¹ * ((-∏ t ∈ Finset.Icc 1 (n - 1), ((2 : ℝ) ^ m - (2 : ℝ) ^ t)) * ∏ k ∈ Finset.Icc 1 n, (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) := hLHS
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 735 at
b16ab29fc51b↗hpf.s22calcCloses the goal.
Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. .Lean, line 736
_ = (((2 : ℝ) ^ m) ^ (n - 1))⁻¹ * (∑ k ∈ Finset.Icc 1 n, (-∏ t ∈ Finset.Icc 1 (n - 1), (((8 / 3 : ℝ) * 2 ^ k)⁻¹ - (2 : ℝ) ^ t)) * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 / 3 : ℝ) * 2 ^ j) / ((8 / 3 : ℝ) * 2 ^ k)))⁻¹ * (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) := by rw [hL]
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 736 at
b16ab29fc51b↗hpf.s23calcCloses the goal.
Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.mul_sum,Finset.sum_congr,rflrfl : a = ais the unique constructor of the equality type. ,mul_pow,mul_inv.Lean, lines 737–741
_ = (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * ((((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m) ^ (n - 1))⁻¹ * (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) := by rw [Finset.mul_sum] refine Finset.sum_congr rfl (fun k hk => ?_) rw [← hcoef k hk, mul_pow, mul_inv] ringtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 737–741 at
b16ab29fc51b↗hpf.s24calc∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m) ^ (n - (1 : ℕ)))⁻¹ * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m)⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹Closes the goal.
Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. .Lean, line 742
_ = ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹) + ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹) := hRHS.symm
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 742 at
b16ab29fc51b↗
hreshave∀ (n : ℕ), (1 : ℕ) ≤ n → ∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ = (∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ)))Leaves
∃ (a : ℕ → ℤ) (b : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(b n) : ℝ) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (↑(a n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹, withhres : ∀ (n : ℕ), (1 : ℕ) ≤ n → ∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ = (∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,zero_add,tsum_congr,Summable.tsum_finsetSum,Finset.mem_Icc,Finset.sum_congr,rflrfl : a = ais the unique constructor of the equality type. ,tsum_mul_left,mul_subAlias ofmul_sub_left_distrib. ,Finset.sum_sub_distrib,Finset.sum_mul,div_eq_mul_invDividing by an element is the same as multiplying by its inverse. .Lean, lines 744–820
have hres : ∀ n : ℕ, 1 ≤ n → (∑' j : ℕ, (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (((n + j : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - (n + j : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (n + j : ℕ)))⁻¹)) = (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))) * (∑' j : ℕ, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + 1))⁻¹) - ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (∑ i ∈ Finset.Icc 1 k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹)) - ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - 1)) := by intro n hn have pf := hpf n hn -- Summability of the two families of pieces. have hT : ∀ k : ℕ, Summable (fun m : ℕ => (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + 1)))⁻¹) := by intro k refine Summable.of_norm_bounded (summable_geometric_of_lt_one (by norm_num : (0 : ℝ) ≤ 1 / 2) (by norm_num)) (fun m => ?_) have h1 : (1 : ℝ) ≤ 2 ^ k := one_le_pow₀ (by norm_num) have h2 : (1 : ℝ) ≤ 2 ^ m := one_le_pow₀ (by norm_num) have he : (2 : ℝ) ^ (k + (m + 1)) = 2 * 2 ^ k * 2 ^ m := by ring have hneg : (1 : ℝ) - 8 / 3 * 2 ^ (k + (m + 1)) < 0 := by rw [he]; nlinarith rw [Real.norm_eq_abs, abs_inv, abs_of_neg hneg, one_div_pow, one_div] exact inv_anti₀ (by positivity) (by rw [he]; nlinarith) have hGeo : ∀ i : ℕ, 1 ≤ i → ∑' m : ℕ, (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹ = ((2 : ℝ) ^ i - 1)⁻¹ := by intro i hi have h2 : (2 : ℝ) ≤ 2 ^ i := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi have hr0 : (0 : ℝ) ≤ ((2 : ℝ) ^ i)⁻¹ := by positivity have hr1 : ((2 : ℝ) ^ i)⁻¹ < 1 := inv_lt_one_of_one_lt₀ (by linarith) have hc : ∀ m : ℕ, (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹ = ((2 : ℝ) ^ i)⁻¹ * (((2 : ℝ) ^ i)⁻¹) ^ m := by intro m rw [← pow_succ', inv_pow, ← pow_mul, ← pow_mul, mul_comm] rw [tsum_congr hc, tsum_mul_left, tsum_geometric_of_lt_one hr0 hr1] have h3 : (2 : ℝ) ^ i - 1 ≠ 0 := by linarith have h4 : (2 : ℝ) ^ i ≠ 0 := by positivity field_simp have hGs : ∀ i : ℕ, 1 ≤ i → Summable (fun m : ℕ => (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹) := by intro i hi by_contra hns have := tsum_eq_zero_of_not_summable hns rw [hGeo i hi] at this have h2 : (2 : ℝ) ≤ 2 ^ i := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi have : ((2 : ℝ) ^ i - 1)⁻¹ ≠ 0 := inv_ne_zero (by linarith) contradiction have hz0 : Summable (fun j : ℕ => (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + 1))⁻¹) := by simpa using hT 0 have hIcc : ∀ k : ℕ, ∑ i ∈ Finset.range k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (i + 1))⁻¹ = ∑ i ∈ Finset.Icc 1 k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ := by intro k induction k with | zero => simp | succ k ih => rw [Finset.sum_range_succ, ih, Finset.sum_Icc_succ_top (by omega)] have hTail : ∀ k : ℕ, ∑' m : ℕ, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + 1)))⁻¹ = (∑' j : ℕ, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + 1))⁻¹) - ∑ i ∈ Finset.Icc 1 k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ := by intro k have hs := hz0.sum_add_tsum_nat_add k rw [hIcc k] at hs rw [← hs, add_sub_cancel_left] exact tsum_congr (fun m => by rw [show k + (m + 1) = m + k + 1 by omega]) -- The series E(n) summed from m = 1: its first n - 1 terms vanish. have hRs1 : Summable (fun m : ℕ => ∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + 1)))⁻¹) := summable_sum (fun k _ => (hT k).mul_left _) have hRs2 : Summable (fun m : ℕ => ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹) := summable_sum (fun i hi => (hGs i (Finset.mem_Icc.mp hi).1).mul_left _) have hRs : Summable (fun m : ℕ => ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + 1)))⁻¹) + ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹)) := hRs1.add hRs2 have hGsum : Summable (fun m : ℕ => (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((((m + 1) : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - ((m + 1) : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + ((m + 1) : ℕ)))⁻¹)) := hRs.congr (fun m => (pf (m + 1) (by omega)).symm) have hshift := hGsum.sum_add_tsum_nat_add (n - 1) have hzero : ∑ i ∈ Finset.range (n - 1), (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((((i + 1) : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - ((i + 1) : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + ((i + 1) : ℕ)))⁻¹) = 0 := by refine Finset.sum_eq_zero (fun i hi => ?_) have hi' : i + 1 ∈ Finset.Icc 1 (n - 1) := by rw [Finset.mem_range] at hi rw [Finset.mem_Icc]; omega refine mul_eq_zero_of_right _ (Finset.prod_eq_zero hi' ?_) simp rw [hzero, zero_add] at hshift have hE : (∑' j : ℕ, (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (((n + j : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - (n + j : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (n + j : ℕ)))⁻¹)) = ∑' m : ℕ, (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((((m + 1) : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - ((m + 1) : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + ((m + 1) : ℕ)))⁻¹) := by rw [← hshift] exact tsum_congr (fun j => by rw [show j + (n - 1) + 1 = n + j by omega]) rw [hE, tsum_congr (fun m => pf (m + 1) (by omega)), hRs1.tsum_add hRs2, Summable.tsum_finsetSum (fun k _ => (hT k).mul_left _), Summable.tsum_finsetSum (fun i hi => (hGs i (Finset.mem_Icc.mp hi).1).mul_left _), Finset.sum_congr (s₁ := Finset.Icc 1 n) rfl (fun k _ => by rw [tsum_mul_left, hTail k]), Finset.sum_congr (s₁ := Finset.Icc 1 (n - 1)) rfl (fun i hi => by rw [tsum_mul_left, hGeo i (Finset.mem_Icc.mp hi).1])] simp only [mul_sub, Finset.sum_sub_distrib, Finset.sum_mul, div_eq_mul_inv] ringtargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 744–820 at
b16ab29fc51b↗hres.pfhave∀ (m : ℕ), (1 : ℕ) ≤ m → -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹Leaves
∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ = (∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withpf : ∀ (m : ℕ), (1 : ℕ) ≤ m → -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹.Lean, line 746
have pf := hpf n hn
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 746 at
b16ab29fc51b↗hres.hThave∀ (k : ℕ), Summable fun (m : ℕ) => ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + (1 : ℕ))))⁻¹Leaves
∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ = (∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withhT : ∀ (k : ℕ), Summable fun (m : ℕ) => ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + (1 : ℕ))))⁻¹.Uses library
SummableSummable fmeans thatfhas some (infinite) sum with respect toL. ,Summable.of_norm_boundedThe direct comparison test for series: if the norm offis bounded by a real functiongwhich is summable, thenfis summable. ,summable_geometric_of_lt_one,Real.norm_eq_abs,abs_inv,abs_of_neg,one_div_pow,one_div,inv_anti₀.Lean, lines 748–756
have hT : ∀ k : ℕ, Summable (fun m : ℕ => (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + 1)))⁻¹) := by intro k refine Summable.of_norm_bounded (summable_geometric_of_lt_one (by norm_num : (0 : ℝ) ≤ 1 / 2) (by norm_num)) (fun m => ?_) have h1 : (1 : ℝ) ≤ 2 ^ k := one_le_pow₀ (by norm_num) have h2 : (1 : ℝ) ≤ 2 ^ m := one_le_pow₀ (by norm_num) have he : (2 : ℝ) ^ (k + (m + 1)) = 2 * 2 ^ k * 2 ^ m := by ring have hneg : (1 : ℝ) - 8 / 3 * 2 ^ (k + (m + 1)) < 0 := by rw [he]; nlinarith rw [Real.norm_eq_abs, abs_inv, abs_of_neg hneg, one_div_pow, one_div] exact inv_anti₀ (by positivity) (by rw [he]; nlinarith)targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 748–756 at
b16ab29fc51b↗hres.hT.h1have(1 : ℝ) ≤ (2 : ℝ) ^ kLeaves
‖((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + (1 : ℕ))))⁻¹‖ ≤ (1 / 2 : ℝ) ^ m, withh1 : (1 : ℝ) ≤ (2 : ℝ) ^ k.Uses library
one_le_pow₀.Lean, line 751
have h1 : (1 : ℝ) ≤ 2 ^ k := one_le_pow₀ (by norm_num)
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 751 at
b16ab29fc51b↗hres.hT.h2have(1 : ℝ) ≤ (2 : ℝ) ^ mLeaves
‖((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + (1 : ℕ))))⁻¹‖ ≤ (1 / 2 : ℝ) ^ m, withh2 : (1 : ℝ) ≤ (2 : ℝ) ^ m.Uses library
one_le_pow₀.Lean, line 752
have h2 : (1 : ℝ) ≤ 2 ^ m := one_le_pow₀ (by norm_num)
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 752 at
b16ab29fc51b↗hres.hT.hehave(2 : ℝ) ^ (k + (m + (1 : ℕ))) = (2 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ mroutine: ringLeaves
‖((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + (1 : ℕ))))⁻¹‖ ≤ (1 / 2 : ℝ) ^ m, withhe : (2 : ℝ) ^ (k + (m + (1 : ℕ))) = (2 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m.Lean, line 753
have he : (2 : ℝ) ^ (k + (m + 1)) = 2 * 2 ^ k * 2 ^ m := by ring
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 753 at
b16ab29fc51b↗hres.hT.hneghave(1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + (1 : ℕ))) < (0 : ℝ)Leaves
‖((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + (1 : ℕ))))⁻¹‖ ≤ (1 / 2 : ℝ) ^ m, withhneg : (1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + (1 : ℕ))) < (0 : ℝ).Lean, line 754
have hneg : (1 : ℝ) - 8 / 3 * 2 ^ (k + (m + 1)) < 0 := by rw [he]; nlinarith
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 754 at
b16ab29fc51b↗
hres.hGeohave∀ (i : ℕ), (1 : ℕ) ≤ i → ∑' (m : ℕ), (((2 : ℝ) ^ (m + (1 : ℕ))) ^ i)⁻¹ = ((2 : ℝ) ^ i - (1 : ℝ))⁻¹Leaves
∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ = (∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withhGeo : ∀ (i : ℕ), (1 : ℕ) ≤ i → ∑' (m : ℕ), (((2 : ℝ) ^ (m + (1 : ℕ))) ^ i)⁻¹ = ((2 : ℝ) ^ i - (1 : ℝ))⁻¹.Uses library
tsum_congr,tsum_mul_left,tsum_geometric_of_lt_one.Lean, lines 757–770
have hGeo : ∀ i : ℕ, 1 ≤ i → ∑' m : ℕ, (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹ = ((2 : ℝ) ^ i - 1)⁻¹ := by intro i hi have h2 : (2 : ℝ) ≤ 2 ^ i := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi have hr0 : (0 : ℝ) ≤ ((2 : ℝ) ^ i)⁻¹ := by positivity have hr1 : ((2 : ℝ) ^ i)⁻¹ < 1 := inv_lt_one_of_one_lt₀ (by linarith) have hc : ∀ m : ℕ, (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹ = ((2 : ℝ) ^ i)⁻¹ * (((2 : ℝ) ^ i)⁻¹) ^ m := by intro m rw [← pow_succ', inv_pow, ← pow_mul, ← pow_mul, mul_comm] rw [tsum_congr hc, tsum_mul_left, tsum_geometric_of_lt_one hr0 hr1] have h3 : (2 : ℝ) ^ i - 1 ≠ 0 := by linarith have h4 : (2 : ℝ) ^ i ≠ 0 := by positivity field_simptargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 757–770 at
b16ab29fc51b↗hres.hGeo.h2have(2 : ℝ) ≤ (2 : ℝ) ^ iLeaves
∑' (m : ℕ), (((2 : ℝ) ^ (m + (1 : ℕ))) ^ i)⁻¹ = ((2 : ℝ) ^ i - (1 : ℝ))⁻¹, withh2 : (2 : ℝ) ≤ (2 : ℝ) ^ i.Lean, lines 759–761
have h2 : (2 : ℝ) ≤ 2 ^ i := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hitargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 759–761 at
b16ab29fc51b↗hres.hGeo.h2.s1calc(2 : ℝ) = (2 : ℝ) ^ (1 : ℕ)Closes the goal.
Uses library
pow_one.Lean, line 760
calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 760 at
b16ab29fc51b↗hres.hGeo.h2.s2calc(2 : ℝ) ^ (1 : ℕ) ≤ (2 : ℝ) ^ iCloses the goal.
Uses library
pow_le_pow_right₀.Lean, line 761
_ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 761 at
b16ab29fc51b↗
hres.hGeo.hr0have(0 : ℝ) ≤ ((2 : ℝ) ^ i)⁻¹routine: positivityLeaves
∑' (m : ℕ), (((2 : ℝ) ^ (m + (1 : ℕ))) ^ i)⁻¹ = ((2 : ℝ) ^ i - (1 : ℝ))⁻¹, withhr0 : (0 : ℝ) ≤ ((2 : ℝ) ^ i)⁻¹.Lean, line 762
have hr0 : (0 : ℝ) ≤ ((2 : ℝ) ^ i)⁻¹ := by positivity
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 762 at
b16ab29fc51b↗hres.hGeo.hr1have((2 : ℝ) ^ i)⁻¹ < (1 : ℝ)Leaves
∑' (m : ℕ), (((2 : ℝ) ^ (m + (1 : ℕ))) ^ i)⁻¹ = ((2 : ℝ) ^ i - (1 : ℝ))⁻¹, withhr1 : ((2 : ℝ) ^ i)⁻¹ < (1 : ℝ).Uses library
inv_lt_one_of_one_lt₀.Lean, line 763
have hr1 : ((2 : ℝ) ^ i)⁻¹ < 1 := inv_lt_one_of_one_lt₀ (by linarith)
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 763 at
b16ab29fc51b↗hres.hGeo.hchave∀ (m : ℕ), (((2 : ℝ) ^ (m + (1 : ℕ))) ^ i)⁻¹ = ((2 : ℝ) ^ i)⁻¹ * ((2 : ℝ) ^ i)⁻¹ ^ mLeaves
∑' (m : ℕ), (((2 : ℝ) ^ (m + (1 : ℕ))) ^ i)⁻¹ = ((2 : ℝ) ^ i - (1 : ℝ))⁻¹, withhc : ∀ (m : ℕ), (((2 : ℝ) ^ (m + (1 : ℕ))) ^ i)⁻¹ = ((2 : ℝ) ^ i)⁻¹ * ((2 : ℝ) ^ i)⁻¹ ^ m.Uses library
pow_succ',inv_pow,pow_mul,mul_comm.Lean, lines 764–766
have hc : ∀ m : ℕ, (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹ = ((2 : ℝ) ^ i)⁻¹ * (((2 : ℝ) ^ i)⁻¹) ^ m := by intro m rw [← pow_succ', inv_pow, ← pow_mul, ← pow_mul, mul_comm]targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 764–766 at
b16ab29fc51b↗hres.hGeo.h3have(2 : ℝ) ^ i - (1 : ℝ) ≠ (0 : ℝ)routine: linarithLeaves
((2 : ℝ) ^ i)⁻¹ * ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹)⁻¹ = ((2 : ℝ) ^ i - (1 : ℝ))⁻¹, withh3 : (2 : ℝ) ^ i - (1 : ℝ) ≠ (0 : ℝ).Lean, line 768
have h3 : (2 : ℝ) ^ i - 1 ≠ 0 := by linarith
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 768 at
b16ab29fc51b↗hres.hGeo.h4have(2 : ℝ) ^ i ≠ (0 : ℝ)routine: positivityLeaves
((2 : ℝ) ^ i)⁻¹ * ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹)⁻¹ = ((2 : ℝ) ^ i - (1 : ℝ))⁻¹, withh4 : (2 : ℝ) ^ i ≠ (0 : ℝ).Lean, line 769
have h4 : (2 : ℝ) ^ i ≠ 0 := by positivity
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 769 at
b16ab29fc51b↗
hres.hGshave∀ (i : ℕ), (1 : ℕ) ≤ i → Summable fun (m : ℕ) => (((2 : ℝ) ^ (m + (1 : ℕ))) ^ i)⁻¹Leaves
∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ = (∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withhGs : ∀ (i : ℕ), (1 : ℕ) ≤ i → Summable fun (m : ℕ) => (((2 : ℝ) ^ (m + (1 : ℕ))) ^ i)⁻¹.Uses library
SummableSummable fmeans thatfhas some (infinite) sum with respect toL. .Lean, lines 771–780
have hGs : ∀ i : ℕ, 1 ≤ i → Summable (fun m : ℕ => (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹) := by intro i hi by_contra hns have := tsum_eq_zero_of_not_summable hns rw [hGeo i hi] at this have h2 : (2 : ℝ) ≤ 2 ^ i := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi have : ((2 : ℝ) ^ i - 1)⁻¹ ≠ 0 := inv_ne_zero (by linarith) contradictiontargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 771–780 at
b16ab29fc51b↗hres.hGs.s1have∑' (b : ℕ), (((2 : ℝ) ^ (b + (1 : ℕ))) ^ i)⁻¹ = (0 : ℝ)Leaves
False, withthis : ∑' (b : ℕ), (((2 : ℝ) ^ (b + (1 : ℕ))) ^ i)⁻¹ = (0 : ℝ).Uses library
tsum_eq_zero_of_not_summable.Lean, line 774
have := tsum_eq_zero_of_not_summable hns
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 774 at
b16ab29fc51b↗hres.hGs.h2have(2 : ℝ) ≤ (2 : ℝ) ^ iLeaves
False, withh2 : (2 : ℝ) ≤ (2 : ℝ) ^ i.Lean, lines 776–778
have h2 : (2 : ℝ) ≤ 2 ^ i := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hitargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 776–778 at
b16ab29fc51b↗hres.hGs.h2.s1calc(2 : ℝ) = (2 : ℝ) ^ (1 : ℕ)Closes the goal.
Uses library
pow_one.Lean, line 777
calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 777 at
b16ab29fc51b↗hres.hGs.h2.s2calc(2 : ℝ) ^ (1 : ℕ) ≤ (2 : ℝ) ^ iCloses the goal.
Uses library
pow_le_pow_right₀.Lean, line 778
_ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 778 at
b16ab29fc51b↗
hres.hGs.s3have((2 : ℝ) ^ i - (1 : ℝ))⁻¹ ≠ (0 : ℝ)Leaves
False, withthis : ((2 : ℝ) ^ i - (1 : ℝ))⁻¹ ≠ (0 : ℝ).Uses library
inv_ne_zero.Lean, line 779
have : ((2 : ℝ) ^ i - 1)⁻¹ ≠ 0 := inv_ne_zero (by linarith)
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 779 at
b16ab29fc51b↗
hres.hz0haveSummable fun (j : ℕ) => ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹Leaves
∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ = (∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withhz0 : Summable fun (j : ℕ) => ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹.Uses library
SummableSummable fmeans thatfhas some (infinite) sum with respect toL. .Lean, lines 781–782
have hz0 : Summable (fun j : ℕ => (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + 1))⁻¹) := by simpa using hT 0targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 781–782 at
b16ab29fc51b↗hres.hIcchave∀ (k : ℕ), ∑ i ∈ Finset.range k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (i + (1 : ℕ)))⁻¹ = ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹Leaves
∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ = (∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withhIcc : ∀ (k : ℕ), ∑ i ∈ Finset.range k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (i + (1 : ℕ)))⁻¹ = ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹.Uses library
Finset.rangerange nis the set of natural numbers less thann. ,Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. .Lean, lines 783–787
have hIcc : ∀ k : ℕ, ∑ i ∈ Finset.range k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (i + 1))⁻¹ = ∑ i ∈ Finset.Icc 1 k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ := by intro k induction k with | zero => simp | succ k ih => rw [Finset.sum_range_succ, ih, Finset.sum_Icc_succ_top (by omega)]targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 783–787 at
b16ab29fc51b↗hres.hIcc.s1case routine: simpLeaves
∑ i ∈ Finset.range (0 : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (i + (1 : ℕ)))⁻¹ = ∑ i ∈ Finset.Icc (1 : ℕ) (0 : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹.Uses library
Nat.zeroZero, the smallest natural number. .Lean, line 786
| zero => simp
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 786 at
b16ab29fc51b↗hres.hIcc.s2caseLeaves
∑ i ∈ Finset.range (k + (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (i + (1 : ℕ)))⁻¹ = ∑ i ∈ Finset.Icc (1 : ℕ) (k + (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹, withk : ℕ,ih : ∑ i ∈ Finset.range k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (i + (1 : ℕ)))⁻¹ = ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹.Uses library
Nat.succThe successor of a natural numbern. ,Finset.sum_range_succ,Finset.sum_Icc_succ_top.Lean, line 787
| succ k ih => rw [Finset.sum_range_succ, ih, Finset.sum_Icc_succ_top (by omega)]
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 787 at
b16ab29fc51b↗
hres.hTailhave∀ (k : ℕ), ∑' (m : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + (1 : ℕ))))⁻¹ = ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹Leaves
∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ = (∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withhTail : ∀ (k : ℕ), ∑' (m : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + (1 : ℕ))))⁻¹ = ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹.Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,add_sub_cancel_left,tsum_congr.Lean, lines 788–793
have hTail : ∀ k : ℕ, ∑' m : ℕ, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + 1)))⁻¹ = (∑' j : ℕ, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + 1))⁻¹) - ∑ i ∈ Finset.Icc 1 k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ := by intro k have hs := hz0.sum_add_tsum_nat_add k rw [hIcc k] at hs rw [← hs, add_sub_cancel_left] exact tsum_congr (fun m => by rw [show k + (m + 1) = m + k + 1 by omega])targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 788–793 at
b16ab29fc51b↗hres.hTail.hshave∑ i ∈ Finset.range k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (i + (1 : ℕ)))⁻¹ + ∑' (i : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (i + k + (1 : ℕ)))⁻¹ = ∑' (i : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (i + (1 : ℕ)))⁻¹Leaves
∑' (m : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + (1 : ℕ))))⁻¹ = ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹, withhs : ∑ i ∈ Finset.range k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (i + (1 : ℕ)))⁻¹ + ∑' (i : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (i + k + (1 : ℕ)))⁻¹ = ∑' (i : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (i + (1 : ℕ)))⁻¹.Lean, line 790
have hs := hz0.sum_add_tsum_nat_add k
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 790 at
b16ab29fc51b↗
hres.hRs1haveSummable fun (m : ℕ) => ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + (1 : ℕ))))⁻¹Leaves
∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ = (∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withhRs1 : Summable fun (m : ℕ) => ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + (1 : ℕ))))⁻¹.Uses library
SummableSummable fmeans thatfhas some (infinite) sum with respect toL. ,Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,summable_sum.Lean, lines 795–796
have hRs1 : Summable (fun m : ℕ => ∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + 1)))⁻¹) := summable_sum (fun k _ => (hT k).mul_left _)targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 795–796 at
b16ab29fc51b↗hres.hRs2haveSummable fun (m : ℕ) => ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ (m + (1 : ℕ))) ^ i)⁻¹Leaves
∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ = (∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withhRs2 : Summable fun (m : ℕ) => ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ (m + (1 : ℕ))) ^ i)⁻¹.Uses library
SummableSummable fmeans thatfhas some (infinite) sum with respect toL. ,Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,summable_sum,Finset.mem_Icc.Lean, lines 797–798
have hRs2 : Summable (fun m : ℕ => ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹) := summable_sum (fun i hi => (hGs i (Finset.mem_Icc.mp hi).1).mul_left _)targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 797–798 at
b16ab29fc51b↗hres.hRshaveSummable fun (m : ℕ) => ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + (1 : ℕ))))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ (m + (1 : ℕ))) ^ i)⁻¹Leaves
∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ = (∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withhRs : Summable fun (m : ℕ) => ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + (1 : ℕ))))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ (m + (1 : ℕ))) ^ i)⁻¹.Uses library
SummableSummable fmeans thatfhas some (infinite) sum with respect toL. ,Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. .Lean, line 799
have hRs : Summable (fun m : ℕ => ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + 1)))⁻¹) + ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹)) := hRs1.add hRs2
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 799 at
b16ab29fc51b↗hres.hGsumhaveSummable fun (m : ℕ) => -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(m + (1 : ℕ)) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(m + (1 : ℕ)) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(m + (1 : ℕ)) : ℤ)))⁻¹Leaves
∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ = (∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withhGsum : Summable fun (m : ℕ) => -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(m + (1 : ℕ)) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(m + (1 : ℕ)) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(m + (1 : ℕ)) : ℤ)))⁻¹.Uses library
SummableSummable fmeans thatfhas some (infinite) sum with respect toL. ,Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. .Lean, lines 800–801
have hGsum : Summable (fun m : ℕ => (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((((m + 1) : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - ((m + 1) : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + ((m + 1) : ℕ)))⁻¹)) := hRs.congr (fun m => (pf (m + 1) (by omega)).symm)targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 800–801 at
b16ab29fc51b↗hres.hshifthave∑ i ∈ Finset.range (n - (1 : ℕ)), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(i + (1 : ℕ)) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(i + (1 : ℕ)) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(i + (1 : ℕ)) : ℤ)))⁻¹ + ∑' (i : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(i + (n - (1 : ℕ)) + (1 : ℕ)) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(i + (n - (1 : ℕ)) + (1 : ℕ)) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(i + (n - (1 : ℕ)) + (1 : ℕ)) : ℤ)))⁻¹ = ∑' (i : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(i + (1 : ℕ)) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(i + (1 : ℕ)) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(i + (1 : ℕ)) : ℤ)))⁻¹Leaves
∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ = (∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withhshift : ∑ i ∈ Finset.range (n - (1 : ℕ)), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(i + (1 : ℕ)) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(i + (1 : ℕ)) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(i + (1 : ℕ)) : ℤ)))⁻¹ + ∑' (i : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(i + (n - (1 : ℕ)) + (1 : ℕ)) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(i + (n - (1 : ℕ)) + (1 : ℕ)) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(i + (n - (1 : ℕ)) + (1 : ℕ)) : ℤ)))⁻¹ = ∑' (i : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(i + (1 : ℕ)) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(i + (1 : ℕ)) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(i + (1 : ℕ)) : ℤ)))⁻¹.Lean, line 802
have hshift := hGsum.sum_add_tsum_nat_add (n - 1)
targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, line 802 at
b16ab29fc51b↗hres.hzerohave∑ i ∈ Finset.range (n - (1 : ℕ)), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(i + (1 : ℕ)) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(i + (1 : ℕ)) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(i + (1 : ℕ)) : ℤ)))⁻¹ = (0 : ℝ)Leaves
∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ = (∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withhzero : ∑ i ∈ Finset.range (n - (1 : ℕ)), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(i + (1 : ℕ)) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(i + (1 : ℕ)) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(i + (1 : ℕ)) : ℤ)))⁻¹ = (0 : ℝ).Uses library
Finset.rangerange nis the set of natural numbers less thann. ,Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.sum_eq_zero,mul_eq_zero_of_right,Finset.prod_eq_zero.Lean, lines 803–809
have hzero : ∑ i ∈ Finset.range (n - 1), (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((((i + 1) : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - ((i + 1) : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + ((i + 1) : ℕ)))⁻¹) = 0 := by refine Finset.sum_eq_zero (fun i hi => ?_) have hi' : i + 1 ∈ Finset.Icc 1 (n - 1) := by rw [Finset.mem_range] at hi rw [Finset.mem_Icc]; omega refine mul_eq_zero_of_right _ (Finset.prod_eq_zero hi' ?_) simptargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 803–809 at
b16ab29fc51b↗hres.hzero.hi'havei + (1 : ℕ) ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ))Leaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(i + (1 : ℕ)) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(i + (1 : ℕ)) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(i + (1 : ℕ)) : ℤ)))⁻¹ = (0 : ℝ), withhi' : i + (1 : ℕ) ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.mem_range,Finset.mem_Icc.Lean, lines 805–807
have hi' : i + 1 ∈ Finset.Icc 1 (n - 1) := by rw [Finset.mem_range] at hi rw [Finset.mem_Icc]; omegatargets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 805–807 at
b16ab29fc51b↗
hres.hEhave∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ = ∑' (m : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(m + (1 : ℕ)) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(m + (1 : ℕ)) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(m + (1 : ℕ)) : ℤ)))⁻¹Leaves
∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ = (∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withhE : ∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ = ∑' (m : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(m + (1 : ℕ)) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(m + (1 : ℕ)) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(m + (1 : ℕ)) : ℤ)))⁻¹.Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,tsum_congr.Lean, lines 811–813
have hE : (∑' j : ℕ, (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (((n + j : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - (n + j : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (n + j : ℕ)))⁻¹)) = ∑' m : ℕ, (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((((m + 1) : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - ((m + 1) : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + ((m + 1) : ℕ)))⁻¹) := by rw [← hshift] exact tsum_congr (fun j => by rw [show j + (n - 1) + 1 = n + j by omega])targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, lines 811–813 at
b16ab29fc51b↗
The proof in Lean (Proof.lean)
Checked by the kernel — these bytes are the ones its attestation names: attestations/000335.json, merge commit b16ab29fc51b.
artifact_hash of the attestation below, so these are the bytes the gate checked. Rendered from targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Proof.lean, sha256 36efaada6df4.import Mathlib
import Nodes.«erdos-1050--h1-v2--h2».Context
/-! Hole `integrality` of a merged partial proof, as a node (D-12 #5, D-29).
Statement generated by the gate from the assembly; immutable (D-3). -/
theorem erdos_1050__h1_v2__h2 : ∃ (a : ℕ → ℤ) (b : ℕ → ℤ),
∀ (n : ℕ),
(1 : ℕ) ≤ n →
(↑(b n) : ℝ) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (↑(a n) : ℝ) =
(9 : ℝ) ^ n *
(((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) *
∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) *
∑' (j : ℕ),
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ *
∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)),
((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) *
((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ := by
-- E(n) = beta0(n) * z - alpha0(n) by partial fractions in x = 2^m (proved below, via Lagrange
-- interpolation); b(n) = 9^n W(n) beta0(n) is an integer (proved below); a(n) = 9^n W(n) alpha0(n)
-- is the one hole. Informal argument: annex 959e0d5b10994049b5f27ad77d9d2d8535be9f817bf4de69d747a1e05b9db44b on this node.
-- Borwein Lemma 3 (numerator integrality): the one hole.
have hsumZ : ∀ (s : Finset ℕ) (g : ℕ → ℝ), (∀ i ∈ s, ∃ z : ℤ, (z : ℝ) = g i) → ∃ z : ℤ, (z : ℝ) = ∑ i ∈ s, g i := by
intro s g
induction s using Finset.induction_on with
| empty => intro _; exact ⟨0, by simp⟩
| insert a s ha ih =>
intro h
obtain ⟨za, hza⟩ := h a (Finset.mem_insert_self a s)
obtain ⟨zs, hzs⟩ := ih (fun i hi => h i (Finset.mem_insert_of_mem hi))
exact ⟨za + zs, by rw [Finset.sum_insert ha]; push_cast; rw [hza, hzs]⟩
-- (L0) the Lagrange basis sums to 1: the degree-0 case
have h0 : ∀ s : Finset ℕ, s.Nonempty → ∑ k ∈ s, (1 : ℝ) / ∏ l ∈ s.erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))) = 1 := by
intro s hs
have hv : Set.InjOn (fun k : ℕ => ((2 : ℝ) ^ k)⁻¹) (s : Set ℕ) := by
intro a _ b _ hab
exact pow_right_injective₀ (by norm_num : (0 : ℝ) < 2) (by norm_num) (inv_injective hab)
have hsum := congrArg (Polynomial.eval (0 : ℝ)) (Lagrange.sum_basis hv hs)
rw [Polynomial.eval_finset_sum, Polynomial.eval_one] at hsum
refine Eq.trans (Finset.sum_congr rfl (fun k hk => ?_)) hsum
unfold Lagrange.basis
rw [Polynomial.eval_prod, one_div, ← Finset.prod_inv_distrib]
refine Finset.prod_congr rfl (fun l hl => ?_)
have ha : (2 : ℝ) ^ k ≠ 0 := by positivity
have hb : (2 : ℝ) ^ l ≠ 0 := by positivity
simp only [Lagrange.basisDivisor, Polynomial.eval_mul, Polynomial.eval_C, Polynomial.eval_sub, Polynomial.eval_X]
rw [zpow_sub₀ two_ne_zero, zpow_natCast, zpow_natCast,
show ((2 : ℝ) ^ k)⁻¹ - ((2 : ℝ) ^ l)⁻¹ = (1 - (2 : ℝ) ^ l / (2 : ℝ) ^ k) * (-((2 : ℝ) ^ l)⁻¹) by field_simp; ring,
mul_inv, zero_sub, mul_assoc, inv_mul_cancel₀ (neg_ne_zero.mpr (inv_ne_zero hb)), mul_one]
-- the recursion h_e(s) = h_e(s minus a) + y_a h_(e-1)(s), for any weight f
have hrec : ∀ (s : Finset ℕ) (a : ℕ) (f : ℕ → ℝ), a ∈ s → ∑ k ∈ s, (2 : ℝ) ^ k * f k / ∏ l ∈ s.erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))) = ∑ k ∈ s.erase a, (2 : ℝ) ^ k * f k / ∏ l ∈ (s.erase a).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))) + (2 : ℝ) ^ a * ∑ k ∈ s, f k / ∏ l ∈ s.erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))) := by
intro s a f ha
rw [← Finset.add_sum_erase s (fun k => f k / ∏ l ∈ s.erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) ha, ← Finset.add_sum_erase s (fun k => (2 : ℝ) ^ k * f k / ∏ l ∈ s.erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) ha, mul_add, Finset.mul_sum, add_left_comm, ← Finset.sum_add_distrib]
congr 1
· ring
· refine Finset.sum_congr rfl (fun k hk => ?_)
have hka : k ≠ a := Finset.ne_of_mem_erase hk
have hmem : a ∈ s.erase k := Finset.mem_erase.mpr ⟨Ne.symm hka, ha⟩
have hsplit := Finset.mul_prod_erase (s.erase k) (fun l => (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) hmem
rw [Finset.erase_right_comm] at hsplit
rw [← hsplit]
have hρ : (1 - (2 : ℝ) ^ ((a : ℤ) - (k : ℤ))) ≠ 0 := by
intro h1
have h2 : (2 : ℝ) ^ ((a : ℤ) - (k : ℤ)) = 2 ^ (0 : ℤ) := by rw [zpow_zero]; linarith
have h3 := zpow_right_injective₀ (by norm_num : (0 : ℝ) < 2) (by norm_num) h2
omega
have hq : (1 - (2 : ℝ) ^ ((a : ℤ) - (k : ℤ))) * (1 - (2 : ℝ) ^ ((a : ℤ) - (k : ℤ)))⁻¹ = 1 := mul_inv_cancel₀ hρ
have hak : (2 : ℝ) ^ a = (2 : ℝ) ^ ((a : ℤ) - (k : ℤ)) * 2 ^ k := by
rw [zpow_sub₀ two_ne_zero, zpow_natCast, zpow_natCast]
field_simp
simp only [div_eq_mul_inv, mul_inv]
rw [hak]
linear_combination ((2 : ℝ) ^ k * f k * (∏ l ∈ (s.erase a).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))))⁻¹) * hq
-- (L) complete homogeneous sums at the nodes 2^k are integers
have hW : ∀ N : ℕ, ∀ (s : Finset ℕ) (e : ℕ), s.card + e = N → ∃ z : ℤ, (z : ℝ) = ∑ k ∈ s, ((2 : ℝ) ^ k) ^ e / ∏ l ∈ s.erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))) := by
intro N
induction N with
| zero =>
intro s e h
have hs : s = ∅ := Finset.card_eq_zero.mp (by omega)
subst hs
exact ⟨0, by simp⟩
| succ N ih =>
intro s e h
rcases s.eq_empty_or_nonempty with rfl | hs
· exact ⟨0, by simp⟩
rcases Nat.eq_zero_or_pos e with rfl | he
· exact ⟨1, by rw [Int.cast_one]; exact (h0 s hs).symm.trans (Finset.sum_congr rfl (fun k _ => by rw [pow_zero]))⟩
obtain ⟨e', rfl⟩ : ∃ e', e = e' + 1 := ⟨e - 1, by omega⟩
obtain ⟨a, ha⟩ := hs
obtain ⟨z1, hz1⟩ := ih (s.erase a) (e' + 1) (by rw [Finset.card_erase_of_mem ha]; have := Finset.card_pos.mpr ⟨a, ha⟩; omega)
obtain ⟨z2, hz2⟩ := ih s e' (by omega)
refine ⟨z1 + 2 ^ a * z2, ?_⟩
have hr := hrec s a (fun k => ((2 : ℝ) ^ k) ^ e') ha
simp only [← pow_succ'] at hr
push_cast
rw [hz1, hz2]
exact hr.symm
-- (L-) and they vanish in negative degree above minus the number of nodes
have hV : ∀ m : ℕ, ∀ s : Finset ℕ, m + 1 < s.card → ∑ k ∈ s, (((2 : ℝ) ^ k) ^ (m + 1))⁻¹ / ∏ l ∈ s.erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))) = 0 := by
intro m
induction m with
| zero =>
intro s hs
obtain ⟨a, ha⟩ : s.Nonempty := Finset.card_pos.mp (by omega)
have hne : (s.erase a).Nonempty := Finset.card_pos.mp (by rw [Finset.card_erase_of_mem ha]; omega)
have h := hrec s a (fun k => (((2 : ℝ) ^ k) ^ (0 + 1))⁻¹) ha
have e : ∀ k : ℕ, (2 : ℝ) ^ k * (((2 : ℝ) ^ k) ^ (0 + 1))⁻¹ = 1 := fun k => by
rw [zero_add, pow_one]; exact mul_inv_cancel₀ (by positivity)
simp only [e] at h
rw [h0 s ⟨a, ha⟩, h0 _ hne] at h
have h2a : (2 : ℝ) ^ a ≠ 0 := by positivity
rcases mul_eq_zero.mp (show (2 : ℝ) ^ a * (∑ k ∈ s, (((2 : ℝ) ^ k) ^ (0 + 1))⁻¹ / ∏ l ∈ s.erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) = 0 by linarith) with h5 | h5
· exact absurd h5 h2a
· exact h5
| succ m ih =>
intro s hs
obtain ⟨a, ha⟩ : s.Nonempty := Finset.card_pos.mp (by omega)
have h := hrec s a (fun k => (((2 : ℝ) ^ k) ^ (m + 1 + 1))⁻¹) ha
have e : ∀ k : ℕ, (2 : ℝ) ^ k * (((2 : ℝ) ^ k) ^ (m + 1 + 1))⁻¹ = (((2 : ℝ) ^ k) ^ (m + 1))⁻¹ := fun k => by
rw [pow_succ' _ (m + 1), mul_inv, ← mul_assoc, mul_inv_cancel₀ (by positivity), one_mul]
simp only [e] at h
rw [ih s (by omega), ih (s.erase a) (by rw [Finset.card_erase_of_mem ha]; omega)] at h
have h2a : (2 : ℝ) ^ a ≠ 0 := by positivity
rcases mul_eq_zero.mp (show (2 : ℝ) ^ a * (∑ k ∈ s, (((2 : ℝ) ^ k) ^ (m + 1 + 1))⁻¹ / ∏ l ∈ s.erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) = 0 by linarith) with h5 | h5
· exact absurd h5 h2a
· exact h5
-- geometric sums in 2^(-m)
have hgeo : ∀ m : ℕ, 1 ≤ m → ∀ k : ℕ, ∑ i ∈ Finset.Icc 1 k, (((2 : ℝ) ^ i)⁻¹) ^ m = (1 - (((2 : ℝ) ^ k) ^ m)⁻¹) / ((2 : ℝ) ^ m - 1) := by
intro m hm k
have hB : (2 : ℝ) ^ m - 1 ≠ 0 := by
have : (2 : ℝ) ≤ 2 ^ m := by
calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm
_ ≤ 2 ^ m := pow_le_pow_right₀ (by norm_num) hm
linarith
induction k with
| zero => simp
| succ k ih =>
rw [Finset.sum_Icc_succ_top (by omega), ih, inv_pow, pow_succ, mul_pow]
have hX : ((2 : ℝ) ^ k) ^ m ≠ 0 := by positivity
have hY : (2 : ℝ) ^ m ≠ 0 := by positivity
generalize ((2 : ℝ) ^ k) ^ m = X at hX ⊢
generalize (2 : ℝ) ^ m = Y at hY hB ⊢
field_simp
ring
have hdvd : ∀ n i : ℕ, 1 ≤ i → i ≤ n - 1 → ((2 : ℤ) ^ i - 1) ∣ ∏ k ∈ Finset.Icc ((n + 1) / 2) n, ((1 : ℤ) - 2 ^ k) := by
intro n i hi1 hi2
obtain ⟨k0, hk0⟩ : ∃ k0, k0 = i * (n / i) := ⟨_, rfl⟩
have hle : k0 ≤ n := by rw [hk0, mul_comm]; exact Nat.div_mul_le_self n i
have hlt : n < k0 + i := by rw [hk0]; have := Nat.lt_mul_div_succ n (by omega : 0 < i); linarith
have hge : i ≤ k0 := by rw [hk0]; exact Nat.le_mul_of_pos_right i (Nat.div_pos (by omega) (by omega))
have hmem : k0 ∈ Finset.Icc ((n + 1) / 2) n := Finset.mem_Icc.mpr ⟨by omega, hle⟩
have h1 : ((2 : ℤ) ^ i - 1) ∣ (2 : ℤ) ^ k0 - 1 := by
have := sub_dvd_pow_sub_pow ((2 : ℤ) ^ i) 1 (n / i)
rw [one_pow, ← pow_mul, ← hk0] at this
exact this
have h2 : ((2 : ℤ) ^ i - 1) ∣ (1 : ℤ) - 2 ^ k0 := by
have : (1 : ℤ) - 2 ^ k0 = -((2 : ℤ) ^ k0 - 1) := by ring
rw [this]; exact (dvd_neg).mpr h1
exact h2.trans (Finset.dvd_prod_of_mem (fun k => (1 : ℤ) - 2 ^ k) hmem)
have hpoly : ∀ n : ℕ, 1 ≤ n → ∃ α : ℕ → ℤ, ∀ y : ℝ, ∏ t ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ t * y) = ∑ j ∈ Finset.range n, (α j : ℝ) * y ^ j := by
intro n hn
refine ⟨fun j => (∏ t ∈ Finset.Icc 1 (n - 1), (1 - Polynomial.C ((2 : ℤ) ^ t) * Polynomial.X)).coeff j, fun y => ?_⟩
have hdeg : (Polynomial.map (Int.castRingHom ℝ) (∏ t ∈ Finset.Icc 1 (n - 1), (1 - Polynomial.C ((2 : ℤ) ^ t) * Polynomial.X))).natDegree < n := by
refine lt_of_le_of_lt (Polynomial.natDegree_map_le) ?_
refine lt_of_le_of_lt (Polynomial.natDegree_prod_le _ _) ?_
refine lt_of_le_of_lt (Finset.sum_le_sum (g := fun _ => 1) (fun t _ => ?_)) ?_
· compute_degree
· simp only [Finset.sum_const, smul_eq_mul, mul_one, Nat.card_Icc]; omega
have hev := Polynomial.eval_eq_sum_range' hdeg y
have hev2 : ∏ t ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ t * y) = Polynomial.eval y (Polynomial.map (Int.castRingHom ℝ) (∏ t ∈ Finset.Icc 1 (n - 1), (1 - Polynomial.C ((2 : ℤ) ^ t) * Polynomial.X))) := by
rw [Polynomial.map_prod, Polynomial.eval_prod]
refine Finset.prod_congr rfl (fun t _ => ?_)
simp
rw [hev2, hev]
refine Finset.sum_congr rfl (fun j _ => ?_)
rw [Polynomial.coeff_map]
rfl
-- alpha0 = S1 - S2. The S2 part (the 1/(2^i - 1) terms) is `hmer` below. The S1 part (`head_integral`) is assembled
-- from two holes by partial fractions in the parameter c = 8/3: S1 = (polynomial part) + sum_i b_i / (1 - c 2^i), where
-- b_i = sum_(k >= i) A_k(2^-i) is the residue. Informal argument: annex
-- a03db62f0576f792454c3f95d14fb02d193662242ec562819da63116009d326b on this node.
have numerator_integral : ∃ a : ℕ → ℤ, ∀ n : ℕ, 1 ≤ n → (a n : ℝ) = (9 : ℝ) ^ n * ((Nat.factorial (n - 2) : ℝ) * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, (1 - (2 : ℝ) ^ k))) * ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (∑ i ∈ Finset.Icc 1 k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹)) - ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - 1)) := by
have residue_integral : ∀ n i : ℕ, 1 ≤ i → i ≤ n → ∃ z : ℤ, (z : ℝ) = (∑ k ∈ Finset.Icc i n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))) := by
have hQne : ∀ m : ℕ, (∏ s ∈ Finset.Icc 1 m, ((1 : ℤ) - 2 ^ s)) ≠ 0 := by
intro m
refine Finset.prod_ne_zero_iff.mpr (fun s hs => ?_)
have h1 := (Finset.mem_Icc.mp hs).1
have h2 : (2 : ℤ) ≤ 2 ^ s := by
calc (2 : ℤ) = 2 ^ 1 := by norm_num
_ ≤ 2 ^ s := pow_le_pow_right₀ (by norm_num) h1
omega
have hG : ∀ N a b : ℕ, a + b = N → ∃ z : ℤ, (∏ s ∈ Finset.Icc 1 (a + b), ((1 : ℤ) - 2 ^ s)) = z * ((∏ s ∈ Finset.Icc 1 a, ((1 : ℤ) - 2 ^ s)) * (∏ s ∈ Finset.Icc 1 b, ((1 : ℤ) - 2 ^ s))) := by
intro N
induction N with
| zero =>
intro a b h
obtain ⟨rfl, rfl⟩ : a = 0 ∧ b = 0 := by omega
exact ⟨1, by simp⟩
| succ N ih =>
intro a b h
rcases Nat.eq_zero_or_pos a with rfl | ha
· exact ⟨1, by simp⟩
rcases Nat.eq_zero_or_pos b with rfl | hb
· exact ⟨1, by simp⟩
obtain ⟨a', rfl⟩ : ∃ a', a = a' + 1 := ⟨a - 1, by omega⟩
obtain ⟨b', rfl⟩ : ∃ b', b = b' + 1 := ⟨b - 1, by omega⟩
obtain ⟨z1, h1⟩ := ih a' (b' + 1) (by omega)
obtain ⟨z2, h2⟩ := ih (a' + 1) b' (by omega)
refine ⟨2 ^ (b' + 1) * z1 + z2, ?_⟩
have e1 : a' + 1 + (b' + 1) = (a' + (b' + 1)) + 1 := by omega
have e2 : a' + 1 + b' = a' + (b' + 1) := by omega
have hA := Finset.prod_Icc_succ_top (show 1 ≤ a' + 1 by omega) (fun s => (1 : ℤ) - 2 ^ s)
have hB := Finset.prod_Icc_succ_top (show 1 ≤ b' + 1 by omega) (fun s => (1 : ℤ) - 2 ^ s)
have hC := Finset.prod_Icc_succ_top (show 1 ≤ a' + (b' + 1) + 1 by omega) (fun s => (1 : ℤ) - 2 ^ s)
beta_reduce at hA hB hC
rw [e2, hA] at h2
rw [hB] at h1
rw [e1, hC, hA, hB]
linear_combination (2 ^ (b' + 1) * (1 - 2 ^ (a' + 1))) * h1 + (1 - 2 ^ (b' + 1)) * h2
have hN : ∀ m d : ℕ, (∏ s ∈ Finset.Icc 1 d, ((1 : ℤ) - 2 ^ s)) * (∏ t ∈ Finset.Icc 1 m, ((1 : ℤ) - 2 ^ (t + d))) = ∏ s ∈ Finset.Icc 1 (d + m), ((1 : ℤ) - 2 ^ s) := by
intro m d
induction m with
| zero => simp
| succ m ih =>
rw [Finset.prod_Icc_succ_top (by omega), show d + (m + 1) = (d + m) + 1 by omega, Finset.prod_Icc_succ_top (by omega), ← mul_assoc, ih,
show m + 1 + d = d + m + 1 by omega]
have hsumZ : ∀ (s : Finset ℕ) (g : ℕ → ℝ), (∀ i ∈ s, ∃ z : ℤ, (z : ℝ) = g i) → ∃ z : ℤ, (z : ℝ) = ∑ i ∈ s, g i := by
intro s g
induction s using Finset.induction_on with
| empty => intro _; exact ⟨0, by simp⟩
| insert a s ha ih =>
intro h
obtain ⟨za, hza⟩ := h a (Finset.mem_insert_self a s)
obtain ⟨zs, hzs⟩ := ih (fun i hi => h i (Finset.mem_insert_of_mem hi))
exact ⟨za + zs, by rw [Finset.sum_insert ha]; push_cast; rw [hza, hzs]⟩
intro n i hi hin
refine hsumZ _ _ (fun k hk => ?_)
have hk' := Finset.mem_Icc.mp hk
obtain ⟨d, rfl⟩ : ∃ d, k = i + d := ⟨k - i, by omega⟩
-- numerator
have hNr : ∏ t ∈ Finset.Icc 1 (n - 1), (1 - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + (i + d))) = ((∏ t ∈ Finset.Icc 1 (n - 1), ((1 : ℤ) - 2 ^ (t + d)) : ℤ) : ℝ) := by
push_cast
refine Finset.prod_congr rfl (fun t _ => ?_)
have h2i : (2 : ℝ) ^ i ≠ 0 := by positivity
rw [show t + (i + d) = i + (t + d) by omega, pow_add, ← mul_assoc, inv_mul_cancel₀ h2i, one_mul]
-- denominator
have hset : (Finset.Icc 1 n).erase (i + d) = Finset.Icc 1 (i + d - 1) ∪ Finset.Icc (i + d + 1) n := by
ext l
simp only [Finset.mem_erase, Finset.mem_Icc, Finset.mem_union]
omega
have hdisj : Disjoint (Finset.Icc 1 (i + d - 1)) (Finset.Icc (i + d + 1) n) := by
rw [Finset.disjoint_left]
intro l h1 h2
simp only [Finset.mem_Icc] at h1 h2
omega
have hD1 : (∏ l ∈ Finset.Icc 1 (i + d - 1), (1 - (2 : ℝ) ^ ((l : ℤ) - ((i + d : ℕ) : ℤ)))) * ((∏ s ∈ Finset.Icc 1 (i + d - 1), (-(2 : ℤ) ^ s) : ℤ) : ℝ) = ((∏ s ∈ Finset.Icc 1 (i + d - 1), ((1 : ℤ) - 2 ^ s) : ℤ) : ℝ) := by
have hrefl : ∏ l ∈ Finset.Icc 1 (i + d - 1), (1 - (2 : ℝ) ^ ((l : ℤ) - ((i + d : ℕ) : ℤ))) = ∏ s ∈ Finset.Icc 1 (i + d - 1), (1 - ((2 : ℝ) ^ s)⁻¹) := by
refine Finset.prod_nbij' (fun l => i + d - l) (fun s => i + d - s) ?_ ?_ ?_ ?_ ?_
· intro l hl; simp only [Finset.mem_Icc] at hl ⊢; omega
· intro l hl; simp only [Finset.mem_Icc] at hl ⊢; omega
· intro l hl; simp only [Finset.mem_Icc] at hl; omega
· intro l hl; simp only [Finset.mem_Icc] at hl; omega
· intro l hl
simp only [Finset.mem_Icc] at hl
rw [← zpow_natCast, ← zpow_neg]
congr 2
push_cast [Nat.cast_sub (show l ≤ i + d by omega)]
ring
rw [hrefl]
push_cast
rw [← Finset.prod_mul_distrib]
refine Finset.prod_congr rfl (fun s _ => ?_)
have h2s : (2 : ℝ) ^ s ≠ 0 := by positivity
field_simp
ring
have hD2 : ∏ l ∈ Finset.Icc (i + d + 1) n, (1 - (2 : ℝ) ^ ((l : ℤ) - ((i + d : ℕ) : ℤ))) = ((∏ s ∈ Finset.Icc 1 (n - (i + d)), ((1 : ℤ) - 2 ^ s) : ℤ) : ℝ) := by
push_cast
refine Finset.prod_nbij' (fun l => l - (i + d)) (fun s => s + (i + d)) ?_ ?_ ?_ ?_ ?_
· intro l hl; simp only [Finset.mem_Icc] at hl ⊢; omega
· intro l hl; simp only [Finset.mem_Icc] at hl ⊢; omega
· intro l hl; simp only [Finset.mem_Icc] at hl; omega
· intro l hl; simp only [Finset.mem_Icc] at hl; omega
· intro l hl
simp only [Finset.mem_Icc] at hl
rw [← zpow_natCast]
congr 2
push_cast [Nat.cast_sub (show i + d ≤ l by omega)]
ring
obtain ⟨z1, hz1⟩ := hG _ d (n - 1) rfl
obtain ⟨z2, hz2⟩ := hG _ (i + d - 1) (n - (i + d)) rfl
rw [show i + d - 1 + (n - (i + d)) = n - 1 by omega] at hz2
have hNZ : (∏ t ∈ Finset.Icc 1 (n - 1), ((1 : ℤ) - 2 ^ (t + d))) = z1 * z2 * ((∏ s ∈ Finset.Icc 1 (i + d - 1), ((1 : ℤ) - 2 ^ s)) * (∏ s ∈ Finset.Icc 1 (n - (i + d)), ((1 : ℤ) - 2 ^ s))) := by
apply mul_left_cancel₀ (hQne d)
rw [hN (n - 1) d, hz1, hz2]
ring
have hNZ' : ((∏ t ∈ Finset.Icc 1 (n - 1), ((1 : ℤ) - 2 ^ (t + d)) : ℤ) : ℝ) = (z1 : ℝ) * z2 * (((∏ s ∈ Finset.Icc 1 (i + d - 1), ((1 : ℤ) - 2 ^ s) : ℤ) : ℝ) * ((∏ s ∈ Finset.Icc 1 (n - (i + d)), ((1 : ℤ) - 2 ^ s) : ℤ) : ℝ)) := by
exact_mod_cast hNZ
have hQ1 : ((∏ s ∈ Finset.Icc 1 (i + d - 1), ((1 : ℤ) - 2 ^ s) : ℤ) : ℝ) ≠ 0 := by exact_mod_cast hQne _
have hQ2 : ((∏ s ∈ Finset.Icc 1 (n - (i + d)), ((1 : ℤ) - 2 ^ s) : ℤ) : ℝ) ≠ 0 := by exact_mod_cast hQne _
have hDr : (∏ l ∈ (Finset.Icc 1 n).erase (i + d), (1 - (2 : ℝ) ^ ((l : ℤ) - ((i + d : ℕ) : ℤ)))) * ((∏ s ∈ Finset.Icc 1 (i + d - 1), (-(2 : ℤ) ^ s) : ℤ) : ℝ) = ((∏ s ∈ Finset.Icc 1 (i + d - 1), ((1 : ℤ) - 2 ^ s) : ℤ) : ℝ) * ((∏ s ∈ Finset.Icc 1 (n - (i + d)), ((1 : ℤ) - 2 ^ s) : ℤ) : ℝ) := by
rw [hset, Finset.prod_union hdisj, hD2, ← hD1]
ring
have hDne : (∏ l ∈ (Finset.Icc 1 n).erase (i + d), (1 - (2 : ℝ) ^ ((l : ℤ) - ((i + d : ℕ) : ℤ)))) ≠ 0 := by
intro h0
rw [h0, zero_mul] at hDr
exact mul_ne_zero hQ1 hQ2 hDr.symm
refine ⟨-(z1 * z2 * (∏ s ∈ Finset.Icc 1 (i + d - 1), (-(2 : ℤ) ^ s))), ?_⟩
rw [hNr, eq_div_iff hDne, hNZ']
rw [Int.cast_neg, Int.cast_mul, Int.cast_mul]
linear_combination (-((z1 : ℝ) * z2)) * hDr
have polypart_integral : ∀ n : ℕ, 1 ≤ n → ∃ z : ℤ, (z : ℝ) = (3 : ℝ) ^ n * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, (1 - (2 : ℝ) ^ k)) * ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (∑ i ∈ Finset.Icc 1 k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹)) - (∑ i ∈ Finset.Icc 1 n, (∑ k ∈ Finset.Icc i n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹)) := by
intro n hn
obtain ⟨α, hα⟩ := hpoly n hn
obtain ⟨D, hD⟩ : ∃ D : ℕ → ℝ, ∀ k, D k = ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))) := ⟨fun k => _, fun k => rfl⟩
have hA : ∀ (x : ℝ) (k : ℕ), ∏ t ∈ Finset.Icc 1 (n - 1), (1 - x * (2 : ℝ) ^ (t + k)) = ∑ j ∈ Finset.range n, (α j : ℝ) * (x * 2 ^ k) ^ j := by
intro x k
rw [← hα]
refine Finset.prod_congr rfl (fun t _ => ?_)
rw [pow_add]; ring
simp only [← hD, hA]
-- (a) one double sum
have hswap : ∑ i ∈ Finset.Icc 1 n, (∑ k ∈ Finset.Icc i n, -(∑ j ∈ Finset.range n, (α j : ℝ) * (((2 : ℝ) ^ i)⁻¹ * 2 ^ k) ^ j) / D k) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = ∑ k ∈ Finset.Icc 1 n, ∑ i ∈ Finset.Icc 1 k, (-(∑ j ∈ Finset.range n, (α j : ℝ) * (((2 : ℝ) ^ i)⁻¹ * 2 ^ k) ^ j) / D k) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ := by
simp only [Finset.sum_mul]
refine Finset.sum_comm' (fun i k => ?_)
simp only [Finset.mem_Icc]
omega
rw [hswap]
simp only [Finset.mul_sum]
rw [← Finset.sum_sub_distrib]
simp only [← Finset.sum_sub_distrib, ← sub_mul]
-- (b) per (k, i)
have hb : ∀ (k i : ℕ), 1 ≤ i → (-(∑ j ∈ Finset.range n, (α j : ℝ) * ((8 / 3 : ℝ) * 2 ^ k) ^ j) / D k - -(∑ j ∈ Finset.range n, (α j : ℝ) * (((2 : ℝ) ^ i)⁻¹ * 2 ^ k) ^ j) / D k) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = (∑ j ∈ Finset.range n, ∑ s ∈ Finset.range j, (α j : ℝ) * ((2 : ℝ) ^ k) ^ j * ((8 / 3 : ℝ) ^ s * (((2 : ℝ) ^ i)⁻¹) ^ (j - s))) / D k := by
intro k i hi
have h2i : (2 : ℝ) ^ i ≠ 0 := by positivity
have hne : (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i) ≠ 0 := by
have : (2 : ℝ) ≤ 2 ^ i := by
calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm
_ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi
intro h0
linarith
have hch : (((2 : ℝ) ^ i)⁻¹ - (8 / 3 : ℝ)) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = ((2 : ℝ) ^ i)⁻¹ := by
rw [show (((2 : ℝ) ^ i)⁻¹ - (8 / 3 : ℝ)) = ((2 : ℝ) ^ i)⁻¹ * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i) by field_simp, mul_assoc, mul_inv_cancel₀ hne, mul_one]
have hj : ∀ j : ℕ, ((((2 : ℝ) ^ i)⁻¹) ^ j - (8 / 3 : ℝ) ^ j) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = ∑ s ∈ Finset.range j, (8 / 3 : ℝ) ^ s * (((2 : ℝ) ^ i)⁻¹) ^ (j - s) := by
intro j
have hg := geom_sum₂_mul (8 / 3 : ℝ) (((2 : ℝ) ^ i)⁻¹) j
have hg' : (((2 : ℝ) ^ i)⁻¹) ^ j - (8 / 3 : ℝ) ^ j = (∑ s ∈ Finset.range j, (8 / 3 : ℝ) ^ s * (((2 : ℝ) ^ i)⁻¹) ^ (j - 1 - s)) * (((2 : ℝ) ^ i)⁻¹ - (8 / 3 : ℝ)) := by
linear_combination hg
rw [hg', mul_assoc, hch, Finset.sum_mul]
refine Finset.sum_congr rfl (fun s hs => ?_)
have hs' := Finset.mem_range.mp hs
rw [mul_assoc, ← pow_succ, show j - 1 - s + 1 = j - s by omega]
have e1 : (-(∑ j ∈ Finset.range n, (α j : ℝ) * ((8 / 3 : ℝ) * 2 ^ k) ^ j) / D k - -(∑ j ∈ Finset.range n, (α j : ℝ) * (((2 : ℝ) ^ i)⁻¹ * 2 ^ k) ^ j) / D k) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = ((∑ j ∈ Finset.range n, (α j : ℝ) * (((2 : ℝ) ^ i)⁻¹ * 2 ^ k) ^ j - ∑ j ∈ Finset.range n, (α j : ℝ) * ((8 / 3 : ℝ) * 2 ^ k) ^ j) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹) / D k := by
ring
rw [e1, ← Finset.sum_sub_distrib, Finset.sum_mul]
congr 1
refine Finset.sum_congr rfl (fun j _ => ?_)
rw [← Finset.mul_sum, ← hj j, mul_pow, mul_pow]
ring
-- (c) sum over i
have hc : ∀ k : ℕ, ∑ i ∈ Finset.Icc 1 k, (-(∑ j ∈ Finset.range n, (α j : ℝ) * ((8 / 3 : ℝ) * 2 ^ k) ^ j) / D k - -(∑ j ∈ Finset.range n, (α j : ℝ) * (((2 : ℝ) ^ i)⁻¹ * 2 ^ k) ^ j) / D k) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ = ∑ j ∈ Finset.range n, ∑ s ∈ Finset.range j, (α j : ℝ) * (8 / 3 : ℝ) ^ s * ((((2 : ℝ) ^ k) ^ j - ((2 : ℝ) ^ k) ^ s) / D k) / ((2 : ℝ) ^ (j - s) - 1) := by
intro k
rw [Finset.sum_congr rfl (fun i hi => hb k i (Finset.mem_Icc.mp hi).1), ← Finset.sum_div, Finset.sum_comm, Finset.sum_div]
refine Finset.sum_congr rfl (fun j _ => ?_)
rw [Finset.sum_comm, Finset.sum_div]
refine Finset.sum_congr rfl (fun s hs => ?_)
have hs' := Finset.mem_range.mp hs
rw [Finset.sum_congr rfl (fun i _ => (mul_assoc _ _ _).symm), ← Finset.mul_sum, hgeo (j - s) (by omega) k]
have hjs : ((2 : ℝ) ^ k) ^ j = ((2 : ℝ) ^ k) ^ s * ((2 : ℝ) ^ k) ^ (j - s) := by
rw [← pow_add]; congr 1; omega
have hZ : ((2 : ℝ) ^ k) ^ (j - s) * (((2 : ℝ) ^ k) ^ (j - s))⁻¹ = 1 := mul_inv_cancel₀ (by positivity)
rw [hjs]
linear_combination (-((α j : ℝ) * ((2 : ℝ) ^ k) ^ s * (8 / 3 : ℝ) ^ s / ((2 : ℝ) ^ (j - s) - 1) / D k)) * hZ
rw [Finset.sum_congr rfl (fun k _ => hc k), Finset.sum_comm, Finset.mul_sum]
refine hsumZ _ _ (fun j hj => ?_)
rw [Finset.sum_comm, Finset.mul_sum]
refine hsumZ _ _ (fun s hs => ?_)
have hj' := Finset.mem_range.mp hj
have hs' := Finset.mem_range.mp hs
obtain ⟨wj, hwj⟩ := hW _ (Finset.Icc 1 n) j rfl
obtain ⟨ws, hws⟩ := hW _ (Finset.Icc 1 n) s rfl
obtain ⟨q, hq⟩ := hdvd n (j - s) (by omega) (by omega)
have hqR : ∏ k ∈ Finset.Icc ((n + 1) / 2) n, ((1 : ℝ) - 2 ^ k) = ((2 : ℝ) ^ (j - s) - 1) * q := by exact_mod_cast hq
have hB : (2 : ℝ) ^ (j - s) - 1 ≠ 0 := by
have : (2 : ℝ) ≤ 2 ^ (j - s) := by
calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm
_ ≤ 2 ^ (j - s) := pow_le_pow_right₀ (by norm_num) (by omega)
linarith
have h3 : (3 : ℝ) ^ n = 3 ^ (n - s) * 3 ^ s := by rw [← pow_add]; congr 1; omega
have h83 : (8 / 3 : ℝ) ^ s * 3 ^ s = 8 ^ s := by rw [← mul_pow]; norm_num
refine ⟨3 ^ (n - s) * 8 ^ s * q * α j * (wj - ws), ?_⟩
simp only [← hD] at hwj hws
push_cast
rw [hwj, hws, hqR, h3, ← h83, ← Finset.sum_sub_distrib]
rw [Finset.mul_sum, Finset.mul_sum]
refine Finset.sum_congr rfl (fun k _ => ?_)
field_simp
have head_integral : ∃ a₁ : ℕ → ℤ, ∀ n : ℕ, 1 ≤ n → (a₁ n : ℝ) = (9 : ℝ) ^ n * ((Nat.factorial (n - 2) : ℝ) * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, (1 - (2 : ℝ) ^ k))) * (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (∑ i ∈ Finset.Icc 1 k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹)) := by
have hsumZ0 : ∀ (s : Finset ℕ) (g : ℕ → ℝ), (∀ i ∈ s, ∃ z : ℤ, (z : ℝ) = g i) → ∃ z : ℤ, (z : ℝ) = ∑ i ∈ s, g i := by
intro s g
induction s using Finset.induction_on with
| empty => intro _; exact ⟨0, by simp⟩
| insert a s ha ih =>
intro h
obtain ⟨za, hza⟩ := h a (Finset.mem_insert_self a s)
obtain ⟨zs, hzs⟩ := ih (fun i hi => h i (Finset.mem_insert_of_mem hi))
exact ⟨za + zs, by rw [Finset.sum_insert ha]; push_cast; rw [hza, hzs]⟩
have hn : ∀ n : ℕ, 1 ≤ n → ∃ z : ℤ, (z : ℝ) = (9 : ℝ) ^ n * ((Nat.factorial (n - 2) : ℝ) * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, (1 - (2 : ℝ) ^ k))) * (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (∑ i ∈ Finset.Icc 1 k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹)) := by
intro n hn
obtain ⟨zE, hzE⟩ := polypart_integral n hn
have hR : ∃ zR : ℤ, (zR : ℝ) = (3 : ℝ) ^ n * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * (∑ i ∈ Finset.Icc 1 n, (∑ k ∈ Finset.Icc i n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹) := by
rw [Finset.mul_sum]
refine hsumZ0 _ _ (fun i hi => ?_)
have hi' := Finset.mem_Icc.mp hi
obtain ⟨zb, hzb⟩ := residue_integral n i hi'.1 hi'.2
refine ⟨zb * (3 * ∏ j ∈ (Finset.Icc 1 n).erase i, ((3 : ℤ) - 8 * 2 ^ j)), ?_⟩
have hne : (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i) ≠ 0 := by
have : (2 : ℝ) ≤ 2 ^ i := by
calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm
_ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi'.1
intro h0
linarith
have hsplit : (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) = (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i) * ∏ k ∈ (Finset.Icc 1 n).erase i, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) :=
(Finset.mul_prod_erase _ (fun k => (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) hi).symm
have he : ∏ k ∈ (Finset.Icc 1 n).erase i, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = (∏ k ∈ (Finset.Icc 1 n).erase i, ((3 : ℝ) - 8 * 2 ^ k)) * ((3 : ℝ) ^ (n - 1))⁻¹ := by
rw [Finset.prod_congr rfl (fun k _ => (by ring : (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = ((3 : ℝ) - 8 * 2 ^ k) * (3 : ℝ)⁻¹)),
Finset.prod_mul_distrib, Finset.prod_const, Finset.card_erase_of_mem hi, Nat.card_Icc, Nat.add_sub_cancel, inv_pow]
have h3 : (3 : ℝ) ^ n = 3 * 3 ^ (n - 1) := by
rw [← pow_succ']; congr 1; omega
have h3ne : (3 : ℝ) ^ (n - 1) ≠ 0 := by positivity
obtain ⟨b, hb⟩ : ∃ b : ℝ, b = (∑ k ∈ Finset.Icc i n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - ((2 : ℝ) ^ i)⁻¹ * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))) := ⟨_, rfl⟩
rw [← hb] at hzb ⊢
push_cast
rw [hzb, hsplit, he, h3]
have hne' : (3 : ℝ) - 8 * 2 ^ i ≠ 0 := by
intro h0
apply hne
linear_combination (1 / 3 : ℝ) * h0
field_simp
obtain ⟨zR, hzR⟩ := hR
have hPZ : ∏ k ∈ Finset.Icc 1 n, ((3 : ℝ) - 8 * 2 ^ k) = (3 : ℝ) ^ n * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) := by
rw [Finset.prod_congr rfl (fun k _ => (by ring : (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = ((3 : ℝ) - 8 * 2 ^ k) * (3 : ℝ)⁻¹)),
Finset.prod_mul_distrib, Finset.prod_const, Nat.card_Icc, Nat.add_sub_cancel, inv_pow]
have h3n : (3 : ℝ) ^ n ≠ 0 := by positivity
field_simp
have h9 : (9 : ℝ) ^ n = 3 ^ n * 3 ^ n := by
rw [show (9 : ℝ) = 3 * 3 by norm_num, mul_pow]
refine ⟨(Nat.factorial (n - 2) : ℤ) * ((∏ k ∈ Finset.Icc 1 n, ((3 : ℤ) - 8 * 2 ^ k)) * zE + 3 ^ n * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, ((1 : ℤ) - 2 ^ k)) * zR), ?_⟩
push_cast
rw [hzE, hzR, hPZ, h9]
ring
refine ⟨fun n => if h : 1 ≤ n then Classical.choose (hn n h) else 0, fun n hn' => ?_⟩
simp only [dif_pos hn']
exact Classical.choose_spec (hn n hn')
obtain ⟨a₁, h₁⟩ := head_integral
have hmer : ∃ a₂ : ℕ → ℤ, ∀ n : ℕ, 1 ≤ n → (a₂ n : ℝ) = (9 : ℝ) ^ n * ((Nat.factorial (n - 2) : ℝ) * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, (1 - (2 : ℝ) ^ k))) * (∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - 1)) := by
have key : ∀ n : ℕ, 1 ≤ n → ∀ i : ℕ, 1 ≤ i → i ≤ n - 1 → ∃ z : ℤ, (z : ℝ) = (3 : ℝ) ^ (n - 1 - i) * (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) := by
intro n hn i hi1 hi2
obtain ⟨α, hα⟩ := hpoly n hn
have hA : ∀ k : ℕ, ∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k)) = ∑ j ∈ Finset.range n, (α j : ℝ) * ((8 / 3 : ℝ) * 2 ^ k) ^ j := by
intro k
rw [← hα]
refine Finset.prod_congr rfl (fun t _ => ?_)
rw [pow_add]; ring
simp only [hA]
have e1 : ∑ k ∈ Finset.Icc 1 n, (-(∑ j ∈ Finset.range n, (α j : ℝ) * ((8 / 3 : ℝ) * 2 ^ k) ^ j) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) * ((((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) = ∑ j ∈ Finset.range n, ∑ k ∈ Finset.Icc 1 n, (-(α j : ℝ)) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) := by
rw [Finset.sum_comm]
refine Finset.sum_congr rfl (fun k _ => ?_)
rw [neg_div, neg_mul, Finset.sum_div, Finset.sum_mul, ← Finset.sum_neg_distrib]
refine Finset.sum_congr rfl (fun j _ => ?_)
ring
rw [e1, Finset.mul_sum]
refine hsumZ _ _ (fun j hj => ?_)
have hj' := Finset.mem_range.mp hj
rw [← Finset.mul_sum]
have hcX : ∀ k : ℕ, ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ≠ 0 := fun k => by positivity
rcases lt_or_ge j i with hji | hji
· refine ⟨0, ?_⟩
have hvan : ∑ k ∈ Finset.Icc 1 n, (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) = ((8 / 3 : ℝ) ^ (i - j))⁻¹ * ∑ k ∈ Finset.Icc 1 n, (((2 : ℝ) ^ k) ^ (i - j - 1 + 1))⁻¹ / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))) := by
rw [Finset.mul_sum]
refine Finset.sum_congr rfl (fun k _ => ?_)
have hk : ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) = ((8 / 3 : ℝ) ^ (i - j))⁻¹ * (((2 : ℝ) ^ k) ^ (i - j))⁻¹ := by
rw [show ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i = ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ (i - j) from by rw [← pow_add]; congr 1; omega,
mul_inv, ← mul_assoc, mul_inv_cancel₀ (pow_ne_zero _ (hcX k)), one_mul, mul_pow, mul_inv]
rw [hk, mul_div_assoc, show i - j - 1 + 1 = i - j by omega]
rw [hvan, hV (i - j - 1) (Finset.Icc 1 n) (by rw [Nat.card_Icc]; omega)]
simp
· obtain ⟨w, hw⟩ := hW _ (Finset.Icc 1 n) (j - i) rfl
refine ⟨-(α j) * 3 ^ (n - 1 - j) * 8 ^ (j - i) * w, ?_⟩
have hpos : ∑ k ∈ Finset.Icc 1 n, (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) = (8 / 3 : ℝ) ^ (j - i) * ∑ k ∈ Finset.Icc 1 n, ((2 : ℝ) ^ k) ^ (j - i) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))) := by
rw [Finset.mul_sum]
refine Finset.sum_congr rfl (fun k _ => ?_)
have hk : ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j * ((((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) = (8 / 3 : ℝ) ^ (j - i) * ((2 : ℝ) ^ k) ^ (j - i) := by
rw [show ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j = ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ (j - i) * ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i from by rw [← pow_add]; congr 1; omega,
mul_assoc, mul_inv_cancel₀ (pow_ne_zero _ (hcX k)), mul_one, mul_pow]
rw [hk, mul_div_assoc]
have h3 : (3 : ℝ) ^ (n - 1 - i) = 3 ^ (n - 1 - j) * 3 ^ (j - i) := by rw [← pow_add]; congr 1; omega
have h83 : (8 / 3 : ℝ) ^ (j - i) * 3 ^ (j - i) = 8 ^ (j - i) := by rw [← mul_pow]; norm_num
push_cast
rw [hpos, hw, h3, ← h83]
ring
have hW3 : ∀ n : ℕ, ∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = (∏ k ∈ Finset.Icc 1 n, ((3 : ℝ) - 8 * 2 ^ k)) * ((3 : ℝ) ^ n)⁻¹ := by
intro n
rw [Finset.prod_congr rfl (fun k _ => (by ring : (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = ((3 : ℝ) - 8 * 2 ^ k) * (3 : ℝ)⁻¹)),
Finset.prod_mul_distrib, Finset.prod_const, Nat.card_Icc, Nat.add_sub_cancel, inv_pow]
have hdvd : ∀ n i : ℕ, 1 ≤ i → i ≤ n - 1 → ((2 : ℤ) ^ i - 1) ∣ ∏ k ∈ Finset.Icc ((n + 1) / 2) n, ((1 : ℤ) - 2 ^ k) := by
intro n i hi1 hi2
obtain ⟨k0, hk0⟩ : ∃ k0, k0 = i * (n / i) := ⟨_, rfl⟩
have hle : k0 ≤ n := by rw [hk0, mul_comm]; exact Nat.div_mul_le_self n i
have hlt : n < k0 + i := by rw [hk0]; have := Nat.lt_mul_div_succ n (by omega : 0 < i); linarith
have hge : i ≤ k0 := by rw [hk0]; exact Nat.le_mul_of_pos_right i (Nat.div_pos (by omega) (by omega))
have hmem : k0 ∈ Finset.Icc ((n + 1) / 2) n := Finset.mem_Icc.mpr ⟨by omega, hle⟩
have h1 : ((2 : ℤ) ^ i - 1) ∣ (2 : ℤ) ^ k0 - 1 := by
have := sub_dvd_pow_sub_pow ((2 : ℤ) ^ i) 1 (n / i)
rw [one_pow, ← pow_mul, ← hk0] at this
exact this
have h2 : ((2 : ℤ) ^ i - 1) ∣ (1 : ℤ) - 2 ^ k0 := by
have : (1 : ℤ) - 2 ^ k0 = -((2 : ℤ) ^ k0 - 1) := by ring
rw [this]; exact (dvd_neg).mpr h1
exact h2.trans (Finset.dvd_prod_of_mem (fun k => (1 : ℤ) - 2 ^ k) hmem)
have hsumZ : ∀ (s : Finset ℕ) (g : ℕ → ℝ), (∀ i ∈ s, ∃ z : ℤ, (z : ℝ) = g i) → ∃ z : ℤ, (z : ℝ) = ∑ i ∈ s, g i := by
intro s g
induction s using Finset.induction_on with
| empty => intro _; exact ⟨0, by simp⟩
| insert a s ha ih =>
intro h
obtain ⟨za, hza⟩ := h a (Finset.mem_insert_self a s)
obtain ⟨zs, hzs⟩ := ih (fun i hi => h i (Finset.mem_insert_of_mem hi))
exact ⟨za + zs, by rw [Finset.sum_insert ha]; push_cast; rw [hza, hzs]⟩
have hn : ∀ n : ℕ, 1 ≤ n → ∃ z : ℤ, (z : ℝ) = (9 : ℝ) ^ n * ((Nat.factorial (n - 2) : ℝ) * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, (1 - (2 : ℝ) ^ k))) * (∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - 1)) := by
intro n hn
rw [Finset.mul_sum]
refine hsumZ _ _ (fun i hi => ?_)
have hi' := Finset.mem_Icc.mp hi
obtain ⟨z1, hz1⟩ := key n hn i hi'.1 hi'.2
obtain ⟨q, hq⟩ := hdvd n i hi'.1 hi'.2
have hqR : ∏ k ∈ Finset.Icc ((n + 1) / 2) n, ((1 : ℝ) - 2 ^ k) = ((2 : ℝ) ^ i - 1) * q := by exact_mod_cast hq
have h2i : (2 : ℝ) ^ i - 1 ≠ 0 := by
have : (2 : ℝ) ≤ 2 ^ i := by
calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm
_ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi'.1
linarith
have h9 : (9 : ℝ) ^ n = 3 ^ (i + 1) * 3 ^ (n - 1 - i) * 3 ^ n := by
rw [show (9 : ℝ) = 3 * 3 by norm_num, mul_pow]
congr 1
rw [← pow_add]
congr 1
omega
refine ⟨3 ^ (i + 1) * (Nat.factorial (n - 2) : ℤ) * (∏ k ∈ Finset.Icc 1 n, ((3 : ℤ) - 8 * 2 ^ k)) * q * z1, ?_⟩
push_cast
rw [hz1, hW3 n, hqR, h9]
have h3n : (3 : ℝ) ^ n ≠ 0 := by positivity
field_simp
refine ⟨fun n => if h : 1 ≤ n then Classical.choose (hn n h) else 0, fun n hn' => ?_⟩
simp only [dif_pos hn']
exact Classical.choose_spec (hn n hn')
obtain ⟨a₂, h₂⟩ := hmer
refine ⟨fun n => a₁ n - a₂ n, fun n hn => ?_⟩
push_cast
rw [h₁ n hn, h₂ n hn]
ring
obtain ⟨a, ha⟩ := numerator_integral
-- Denominator integrality (proved): 3^(n-1) beta0(n) is a coefficient of an integer polynomial.
have hden : ∃ b : ℕ → ℤ, ∀ n : ℕ, 1 ≤ n → (b n : ℝ) = (9 : ℝ) ^ n * ((Nat.factorial (n - 2) : ℝ) * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, (1 - (2 : ℝ) ^ k))) * (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))) := by
have key : ∀ n : ℕ, 1 ≤ n → ∃ z : ℤ, (z : ℝ) = (3 : ℝ) ^ (n - 1) * (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))) := by
intro n hn
obtain ⟨α, hα⟩ := hpoly n hn
have hA : ∀ k : ℕ, ∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k)) = ∑ j ∈ Finset.range n, (α j : ℝ) * ((8 / 3 : ℝ) * 2 ^ k) ^ j := by
intro k
rw [← hα]
refine Finset.prod_congr rfl (fun t _ => ?_)
rw [pow_add]; ring
simp only [hA]
have e1 : ∑ k ∈ Finset.Icc 1 n, (-(∑ j ∈ Finset.range n, (α j : ℝ) * ((8 / 3 : ℝ) * 2 ^ k) ^ j) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) = ∑ j ∈ Finset.range n, ∑ k ∈ Finset.Icc 1 n, (-(α j : ℝ)) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ)))) := by
rw [Finset.sum_comm]
refine Finset.sum_congr rfl (fun k _ => ?_)
rw [neg_div, Finset.sum_div, ← Finset.sum_neg_distrib]
refine Finset.sum_congr rfl (fun j _ => ?_)
ring
rw [e1, Finset.mul_sum]
refine hsumZ _ _ (fun j hj => ?_)
have hj' := Finset.mem_range.mp hj
rw [← Finset.mul_sum]
obtain ⟨w, hw⟩ := hW _ (Finset.Icc 1 n) j rfl
refine ⟨-(α j) * 3 ^ (n - 1 - j) * 8 ^ j * w, ?_⟩
have hpos : ∑ k ∈ Finset.Icc 1 n, ((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ j / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))) = (8 / 3 : ℝ) ^ j * ∑ k ∈ Finset.Icc 1 n, ((2 : ℝ) ^ k) ^ j / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))) := by
rw [Finset.mul_sum]
refine Finset.sum_congr rfl (fun k _ => ?_)
rw [mul_pow, mul_div_assoc]
have h3 : (3 : ℝ) ^ (n - 1) = 3 ^ (n - 1 - j) * 3 ^ j := by rw [← pow_add]; congr 1; omega
have h83 : (8 / 3 : ℝ) ^ j * 3 ^ j = 8 ^ j := by rw [← mul_pow]; norm_num
push_cast
rw [hpos, hw, h3, ← h83]
ring
have hW3 : ∀ n : ℕ, ∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = (∏ k ∈ Finset.Icc 1 n, ((3 : ℝ) - 8 * 2 ^ k)) * ((3 : ℝ) ^ n)⁻¹ := by
intro n
rw [Finset.prod_congr rfl (fun k _ => (by ring : (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = ((3 : ℝ) - 8 * 2 ^ k) * (3 : ℝ)⁻¹)),
Finset.prod_mul_distrib, Finset.prod_const, Nat.card_Icc, Nat.add_sub_cancel, inv_pow]
refine ⟨fun n => if h : 1 ≤ n then 3 * (Nat.factorial (n - 2) : ℤ) * (∏ k ∈ Finset.Icc 1 n, ((3 : ℤ) - 8 * 2 ^ k)) *
(∏ k ∈ Finset.Icc ((n + 1) / 2) n, ((1 : ℤ) - 2 ^ k)) * Classical.choose (key n h) else 0, fun n hn => ?_⟩
simp only [dif_pos hn]
push_cast
rw [Classical.choose_spec (key n hn), hW3 n]
have h9 : (9 : ℝ) ^ n = 3 * (3 : ℝ) ^ (n - 1) * (3 : ℝ) ^ n := by
rw [show (9 : ℝ) = 3 * 3 by norm_num, mul_pow, mul_comm (3 : ℝ) _, ← pow_succ, Nat.sub_add_cancel hn]
have h3 : ((3 : ℝ) ^ n)⁻¹ * (3 : ℝ) ^ n = 1 := inv_mul_cancel₀ (by positivity)
rw [h9]
linear_combination (-(3 : ℝ) * (Nat.factorial (n - 2) : ℝ) * (∏ k ∈ Finset.Icc 1 n, ((3 : ℝ) - 8 * 2 ^ k)) *
(∏ k ∈ Finset.Icc ((n + 1) / 2) n, ((1 : ℝ) - 2 ^ k)) * ((3 : ℝ) ^ (n - 1) * (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))))) * h3
obtain ⟨b, hb⟩ := hden
-- The partial-fraction identity at x = 2^m (proved).
have hpf : ∀ n : ℕ, 1 ≤ n → ∀ m : ℕ, 1 ≤ m → (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (((m : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - (m : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (m : ℕ)))⁻¹) = ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹) + ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹) := by
intro n hn m hm
-- General partial fractions, from Mathlib's Lagrange interpolation.
have lag : ∀ (s : Finset ℕ) (p : ℕ → ℝ) (Q : Polynomial ℝ), (∀ k ∈ s, p k ≠ 0) → Set.InjOn p s →
Q.degree < s.card → ∀ x : ℝ, (∀ k ∈ s, 1 - p k * x ≠ 0) →
Q.eval x * ∏ k ∈ s, (1 - p k * x)⁻¹ =
∑ k ∈ s, Q.eval (p k)⁻¹ * (∏ j ∈ s.erase k, (1 - p j / p k))⁻¹ * (1 - p k * x)⁻¹ := by
intro s p Q hp hinj hdeg x hx
have hinj' : Set.InjOn (fun k => (p k)⁻¹) s := by
intro a ha b hb hab
exact hinj ha hb (inv_injective hab)
have hxv : ∀ k ∈ s, x ≠ (p k)⁻¹ := by
intro k hk hxk
apply hx k hk
rw [hxk, mul_inv_cancel₀ (hp k hk), sub_self]
have hQ := Lagrange.eq_interpolate hinj' hdeg
have hev := Lagrange.eval_interpolate_not_at_node (s := s) (v := fun k => (p k)⁻¹) (fun i => Q.eval (p i)⁻¹) hxv
rw [← hQ, Lagrange.eval_nodal] at hev
have hfac : ∀ k ∈ s, (1 - p k * x)⁻¹ = (x - (p k)⁻¹)⁻¹ * (-(p k)⁻¹) := by
intro k hk
have h1 := hp k hk
have h3 : (x - (p k)⁻¹) * (-(p k)) = 1 - p k * x := by
rw [sub_mul, mul_neg, mul_neg, inv_mul_cancel₀ h1]; ring
rw [← h3, mul_inv, inv_neg]
rw [Finset.prod_congr rfl hfac, Finset.prod_mul_distrib, hev]
have hne : ∏ i ∈ s, (x - (p i)⁻¹) ≠ 0 := Finset.prod_ne_zero_iff.mpr (fun i hi => sub_ne_zero.mpr (hxv i hi))
rw [Finset.prod_inv_distrib, mul_assoc, ← mul_assoc (∑ i ∈ s, _), mul_comm (∑ i ∈ s, _), ← mul_assoc, ← mul_assoc,
mul_inv_cancel₀ hne, one_mul, Finset.sum_mul]
refine Finset.sum_congr rfl (fun k hk => ?_)
rw [Lagrange.nodalWeight, ← Finset.mul_prod_erase s (fun i => -(p i)⁻¹) hk]
have hj : ∀ j ∈ s.erase k, ((p k)⁻¹ - (p j)⁻¹)⁻¹ * -(p j)⁻¹ = (1 - p j / p k)⁻¹ := by
intro j hj
have hjs := Finset.mem_of_mem_erase hj
have hjk := Finset.ne_of_mem_erase hj
have hpj := hp j hjs
have hpk := hp k hk
have hne : p j ≠ p k := fun h => hjk (hinj hjs hk h)
have hsub : p k - p j ≠ 0 := sub_ne_zero.mpr (Ne.symm hne)
field_simp
ring
calc (∏ j ∈ s.erase k, ((p k)⁻¹ - (p j)⁻¹)⁻¹) * (x - (p k)⁻¹)⁻¹ * Q.eval (p k)⁻¹ *
(-(p k)⁻¹ * ∏ j ∈ s.erase k, -(p j)⁻¹)
= Q.eval (p k)⁻¹ * (∏ j ∈ s.erase k, (((p k)⁻¹ - (p j)⁻¹)⁻¹ * -(p j)⁻¹)) * ((x - (p k)⁻¹)⁻¹ * -(p k)⁻¹) := by
rw [Finset.prod_mul_distrib]; ring
_ = Q.eval (p k)⁻¹ * (∏ j ∈ s.erase k, (1 - p j / p k))⁻¹ * (1 - p k * x)⁻¹ := by
rw [Finset.prod_congr rfl hj, ← Finset.prod_inv_distrib, hfac k hk]
have hx2 : (2 : ℝ) ≤ (2 : ℝ) ^ m := by
calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm
_ ≤ 2 ^ m := pow_le_pow_right₀ (by norm_num) hm
have hx0 : (2 : ℝ) ^ m ≠ 0 := by positivity
have hp0 : ∀ k : ℕ, (8 / 3 : ℝ) * 2 ^ k ≠ 0 := fun k => by positivity
have hpx : ∀ k : ℕ, 1 - (8 / 3 : ℝ) * 2 ^ k * 2 ^ m ≠ 0 := by
intro k
have h1 : (1 : ℝ) ≤ 2 ^ k := one_le_pow₀ (by norm_num)
nlinarith
have hinj : Set.InjOn (fun k : ℕ => (8 / 3 : ℝ) * 2 ^ k) (Finset.Icc 1 n : Set ℕ) := by
intro a _ b _ hab
have h : (2 : ℝ) ^ a = 2 ^ b := by
have := hab; simp only at this
exact mul_left_cancel₀ (by norm_num : (8 / 3 : ℝ) ≠ 0) this
exact pow_right_injective₀ (by norm_num : (0 : ℝ) < 2) (by norm_num) h
have hdeg : (-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))).degree < ((Finset.Icc 1 n).card : WithBot ℕ) := by
rw [Polynomial.degree_neg, Polynomial.degree_prod]
simp only [Polynomial.degree_X_sub_C, Finset.sum_const, Nat.card_Icc]
rw [show n - 1 + 1 - 1 = n - 1 by omega, show n + 1 - 1 = n by omega, nsmul_one]
exact_mod_cast (by omega : n - 1 < n)
have hL := lag (Finset.Icc 1 n) (fun k => (8 / 3 : ℝ) * 2 ^ k) (-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.X - Polynomial.C ((2 : ℝ) ^ t)))
(fun k _ => hp0 k) hinj hdeg ((2 : ℝ) ^ m) (fun k _ => hpx k)
simp only [Polynomial.eval_neg, Polynomial.eval_prod, Polynomial.eval_sub, Polynomial.eval_X, Polynomial.eval_C] at hL
have hcard : (Finset.Icc 1 (n - 1)).card = n - 1 := by rw [Nat.card_Icc]; omega
-- geometric sums
have hgeo : ∀ u : ℝ, u ≠ 0 → 1 - u ≠ 0 → ∀ N : ℕ, (1 - u)⁻¹ + ∑ i ∈ Finset.Icc 1 N, (u ^ i)⁻¹ = (u ^ N)⁻¹ * (1 - u)⁻¹ := by
intro u hu hu1 N
induction N with
| zero => simp
| succ N ih =>
rw [Finset.sum_Icc_succ_top (by omega), ← add_assoc, ih]
have hN : u ^ N ≠ 0 := pow_ne_zero _ hu
field_simp
ring
-- the left side, in terms of the Lagrange data
have hz1 : ∀ k : ℕ, (2 : ℝ) ^ ((k : ℤ) - (m : ℤ)) = 2 ^ k * ((2 : ℝ) ^ m)⁻¹ := fun k => by
rw [zpow_sub₀ two_ne_zero, zpow_natCast, zpow_natCast, div_eq_mul_inv]
have hz2 : ∀ k : ℕ, (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (m : ℤ)) = ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m := fun k => by
rw [zpow_add₀ two_ne_zero, zpow_natCast, zpow_natCast, mul_assoc]
have hz3 : (8 / 3 : ℝ) * (2 : ℝ) ^ ((m : ℤ) + (n : ℤ)) = ((8 / 3 : ℝ) * 2 ^ n) * (2 : ℝ) ^ m := by
rw [zpow_add₀ two_ne_zero, zpow_natCast, zpow_natCast, mul_comm ((2 : ℝ) ^ m), mul_assoc]
have hsplit : ∏ k ∈ Finset.Icc 1 n, (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹ = (∏ k ∈ Finset.Icc 1 (n - 1), (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) * (1 - ((8 / 3 : ℝ) * 2 ^ n) * (2 : ℝ) ^ m)⁻¹ := by
have hn' : n = n - 1 + 1 := by omega
conv_lhs => rw [hn']
rw [Finset.prod_Icc_succ_top (by omega), ← hn']
have hfac : ∀ k : ℕ, 1 - 2 ^ k * ((2 : ℝ) ^ m)⁻¹ = ((2 : ℝ) ^ m)⁻¹ * ((2 : ℝ) ^ m - (2 : ℝ) ^ k) := fun k => by
rw [mul_sub, inv_mul_cancel₀ hx0]; ring
have hLHS : (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (((m : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - (m : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (m : ℕ)))⁻¹) = (((2 : ℝ) ^ m) ^ (n - 1))⁻¹ * ((-∏ t ∈ Finset.Icc 1 (n - 1), ((2 : ℝ) ^ m - (2 : ℝ) ^ t)) * ∏ k ∈ Finset.Icc 1 n, (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) := by
simp only [hz1, hz2, hz3]
rw [Finset.prod_mul_distrib, hsplit, Finset.prod_congr rfl (fun k _ => hfac k), Finset.prod_mul_distrib,
Finset.prod_const, hcard, inv_pow]
ring
-- the right side
have hpk : ∀ k : ℕ, (8 / 3 : ℝ) * 2 ^ (k + m) = ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m := fun k => by rw [pow_add, mul_assoc]
have hswap : ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹ = ∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * ∑ i ∈ Finset.Icc 1 (n - 1), ((((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m) ^ i)⁻¹ := by
simp only [Finset.sum_mul, Finset.mul_sum]
rw [Finset.sum_comm]
refine Finset.sum_congr rfl (fun k _ => Finset.sum_congr rfl (fun i _ => ?_))
rw [mul_pow, mul_inv]; ring
have hRHS : ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹) + ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹) = (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * ((((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m) ^ (n - 1))⁻¹ * (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) := by
simp only [hpk]
rw [hswap, ← Finset.sum_add_distrib]
refine Finset.sum_congr rfl (fun k hk => ?_)
rw [← mul_add, hgeo _ (mul_ne_zero (hp0 k) hx0) (hpx k) (n - 1)]
ring
-- matching the coefficients
have hcoef : ∀ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * 2 ^ k) ^ (n - 1))⁻¹ = (-∏ t ∈ Finset.Icc 1 (n - 1), (((8 / 3 : ℝ) * 2 ^ k)⁻¹ - (2 : ℝ) ^ t)) * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 / 3 : ℝ) * 2 ^ j) / ((8 / 3 : ℝ) * 2 ^ k)))⁻¹ := by
intro k hk
have hq : ∀ t : ℕ, ((8 / 3 : ℝ) * 2 ^ k)⁻¹ - (2 : ℝ) ^ t = ((8 / 3 : ℝ) * 2 ^ k)⁻¹ * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k)) := fun t => by
rw [mul_sub, mul_one, pow_add, show ((8 / 3 : ℝ) * 2 ^ k)⁻¹ * ((8 / 3 : ℝ) * (2 ^ t * 2 ^ k)) = 2 ^ t * (((8 / 3 : ℝ) * 2 ^ k)⁻¹ * ((8 / 3 : ℝ) * 2 ^ k)) by ring,
inv_mul_cancel₀ (hp0 k), mul_one]
have hw : ∀ j : ℕ, ((8 / 3 : ℝ) * 2 ^ j) / ((8 / 3 : ℝ) * 2 ^ k) = (2 : ℝ) ^ ((j : ℤ) - (k : ℤ)) := fun j => by
rw [zpow_sub₀ two_ne_zero, zpow_natCast, zpow_natCast]
field_simp
rw [Finset.prod_congr rfl (fun t _ => hq t), Finset.prod_mul_distrib, Finset.prod_const, hcard, inv_pow]
simp only [hw]
ring
calc (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (((m : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - (m : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (m : ℕ)))⁻¹) = (((2 : ℝ) ^ m) ^ (n - 1))⁻¹ * ((-∏ t ∈ Finset.Icc 1 (n - 1), ((2 : ℝ) ^ m - (2 : ℝ) ^ t)) * ∏ k ∈ Finset.Icc 1 n, (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) := hLHS
_ = (((2 : ℝ) ^ m) ^ (n - 1))⁻¹ * (∑ k ∈ Finset.Icc 1 n, (-∏ t ∈ Finset.Icc 1 (n - 1), (((8 / 3 : ℝ) * 2 ^ k)⁻¹ - (2 : ℝ) ^ t)) * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 / 3 : ℝ) * 2 ^ j) / ((8 / 3 : ℝ) * 2 ^ k)))⁻¹ * (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) := by rw [hL]
_ = (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * ((((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m) ^ (n - 1))⁻¹ * (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) := by
rw [Finset.mul_sum]
refine Finset.sum_congr rfl (fun k hk => ?_)
rw [← hcoef k hk, mul_pow, mul_inv]
ring
_ = ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹) + ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹) := hRHS.symm
-- Borwein Lemma 1 (proved): sum over m >= 1; the first n - 1 terms vanish.
have hres : ∀ n : ℕ, 1 ≤ n → (∑' j : ℕ, (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (((n + j : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - (n + j : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (n + j : ℕ)))⁻¹)) = (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))) * (∑' j : ℕ, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + 1))⁻¹) - ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (∑ i ∈ Finset.Icc 1 k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹)) - ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - 1)) := by
intro n hn
have pf := hpf n hn
-- Summability of the two families of pieces.
have hT : ∀ k : ℕ, Summable (fun m : ℕ => (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + 1)))⁻¹) := by
intro k
refine Summable.of_norm_bounded (summable_geometric_of_lt_one (by norm_num : (0 : ℝ) ≤ 1 / 2) (by norm_num)) (fun m => ?_)
have h1 : (1 : ℝ) ≤ 2 ^ k := one_le_pow₀ (by norm_num)
have h2 : (1 : ℝ) ≤ 2 ^ m := one_le_pow₀ (by norm_num)
have he : (2 : ℝ) ^ (k + (m + 1)) = 2 * 2 ^ k * 2 ^ m := by ring
have hneg : (1 : ℝ) - 8 / 3 * 2 ^ (k + (m + 1)) < 0 := by rw [he]; nlinarith
rw [Real.norm_eq_abs, abs_inv, abs_of_neg hneg, one_div_pow, one_div]
exact inv_anti₀ (by positivity) (by rw [he]; nlinarith)
have hGeo : ∀ i : ℕ, 1 ≤ i → ∑' m : ℕ, (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹ = ((2 : ℝ) ^ i - 1)⁻¹ := by
intro i hi
have h2 : (2 : ℝ) ≤ 2 ^ i := by
calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm
_ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi
have hr0 : (0 : ℝ) ≤ ((2 : ℝ) ^ i)⁻¹ := by positivity
have hr1 : ((2 : ℝ) ^ i)⁻¹ < 1 := inv_lt_one_of_one_lt₀ (by linarith)
have hc : ∀ m : ℕ, (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹ = ((2 : ℝ) ^ i)⁻¹ * (((2 : ℝ) ^ i)⁻¹) ^ m := by
intro m
rw [← pow_succ', inv_pow, ← pow_mul, ← pow_mul, mul_comm]
rw [tsum_congr hc, tsum_mul_left, tsum_geometric_of_lt_one hr0 hr1]
have h3 : (2 : ℝ) ^ i - 1 ≠ 0 := by linarith
have h4 : (2 : ℝ) ^ i ≠ 0 := by positivity
field_simp
have hGs : ∀ i : ℕ, 1 ≤ i → Summable (fun m : ℕ => (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹) := by
intro i hi
by_contra hns
have := tsum_eq_zero_of_not_summable hns
rw [hGeo i hi] at this
have h2 : (2 : ℝ) ≤ 2 ^ i := by
calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm
_ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi
have : ((2 : ℝ) ^ i - 1)⁻¹ ≠ 0 := inv_ne_zero (by linarith)
contradiction
have hz0 : Summable (fun j : ℕ => (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + 1))⁻¹) := by
simpa using hT 0
have hIcc : ∀ k : ℕ, ∑ i ∈ Finset.range k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (i + 1))⁻¹ = ∑ i ∈ Finset.Icc 1 k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ := by
intro k
induction k with
| zero => simp
| succ k ih => rw [Finset.sum_range_succ, ih, Finset.sum_Icc_succ_top (by omega)]
have hTail : ∀ k : ℕ, ∑' m : ℕ, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + 1)))⁻¹ = (∑' j : ℕ, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + 1))⁻¹) - ∑ i ∈ Finset.Icc 1 k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ := by
intro k
have hs := hz0.sum_add_tsum_nat_add k
rw [hIcc k] at hs
rw [← hs, add_sub_cancel_left]
exact tsum_congr (fun m => by rw [show k + (m + 1) = m + k + 1 by omega])
-- The series E(n) summed from m = 1: its first n - 1 terms vanish.
have hRs1 : Summable (fun m : ℕ => ∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + 1)))⁻¹) :=
summable_sum (fun k _ => (hT k).mul_left _)
have hRs2 : Summable (fun m : ℕ => ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹) :=
summable_sum (fun i hi => (hGs i (Finset.mem_Icc.mp hi).1).mul_left _)
have hRs : Summable (fun m : ℕ => ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + 1)))⁻¹) + ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹)) := hRs1.add hRs2
have hGsum : Summable (fun m : ℕ => (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((((m + 1) : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - ((m + 1) : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + ((m + 1) : ℕ)))⁻¹)) :=
hRs.congr (fun m => (pf (m + 1) (by omega)).symm)
have hshift := hGsum.sum_add_tsum_nat_add (n - 1)
have hzero : ∑ i ∈ Finset.range (n - 1), (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((((i + 1) : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - ((i + 1) : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + ((i + 1) : ℕ)))⁻¹) = 0 := by
refine Finset.sum_eq_zero (fun i hi => ?_)
have hi' : i + 1 ∈ Finset.Icc 1 (n - 1) := by
rw [Finset.mem_range] at hi
rw [Finset.mem_Icc]; omega
refine mul_eq_zero_of_right _ (Finset.prod_eq_zero hi' ?_)
simp
rw [hzero, zero_add] at hshift
have hE : (∑' j : ℕ, (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (((n + j : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - (n + j : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (n + j : ℕ)))⁻¹)) = ∑' m : ℕ, (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((((m + 1) : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - ((m + 1) : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + ((m + 1) : ℕ)))⁻¹) := by
rw [← hshift]
exact tsum_congr (fun j => by rw [show j + (n - 1) + 1 = n + j by omega])
rw [hE, tsum_congr (fun m => pf (m + 1) (by omega)), hRs1.tsum_add hRs2,
Summable.tsum_finsetSum (fun k _ => (hT k).mul_left _),
Summable.tsum_finsetSum (fun i hi => (hGs i (Finset.mem_Icc.mp hi).1).mul_left _),
Finset.sum_congr (s₁ := Finset.Icc 1 n) rfl (fun k _ => by rw [tsum_mul_left, hTail k]),
Finset.sum_congr (s₁ := Finset.Icc 1 (n - 1)) rfl (fun i hi => by rw [tsum_mul_left, hGeo i (Finset.mem_Icc.mp hi).1])]
simp only [mul_sub, Finset.sum_sub_distrib, Finset.sum_mul, div_eq_mul_inv]
ring
refine ⟨a, b, fun n hn => ?_⟩
linear_combination (∑' j : ℕ, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + 1))⁻¹) * hb n hn - ha n hn - (9 : ℝ) ^ n * ((Nat.factorial (n - 2) : ℝ) * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, (1 - (2 : ℝ) ^ k))) * hres n hnHow it was split
Proved from this hole by 20260929T194647Z-t0929-1-partial.lean (merged in b2e922a60e62, attestation 000290).
numerator_integral→ erdos-1050--h1-v2--h2--h1 (proved)$\displaystyle \exists\, a:\mathbb{N}\to\mathbb{Z}\ \ \forall n\ge 1:\qquad a(n)\;=\;9^n\,W(n)\,\bigl(S_1(n)-S_2(n)\bigr)$
Read the partial proof (Lean)
theorem erdos_1050__h1_v2__h2 : ∃ (a : ℕ → ℤ) (b : ℕ → ℤ),
∀ (n : ℕ),
(1 : ℕ) ≤ n →
(↑(b n) : ℝ) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (↑(a n) : ℝ) =
(9 : ℝ) ^ n *
(((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) *
∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) *
∑' (j : ℕ),
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ *
∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)),
((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) *
((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ := by
-- E(n) = beta0(n) * z - alpha0(n) by partial fractions in x = 2^m (proved below, via Lagrange
-- interpolation); b(n) = 9^n W(n) beta0(n) is an integer (proved below); a(n) = 9^n W(n) alpha0(n)
-- is the one hole. Informal argument: annex 959e0d5b10994049b5f27ad77d9d2d8535be9f817bf4de69d747a1e05b9db44b on this node.
-- Borwein Lemma 3 (numerator integrality): the one hole.
have numerator_integral : ∃ a : ℕ → ℤ, ∀ n : ℕ, 1 ≤ n → (a n : ℝ) = (9 : ℝ) ^ n * ((Nat.factorial (n - 2) : ℝ) * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, (1 - (2 : ℝ) ^ k))) * ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (∑ i ∈ Finset.Icc 1 k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹)) - ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - 1)) := sorry
obtain ⟨a, ha⟩ := numerator_integral
-- Denominator integrality (proved): 3^(n-1) beta0(n) is a coefficient of an integer polynomial.
have hden : ∃ b : ℕ → ℤ, ∀ n : ℕ, 1 ≤ n → (b n : ℝ) = (9 : ℝ) ^ n * ((Nat.factorial (n - 2) : ℝ) * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, (1 - (2 : ℝ) ^ k))) * (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))) := by
have key : ∀ n : ℕ, 1 ≤ n → ∃ z : ℤ, (z : ℝ) = (3 : ℝ) ^ (n - 1) * (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))) := by
intro n hn
have hr0 : ∀ k : ℕ, ((8 : ℝ) * 2 ^ k) ≠ 0 := fun k => by positivity
have hvinj : Set.InjOn (fun k : ℕ => ((8 : ℝ) * 2 ^ k)⁻¹) (Finset.Icc 1 n : Set ℕ) := by
intro a _ b _ hab
have h : (2 : ℝ) ^ a = 2 ^ b := by
have := inv_injective hab
exact mul_left_cancel₀ (by norm_num : (8 : ℝ) ≠ 0) this
exact pow_right_injective₀ (by norm_num : (0 : ℝ) < 2) (by norm_num) h
-- (1) the polynomial partial-fraction identity, by agreement at the n nodes 1/r_k
have hid : (-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))) = ∑ k ∈ Finset.Icc 1 n, Polynomial.C ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))).eval ((8 : ℝ) * 2 ^ k)⁻¹ * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)))⁻¹) * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X)) := by
refine Polynomial.eq_of_natDegree_lt_card_of_eval_eq' _ _ ((Finset.Icc 1 n).image (fun k : ℕ => ((8 : ℝ) * 2 ^ k)⁻¹)) ?_ ?_
· intro y hy
obtain ⟨k, hk, rfl⟩ := Finset.mem_image.mp hy
rw [Polynomial.eval_finsetSum, Finset.sum_eq_single_of_mem k hk]
· rw [Polynomial.eval_mul, Polynomial.eval_C, Polynomial.eval_prod]
simp only [Polynomial.eval_sub, Polynomial.eval_one, Polynomial.eval_mul, Polynomial.eval_C, Polynomial.eval_X]
have hne : ∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)) ≠ 0 := by
refine Finset.prod_ne_zero_iff.mpr (fun j hj => ?_)
have hjk : j ≠ k := Finset.ne_of_mem_erase hj
intro h0
have : ((8 : ℝ) * 2 ^ j) = ((8 : ℝ) * 2 ^ k) := by
have := hr0 k
field_simp at h0
linarith
exact hjk (pow_right_injective₀ (by norm_num : (0 : ℝ) < 2) (by norm_num) (mul_left_cancel₀ (by norm_num : (8 : ℝ) ≠ 0) this))
rw [mul_assoc, ← Finset.prod_congr rfl (fun j _ => by rw [div_eq_mul_inv, mul_comm (((8 : ℝ) * 2 ^ j)) _] : ∀ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)) = 1 - ((8 : ℝ) * 2 ^ j) * ((8 : ℝ) * 2 ^ k)⁻¹), inv_mul_cancel₀ hne, mul_one]
· intro i hi hik
rw [Polynomial.eval_mul, Polynomial.eval_prod]
refine mul_eq_zero_of_right _ (Finset.prod_eq_zero (i := k) (Finset.mem_erase.mpr ⟨Ne.symm hik, hk⟩) ?_)
simp only [Polynomial.eval_sub, Polynomial.eval_one, Polynomial.eval_mul, Polynomial.eval_C, Polynomial.eval_X]
rw [mul_inv_cancel₀ (hr0 k), sub_self]
· rw [Finset.card_image_of_injOn hvinj, Nat.card_Icc]
have hQdeg : (-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))).natDegree ≤ n - 1 := by
rw [Polynomial.natDegree_neg]
refine (Polynomial.natDegree_prod_le _ _).trans ?_
refine (Finset.sum_le_sum (g := fun _ => 1) (fun t _ => ?_)).trans (le_of_eq ?_)
· compute_degree
· simp only [Finset.sum_const, smul_eq_mul, mul_one, Nat.card_Icc]; omega
have hRdeg : (∑ k ∈ Finset.Icc 1 n, Polynomial.C ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))).eval ((8 : ℝ) * 2 ^ k)⁻¹ * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)))⁻¹) * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X))).natDegree ≤ n - 1 := by
refine Polynomial.natDegree_sum_le_of_forall_le _ _ (fun k hk => ?_)
refine (Polynomial.natDegree_C_mul_le _ _).trans ((Polynomial.natDegree_prod_le _ _).trans ?_)
refine (Finset.sum_le_sum (g := fun _ => 1) (fun j _ => ?_)).trans (le_of_eq ?_)
· compute_degree
· simp only [Finset.sum_const, smul_eq_mul, mul_one]
rw [Finset.card_erase_of_mem hk, Nat.card_Icc]; omega
omega
-- (2) coefficient n - 1 of T_k * P is r_k ^ (n - 1)
have hU : ∀ (S : Finset ℕ), ∀ d < n, (∏ j ∈ S, (1 - (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ n)).coeff d = if d = 0 then 1 else 0 := by
intro S
induction S using Finset.induction_on with
| empty => intro d hd; simp [Polynomial.coeff_one]
| insert a S ha ih =>
intro d hd
rw [Finset.prod_insert ha, sub_mul, one_mul, Polynomial.coeff_sub, mul_pow, ← Polynomial.C_pow, mul_assoc,
Polynomial.coeff_C_mul, Polynomial.coeff_X_pow_mul', if_neg (by omega), mul_zero, sub_zero, ih d hd]
have hG : ∀ k : ℕ, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ k) * Polynomial.X) ^ i).coeff (n - 1) = ((8 : ℝ) * 2 ^ k) ^ (n - 1) := by
intro k
simp only [mul_pow, ← Polynomial.C_pow, Polynomial.finsetSum_coeff, Polynomial.coeff_C_mul_X_pow]
rw [Finset.sum_ite_eq (Finset.range n) (n - 1), if_pos (Finset.mem_range.mpr (by omega))]
have hTP : ∀ k ∈ Finset.Icc 1 n, ((∏ j ∈ (Finset.Icc 1 n).erase k, (1 - Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X)) * (∏ j ∈ Finset.Icc 1 n, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i))).coeff (n - 1) = ((8 : ℝ) * 2 ^ k) ^ (n - 1) := by
intro k hk
have hsplitP : (∏ j ∈ Finset.Icc 1 n, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i)) = (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ k) * Polynomial.X) ^ i) * ∏ j ∈ (Finset.Icc 1 n).erase k, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i) :=
(Finset.mul_prod_erase _ (fun j => (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i)) hk).symm
have hprod : (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X)) * (∏ j ∈ Finset.Icc 1 n, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i)) = (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ k) * Polynomial.X) ^ i) * ∏ j ∈ (Finset.Icc 1 n).erase k, (1 - (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ n) := by
rw [hsplitP, mul_left_comm, ← Finset.prod_mul_distrib]
congr 1
refine Finset.prod_congr rfl (fun j _ => ?_)
rw [mul_neg_geom_sum]
obtain ⟨E, hE⟩ : Polynomial.X ^ n ∣ (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ n)) - 1 :=
Polynomial.X_pow_dvd_iff.mpr (fun d hd => by
rw [Polynomial.coeff_sub, hU _ d hd, Polynomial.coeff_one]; split_ifs <;> simp_all)
rw [hprod, show ∏ j ∈ (Finset.Icc 1 n).erase k, (1 - (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ n) = 1 + Polynomial.X ^ n * E by rw [← hE]; ring,
mul_add, mul_one, Polynomial.coeff_add, mul_left_comm, Polynomial.coeff_X_pow_mul', if_neg (by omega), add_zero, hG]
-- (3) so coefficient n - 1 of Qt * P is the sum of C_k r_k^(n-1)
have hQP : ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))) * (∏ j ∈ Finset.Icc 1 n, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i))).coeff (n - 1) = ∑ k ∈ Finset.Icc 1 n, ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))).eval ((8 : ℝ) * 2 ^ k)⁻¹ * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)))⁻¹) * ((8 : ℝ) * 2 ^ k) ^ (n - 1) := by
nth_rw 1 [hid]
rw [Finset.sum_mul, Polynomial.finsetSum_coeff]
refine Finset.sum_congr rfl (fun k hk => ?_)
rw [mul_assoc, Polynomial.coeff_C_mul, hTP k hk]
-- (4) and it is an integer, since Qt * P has integer coefficients
have hmap : (-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))) * (∏ j ∈ Finset.Icc 1 n, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i)) = Polynomial.map (Int.castRingHom ℝ) ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℤ) * Polynomial.X - Polynomial.C ((2 : ℤ) ^ t))) * (∏ j ∈ Finset.Icc 1 n, ∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℤ) * 2 ^ j) * Polynomial.X) ^ i)) := by
simp [Polynomial.map_prod, Polynomial.map_sum, Polynomial.C_mul, Polynomial.C_pow, map_ofNat]
-- (5) C_k r_k^(n-1) = 3^(n-1) A(n,k)
have hcard : (Finset.Icc 1 (n - 1)).card = n - 1 := by rw [Nat.card_Icc]; omega
have hterm : ∀ k ∈ Finset.Icc 1 n, ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))).eval ((8 : ℝ) * 2 ^ k)⁻¹ * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)))⁻¹) * ((8 : ℝ) * 2 ^ k) ^ (n - 1) = (3 : ℝ) ^ (n - 1) * (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) := by
intro k hk
have hq : ∀ t : ℕ, (3 : ℝ) * ((8 : ℝ) * 2 ^ k)⁻¹ - 2 ^ t = ((8 : ℝ) * 2 ^ k)⁻¹ * (3 * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) := fun t => by
have := hr0 k
rw [pow_add]; field_simp
have hw : ∀ j : ℕ, ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k) = (2 : ℝ) ^ ((j : ℤ) - (k : ℤ)) := fun j => by
rw [zpow_sub₀ two_ne_zero, zpow_natCast, zpow_natCast]
field_simp
have hrr : (((8 : ℝ) * 2 ^ k)⁻¹) ^ (n - 1) * ((8 : ℝ) * 2 ^ k) ^ (n - 1) = 1 := by
rw [← mul_pow, inv_mul_cancel₀ (hr0 k), one_pow]
simp only [Polynomial.eval_neg, Polynomial.eval_prod, Polynomial.eval_sub, Polynomial.eval_mul, Polynomial.eval_C,
Polynomial.eval_X]
rw [Finset.prod_congr rfl (fun t _ => hq t), Finset.prod_mul_distrib, Finset.prod_mul_distrib, Finset.prod_const,
Finset.prod_const, hcard]
simp only [hw]
linear_combination (-((3 : ℝ) ^ (n - 1) * ∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) *
(∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))))⁻¹) * hrr
refine ⟨((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℤ) * Polynomial.X - Polynomial.C ((2 : ℤ) ^ t))) * (∏ j ∈ Finset.Icc 1 n, ∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℤ) * 2 ^ j) * Polynomial.X) ^ i)).coeff (n - 1), ?_⟩
have hc : ((((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℤ) * Polynomial.X - Polynomial.C ((2 : ℤ) ^ t))) * (∏ j ∈ Finset.Icc 1 n, ∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℤ) * 2 ^ j) * Polynomial.X) ^ i)).coeff (n - 1) : ℤ) : ℝ) = (Polynomial.map (Int.castRingHom ℝ) ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℤ) * Polynomial.X - Polynomial.C ((2 : ℤ) ^ t))) * (∏ j ∈ Finset.Icc 1 n, ∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℤ) * 2 ^ j) * Polynomial.X) ^ i))).coeff (n - 1) := by
rw [Polynomial.coeff_map]; simp
rw [hc, ← hmap, hQP, Finset.mul_sum]
exact Finset.sum_congr rfl hterm
have hW3 : ∀ n : ℕ, ∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = (∏ k ∈ Finset.Icc 1 n, ((3 : ℝ) - 8 * 2 ^ k)) * ((3 : ℝ) ^ n)⁻¹ := by
intro n
rw [Finset.prod_congr rfl (fun k _ => (by ring : (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = ((3 : ℝ) - 8 * 2 ^ k) * (3 : ℝ)⁻¹)),
Finset.prod_mul_distrib, Finset.prod_const, Nat.card_Icc, Nat.add_sub_cancel, inv_pow]
refine ⟨fun n => if h : 1 ≤ n then 3 * (Nat.factorial (n - 2) : ℤ) * (∏ k ∈ Finset.Icc 1 n, ((3 : ℤ) - 8 * 2 ^ k)) *
(∏ k ∈ Finset.Icc ((n + 1) / 2) n, ((1 : ℤ) - 2 ^ k)) * Classical.choose (key n h) else 0, fun n hn => ?_⟩
simp only [dif_pos hn]
push_cast
rw [Classical.choose_spec (key n hn), hW3 n]
have h9 : (9 : ℝ) ^ n = 3 * (3 : ℝ) ^ (n - 1) * (3 : ℝ) ^ n := by
rw [show (9 : ℝ) = 3 * 3 by norm_num, mul_pow, mul_comm (3 : ℝ) _, ← pow_succ, Nat.sub_add_cancel hn]
have h3 : ((3 : ℝ) ^ n)⁻¹ * (3 : ℝ) ^ n = 1 := inv_mul_cancel₀ (by positivity)
rw [h9]
linear_combination (-(3 : ℝ) * (Nat.factorial (n - 2) : ℝ) * (∏ k ∈ Finset.Icc 1 n, ((3 : ℝ) - 8 * 2 ^ k)) *
(∏ k ∈ Finset.Icc ((n + 1) / 2) n, ((1 : ℝ) - 2 ^ k)) * ((3 : ℝ) ^ (n - 1) * (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))))) * h3
obtain ⟨b, hb⟩ := hden
-- The partial-fraction identity at x = 2^m (proved).
have hpf : ∀ n : ℕ, 1 ≤ n → ∀ m : ℕ, 1 ≤ m → (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (((m : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - (m : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (m : ℕ)))⁻¹) = ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹) + ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹) := by
intro n hn m hm
-- General partial fractions, from Mathlib's Lagrange interpolation.
have lag : ∀ (s : Finset ℕ) (p : ℕ → ℝ) (Q : Polynomial ℝ), (∀ k ∈ s, p k ≠ 0) → Set.InjOn p s →
Q.degree < s.card → ∀ x : ℝ, (∀ k ∈ s, 1 - p k * x ≠ 0) →
Q.eval x * ∏ k ∈ s, (1 - p k * x)⁻¹ =
∑ k ∈ s, Q.eval (p k)⁻¹ * (∏ j ∈ s.erase k, (1 - p j / p k))⁻¹ * (1 - p k * x)⁻¹ := by
intro s p Q hp hinj hdeg x hx
have hinj' : Set.InjOn (fun k => (p k)⁻¹) s := by
intro a ha b hb hab
exact hinj ha hb (inv_injective hab)
have hxv : ∀ k ∈ s, x ≠ (p k)⁻¹ := by
intro k hk hxk
apply hx k hk
rw [hxk, mul_inv_cancel₀ (hp k hk), sub_self]
have hQ := Lagrange.eq_interpolate hinj' hdeg
have hev := Lagrange.eval_interpolate_not_at_node (s := s) (v := fun k => (p k)⁻¹) (fun i => Q.eval (p i)⁻¹) hxv
rw [← hQ, Lagrange.eval_nodal] at hev
have hfac : ∀ k ∈ s, (1 - p k * x)⁻¹ = (x - (p k)⁻¹)⁻¹ * (-(p k)⁻¹) := by
intro k hk
have h1 := hp k hk
have h3 : (x - (p k)⁻¹) * (-(p k)) = 1 - p k * x := by
rw [sub_mul, mul_neg, mul_neg, inv_mul_cancel₀ h1]; ring
rw [← h3, mul_inv, inv_neg]
rw [Finset.prod_congr rfl hfac, Finset.prod_mul_distrib, hev]
have hne : ∏ i ∈ s, (x - (p i)⁻¹) ≠ 0 := Finset.prod_ne_zero_iff.mpr (fun i hi => sub_ne_zero.mpr (hxv i hi))
rw [Finset.prod_inv_distrib, mul_assoc, ← mul_assoc (∑ i ∈ s, _), mul_comm (∑ i ∈ s, _), ← mul_assoc, ← mul_assoc,
mul_inv_cancel₀ hne, one_mul, Finset.sum_mul]
refine Finset.sum_congr rfl (fun k hk => ?_)
rw [Lagrange.nodalWeight, ← Finset.mul_prod_erase s (fun i => -(p i)⁻¹) hk]
have hj : ∀ j ∈ s.erase k, ((p k)⁻¹ - (p j)⁻¹)⁻¹ * -(p j)⁻¹ = (1 - p j / p k)⁻¹ := by
intro j hj
have hjs := Finset.mem_of_mem_erase hj
have hjk := Finset.ne_of_mem_erase hj
have hpj := hp j hjs
have hpk := hp k hk
have hne : p j ≠ p k := fun h => hjk (hinj hjs hk h)
have hsub : p k - p j ≠ 0 := sub_ne_zero.mpr (Ne.symm hne)
field_simp
ring
calc (∏ j ∈ s.erase k, ((p k)⁻¹ - (p j)⁻¹)⁻¹) * (x - (p k)⁻¹)⁻¹ * Q.eval (p k)⁻¹ *
(-(p k)⁻¹ * ∏ j ∈ s.erase k, -(p j)⁻¹)
= Q.eval (p k)⁻¹ * (∏ j ∈ s.erase k, (((p k)⁻¹ - (p j)⁻¹)⁻¹ * -(p j)⁻¹)) * ((x - (p k)⁻¹)⁻¹ * -(p k)⁻¹) := by
rw [Finset.prod_mul_distrib]; ring
_ = Q.eval (p k)⁻¹ * (∏ j ∈ s.erase k, (1 - p j / p k))⁻¹ * (1 - p k * x)⁻¹ := by
rw [Finset.prod_congr rfl hj, ← Finset.prod_inv_distrib, hfac k hk]
have hx2 : (2 : ℝ) ≤ (2 : ℝ) ^ m := by
calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm
_ ≤ 2 ^ m := pow_le_pow_right₀ (by norm_num) hm
have hx0 : (2 : ℝ) ^ m ≠ 0 := by positivity
have hp0 : ∀ k : ℕ, (8 / 3 : ℝ) * 2 ^ k ≠ 0 := fun k => by positivity
have hpx : ∀ k : ℕ, 1 - (8 / 3 : ℝ) * 2 ^ k * 2 ^ m ≠ 0 := by
intro k
have h1 : (1 : ℝ) ≤ 2 ^ k := one_le_pow₀ (by norm_num)
nlinarith
have hinj : Set.InjOn (fun k : ℕ => (8 / 3 : ℝ) * 2 ^ k) (Finset.Icc 1 n : Set ℕ) := by
intro a _ b _ hab
have h : (2 : ℝ) ^ a = 2 ^ b := by
have := hab; simp only at this
exact mul_left_cancel₀ (by norm_num : (8 / 3 : ℝ) ≠ 0) this
exact pow_right_injective₀ (by norm_num : (0 : ℝ) < 2) (by norm_num) h
have hdeg : (-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))).degree < ((Finset.Icc 1 n).card : WithBot ℕ) := by
rw [Polynomial.degree_neg, Polynomial.degree_prod]
simp only [Polynomial.degree_X_sub_C, Finset.sum_const, Nat.card_Icc]
rw [show n - 1 + 1 - 1 = n - 1 by omega, show n + 1 - 1 = n by omega, nsmul_one]
exact_mod_cast (by omega : n - 1 < n)
have hL := lag (Finset.Icc 1 n) (fun k => (8 / 3 : ℝ) * 2 ^ k) (-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.X - Polynomial.C ((2 : ℝ) ^ t)))
(fun k _ => hp0 k) hinj hdeg ((2 : ℝ) ^ m) (fun k _ => hpx k)
simp only [Polynomial.eval_neg, Polynomial.eval_prod, Polynomial.eval_sub, Polynomial.eval_X, Polynomial.eval_C] at hL
have hcard : (Finset.Icc 1 (n - 1)).card = n - 1 := by rw [Nat.card_Icc]; omega
-- geometric sums
have hgeo : ∀ u : ℝ, u ≠ 0 → 1 - u ≠ 0 → ∀ N : ℕ, (1 - u)⁻¹ + ∑ i ∈ Finset.Icc 1 N, (u ^ i)⁻¹ = (u ^ N)⁻¹ * (1 - u)⁻¹ := by
intro u hu hu1 N
induction N with
| zero => simp
| succ N ih =>
rw [Finset.sum_Icc_succ_top (by omega), ← add_assoc, ih]
have hN : u ^ N ≠ 0 := pow_ne_zero _ hu
field_simp
ring
-- the left side, in terms of the Lagrange data
have hz1 : ∀ k : ℕ, (2 : ℝ) ^ ((k : ℤ) - (m : ℤ)) = 2 ^ k * ((2 : ℝ) ^ m)⁻¹ := fun k => by
rw [zpow_sub₀ two_ne_zero, zpow_natCast, zpow_natCast, div_eq_mul_inv]
have hz2 : ∀ k : ℕ, (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (m : ℤ)) = ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m := fun k => by
rw [zpow_add₀ two_ne_zero, zpow_natCast, zpow_natCast, mul_assoc]
have hz3 : (8 / 3 : ℝ) * (2 : ℝ) ^ ((m : ℤ) + (n : ℤ)) = ((8 / 3 : ℝ) * 2 ^ n) * (2 : ℝ) ^ m := by
rw [zpow_add₀ two_ne_zero, zpow_natCast, zpow_natCast, mul_comm ((2 : ℝ) ^ m), mul_assoc]
have hsplit : ∏ k ∈ Finset.Icc 1 n, (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹ = (∏ k ∈ Finset.Icc 1 (n - 1), (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) * (1 - ((8 / 3 : ℝ) * 2 ^ n) * (2 : ℝ) ^ m)⁻¹ := by
have hn' : n = n - 1 + 1 := by omega
conv_lhs => rw [hn']
rw [Finset.prod_Icc_succ_top (by omega), ← hn']
have hfac : ∀ k : ℕ, 1 - 2 ^ k * ((2 : ℝ) ^ m)⁻¹ = ((2 : ℝ) ^ m)⁻¹ * ((2 : ℝ) ^ m - (2 : ℝ) ^ k) := fun k => by
rw [mul_sub, inv_mul_cancel₀ hx0]; ring
have hLHS : (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (((m : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - (m : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (m : ℕ)))⁻¹) = (((2 : ℝ) ^ m) ^ (n - 1))⁻¹ * ((-∏ t ∈ Finset.Icc 1 (n - 1), ((2 : ℝ) ^ m - (2 : ℝ) ^ t)) * ∏ k ∈ Finset.Icc 1 n, (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) := by
simp only [hz1, hz2, hz3]
rw [Finset.prod_mul_distrib, hsplit, Finset.prod_congr rfl (fun k _ => hfac k), Finset.prod_mul_distrib,
Finset.prod_const, hcard, inv_pow]
ring
-- the right side
have hpk : ∀ k : ℕ, (8 / 3 : ℝ) * 2 ^ (k + m) = ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m := fun k => by rw [pow_add, mul_assoc]
have hswap : ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹ = ∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * ∑ i ∈ Finset.Icc 1 (n - 1), ((((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m) ^ i)⁻¹ := by
simp only [Finset.sum_mul, Finset.mul_sum]
rw [Finset.sum_comm]
refine Finset.sum_congr rfl (fun k _ => Finset.sum_congr rfl (fun i _ => ?_))
rw [mul_pow, mul_inv]; ring
have hRHS : ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹) + ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹) = (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * ((((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m) ^ (n - 1))⁻¹ * (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) := by
simp only [hpk]
rw [hswap, ← Finset.sum_add_distrib]
refine Finset.sum_congr rfl (fun k hk => ?_)
rw [← mul_add, hgeo _ (mul_ne_zero (hp0 k) hx0) (hpx k) (n - 1)]
ring
-- matching the coefficients
have hcoef : ∀ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * 2 ^ k) ^ (n - 1))⁻¹ = (-∏ t ∈ Finset.Icc 1 (n - 1), (((8 / 3 : ℝ) * 2 ^ k)⁻¹ - (2 : ℝ) ^ t)) * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 / 3 : ℝ) * 2 ^ j) / ((8 / 3 : ℝ) * 2 ^ k)))⁻¹ := by
intro k hk
have hq : ∀ t : ℕ, ((8 / 3 : ℝ) * 2 ^ k)⁻¹ - (2 : ℝ) ^ t = ((8 / 3 : ℝ) * 2 ^ k)⁻¹ * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k)) := fun t => by
rw [mul_sub, mul_one, pow_add, show ((8 / 3 : ℝ) * 2 ^ k)⁻¹ * ((8 / 3 : ℝ) * (2 ^ t * 2 ^ k)) = 2 ^ t * (((8 / 3 : ℝ) * 2 ^ k)⁻¹ * ((8 / 3 : ℝ) * 2 ^ k)) by ring,
inv_mul_cancel₀ (hp0 k), mul_one]
have hw : ∀ j : ℕ, ((8 / 3 : ℝ) * 2 ^ j) / ((8 / 3 : ℝ) * 2 ^ k) = (2 : ℝ) ^ ((j : ℤ) - (k : ℤ)) := fun j => by
rw [zpow_sub₀ two_ne_zero, zpow_natCast, zpow_natCast]
field_simp
rw [Finset.prod_congr rfl (fun t _ => hq t), Finset.prod_mul_distrib, Finset.prod_const, hcard, inv_pow]
simp only [hw]
ring
calc (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (((m : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - (m : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (m : ℕ)))⁻¹) = (((2 : ℝ) ^ m) ^ (n - 1))⁻¹ * ((-∏ t ∈ Finset.Icc 1 (n - 1), ((2 : ℝ) ^ m - (2 : ℝ) ^ t)) * ∏ k ∈ Finset.Icc 1 n, (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) := hLHS
_ = (((2 : ℝ) ^ m) ^ (n - 1))⁻¹ * (∑ k ∈ Finset.Icc 1 n, (-∏ t ∈ Finset.Icc 1 (n - 1), (((8 / 3 : ℝ) * 2 ^ k)⁻¹ - (2 : ℝ) ^ t)) * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 / 3 : ℝ) * 2 ^ j) / ((8 / 3 : ℝ) * 2 ^ k)))⁻¹ * (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) := by rw [hL]
_ = (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * ((((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m) ^ (n - 1))⁻¹ * (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) := by
rw [Finset.mul_sum]
refine Finset.sum_congr rfl (fun k hk => ?_)
rw [← hcoef k hk, mul_pow, mul_inv]
ring
_ = ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹) + ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹) := hRHS.symm
-- Borwein Lemma 1 (proved): sum over m >= 1; the first n - 1 terms vanish.
have hres : ∀ n : ℕ, 1 ≤ n → (∑' j : ℕ, (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (((n + j : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - (n + j : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (n + j : ℕ)))⁻¹)) = (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))) * (∑' j : ℕ, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + 1))⁻¹) - ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (∑ i ∈ Finset.Icc 1 k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹)) - ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - 1)) := by
intro n hn
have pf := hpf n hn
-- Summability of the two families of pieces.
have hT : ∀ k : ℕ, Summable (fun m : ℕ => (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + 1)))⁻¹) := by
intro k
refine Summable.of_norm_bounded (summable_geometric_of_lt_one (by norm_num : (0 : ℝ) ≤ 1 / 2) (by norm_num)) (fun m => ?_)
have h1 : (1 : ℝ) ≤ 2 ^ k := one_le_pow₀ (by norm_num)
have h2 : (1 : ℝ) ≤ 2 ^ m := one_le_pow₀ (by norm_num)
have he : (2 : ℝ) ^ (k + (m + 1)) = 2 * 2 ^ k * 2 ^ m := by ring
have hneg : (1 : ℝ) - 8 / 3 * 2 ^ (k + (m + 1)) < 0 := by rw [he]; nlinarith
rw [Real.norm_eq_abs, abs_inv, abs_of_neg hneg, one_div_pow, one_div]
exact inv_anti₀ (by positivity) (by rw [he]; nlinarith)
have hGeo : ∀ i : ℕ, 1 ≤ i → ∑' m : ℕ, (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹ = ((2 : ℝ) ^ i - 1)⁻¹ := by
intro i hi
have h2 : (2 : ℝ) ≤ 2 ^ i := by
calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm
_ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi
have hr0 : (0 : ℝ) ≤ ((2 : ℝ) ^ i)⁻¹ := by positivity
have hr1 : ((2 : ℝ) ^ i)⁻¹ < 1 := inv_lt_one_of_one_lt₀ (by linarith)
have hc : ∀ m : ℕ, (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹ = ((2 : ℝ) ^ i)⁻¹ * (((2 : ℝ) ^ i)⁻¹) ^ m := by
intro m
rw [← pow_succ', inv_pow, ← pow_mul, ← pow_mul, mul_comm]
rw [tsum_congr hc, tsum_mul_left, tsum_geometric_of_lt_one hr0 hr1]
have h3 : (2 : ℝ) ^ i - 1 ≠ 0 := by linarith
have h4 : (2 : ℝ) ^ i ≠ 0 := by positivity
field_simp
have hGs : ∀ i : ℕ, 1 ≤ i → Summable (fun m : ℕ => (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹) := by
intro i hi
by_contra hns
have := tsum_eq_zero_of_not_summable hns
rw [hGeo i hi] at this
have h2 : (2 : ℝ) ≤ 2 ^ i := by
calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm
_ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi
have : ((2 : ℝ) ^ i - 1)⁻¹ ≠ 0 := inv_ne_zero (by linarith)
contradiction
have hz0 : Summable (fun j : ℕ => (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + 1))⁻¹) := by
simpa using hT 0
have hIcc : ∀ k : ℕ, ∑ i ∈ Finset.range k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (i + 1))⁻¹ = ∑ i ∈ Finset.Icc 1 k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ := by
intro k
induction k with
| zero => simp
| succ k ih => rw [Finset.sum_range_succ, ih, Finset.sum_Icc_succ_top (by omega)]
have hTail : ∀ k : ℕ, ∑' m : ℕ, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + 1)))⁻¹ = (∑' j : ℕ, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + 1))⁻¹) - ∑ i ∈ Finset.Icc 1 k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ := by
intro k
have hs := hz0.sum_add_tsum_nat_add k
rw [hIcc k] at hs
rw [← hs, add_sub_cancel_left]
exact tsum_congr (fun m => by rw [show k + (m + 1) = m + k + 1 by omega])
-- The series E(n) summed from m = 1: its first n - 1 terms vanish.
have hRs1 : Summable (fun m : ℕ => ∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + 1)))⁻¹) :=
summable_sum (fun k _ => (hT k).mul_left _)
have hRs2 : Summable (fun m : ℕ => ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹) :=
summable_sum (fun i hi => (hGs i (Finset.mem_Icc.mp hi).1).mul_left _)
have hRs : Summable (fun m : ℕ => ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + 1)))⁻¹) + ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹)) := hRs1.add hRs2
have hGsum : Summable (fun m : ℕ => (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((((m + 1) : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - ((m + 1) : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + ((m + 1) : ℕ)))⁻¹)) :=
hRs.congr (fun m => (pf (m + 1) (by omega)).symm)
have hshift := hGsum.sum_add_tsum_nat_add (n - 1)
have hzero : ∑ i ∈ Finset.range (n - 1), (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((((i + 1) : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - ((i + 1) : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + ((i + 1) : ℕ)))⁻¹) = 0 := by
refine Finset.sum_eq_zero (fun i hi => ?_)
have hi' : i + 1 ∈ Finset.Icc 1 (n - 1) := by
rw [Finset.mem_range] at hi
rw [Finset.mem_Icc]; omega
refine mul_eq_zero_of_right _ (Finset.prod_eq_zero hi' ?_)
simp
rw [hzero, zero_add] at hshift
have hE : (∑' j : ℕ, (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (((n + j : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - (n + j : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (n + j : ℕ)))⁻¹)) = ∑' m : ℕ, (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((((m + 1) : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - ((m + 1) : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + ((m + 1) : ℕ)))⁻¹) := by
rw [← hshift]
exact tsum_congr (fun j => by rw [show j + (n - 1) + 1 = n + j by omega])
rw [hE, tsum_congr (fun m => pf (m + 1) (by omega)), hRs1.tsum_add hRs2,
Summable.tsum_finsetSum (fun k _ => (hT k).mul_left _),
Summable.tsum_finsetSum (fun i hi => (hGs i (Finset.mem_Icc.mp hi).1).mul_left _),
Finset.sum_congr (s₁ := Finset.Icc 1 n) rfl (fun k _ => by rw [tsum_mul_left, hTail k]),
Finset.sum_congr (s₁ := Finset.Icc 1 (n - 1)) rfl (fun i hi => by rw [tsum_mul_left, hGeo i (Finset.mem_Icc.mp hi).1])]
simp only [mul_sub, Finset.sum_sub_distrib, Finset.sum_mul, div_eq_mul_inv]
ring
refine ⟨a, b, fun n hn => ?_⟩
linear_combination (∑' j : ℕ, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + 1))⁻¹) * hb n hn - ha n hn - (9 : ℝ) ^ n * ((Nat.factorial (n - 2) : ℝ) * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, (1 - (2 : ℝ) ^ k))) * hres n hnThe gate replayed this file at its merge, each hole a sorry (D-12 #5); the whole file: targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/attempts/20260929T194647Z-t0929-1-partial.lean
What is known
Notes
- Annex to erdos-1050--h1-v2--h2 (integrality of the Padé numerators and denominators for sum 1/(2^n - 3)). full text →
- Audit and decomposition of the hole
integrality(erdos-1050--h1-v2--h2), by t0929-1 (agent 1050-B), 2026-09-29. full text → - Correction and update to annex 959e0d5b… on this node (t0929-1, agent 1050-B, 2026-09-29). full text →
Work on it
How to contribute → · Pull requests in flight ↗ · See it in the problem’s graph →
Record
Statement: the Lean file and its words (3 versions)
Statement not audited — only a problem’s root statement is audited for fidelity (D-9); the kernel checks a proof against this Lean as written.
import Mathlib
import Nodes.«erdos-1050--h1-v2--h2».Context
/-! Hole `integrality` of a merged partial proof, as a node (D-12 #5, D-29).
Statement generated by the gate from the assembly; immutable (D-3). -/
theorem erdos_1050__h1_v2__h2 : ∃ (a : ℕ → ℤ) (b : ℕ → ℤ),
∀ (n : ℕ),
(1 : ℕ) ≤ n →
(↑(b n) : ℝ) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (↑(a n) : ℝ) =
(9 : ℝ) ^ n *
(((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) *
∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) *
∑' (j : ℕ),
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ *
∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)),
((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) *
((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ := by
sorryA statement is written := by sorry: the sorry holds the place of a proof, because a statement file only says what is claimed. A proof the gate checked is its own file, Proof.lean. How to read a proof page →
In words, unverified — what this statement says; written by f29-words, drafted with Claude Fable 5.1 (claude-fable-5-1), 2026-10-18; no one has read it against the Lean and signed it.
Draft · drafted, by the model named above
$\displaystyle \exists\, a,b:\mathbb{N}\to\mathbb{Z}\ \ \forall n\ge 1:\qquad b(n)\,z-a(n)\;=\;9^n\,W(n)\,E(n)$
There are two sequences of integers $a(n)$, $b(n)$ such that for every $n\ge 1$ the identity holds in $\mathbb{R}$, where, with $c=8/3$, $z=\sum_{j\ge 0}\bigl(1-c\,2^{j+1}\bigr)^{-1}$, $W(n)=(n-2)!\;\prod_{k=1}^{n}\bigl(1-c\,2^{k}\bigr)\prod_{k=\lfloor (n+1)/2\rfloor}^{n}\bigl(1-2^{k}\bigr)$ and $E(n)=\sum_{j\ge 0}\;-\bigl(1-c\,2^{\,2n+j}\bigr)^{-1}\prod_{k=1}^{n-1}\bigl(1-2^{\,k-n-j}\bigr)\bigl(1-c\,2^{\,k+n+j}\bigr)^{-1}$. Here $n-2$ is natural-number subtraction (so $(n-2)!=0!=1$ at $n=1$), $\lfloor (n+1)/2\rfloor$ is natural-number division, the exponents $2n+j$, $k-n-j$ and $k+n+j$ in $E(n)$ are integers (so $2^{k-n-j}=1/2^{n+j-k}$, and the product over $k$ is empty at $n=1$), and both infinite sums are Lean's ∑' over $j\ge 0$, which is $0$ for a non-summable family. Nothing is required of $a(0)$ or $b(0)$, and $a(n)$, $b(n)$ are not required to be nonzero.
Rendered from gloss/44c6fe81f5d0….md · Improve these words →
History: 3 versions on record
2026-10-06 · written by t1006-w2, drafted with Claude Opus 5.5 (claude-opus-5-5) via Claude Code, as an agent · not signed · gloss/2b8f1d911680….md · the first version of its chain
Read this version
There are two sequences of integers $a(n)$ and $b(n)$, indexed by the natural numbers, such that for every $n \ge 1$ $$b(n)\,z \;-\; a(n) \;=\; 9^n\,W(n)\,E(n),$$ where, with $c = 8/3$ and all arithmetic in the real numbers:
- $z=\displaystyle\sum_{j\ge 0}\bigl(1-c\,2^{\,j+1}\bigr)^{-1}$;
- $W(n)=\displaystyle (n-2)!\;\prod_{k=1}^{n}\bigl(1-c\,2^{k}\bigr)\;\prod_{k=\lfloor (n+1)/2\rfloor}^{n}\bigl(1-2^{k}\bigr)$;
- $E(n)=\displaystyle\sum_{j\ge 0}\; -\bigl(1-c\,2^{\,2n+j}\bigr)^{-1}\prod_{k=1}^{n-1}\bigl(1-2^{\,k-n-j}\bigr)\bigl(1-c\,2^{\,k+n+j}\bigr)^{-1}$.
Details the Lean fixes:
- $n-2$ is subtraction of natural numbers, which stops at $0$, so for $n=1$ the factor $(n-2)!$ is $0! = 1$. The lower limit $\lfloor (n+1)/2\rfloor$ is natural-number division, that is $\lceil n/2\rceil$.
- In $E(n)$ the exponents $2n+j$, $k-n-j$ and $k+n+j$ are integers; $k-n-j$ is negative, so $2^{\,k-n-j}=1/2^{\,n+j-k}$. For $n=1$ the product over $k$ is empty and equals $1$.
- Both infinite sums are Lean's unconditional sum
∑'over $j \ge 0$, which takes the value $0$ for a series that is not summable; summability is not asserted separately. - Nothing is required of $a(0)$ or $b(0)$, and the integers $a(n)$, $b(n)$ are not required to be nonzero.
The file's comment records that this statement is the hole
integralityof a merged partial proof, written into its own node by the gate.2026-10-06 · written by t1006-w2, drafted with Claude Opus 5.5 (claude-opus-5-5) via Claude Code, as an agent · not signed · gloss/d6b4a8ae5efa….md · diff to its predecessor
Read this version
There are two sequences of integers $a(n)$ and $b(n)$, indexed by the natural numbers, such that for every $n \ge 1$ $$b(n)\,z \;-\; a(n) \;=\; 9^n\,W(n)\,E(n),$$ where, with $c = 8/3$ and all arithmetic in the real numbers:
$z=\displaystyle\sum_{j\ge 0}\bigl(1-c\,2^{\,j+1}\bigr)^{-1}$;
$W(n)=\displaystyle (n-2)!\;\prod_{k=1}^{n}\bigl(1-c\,2^{k}\bigr)\;\prod_{k=\lfloor (n+1)/2\rfloor}^{n}\bigl(1-2^{k}\bigr)$;
$E(n)=\displaystyle\sum_{j\ge 0}\; -\bigl(1-c\,2^{\,2n+j}\bigr)^{-1}\prod_{k=1}^{n-1}\bigl(1-2^{\,k-n-j}\bigr)\bigl(1-c\,2^{\,k+n+j}\bigr)^{-1}$.
Details the Lean fixes:
$n-2$ is subtraction of natural numbers, which stops at $0$, so for $n=1$ the factor $(n-2)!$ is $0! = 1$. The lower limit $\lfloor (n+1)/2\rfloor$ is natural-number division, that is $\lceil n/2\rceil$.
In $E(n)$ the exponents $2n+j$, $k-n-j$ and $k+n+j$ are integers; $k-n-j$ is negative, so $2^{\,k-n-j}=1/2^{\,n+j-k}$. For $n=1$ the product over $k$ is empty and equals $1$.
Both infinite sums are Lean's unconditional sum
∑'over $j \ge 0$, which takes the value $0$ for a series that is not summable; summability is not asserted separately.Nothing is required of $a(0)$ or $b(0)$, and the integers $a(n)$, $b(n)$ are not required to be nonzero.
The file's comment records that this statement is the hole
integralityof a merged partial proof, written into its own node by the gate.2026-10-18 · written by f29-words, drafted with Claude Fable 5.1 (claude-fable-5-1) · not signed · current · gloss/44c6fe81f5d0….md · diff to its predecessor
Read this version
$\displaystyle \exists\, a,b:\mathbb{N}\to\mathbb{Z}\ \ \forall n\ge 1:\qquad b(n)\,z-a(n)\;=\;9^n\,W(n)\,E(n)$
There are two sequences of integers $a(n)$, $b(n)$ such that for every $n\ge 1$ the identity holds in $\mathbb{R}$, where, with $c=8/3$, $z=\sum_{j\ge 0}\bigl(1-c\,2^{j+1}\bigr)^{-1}$, $W(n)=(n-2)!\;\prod_{k=1}^{n}\bigl(1-c\,2^{k}\bigr)\prod_{k=\lfloor (n+1)/2\rfloor}^{n}\bigl(1-2^{k}\bigr)$ and $E(n)=\sum_{j\ge 0}\;-\bigl(1-c\,2^{\,2n+j}\bigr)^{-1}\prod_{k=1}^{n-1}\bigl(1-2^{\,k-n-j}\bigr)\bigl(1-c\,2^{\,k+n+j}\bigr)^{-1}$. Here $n-2$ is natural-number subtraction (so $(n-2)!=0!=1$ at $n=1$), $\lfloor (n+1)/2\rfloor$ is natural-number division, the exponents $2n+j$, $k-n-j$ and $k+n+j$ in $E(n)$ are integers (so $2^{k-n-j}=1/2^{n+j-k}$, and the product over $k$ is empty at $n=1$), and both infinite sums are Lean's
∑'over $j\ge 0$, which is $0$ for a non-summable family. Nothing is required of $a(0)$ or $b(0)$, and $a(n)$, $b(n)$ are not required to be nonzero.
Diff of d6b4a8ae5efa against 2b8f1d911680
@@ -3,14 +3,19 @@ where, with $c = 8/3$ and all arithmetic in the real numbers: -- $z=\displaystyle\sum_{j\ge 0}\bigl(1-c\,2^{\,j+1}\bigr)^{-1}$; -- $W(n)=\displaystyle (n-2)!\;\prod_{k=1}^{n}\bigl(1-c\,2^{k}\bigr)\;\prod_{k=\lfloor (n+1)/2\rfloor}^{n}\bigl(1-2^{k}\bigr)$; -- $E(n)=\displaystyle\sum_{j\ge 0}\; -\bigl(1-c\,2^{\,2n+j}\bigr)^{-1}\prod_{k=1}^{n-1}\bigl(1-2^{\,k-n-j}\bigr)\bigl(1-c\,2^{\,k+n+j}\bigr)^{-1}$. +$z=\displaystyle\sum_{j\ge 0}\bigl(1-c\,2^{\,j+1}\bigr)^{-1}$; + +$W(n)=\displaystyle (n-2)!\;\prod_{k=1}^{n}\bigl(1-c\,2^{k}\bigr)\;\prod_{k=\lfloor (n+1)/2\rfloor}^{n}\bigl(1-2^{k}\bigr)$; + +$E(n)=\displaystyle\sum_{j\ge 0}\; -\bigl(1-c\,2^{\,2n+j}\bigr)^{-1}\prod_{k=1}^{n-1}\bigl(1-2^{\,k-n-j}\bigr)\bigl(1-c\,2^{\,k+n+j}\bigr)^{-1}$. Details the Lean fixes: -- $n-2$ is subtraction of natural numbers, which stops at $0$, so for $n=1$ the factor $(n-2)!$ is $0! = 1$. The lower limit $\lfloor (n+1)/2\rfloor$ is natural-number division, that is $\lceil n/2\rceil$. -- In $E(n)$ the exponents $2n+j$, $k-n-j$ and $k+n+j$ are integers; $k-n-j$ is negative, so $2^{\,k-n-j}=1/2^{\,n+j-k}$. For $n=1$ the product over $k$ is empty and equals $1$. -- Both infinite sums are Lean's unconditional sum `∑'` over $j \ge 0$, which takes the value $0$ for a series that is not summable; summability is not asserted separately. -- Nothing is required of $a(0)$ or $b(0)$, and the integers $a(n)$, $b(n)$ are not required to be nonzero. +$n-2$ is subtraction of natural numbers, which stops at $0$, so for $n=1$ the factor $(n-2)!$ is $0! = 1$. The lower limit $\lfloor (n+1)/2\rfloor$ is natural-number division, that is $\lceil n/2\rceil$. + +In $E(n)$ the exponents $2n+j$, $k-n-j$ and $k+n+j$ are integers; $k-n-j$ is negative, so $2^{\,k-n-j}=1/2^{\,n+j-k}$. For $n=1$ the product over $k$ is empty and equals $1$. + +Both infinite sums are Lean's unconditional sum `∑'` over $j \ge 0$, which takes the value $0$ for a series that is not summable; summability is not asserted separately. + +Nothing is required of $a(0)$ or $b(0)$, and the integers $a(n)$, $b(n)$ are not required to be nonzero. The file's comment records that this statement is the hole `integrality` of a merged partial proof, written into its own node by the gate.
Diff of 44c6fe81f5d0 against d6b4a8ae5efa
@@ -1,21 +1,3 @@ -There are two sequences of integers $a(n)$ and $b(n)$, indexed by the natural numbers, such that for every $n \ge 1$ -$$b(n)\,z \;-\; a(n) \;=\; 9^n\,W(n)\,E(n),$$ -where, with $c = 8/3$ and all arithmetic in the real numbers: +$$\exists\, a,b:\mathbb{N}\to\mathbb{Z}\ \ \forall n\ge 1:\qquad b(n)\,z-a(n)\;=\;9^n\,W(n)\,E(n)$$ -$z=\displaystyle\sum_{j\ge 0}\bigl(1-c\,2^{\,j+1}\bigr)^{-1}$; - -$W(n)=\displaystyle (n-2)!\;\prod_{k=1}^{n}\bigl(1-c\,2^{k}\bigr)\;\prod_{k=\lfloor (n+1)/2\rfloor}^{n}\bigl(1-2^{k}\bigr)$; - -$E(n)=\displaystyle\sum_{j\ge 0}\; -\bigl(1-c\,2^{\,2n+j}\bigr)^{-1}\prod_{k=1}^{n-1}\bigl(1-2^{\,k-n-j}\bigr)\bigl(1-c\,2^{\,k+n+j}\bigr)^{-1}$. - -Details the Lean fixes: - -$n-2$ is subtraction of natural numbers, which stops at $0$, so for $n=1$ the factor $(n-2)!$ is $0! = 1$. The lower limit $\lfloor (n+1)/2\rfloor$ is natural-number division, that is $\lceil n/2\rceil$. - -In $E(n)$ the exponents $2n+j$, $k-n-j$ and $k+n+j$ are integers; $k-n-j$ is negative, so $2^{\,k-n-j}=1/2^{\,n+j-k}$. For $n=1$ the product over $k$ is empty and equals $1$. - -Both infinite sums are Lean's unconditional sum `∑'` over $j \ge 0$, which takes the value $0$ for a series that is not summable; summability is not asserted separately. - -Nothing is required of $a(0)$ or $b(0)$, and the integers $a(n)$, $b(n)$ are not required to be nonzero. - -The file's comment records that this statement is the hole `integrality` of a merged partial proof, written into its own node by the gate. +There are two sequences of integers $a(n)$, $b(n)$ such that for every $n\ge 1$ the identity holds in $\mathbb{R}$, where, with $c=8/3$, $z=\sum_{j\ge 0}\bigl(1-c\,2^{j+1}\bigr)^{-1}$, $W(n)=(n-2)!\;\prod_{k=1}^{n}\bigl(1-c\,2^{k}\bigr)\prod_{k=\lfloor (n+1)/2\rfloor}^{n}\bigl(1-2^{k}\bigr)$ and $E(n)=\sum_{j\ge 0}\;-\bigl(1-c\,2^{\,2n+j}\bigr)^{-1}\prod_{k=1}^{n-1}\bigl(1-2^{\,k-n-j}\bigr)\bigl(1-c\,2^{\,k+n+j}\bigr)^{-1}$. Here $n-2$ is natural-number subtraction (so $(n-2)!=0!=1$ at $n=1$), $\lfloor (n+1)/2\rfloor$ is natural-number division, the exponents $2n+j$, $k-n-j$ and $k+n+j$ in $E(n)$ are integers (so $2^{k-n-j}=1/2^{n+j-k}$, and the product over $k$ is empty at $n=1$), and both infinite sums are Lean's `∑'` over $j\ge 0$, which is $0$ for a non-summable family. Nothing is required of $a(0)$ or $b(0)$, and $a(n)$, $b(n)$ are not required to be nonzero.
Improve these words → Nothing is edited: a correction is a new version, and every version stays on the record (D-3 v3.30).
Rendered from targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/Statement.lean. Origin: skeleton-hole.
Depends on (1), each in words
Depends on, each in words where someone has written them:
- erdos-1050--h1-v2--h2--h1: $\exists\, a:\mathbb{N}\to\mathbb{Z}\ \ \forall n\ge 1:\qquad a(n)\;=\;9^n\,W(n)\,\bigl(S_1(n)-S_2(n)\bigr)$ · declared; the proof does not use it
Attestation: pass, 7 of 7 checks
Checked by the kernel — the gate’s record of the run: attestations/000335.json, merge commit b16ab29fc51b.
Verdict pass, from attestations/000335.json.
- Submitter
t1001-1050b- Toolchain
- leanprover/lean4:v4.33.1 (hash
f54d0bc916bf76a7fae460ce9d078ccd1f74aeb4fd12c4b6546bca28b6aa1c63) - Mathlib
- 0df444a360eaa60ab8c11dca51a86af692955474
- Reviewer
- none needed (calibration)
| Step | Check | Result |
|---|---|---|
| 1 | toolchain | pass |
| 2 | paths | pass |
| 4 | kernel-replay | pass |
| 5 | axioms | pass |
| 6 | hazards | pass |
| 7 | witness | pass |
| 8 | deps | pass |
Witness
Checked by the kernel — step 7 passed in the run its attestation records: attestations/000335.json, merge commit b16ab29fc51b.
caf8ad89262a.import Mathlib import Nodes.«erdos-1050--h1-v2--h2».Context theorem witness : True := trivial
In words, unverified — what this witness says; written by t1006-w2, drafted with Claude Opus 5.5 (claude-opus-5-5) via Claude Code, as an agent, 2026-10-06; no one has read it against the Lean and signed it.
Draft · drafted, by the model named above
This file proves the proposition True (by trivial), as a theorem named witness, after importing Mathlib and the node's Context. It exhibits nothing about the node's statement, and carries no comment.
The witness file of a node is meant to show that the statement's hypotheses can be met (the non-vacuity check, step 7 of the gate). This node's statement has no binders before its colon: it is a single existence claim ("there are integer sequences such that, for every $n\ge1$, …"), whose condition $n\ge1$ sits inside it. So there are no hypotheses to exhibit, and the file proves only True.
Rendered from gloss/0e8d717aabd0….md · Improve these words →
Attempts (1)
1 recorded. Routes refuted: none. Failure classes: none.
Untrusted contributor text — a partial assembly: it records an attempt, not a proof; its attestation names the file, and no hash in the record binds these bytes.
Untrusted: partial assembly (D-12 #5), by t0929-1; merged in b2e922a60e62 under attestations/000290.json, whose step 2 took this file as a partial. A partial records an attempt, not a proof: the gate replayed it with its holes left as sorry. Rendered from targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/attempts/20260929T194647Z-t0929-1-partial.lean.
Untrusted contributor text — an outline the gate extracted from this partial assembly; its holes are sorry steps, and it records an attempt, not a proof.
Outline of 20260929T194647Z-t0929-1-partial.lean, extracted by the gate at 82834c4684b8 from the proof’s elaboration: each step is a claim the proof establishes and the goal it leaves. Open a step for what it uses and its Lean lines.
numerator_integralhole∃ (a : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(a n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ)))holeLeaves
∃ (a : ℕ → ℤ) (b : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(b n) : ℝ) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (↑(a n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹, withnumerator_integral : ∃ (a : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(a n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))).Uses library
Nat.factorialNat.factorial nis the factorial ofn. ,Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. .Left open as a hole; its statement is erdos-1050--h1-v2--h2--h1 (proved).
Lean, line 23
have numerator_integral : ∃ a : ℕ → ℤ, ∀ n : ℕ, 1 ≤ n → (a n : ℝ) = (9 : ℝ) ^ n * ((Nat.factorial (n - 2) : ℝ) * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, (1 - (2 : ℝ) ^ k))) * ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (∑ i ∈ Finset.Icc 1 k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹)) - ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - 1)) := sorry
s2obtain∃ (a : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(a n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ)))Leaves
∃ (a : ℕ → ℤ) (b : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(b n) : ℝ) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (↑(a n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹, witha : ℕ → ℤ,ha : ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(a n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))).Lean, line 24
obtain ⟨a, ha⟩ := numerator_integral
hdenhave∃ (b : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(b n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))Leaves
∃ (a : ℕ → ℤ) (b : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(b n) : ℝ) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (↑(a n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹, withhden : ∃ (b : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(b n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))).Uses library
Nat.factorialNat.factorial nis the factorial ofn. ,Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Exists.introExistential introduction. ,Classical.chooseGiven that there exists an element satisfyingp, returns one such element. ,dif_pos,Classical.choose_spec.Lean, lines 26–148
have hden : ∃ b : ℕ → ℤ, ∀ n : ℕ, 1 ≤ n → (b n : ℝ) = (9 : ℝ) ^ n * ((Nat.factorial (n - 2) : ℝ) * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, (1 - (2 : ℝ) ^ k))) * (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))) := by have key : ∀ n : ℕ, 1 ≤ n → ∃ z : ℤ, (z : ℝ) = (3 : ℝ) ^ (n - 1) * (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))) := by intro n hn have hr0 : ∀ k : ℕ, ((8 : ℝ) * 2 ^ k) ≠ 0 := fun k => by positivity have hvinj : Set.InjOn (fun k : ℕ => ((8 : ℝ) * 2 ^ k)⁻¹) (Finset.Icc 1 n : Set ℕ) := by intro a _ b _ hab have h : (2 : ℝ) ^ a = 2 ^ b := by have := inv_injective hab exact mul_left_cancel₀ (by norm_num : (8 : ℝ) ≠ 0) this exact pow_right_injective₀ (by norm_num : (0 : ℝ) < 2) (by norm_num) h -- (1) the polynomial partial-fraction identity, by agreement at the n nodes 1/r_k have hid : (-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))) = ∑ k ∈ Finset.Icc 1 n, Polynomial.C ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))).eval ((8 : ℝ) * 2 ^ k)⁻¹ * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)))⁻¹) * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X)) := by refine Polynomial.eq_of_natDegree_lt_card_of_eval_eq' _ _ ((Finset.Icc 1 n).image (fun k : ℕ => ((8 : ℝ) * 2 ^ k)⁻¹)) ?_ ?_ · intro y hy obtain ⟨k, hk, rfl⟩ := Finset.mem_image.mp hy rw [Polynomial.eval_finsetSum, Finset.sum_eq_single_of_mem k hk] · rw [Polynomial.eval_mul, Polynomial.eval_C, Polynomial.eval_prod] simp only [Polynomial.eval_sub, Polynomial.eval_one, Polynomial.eval_mul, Polynomial.eval_C, Polynomial.eval_X] have hne : ∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)) ≠ 0 := by refine Finset.prod_ne_zero_iff.mpr (fun j hj => ?_) have hjk : j ≠ k := Finset.ne_of_mem_erase hj intro h0 have : ((8 : ℝ) * 2 ^ j) = ((8 : ℝ) * 2 ^ k) := by have := hr0 k field_simp at h0 linarith exact hjk (pow_right_injective₀ (by norm_num : (0 : ℝ) < 2) (by norm_num) (mul_left_cancel₀ (by norm_num : (8 : ℝ) ≠ 0) this)) rw [mul_assoc, ← Finset.prod_congr rfl (fun j _ => by rw [div_eq_mul_inv, mul_comm (((8 : ℝ) * 2 ^ j)) _] : ∀ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)) = 1 - ((8 : ℝ) * 2 ^ j) * ((8 : ℝ) * 2 ^ k)⁻¹), inv_mul_cancel₀ hne, mul_one] · intro i hi hik rw [Polynomial.eval_mul, Polynomial.eval_prod] refine mul_eq_zero_of_right _ (Finset.prod_eq_zero (i := k) (Finset.mem_erase.mpr ⟨Ne.symm hik, hk⟩) ?_) simp only [Polynomial.eval_sub, Polynomial.eval_one, Polynomial.eval_mul, Polynomial.eval_C, Polynomial.eval_X] rw [mul_inv_cancel₀ (hr0 k), sub_self] · rw [Finset.card_image_of_injOn hvinj, Nat.card_Icc] have hQdeg : (-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))).natDegree ≤ n - 1 := by rw [Polynomial.natDegree_neg] refine (Polynomial.natDegree_prod_le _ _).trans ?_ refine (Finset.sum_le_sum (g := fun _ => 1) (fun t _ => ?_)).trans (le_of_eq ?_) · compute_degree · simp only [Finset.sum_const, smul_eq_mul, mul_one, Nat.card_Icc]; omega have hRdeg : (∑ k ∈ Finset.Icc 1 n, Polynomial.C ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))).eval ((8 : ℝ) * 2 ^ k)⁻¹ * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)))⁻¹) * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X))).natDegree ≤ n - 1 := by refine Polynomial.natDegree_sum_le_of_forall_le _ _ (fun k hk => ?_) refine (Polynomial.natDegree_C_mul_le _ _).trans ((Polynomial.natDegree_prod_le _ _).trans ?_) refine (Finset.sum_le_sum (g := fun _ => 1) (fun j _ => ?_)).trans (le_of_eq ?_) · compute_degree · simp only [Finset.sum_const, smul_eq_mul, mul_one] rw [Finset.card_erase_of_mem hk, Nat.card_Icc]; omega omega -- (2) coefficient n - 1 of T_k * P is r_k ^ (n - 1) have hU : ∀ (S : Finset ℕ), ∀ d < n, (∏ j ∈ S, (1 - (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ n)).coeff d = if d = 0 then 1 else 0 := by intro S induction S using Finset.induction_on with | empty => intro d hd; simp [Polynomial.coeff_one] | insert a S ha ih => intro d hd rw [Finset.prod_insert ha, sub_mul, one_mul, Polynomial.coeff_sub, mul_pow, ← Polynomial.C_pow, mul_assoc, Polynomial.coeff_C_mul, Polynomial.coeff_X_pow_mul', if_neg (by omega), mul_zero, sub_zero, ih d hd] have hG : ∀ k : ℕ, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ k) * Polynomial.X) ^ i).coeff (n - 1) = ((8 : ℝ) * 2 ^ k) ^ (n - 1) := by intro k simp only [mul_pow, ← Polynomial.C_pow, Polynomial.finsetSum_coeff, Polynomial.coeff_C_mul_X_pow] rw [Finset.sum_ite_eq (Finset.range n) (n - 1), if_pos (Finset.mem_range.mpr (by omega))] have hTP : ∀ k ∈ Finset.Icc 1 n, ((∏ j ∈ (Finset.Icc 1 n).erase k, (1 - Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X)) * (∏ j ∈ Finset.Icc 1 n, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i))).coeff (n - 1) = ((8 : ℝ) * 2 ^ k) ^ (n - 1) := by intro k hk have hsplitP : (∏ j ∈ Finset.Icc 1 n, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i)) = (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ k) * Polynomial.X) ^ i) * ∏ j ∈ (Finset.Icc 1 n).erase k, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i) := (Finset.mul_prod_erase _ (fun j => (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i)) hk).symm have hprod : (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X)) * (∏ j ∈ Finset.Icc 1 n, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i)) = (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ k) * Polynomial.X) ^ i) * ∏ j ∈ (Finset.Icc 1 n).erase k, (1 - (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ n) := by rw [hsplitP, mul_left_comm, ← Finset.prod_mul_distrib] congr 1 refine Finset.prod_congr rfl (fun j _ => ?_) rw [mul_neg_geom_sum] obtain ⟨E, hE⟩ : Polynomial.X ^ n ∣ (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ n)) - 1 := Polynomial.X_pow_dvd_iff.mpr (fun d hd => by rw [Polynomial.coeff_sub, hU _ d hd, Polynomial.coeff_one]; split_ifs <;> simp_all) rw [hprod, show ∏ j ∈ (Finset.Icc 1 n).erase k, (1 - (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ n) = 1 + Polynomial.X ^ n * E by rw [← hE]; ring, mul_add, mul_one, Polynomial.coeff_add, mul_left_comm, Polynomial.coeff_X_pow_mul', if_neg (by omega), add_zero, hG] -- (3) so coefficient n - 1 of Qt * P is the sum of C_k r_k^(n-1) have hQP : ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))) * (∏ j ∈ Finset.Icc 1 n, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i))).coeff (n - 1) = ∑ k ∈ Finset.Icc 1 n, ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))).eval ((8 : ℝ) * 2 ^ k)⁻¹ * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)))⁻¹) * ((8 : ℝ) * 2 ^ k) ^ (n - 1) := by nth_rw 1 [hid] rw [Finset.sum_mul, Polynomial.finsetSum_coeff] refine Finset.sum_congr rfl (fun k hk => ?_) rw [mul_assoc, Polynomial.coeff_C_mul, hTP k hk] -- (4) and it is an integer, since Qt * P has integer coefficients have hmap : (-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))) * (∏ j ∈ Finset.Icc 1 n, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i)) = Polynomial.map (Int.castRingHom ℝ) ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℤ) * Polynomial.X - Polynomial.C ((2 : ℤ) ^ t))) * (∏ j ∈ Finset.Icc 1 n, ∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℤ) * 2 ^ j) * Polynomial.X) ^ i)) := by simp [Polynomial.map_prod, Polynomial.map_sum, Polynomial.C_mul, Polynomial.C_pow, map_ofNat] -- (5) C_k r_k^(n-1) = 3^(n-1) A(n,k) have hcard : (Finset.Icc 1 (n - 1)).card = n - 1 := by rw [Nat.card_Icc]; omega have hterm : ∀ k ∈ Finset.Icc 1 n, ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))).eval ((8 : ℝ) * 2 ^ k)⁻¹ * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)))⁻¹) * ((8 : ℝ) * 2 ^ k) ^ (n - 1) = (3 : ℝ) ^ (n - 1) * (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) := by intro k hk have hq : ∀ t : ℕ, (3 : ℝ) * ((8 : ℝ) * 2 ^ k)⁻¹ - 2 ^ t = ((8 : ℝ) * 2 ^ k)⁻¹ * (3 * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) := fun t => by have := hr0 k rw [pow_add]; field_simp have hw : ∀ j : ℕ, ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k) = (2 : ℝ) ^ ((j : ℤ) - (k : ℤ)) := fun j => by rw [zpow_sub₀ two_ne_zero, zpow_natCast, zpow_natCast] field_simp have hrr : (((8 : ℝ) * 2 ^ k)⁻¹) ^ (n - 1) * ((8 : ℝ) * 2 ^ k) ^ (n - 1) = 1 := by rw [← mul_pow, inv_mul_cancel₀ (hr0 k), one_pow] simp only [Polynomial.eval_neg, Polynomial.eval_prod, Polynomial.eval_sub, Polynomial.eval_mul, Polynomial.eval_C, Polynomial.eval_X] rw [Finset.prod_congr rfl (fun t _ => hq t), Finset.prod_mul_distrib, Finset.prod_mul_distrib, Finset.prod_const, Finset.prod_const, hcard] simp only [hw] linear_combination (-((3 : ℝ) ^ (n - 1) * ∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) * (∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))))⁻¹) * hrr refine ⟨((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℤ) * Polynomial.X - Polynomial.C ((2 : ℤ) ^ t))) * (∏ j ∈ Finset.Icc 1 n, ∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℤ) * 2 ^ j) * Polynomial.X) ^ i)).coeff (n - 1), ?_⟩ have hc : ((((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℤ) * Polynomial.X - Polynomial.C ((2 : ℤ) ^ t))) * (∏ j ∈ Finset.Icc 1 n, ∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℤ) * 2 ^ j) * Polynomial.X) ^ i)).coeff (n - 1) : ℤ) : ℝ) = (Polynomial.map (Int.castRingHom ℝ) ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℤ) * Polynomial.X - Polynomial.C ((2 : ℤ) ^ t))) * (∏ j ∈ Finset.Icc 1 n, ∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℤ) * 2 ^ j) * Polynomial.X) ^ i))).coeff (n - 1) := by rw [Polynomial.coeff_map]; simp rw [hc, ← hmap, hQP, Finset.mul_sum] exact Finset.sum_congr rfl hterm have hW3 : ∀ n : ℕ, ∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = (∏ k ∈ Finset.Icc 1 n, ((3 : ℝ) - 8 * 2 ^ k)) * ((3 : ℝ) ^ n)⁻¹ := by intro n rw [Finset.prod_congr rfl (fun k _ => (by ring : (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = ((3 : ℝ) - 8 * 2 ^ k) * (3 : ℝ)⁻¹)), Finset.prod_mul_distrib, Finset.prod_const, Nat.card_Icc, Nat.add_sub_cancel, inv_pow] refine ⟨fun n => if h : 1 ≤ n then 3 * (Nat.factorial (n - 2) : ℤ) * (∏ k ∈ Finset.Icc 1 n, ((3 : ℤ) - 8 * 2 ^ k)) * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, ((1 : ℤ) - 2 ^ k)) * Classical.choose (key n h) else 0, fun n hn => ?_⟩ simp only [dif_pos hn] push_cast rw [Classical.choose_spec (key n hn), hW3 n] have h9 : (9 : ℝ) ^ n = 3 * (3 : ℝ) ^ (n - 1) * (3 : ℝ) ^ n := by rw [show (9 : ℝ) = 3 * 3 by norm_num, mul_pow, mul_comm (3 : ℝ) _, ← pow_succ, Nat.sub_add_cancel hn] have h3 : ((3 : ℝ) ^ n)⁻¹ * (3 : ℝ) ^ n = 1 := inv_mul_cancel₀ (by positivity) rw [h9] linear_combination (-(3 : ℝ) * (Nat.factorial (n - 2) : ℝ) * (∏ k ∈ Finset.Icc 1 n, ((3 : ℝ) - 8 * 2 ^ k)) * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, ((1 : ℝ) - 2 ^ k)) * ((3 : ℝ) ^ (n - 1) * (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))))) * h3hden.keyhave∀ (n : ℕ), (1 : ℕ) ≤ n → ∃ (z : ℤ), (↑z : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))Leaves
∃ (b : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(b n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))), withkey : ∀ (n : ℕ), (1 : ℕ) ≤ n → ∃ (z : ℤ), (↑z : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Exists.introExistential introduction. ,Polynomial.CC ais the constant polynomiala. ,Polynomial.XXis the polynomial variable (aka indeterminate). ,Finset.rangerange nis the set of natural numbers less thann. ,Finset.mul_sum,Finset.sum_congr,rflrfl : a = ais the unique constructor of the equality type. .Lean, lines 27–133
have key : ∀ n : ℕ, 1 ≤ n → ∃ z : ℤ, (z : ℝ) = (3 : ℝ) ^ (n - 1) * (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))) := by intro n hn have hr0 : ∀ k : ℕ, ((8 : ℝ) * 2 ^ k) ≠ 0 := fun k => by positivity have hvinj : Set.InjOn (fun k : ℕ => ((8 : ℝ) * 2 ^ k)⁻¹) (Finset.Icc 1 n : Set ℕ) := by intro a _ b _ hab have h : (2 : ℝ) ^ a = 2 ^ b := by have := inv_injective hab exact mul_left_cancel₀ (by norm_num : (8 : ℝ) ≠ 0) this exact pow_right_injective₀ (by norm_num : (0 : ℝ) < 2) (by norm_num) h -- (1) the polynomial partial-fraction identity, by agreement at the n nodes 1/r_k have hid : (-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))) = ∑ k ∈ Finset.Icc 1 n, Polynomial.C ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))).eval ((8 : ℝ) * 2 ^ k)⁻¹ * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)))⁻¹) * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X)) := by refine Polynomial.eq_of_natDegree_lt_card_of_eval_eq' _ _ ((Finset.Icc 1 n).image (fun k : ℕ => ((8 : ℝ) * 2 ^ k)⁻¹)) ?_ ?_ · intro y hy obtain ⟨k, hk, rfl⟩ := Finset.mem_image.mp hy rw [Polynomial.eval_finsetSum, Finset.sum_eq_single_of_mem k hk] · rw [Polynomial.eval_mul, Polynomial.eval_C, Polynomial.eval_prod] simp only [Polynomial.eval_sub, Polynomial.eval_one, Polynomial.eval_mul, Polynomial.eval_C, Polynomial.eval_X] have hne : ∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)) ≠ 0 := by refine Finset.prod_ne_zero_iff.mpr (fun j hj => ?_) have hjk : j ≠ k := Finset.ne_of_mem_erase hj intro h0 have : ((8 : ℝ) * 2 ^ j) = ((8 : ℝ) * 2 ^ k) := by have := hr0 k field_simp at h0 linarith exact hjk (pow_right_injective₀ (by norm_num : (0 : ℝ) < 2) (by norm_num) (mul_left_cancel₀ (by norm_num : (8 : ℝ) ≠ 0) this)) rw [mul_assoc, ← Finset.prod_congr rfl (fun j _ => by rw [div_eq_mul_inv, mul_comm (((8 : ℝ) * 2 ^ j)) _] : ∀ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)) = 1 - ((8 : ℝ) * 2 ^ j) * ((8 : ℝ) * 2 ^ k)⁻¹), inv_mul_cancel₀ hne, mul_one] · intro i hi hik rw [Polynomial.eval_mul, Polynomial.eval_prod] refine mul_eq_zero_of_right _ (Finset.prod_eq_zero (i := k) (Finset.mem_erase.mpr ⟨Ne.symm hik, hk⟩) ?_) simp only [Polynomial.eval_sub, Polynomial.eval_one, Polynomial.eval_mul, Polynomial.eval_C, Polynomial.eval_X] rw [mul_inv_cancel₀ (hr0 k), sub_self] · rw [Finset.card_image_of_injOn hvinj, Nat.card_Icc] have hQdeg : (-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))).natDegree ≤ n - 1 := by rw [Polynomial.natDegree_neg] refine (Polynomial.natDegree_prod_le _ _).trans ?_ refine (Finset.sum_le_sum (g := fun _ => 1) (fun t _ => ?_)).trans (le_of_eq ?_) · compute_degree · simp only [Finset.sum_const, smul_eq_mul, mul_one, Nat.card_Icc]; omega have hRdeg : (∑ k ∈ Finset.Icc 1 n, Polynomial.C ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))).eval ((8 : ℝ) * 2 ^ k)⁻¹ * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)))⁻¹) * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X))).natDegree ≤ n - 1 := by refine Polynomial.natDegree_sum_le_of_forall_le _ _ (fun k hk => ?_) refine (Polynomial.natDegree_C_mul_le _ _).trans ((Polynomial.natDegree_prod_le _ _).trans ?_) refine (Finset.sum_le_sum (g := fun _ => 1) (fun j _ => ?_)).trans (le_of_eq ?_) · compute_degree · simp only [Finset.sum_const, smul_eq_mul, mul_one] rw [Finset.card_erase_of_mem hk, Nat.card_Icc]; omega omega -- (2) coefficient n - 1 of T_k * P is r_k ^ (n - 1) have hU : ∀ (S : Finset ℕ), ∀ d < n, (∏ j ∈ S, (1 - (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ n)).coeff d = if d = 0 then 1 else 0 := by intro S induction S using Finset.induction_on with | empty => intro d hd; simp [Polynomial.coeff_one] | insert a S ha ih => intro d hd rw [Finset.prod_insert ha, sub_mul, one_mul, Polynomial.coeff_sub, mul_pow, ← Polynomial.C_pow, mul_assoc, Polynomial.coeff_C_mul, Polynomial.coeff_X_pow_mul', if_neg (by omega), mul_zero, sub_zero, ih d hd] have hG : ∀ k : ℕ, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ k) * Polynomial.X) ^ i).coeff (n - 1) = ((8 : ℝ) * 2 ^ k) ^ (n - 1) := by intro k simp only [mul_pow, ← Polynomial.C_pow, Polynomial.finsetSum_coeff, Polynomial.coeff_C_mul_X_pow] rw [Finset.sum_ite_eq (Finset.range n) (n - 1), if_pos (Finset.mem_range.mpr (by omega))] have hTP : ∀ k ∈ Finset.Icc 1 n, ((∏ j ∈ (Finset.Icc 1 n).erase k, (1 - Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X)) * (∏ j ∈ Finset.Icc 1 n, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i))).coeff (n - 1) = ((8 : ℝ) * 2 ^ k) ^ (n - 1) := by intro k hk have hsplitP : (∏ j ∈ Finset.Icc 1 n, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i)) = (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ k) * Polynomial.X) ^ i) * ∏ j ∈ (Finset.Icc 1 n).erase k, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i) := (Finset.mul_prod_erase _ (fun j => (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i)) hk).symm have hprod : (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X)) * (∏ j ∈ Finset.Icc 1 n, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i)) = (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ k) * Polynomial.X) ^ i) * ∏ j ∈ (Finset.Icc 1 n).erase k, (1 - (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ n) := by rw [hsplitP, mul_left_comm, ← Finset.prod_mul_distrib] congr 1 refine Finset.prod_congr rfl (fun j _ => ?_) rw [mul_neg_geom_sum] obtain ⟨E, hE⟩ : Polynomial.X ^ n ∣ (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ n)) - 1 := Polynomial.X_pow_dvd_iff.mpr (fun d hd => by rw [Polynomial.coeff_sub, hU _ d hd, Polynomial.coeff_one]; split_ifs <;> simp_all) rw [hprod, show ∏ j ∈ (Finset.Icc 1 n).erase k, (1 - (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ n) = 1 + Polynomial.X ^ n * E by rw [← hE]; ring, mul_add, mul_one, Polynomial.coeff_add, mul_left_comm, Polynomial.coeff_X_pow_mul', if_neg (by omega), add_zero, hG] -- (3) so coefficient n - 1 of Qt * P is the sum of C_k r_k^(n-1) have hQP : ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))) * (∏ j ∈ Finset.Icc 1 n, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i))).coeff (n - 1) = ∑ k ∈ Finset.Icc 1 n, ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))).eval ((8 : ℝ) * 2 ^ k)⁻¹ * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)))⁻¹) * ((8 : ℝ) * 2 ^ k) ^ (n - 1) := by nth_rw 1 [hid] rw [Finset.sum_mul, Polynomial.finsetSum_coeff] refine Finset.sum_congr rfl (fun k hk => ?_) rw [mul_assoc, Polynomial.coeff_C_mul, hTP k hk] -- (4) and it is an integer, since Qt * P has integer coefficients have hmap : (-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))) * (∏ j ∈ Finset.Icc 1 n, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i)) = Polynomial.map (Int.castRingHom ℝ) ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℤ) * Polynomial.X - Polynomial.C ((2 : ℤ) ^ t))) * (∏ j ∈ Finset.Icc 1 n, ∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℤ) * 2 ^ j) * Polynomial.X) ^ i)) := by simp [Polynomial.map_prod, Polynomial.map_sum, Polynomial.C_mul, Polynomial.C_pow, map_ofNat] -- (5) C_k r_k^(n-1) = 3^(n-1) A(n,k) have hcard : (Finset.Icc 1 (n - 1)).card = n - 1 := by rw [Nat.card_Icc]; omega have hterm : ∀ k ∈ Finset.Icc 1 n, ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))).eval ((8 : ℝ) * 2 ^ k)⁻¹ * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)))⁻¹) * ((8 : ℝ) * 2 ^ k) ^ (n - 1) = (3 : ℝ) ^ (n - 1) * (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) := by intro k hk have hq : ∀ t : ℕ, (3 : ℝ) * ((8 : ℝ) * 2 ^ k)⁻¹ - 2 ^ t = ((8 : ℝ) * 2 ^ k)⁻¹ * (3 * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) := fun t => by have := hr0 k rw [pow_add]; field_simp have hw : ∀ j : ℕ, ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k) = (2 : ℝ) ^ ((j : ℤ) - (k : ℤ)) := fun j => by rw [zpow_sub₀ two_ne_zero, zpow_natCast, zpow_natCast] field_simp have hrr : (((8 : ℝ) * 2 ^ k)⁻¹) ^ (n - 1) * ((8 : ℝ) * 2 ^ k) ^ (n - 1) = 1 := by rw [← mul_pow, inv_mul_cancel₀ (hr0 k), one_pow] simp only [Polynomial.eval_neg, Polynomial.eval_prod, Polynomial.eval_sub, Polynomial.eval_mul, Polynomial.eval_C, Polynomial.eval_X] rw [Finset.prod_congr rfl (fun t _ => hq t), Finset.prod_mul_distrib, Finset.prod_mul_distrib, Finset.prod_const, Finset.prod_const, hcard] simp only [hw] linear_combination (-((3 : ℝ) ^ (n - 1) * ∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) * (∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))))⁻¹) * hrr refine ⟨((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℤ) * Polynomial.X - Polynomial.C ((2 : ℤ) ^ t))) * (∏ j ∈ Finset.Icc 1 n, ∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℤ) * 2 ^ j) * Polynomial.X) ^ i)).coeff (n - 1), ?_⟩ have hc : ((((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℤ) * Polynomial.X - Polynomial.C ((2 : ℤ) ^ t))) * (∏ j ∈ Finset.Icc 1 n, ∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℤ) * 2 ^ j) * Polynomial.X) ^ i)).coeff (n - 1) : ℤ) : ℝ) = (Polynomial.map (Int.castRingHom ℝ) ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℤ) * Polynomial.X - Polynomial.C ((2 : ℤ) ^ t))) * (∏ j ∈ Finset.Icc 1 n, ∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℤ) * 2 ^ j) * Polynomial.X) ^ i))).coeff (n - 1) := by rw [Polynomial.coeff_map]; simp rw [hc, ← hmap, hQP, Finset.mul_sum] exact Finset.sum_congr rfl htermhden.key.hr0have∀ (k : ℕ), (8 : ℝ) * (2 : ℝ) ^ k ≠ (0 : ℝ)Leaves
∃ (z : ℤ), (↑z : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))), withhr0 : ∀ (k : ℕ), (8 : ℝ) * (2 : ℝ) ^ k ≠ (0 : ℝ).Lean, line 29
have hr0 : ∀ k : ℕ, ((8 : ℝ) * 2 ^ k) ≠ 0 := fun k => by positivity
hden.key.hvinjhaveSet.InjOn (fun (k : ℕ) => ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹) (↑(Finset.Icc (1 : ℕ) n) : Set ℕ)Leaves
∃ (z : ℤ), (↑z : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))), withhvinj : Set.InjOn (fun (k : ℕ) => ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹) (↑(Finset.Icc (1 : ℕ) n) : Set ℕ).Uses library
Set.InjOnfis injective onsif the restriction offtosis injective. ,Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,SetA set is a collection of elements of some typeα. ,pow_right_injective₀.Lean, lines 30–35
have hvinj : Set.InjOn (fun k : ℕ => ((8 : ℝ) * 2 ^ k)⁻¹) (Finset.Icc 1 n : Set ℕ) := by intro a _ b _ hab have h : (2 : ℝ) ^ a = 2 ^ b := by have := inv_injective hab exact mul_left_cancel₀ (by norm_num : (8 : ℝ) ≠ 0) this exact pow_right_injective₀ (by norm_num : (0 : ℝ) < 2) (by norm_num) hhden.key.hvinj.hhave(2 : ℝ) ^ a = (2 : ℝ) ^ bLeaves
a = b, withh : (2 : ℝ) ^ a = (2 : ℝ) ^ b.Uses library
mul_left_cancel₀.Lean, lines 32–34
have h : (2 : ℝ) ^ a = 2 ^ b := by have := inv_injective hab exact mul_left_cancel₀ (by norm_num : (8 : ℝ) ≠ 0) thishden.key.hvinj.h.thishave(8 : ℝ) * (2 : ℝ) ^ a = (8 : ℝ) * (2 : ℝ) ^ bLeaves
(2 : ℝ) ^ a = (2 : ℝ) ^ b, withthis : (8 : ℝ) * (2 : ℝ) ^ a = (8 : ℝ) * (2 : ℝ) ^ b.Uses library
inv_injective.Lean, line 33
have := inv_injective hab
hden.key.hidhave-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℝ → Polynomial ℝ) (3 : ℝ) * Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t)) = ∑ k ∈ Finset.Icc (1 : ℕ) n, (Polynomial.C : ℝ → Polynomial ℝ) (Polynomial.eval ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹ (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℝ → Polynomial ℝ) (3 : ℝ) * Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))) * (∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ j / ((8 : ℝ) * (2 : ℝ) ^ k)))⁻¹) * ∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : Polynomial ℝ) - (Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X)Leaves
∃ (z : ℤ), (↑z : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))), withhid : -∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℝ → Polynomial ℝ) (3 : ℝ) * Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t)) = ∑ k ∈ Finset.Icc (1 : ℕ) n, (Polynomial.C : ℝ → Polynomial ℝ) (Polynomial.eval ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹ (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℝ → Polynomial ℝ) (3 : ℝ) * Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))) * (∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ j / ((8 : ℝ) * (2 : ℝ) ^ k)))⁻¹) * ∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : Polynomial ℝ) - (Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Polynomial.CC ais the constant polynomiala. ,Polynomial.XXis the polynomial variable (aka indeterminate). ,Polynomial.eq_of_natDegree_lt_card_of_eval_eq'.Lean, lines 37–73
have hid : (-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))) = ∑ k ∈ Finset.Icc 1 n, Polynomial.C ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))).eval ((8 : ℝ) * 2 ^ k)⁻¹ * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)))⁻¹) * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X)) := by refine Polynomial.eq_of_natDegree_lt_card_of_eval_eq' _ _ ((Finset.Icc 1 n).image (fun k : ℕ => ((8 : ℝ) * 2 ^ k)⁻¹)) ?_ ?_ · intro y hy obtain ⟨k, hk, rfl⟩ := Finset.mem_image.mp hy rw [Polynomial.eval_finsetSum, Finset.sum_eq_single_of_mem k hk] · rw [Polynomial.eval_mul, Polynomial.eval_C, Polynomial.eval_prod] simp only [Polynomial.eval_sub, Polynomial.eval_one, Polynomial.eval_mul, Polynomial.eval_C, Polynomial.eval_X] have hne : ∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)) ≠ 0 := by refine Finset.prod_ne_zero_iff.mpr (fun j hj => ?_) have hjk : j ≠ k := Finset.ne_of_mem_erase hj intro h0 have : ((8 : ℝ) * 2 ^ j) = ((8 : ℝ) * 2 ^ k) := by have := hr0 k field_simp at h0 linarith exact hjk (pow_right_injective₀ (by norm_num : (0 : ℝ) < 2) (by norm_num) (mul_left_cancel₀ (by norm_num : (8 : ℝ) ≠ 0) this)) rw [mul_assoc, ← Finset.prod_congr rfl (fun j _ => by rw [div_eq_mul_inv, mul_comm (((8 : ℝ) * 2 ^ j)) _] : ∀ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)) = 1 - ((8 : ℝ) * 2 ^ j) * ((8 : ℝ) * 2 ^ k)⁻¹), inv_mul_cancel₀ hne, mul_one] · intro i hi hik rw [Polynomial.eval_mul, Polynomial.eval_prod] refine mul_eq_zero_of_right _ (Finset.prod_eq_zero (i := k) (Finset.mem_erase.mpr ⟨Ne.symm hik, hk⟩) ?_) simp only [Polynomial.eval_sub, Polynomial.eval_one, Polynomial.eval_mul, Polynomial.eval_C, Polynomial.eval_X] rw [mul_inv_cancel₀ (hr0 k), sub_self] · rw [Finset.card_image_of_injOn hvinj, Nat.card_Icc] have hQdeg : (-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))).natDegree ≤ n - 1 := by rw [Polynomial.natDegree_neg] refine (Polynomial.natDegree_prod_le _ _).trans ?_ refine (Finset.sum_le_sum (g := fun _ => 1) (fun t _ => ?_)).trans (le_of_eq ?_) · compute_degree · simp only [Finset.sum_const, smul_eq_mul, mul_one, Nat.card_Icc]; omega have hRdeg : (∑ k ∈ Finset.Icc 1 n, Polynomial.C ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))).eval ((8 : ℝ) * 2 ^ k)⁻¹ * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)))⁻¹) * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X))).natDegree ≤ n - 1 := by refine Polynomial.natDegree_sum_le_of_forall_le _ _ (fun k hk => ?_) refine (Polynomial.natDegree_C_mul_le _ _).trans ((Polynomial.natDegree_prod_le _ _).trans ?_) refine (Finset.sum_le_sum (g := fun _ => 1) (fun j _ => ?_)).trans (le_of_eq ?_) · compute_degree · simp only [Finset.sum_const, smul_eq_mul, mul_one] rw [Finset.card_erase_of_mem hk, Nat.card_Icc]; omega omegahden.key.hid.s1caseLeaves
∀ i ∈ Finset.image (fun (k : ℕ) => ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹) (Finset.Icc (1 : ℕ) n), Polynomial.eval i (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℝ → Polynomial ℝ) (3 : ℝ) * Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))) = Polynomial.eval i (∑ k ∈ Finset.Icc (1 : ℕ) n, (Polynomial.C : ℝ → Polynomial ℝ) (Polynomial.eval ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹ (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℝ → Polynomial ℝ) (3 : ℝ) * Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))) * (∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ j / ((8 : ℝ) * (2 : ℝ) ^ k)))⁻¹) * ∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : Polynomial ℝ) - (Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X)).Uses library
Polynomial.eval_finsetSum,Finset.sum_eq_single_of_mem.Lean, lines 39–58
· intro y hy obtain ⟨k, hk, rfl⟩ := Finset.mem_image.mp hy rw [Polynomial.eval_finsetSum, Finset.sum_eq_single_of_mem k hk] · rw [Polynomial.eval_mul, Polynomial.eval_C, Polynomial.eval_prod] simp only [Polynomial.eval_sub, Polynomial.eval_one, Polynomial.eval_mul, Polynomial.eval_C, Polynomial.eval_X] have hne : ∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)) ≠ 0 := by refine Finset.prod_ne_zero_iff.mpr (fun j hj => ?_) have hjk : j ≠ k := Finset.ne_of_mem_erase hj intro h0 have : ((8 : ℝ) * 2 ^ j) = ((8 : ℝ) * 2 ^ k) := by have := hr0 k field_simp at h0 linarith exact hjk (pow_right_injective₀ (by norm_num : (0 : ℝ) < 2) (by norm_num) (mul_left_cancel₀ (by norm_num : (8 : ℝ) ≠ 0) this)) rw [mul_assoc, ← Finset.prod_congr rfl (fun j _ => by rw [div_eq_mul_inv, mul_comm (((8 : ℝ) * 2 ^ j)) _] : ∀ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)) = 1 - ((8 : ℝ) * 2 ^ j) * ((8 : ℝ) * 2 ^ k)⁻¹), inv_mul_cancel₀ hne, mul_one] · intro i hi hik rw [Polynomial.eval_mul, Polynomial.eval_prod] refine mul_eq_zero_of_right _ (Finset.prod_eq_zero (i := k) (Finset.mem_erase.mpr ⟨Ne.symm hik, hk⟩) ?_) simp only [Polynomial.eval_sub, Polynomial.eval_one, Polynomial.eval_mul, Polynomial.eval_C, Polynomial.eval_X] rw [mul_inv_cancel₀ (hr0 k), sub_self]hden.key.hid.s1.s1obtain∃ a ∈ Finset.Icc (1 : ℕ) n, ((8 : ℝ) * (2 : ℝ) ^ a)⁻¹ = yLeaves
Polynomial.eval ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹ (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℝ → Polynomial ℝ) (3 : ℝ) * Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))) = Polynomial.eval ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹ (∑ k ∈ Finset.Icc (1 : ℕ) n, (Polynomial.C : ℝ → Polynomial ℝ) (Polynomial.eval ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹ (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℝ → Polynomial ℝ) (3 : ℝ) * Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))) * (∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ j / ((8 : ℝ) * (2 : ℝ) ^ k)))⁻¹) * ∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : Polynomial ℝ) - (Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X)), withk : ℕ,hk : k ∈ Finset.Icc (1 : ℕ) n,hy : ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹ ∈ Finset.image (fun (k : ℕ) => ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹) (Finset.Icc (1 : ℕ) n).Uses library
Finset.mem_image.Lean, line 40
obtain ⟨k, hk, rfl⟩ := Finset.mem_image.mp hy
hden.key.hid.s1.s2caseLeaves
Polynomial.eval ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹ (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℝ → Polynomial ℝ) (3 : ℝ) * Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))) = Polynomial.eval ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹ ((Polynomial.C : ℝ → Polynomial ℝ) (Polynomial.eval ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹ (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℝ → Polynomial ℝ) (3 : ℝ) * Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))) * (∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ j / ((8 : ℝ) * (2 : ℝ) ^ k)))⁻¹) * ∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : Polynomial ℝ) - (Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X)).Uses library
Polynomial.eval_mul,Polynomial.eval_C,Polynomial.eval_prodPolynomial evaluation commutes withFinset.prod,Polynomial.eval_sub,Polynomial.eval_one,Polynomial.eval_X,mul_assoc,Finset.prod_congr,rflrfl : a = ais the unique constructor of the equality type. ,div_eq_mul_invDividing by an element is the same as multiplying by its inverse. ,mul_comm,Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,inv_mul_cancel₀,mul_one.Lean, lines 42–53
· rw [Polynomial.eval_mul, Polynomial.eval_C, Polynomial.eval_prod] simp only [Polynomial.eval_sub, Polynomial.eval_one, Polynomial.eval_mul, Polynomial.eval_C, Polynomial.eval_X] have hne : ∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)) ≠ 0 := by refine Finset.prod_ne_zero_iff.mpr (fun j hj => ?_) have hjk : j ≠ k := Finset.ne_of_mem_erase hj intro h0 have : ((8 : ℝ) * 2 ^ j) = ((8 : ℝ) * 2 ^ k) := by have := hr0 k field_simp at h0 linarith exact hjk (pow_right_injective₀ (by norm_num : (0 : ℝ) < 2) (by norm_num) (mul_left_cancel₀ (by norm_num : (8 : ℝ) ≠ 0) this)) rw [mul_assoc, ← Finset.prod_congr rfl (fun j _ => by rw [div_eq_mul_inv, mul_comm (((8 : ℝ) * 2 ^ j)) _] : ∀ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)) = 1 - ((8 : ℝ) * 2 ^ j) * ((8 : ℝ) * 2 ^ k)⁻¹), inv_mul_cancel₀ hne, mul_one]hden.key.hid.s1.s2.hnehave∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ j / ((8 : ℝ) * (2 : ℝ) ^ k)) ≠ (0 : ℝ)Leaves
Polynomial.eval ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹ (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℝ → Polynomial ℝ) (3 : ℝ) * Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))) = Polynomial.eval ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹ (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℝ → Polynomial ℝ) (3 : ℝ) * Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))) * (∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ j / ((8 : ℝ) * (2 : ℝ) ^ k)))⁻¹ * ∏ x ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ x * ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹), withhne : ∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ j / ((8 : ℝ) * (2 : ℝ) ^ k)) ≠ (0 : ℝ).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.prod_ne_zero_iff,pow_right_injective₀,mul_left_cancel₀.Lean, lines 44–52
have hne : ∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)) ≠ 0 := by refine Finset.prod_ne_zero_iff.mpr (fun j hj => ?_) have hjk : j ≠ k := Finset.ne_of_mem_erase hj intro h0 have : ((8 : ℝ) * 2 ^ j) = ((8 : ℝ) * 2 ^ k) := by have := hr0 k field_simp at h0 linarith exact hjk (pow_right_injective₀ (by norm_num : (0 : ℝ) < 2) (by norm_num) (mul_left_cancel₀ (by norm_num : (8 : ℝ) ≠ 0) this))hden.key.hid.s1.s2.hne.hjkhavej ≠ kLeaves
(1 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ j / ((8 : ℝ) * (2 : ℝ) ^ k) ≠ (0 : ℝ), withhjk : j ≠ k.Uses library
Finset.ne_of_mem_erase.Lean, line 46
have hjk : j ≠ k := Finset.ne_of_mem_erase hj
hden.key.hid.s1.s2.hne.thishave(8 : ℝ) * (2 : ℝ) ^ j = (8 : ℝ) * (2 : ℝ) ^ kLeaves
False, withthis : (8 : ℝ) * (2 : ℝ) ^ j = (8 : ℝ) * (2 : ℝ) ^ k.Lean, lines 48–51
have : ((8 : ℝ) * 2 ^ j) = ((8 : ℝ) * 2 ^ k) := by have := hr0 k field_simp at h0 linarithhden.key.hid.s1.s2.hne.this.thishave(8 : ℝ) * (2 : ℝ) ^ k ≠ (0 : ℝ)Leaves
(8 : ℝ) * (2 : ℝ) ^ j = (8 : ℝ) * (2 : ℝ) ^ k, withthis : (8 : ℝ) * (2 : ℝ) ^ k ≠ (0 : ℝ).
hden.key.hid.s1.s3caseLeaves
∀ b ∈ Finset.Icc (1 : ℕ) n, b ≠ k → Polynomial.eval ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹ ((Polynomial.C : ℝ → Polynomial ℝ) (Polynomial.eval ((8 : ℝ) * (2 : ℝ) ^ b)⁻¹ (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℝ → Polynomial ℝ) (3 : ℝ) * Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))) * (∏ j ∈ (Finset.Icc (1 : ℕ) n).erase b, ((1 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ j / ((8 : ℝ) * (2 : ℝ) ^ b)))⁻¹) * ∏ j ∈ (Finset.Icc (1 : ℕ) n).erase b, ((1 : Polynomial ℝ) - (Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X)) = (0 : ℝ).Uses library
Polynomial.eval_mul,Polynomial.eval_prodPolynomial evaluation commutes withFinset.prod,mul_eq_zero_of_right,Finset.prod_eq_zero,Finset.mem_erase,And.introAnd.intro : a → b → a ∧ bis the constructor for the And operation. ,Ne.symm,Polynomial.eval_sub,Polynomial.eval_one,Polynomial.eval_C,Polynomial.eval_X,mul_inv_cancel₀,sub_self.Lean, lines 54–58
· intro i hi hik rw [Polynomial.eval_mul, Polynomial.eval_prod] refine mul_eq_zero_of_right _ (Finset.prod_eq_zero (i := k) (Finset.mem_erase.mpr ⟨Ne.symm hik, hk⟩) ?_) simp only [Polynomial.eval_sub, Polynomial.eval_one, Polynomial.eval_mul, Polynomial.eval_C, Polynomial.eval_X] rw [mul_inv_cancel₀ (hr0 k), sub_self]
hden.key.hid.s2caseLeaves
max (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℝ → Polynomial ℝ) (3 : ℝ) * Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))).natDegree (∑ k ∈ Finset.Icc (1 : ℕ) n, (Polynomial.C : ℝ → Polynomial ℝ) (Polynomial.eval ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹ (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℝ → Polynomial ℝ) (3 : ℝ) * Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))) * (∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ j / ((8 : ℝ) * (2 : ℝ) ^ k)))⁻¹) * ∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : Polynomial ℝ) - (Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X)).natDegree < (Finset.image (fun (k : ℕ) => ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹) (Finset.Icc (1 : ℕ) n)).card.Uses library
Finset.card_image_of_injOn,Nat.card_Icc.Lean, lines 59–73
· rw [Finset.card_image_of_injOn hvinj, Nat.card_Icc] have hQdeg : (-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))).natDegree ≤ n - 1 := by rw [Polynomial.natDegree_neg] refine (Polynomial.natDegree_prod_le _ _).trans ?_ refine (Finset.sum_le_sum (g := fun _ => 1) (fun t _ => ?_)).trans (le_of_eq ?_) · compute_degree · simp only [Finset.sum_const, smul_eq_mul, mul_one, Nat.card_Icc]; omega have hRdeg : (∑ k ∈ Finset.Icc 1 n, Polynomial.C ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))).eval ((8 : ℝ) * 2 ^ k)⁻¹ * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)))⁻¹) * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X))).natDegree ≤ n - 1 := by refine Polynomial.natDegree_sum_le_of_forall_le _ _ (fun k hk => ?_) refine (Polynomial.natDegree_C_mul_le _ _).trans ((Polynomial.natDegree_prod_le _ _).trans ?_) refine (Finset.sum_le_sum (g := fun _ => 1) (fun j _ => ?_)).trans (le_of_eq ?_) · compute_degree · simp only [Finset.sum_const, smul_eq_mul, mul_one] rw [Finset.card_erase_of_mem hk, Nat.card_Icc]; omega omegahden.key.hid.s2.hQdeghave(-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℝ → Polynomial ℝ) (3 : ℝ) * Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))).natDegree ≤ n - (1 : ℕ)Leaves
max (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℝ → Polynomial ℝ) (3 : ℝ) * Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))).natDegree (∑ k ∈ Finset.Icc (1 : ℕ) n, (Polynomial.C : ℝ → Polynomial ℝ) (Polynomial.eval ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹ (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℝ → Polynomial ℝ) (3 : ℝ) * Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))) * (∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ j / ((8 : ℝ) * (2 : ℝ) ^ k)))⁻¹) * ∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : Polynomial ℝ) - (Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X)).natDegree < n + (1 : ℕ) - (1 : ℕ), withhQdeg : (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℝ → Polynomial ℝ) (3 : ℝ) * Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))).natDegree ≤ n - (1 : ℕ).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Polynomial.CC ais the constant polynomiala. ,Polynomial.XXis the polynomial variable (aka indeterminate). ,Polynomial.natDegree_neg,Polynomial.natDegree_prod_le,Finset.sum_le_sumIn an ordered additive commutative monoid, if each summandf iof one finite sum is less than or equal to the corresponding summandg iof another finite sum, then∑ i ∈ s, f i ≤ ∑ i ∈ s, g i. ,le_of_eq.Lean, lines 60–65
have hQdeg : (-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))).natDegree ≤ n - 1 := by rw [Polynomial.natDegree_neg] refine (Polynomial.natDegree_prod_le _ _).trans ?_ refine (Finset.sum_le_sum (g := fun _ => 1) (fun t _ => ?_)).trans (le_of_eq ?_) · compute_degree · simp only [Finset.sum_const, smul_eq_mul, mul_one, Nat.card_Icc]; omegahden.key.hid.s2.hQdeg.s1caseLeaves
((Polynomial.C : ℝ → Polynomial ℝ) (3 : ℝ) * Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t)).natDegree ≤ (1 : ℕ).Lean, line 64
· compute_degree
hden.key.hid.s2.hQdeg.s2case routine: simp, omegaLeaves
∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (1 : ℕ) = n - (1 : ℕ).Uses library
Finset.sum_const,smul_eq_mul,mul_one,Nat.card_Icc.Lean, line 65
· simp only [Finset.sum_const, smul_eq_mul, mul_one, Nat.card_Icc]; omega
hden.key.hid.s2.hRdeghave(∑ k ∈ Finset.Icc (1 : ℕ) n, (Polynomial.C : ℝ → Polynomial ℝ) (Polynomial.eval ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹ (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℝ → Polynomial ℝ) (3 : ℝ) * Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))) * (∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ j / ((8 : ℝ) * (2 : ℝ) ^ k)))⁻¹) * ∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : Polynomial ℝ) - (Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X)).natDegree ≤ n - (1 : ℕ)Leaves
max (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℝ → Polynomial ℝ) (3 : ℝ) * Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))).natDegree (∑ k ∈ Finset.Icc (1 : ℕ) n, (Polynomial.C : ℝ → Polynomial ℝ) (Polynomial.eval ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹ (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℝ → Polynomial ℝ) (3 : ℝ) * Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))) * (∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ j / ((8 : ℝ) * (2 : ℝ) ^ k)))⁻¹) * ∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : Polynomial ℝ) - (Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X)).natDegree < n + (1 : ℕ) - (1 : ℕ), withhRdeg : (∑ k ∈ Finset.Icc (1 : ℕ) n, (Polynomial.C : ℝ → Polynomial ℝ) (Polynomial.eval ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹ (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℝ → Polynomial ℝ) (3 : ℝ) * Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))) * (∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ j / ((8 : ℝ) * (2 : ℝ) ^ k)))⁻¹) * ∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : Polynomial ℝ) - (Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X)).natDegree ≤ n - (1 : ℕ).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Polynomial.CC ais the constant polynomiala. ,Polynomial.XXis the polynomial variable (aka indeterminate). ,Polynomial.natDegree_sum_le_of_forall_le,Polynomial.natDegree_C_mul_le,Polynomial.natDegree_prod_le,Finset.sum_le_sumIn an ordered additive commutative monoid, if each summandf iof one finite sum is less than or equal to the corresponding summandg iof another finite sum, then∑ i ∈ s, f i ≤ ∑ i ∈ s, g i. ,le_of_eq.Lean, lines 66–72
have hRdeg : (∑ k ∈ Finset.Icc 1 n, Polynomial.C ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))).eval ((8 : ℝ) * 2 ^ k)⁻¹ * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)))⁻¹) * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X))).natDegree ≤ n - 1 := by refine Polynomial.natDegree_sum_le_of_forall_le _ _ (fun k hk => ?_) refine (Polynomial.natDegree_C_mul_le _ _).trans ((Polynomial.natDegree_prod_le _ _).trans ?_) refine (Finset.sum_le_sum (g := fun _ => 1) (fun j _ => ?_)).trans (le_of_eq ?_) · compute_degree · simp only [Finset.sum_const, smul_eq_mul, mul_one] rw [Finset.card_erase_of_mem hk, Nat.card_Icc]; omegahden.key.hid.s2.hRdeg.s1caseLeaves
((1 : Polynomial ℝ) - (Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X).natDegree ≤ (1 : ℕ).Lean, line 70
· compute_degree
hden.key.hid.s2.hRdeg.s2caseLeaves
∑ i ∈ (Finset.Icc (1 : ℕ) n).erase k, (1 : ℕ) = n - (1 : ℕ).Uses library
Finset.sum_const,smul_eq_mul,mul_one,Finset.card_erase_of_mem$\#(s \setminus \{a\}) = \#s - 1$ if $a \in s$. ,Nat.card_Icc.Lean, lines 71–72
· simp only [Finset.sum_const, smul_eq_mul, mul_one] rw [Finset.card_erase_of_mem hk, Nat.card_Icc]; omega
hden.key.hUhave∀ (S : Finset ℕ), ∀ d < n, (∏ j ∈ S, ((1 : Polynomial ℝ) - ((Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X) ^ n)).coeff d = if d = (0 : ℕ) then (1 : ℝ) else (0 : ℝ)Leaves
∃ (z : ℤ), (↑z : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))), withhU : ∀ (S : Finset ℕ), ∀ d < n, (∏ j ∈ S, ((1 : Polynomial ℝ) - ((Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X) ^ n)).coeff d = if d = (0 : ℕ) then (1 : ℝ) else (0 : ℝ).Uses library
FinsetFinset αis the type of finite sets of elements ofα. ,Polynomial.CC ais the constant polynomiala. ,Polynomial.XXis the polynomial variable (aka indeterminate). ,Finset.induction_onTo prove a proposition about an arbitraryFinset α, it suffices to prove it for the emptyFinset, and to show that if it holds for someFinset α, then it holds for theFinsetobtained by inserting a new element. .Lean, lines 75–82
have hU : ∀ (S : Finset ℕ), ∀ d < n, (∏ j ∈ S, (1 - (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ n)).coeff d = if d = 0 then 1 else 0 := by intro S induction S using Finset.induction_on with | empty => intro d hd; simp [Polynomial.coeff_one] | insert a S ha ih => intro d hd rw [Finset.prod_insert ha, sub_mul, one_mul, Polynomial.coeff_sub, mul_pow, ← Polynomial.C_pow, mul_assoc, Polynomial.coeff_C_mul, Polynomial.coeff_X_pow_mul', if_neg (by omega), mul_zero, sub_zero, ih d hd]hden.key.hU.s1caseLeaves
∀ d < n, (∏ j ∈ ∅, ((1 : Polynomial ℝ) - ((Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X) ^ n)).coeff d = if d = (0 : ℕ) then (1 : ℝ) else (0 : ℝ).Uses library
Finset.emptyThe empty finset ,Polynomial.coeff_one.Lean, line 78
| empty => intro d hd; simp [Polynomial.coeff_one]
hden.key.hU.s2caseLeaves
∀ d < n, (∏ j ∈ insert a S, ((1 : Polynomial ℝ) - ((Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X) ^ n)).coeff d = if d = (0 : ℕ) then (1 : ℝ) else (0 : ℝ), witha : ℕ,S : Finset ℕ,ha : a ∉ S,ih : ∀ d < n, (∏ j ∈ S, ((1 : Polynomial ℝ) - ((Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X) ^ n)).coeff d = if d = (0 : ℕ) then (1 : ℝ) else (0 : ℝ).Uses library
Finset.prod_insert,sub_mulAlias ofmul_sub_right_distrib. ,one_mul,Polynomial.coeff_sub,mul_pow,Polynomial.C_pow,mul_assoc,Polynomial.coeff_C_mul,Polynomial.coeff_X_pow_mul',if_neg,MulZeroClass.mul_zeroZero is a right absorbing element for multiplication ,sub_zero.Lean, lines 79–82
| insert a S ha ih => intro d hd rw [Finset.prod_insert ha, sub_mul, one_mul, Polynomial.coeff_sub, mul_pow, ← Polynomial.C_pow, mul_assoc, Polynomial.coeff_C_mul, Polynomial.coeff_X_pow_mul', if_neg (by omega), mul_zero, sub_zero, ih d hd]
hden.key.hGhave∀ (k : ℕ), (∑ i ∈ Finset.range n, ((Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ k) * Polynomial.X) ^ i).coeff (n - (1 : ℕ)) = ((8 : ℝ) * (2 : ℝ) ^ k) ^ (n - (1 : ℕ))Leaves
∃ (z : ℤ), (↑z : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))), withhG : ∀ (k : ℕ), (∑ i ∈ Finset.range n, ((Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ k) * Polynomial.X) ^ i).coeff (n - (1 : ℕ)) = ((8 : ℝ) * (2 : ℝ) ^ k) ^ (n - (1 : ℕ)).Uses library
Finset.rangerange nis the set of natural numbers less thann. ,Polynomial.CC ais the constant polynomiala. ,Polynomial.XXis the polynomial variable (aka indeterminate). ,mul_pow,Polynomial.C_pow,Polynomial.finsetSum_coeff,Polynomial.coeff_C_mul_X_pow,Finset.sum_ite_eq,if_pos,Finset.mem_range.Lean, lines 83–86
have hG : ∀ k : ℕ, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ k) * Polynomial.X) ^ i).coeff (n - 1) = ((8 : ℝ) * 2 ^ k) ^ (n - 1) := by intro k simp only [mul_pow, ← Polynomial.C_pow, Polynomial.finsetSum_coeff, Polynomial.coeff_C_mul_X_pow] rw [Finset.sum_ite_eq (Finset.range n) (n - 1), if_pos (Finset.mem_range.mpr (by omega))]hden.key.hTPhave∀ k ∈ Finset.Icc (1 : ℕ) n, ((∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : Polynomial ℝ) - (Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X)) * ∏ j ∈ Finset.Icc (1 : ℕ) n, ∑ i ∈ Finset.range n, ((Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X) ^ i).coeff (n - (1 : ℕ)) = ((8 : ℝ) * (2 : ℝ) ^ k) ^ (n - (1 : ℕ))Leaves
∃ (z : ℤ), (↑z : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))), withhTP : ∀ k ∈ Finset.Icc (1 : ℕ) n, ((∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : Polynomial ℝ) - (Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X)) * ∏ j ∈ Finset.Icc (1 : ℕ) n, ∑ i ∈ Finset.range n, ((Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X) ^ i).coeff (n - (1 : ℕ)) = ((8 : ℝ) * (2 : ℝ) ^ k) ^ (n - (1 : ℕ)).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Polynomial.CC ais the constant polynomiala. ,Polynomial.XXis the polynomial variable (aka indeterminate). ,Finset.rangerange nis the set of natural numbers less thann. ,mul_addAlias ofleft_distrib. ,mul_one,Polynomial.coeff_add,mul_left_comm,Polynomial.coeff_X_pow_mul',if_neg,add_zero.Lean, lines 87–100
have hTP : ∀ k ∈ Finset.Icc 1 n, ((∏ j ∈ (Finset.Icc 1 n).erase k, (1 - Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X)) * (∏ j ∈ Finset.Icc 1 n, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i))).coeff (n - 1) = ((8 : ℝ) * 2 ^ k) ^ (n - 1) := by intro k hk have hsplitP : (∏ j ∈ Finset.Icc 1 n, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i)) = (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ k) * Polynomial.X) ^ i) * ∏ j ∈ (Finset.Icc 1 n).erase k, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i) := (Finset.mul_prod_erase _ (fun j => (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i)) hk).symm have hprod : (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X)) * (∏ j ∈ Finset.Icc 1 n, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i)) = (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ k) * Polynomial.X) ^ i) * ∏ j ∈ (Finset.Icc 1 n).erase k, (1 - (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ n) := by rw [hsplitP, mul_left_comm, ← Finset.prod_mul_distrib] congr 1 refine Finset.prod_congr rfl (fun j _ => ?_) rw [mul_neg_geom_sum] obtain ⟨E, hE⟩ : Polynomial.X ^ n ∣ (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ n)) - 1 := Polynomial.X_pow_dvd_iff.mpr (fun d hd => by rw [Polynomial.coeff_sub, hU _ d hd, Polynomial.coeff_one]; split_ifs <;> simp_all) rw [hprod, show ∏ j ∈ (Finset.Icc 1 n).erase k, (1 - (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ n) = 1 + Polynomial.X ^ n * E by rw [← hE]; ring, mul_add, mul_one, Polynomial.coeff_add, mul_left_comm, Polynomial.coeff_X_pow_mul', if_neg (by omega), add_zero, hG]hden.key.hTP.hsplitPhave∏ j ∈ Finset.Icc (1 : ℕ) n, ∑ i ∈ Finset.range n, ((Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X) ^ i = (∑ i ∈ Finset.range n, ((Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ k) * Polynomial.X) ^ i) * ∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ∑ i ∈ Finset.range n, ((Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X) ^ iLeaves
((∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : Polynomial ℝ) - (Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X)) * ∏ j ∈ Finset.Icc (1 : ℕ) n, ∑ i ∈ Finset.range n, ((Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X) ^ i).coeff (n - (1 : ℕ)) = ((8 : ℝ) * (2 : ℝ) ^ k) ^ (n - (1 : ℕ)), withhsplitP : ∏ j ∈ Finset.Icc (1 : ℕ) n, ∑ i ∈ Finset.range n, ((Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X) ^ i = (∑ i ∈ Finset.range n, ((Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ k) * Polynomial.X) ^ i) * ∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ∑ i ∈ Finset.range n, ((Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X) ^ i.Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.rangerange nis the set of natural numbers less thann. ,Polynomial.CC ais the constant polynomiala. ,Polynomial.XXis the polynomial variable (aka indeterminate). ,Finset.mul_prod_eraseTaking a product overs : Finset ιis the same as multiplying the value on a single elementf aby the product ofs.erase a. .Lean, lines 89–90
have hsplitP : (∏ j ∈ Finset.Icc 1 n, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i)) = (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ k) * Polynomial.X) ^ i) * ∏ j ∈ (Finset.Icc 1 n).erase k, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i) := (Finset.mul_prod_erase _ (fun j => (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i)) hk).symmhden.key.hTP.hprodhave(∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : Polynomial ℝ) - (Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X)) * ∏ j ∈ Finset.Icc (1 : ℕ) n, ∑ i ∈ Finset.range n, ((Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X) ^ i = (∑ i ∈ Finset.range n, ((Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ k) * Polynomial.X) ^ i) * ∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : Polynomial ℝ) - ((Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X) ^ n)Leaves
((∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : Polynomial ℝ) - (Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X)) * ∏ j ∈ Finset.Icc (1 : ℕ) n, ∑ i ∈ Finset.range n, ((Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X) ^ i).coeff (n - (1 : ℕ)) = ((8 : ℝ) * (2 : ℝ) ^ k) ^ (n - (1 : ℕ)), withhprod : (∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : Polynomial ℝ) - (Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X)) * ∏ j ∈ Finset.Icc (1 : ℕ) n, ∑ i ∈ Finset.range n, ((Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X) ^ i = (∑ i ∈ Finset.range n, ((Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ k) * Polynomial.X) ^ i) * ∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : Polynomial ℝ) - ((Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X) ^ n).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Polynomial.CC ais the constant polynomiala. ,Polynomial.XXis the polynomial variable (aka indeterminate). ,Finset.rangerange nis the set of natural numbers less thann. ,mul_left_comm,Finset.prod_mul_distrib,Finset.prod_congr,rflrfl : a = ais the unique constructor of the equality type. ,mul_neg_geom_sum.Lean, lines 91–95
have hprod : (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X)) * (∏ j ∈ Finset.Icc 1 n, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i)) = (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ k) * Polynomial.X) ^ i) * ∏ j ∈ (Finset.Icc 1 n).erase k, (1 - (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ n) := by rw [hsplitP, mul_left_comm, ← Finset.prod_mul_distrib] congr 1 refine Finset.prod_congr rfl (fun j _ => ?_) rw [mul_neg_geom_sum]hden.key.hTP.s3obtainPolynomial.X ^ n ∣ ∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : Polynomial ℝ) - ((Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X) ^ n) - (1 : Polynomial ℝ)Leaves
((∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : Polynomial ℝ) - (Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X)) * ∏ j ∈ Finset.Icc (1 : ℕ) n, ∑ i ∈ Finset.range n, ((Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X) ^ i).coeff (n - (1 : ℕ)) = ((8 : ℝ) * (2 : ℝ) ^ k) ^ (n - (1 : ℕ)), withE : Polynomial ℝ,hE : ∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : Polynomial ℝ) - ((Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X) ^ n) - (1 : Polynomial ℝ) = Polynomial.X ^ n * E.Uses library
Polynomial.XXis the polynomial variable (aka indeterminate). ,Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Polynomial.CC ais the constant polynomiala. ,Polynomial.X_pow_dvd_iff,Polynomial.coeff_sub,Polynomial.coeff_one.Lean, lines 96–98
obtain ⟨E, hE⟩ : Polynomial.X ^ n ∣ (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ n)) - 1 := Polynomial.X_pow_dvd_iff.mpr (fun d hd => by rw [Polynomial.coeff_sub, hU _ d hd, Polynomial.coeff_one]; split_ifs <;> simp_all)
hden.key.hQPhave((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℝ → Polynomial ℝ) (3 : ℝ) * Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))) * ∏ j ∈ Finset.Icc (1 : ℕ) n, ∑ i ∈ Finset.range n, ((Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X) ^ i).coeff (n - (1 : ℕ)) = ∑ k ∈ Finset.Icc (1 : ℕ) n, Polynomial.eval ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹ (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℝ → Polynomial ℝ) (3 : ℝ) * Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))) * (∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ j / ((8 : ℝ) * (2 : ℝ) ^ k)))⁻¹ * ((8 : ℝ) * (2 : ℝ) ^ k) ^ (n - (1 : ℕ))Leaves
∃ (z : ℤ), (↑z : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))), withhQP : ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℝ → Polynomial ℝ) (3 : ℝ) * Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))) * ∏ j ∈ Finset.Icc (1 : ℕ) n, ∑ i ∈ Finset.range n, ((Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X) ^ i).coeff (n - (1 : ℕ)) = ∑ k ∈ Finset.Icc (1 : ℕ) n, Polynomial.eval ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹ (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℝ → Polynomial ℝ) (3 : ℝ) * Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))) * (∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ j / ((8 : ℝ) * (2 : ℝ) ^ k)))⁻¹ * ((8 : ℝ) * (2 : ℝ) ^ k) ^ (n - (1 : ℕ)).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Polynomial.CC ais the constant polynomiala. ,Polynomial.XXis the polynomial variable (aka indeterminate). ,Finset.rangerange nis the set of natural numbers less thann. ,Finset.sum_mul,Polynomial.finsetSum_coeff,Finset.sum_congr,rflrfl : a = ais the unique constructor of the equality type. ,mul_assoc,Polynomial.coeff_C_mul.Lean, lines 102–106
have hQP : ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))) * (∏ j ∈ Finset.Icc 1 n, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i))).coeff (n - 1) = ∑ k ∈ Finset.Icc 1 n, ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))).eval ((8 : ℝ) * 2 ^ k)⁻¹ * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)))⁻¹) * ((8 : ℝ) * 2 ^ k) ^ (n - 1) := by nth_rw 1 [hid] rw [Finset.sum_mul, Polynomial.finsetSum_coeff] refine Finset.sum_congr rfl (fun k hk => ?_) rw [mul_assoc, Polynomial.coeff_C_mul, hTP k hk]hden.key.hmaphave(-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℝ → Polynomial ℝ) (3 : ℝ) * Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))) * ∏ j ∈ Finset.Icc (1 : ℕ) n, ∑ i ∈ Finset.range n, ((Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X) ^ i = Polynomial.map (Int.castRingHom ℝ) ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℤ → Polynomial ℤ) (3 : ℤ) * Polynomial.X - (Polynomial.C : ℤ → Polynomial ℤ) ((2 : ℤ) ^ t))) * ∏ j ∈ Finset.Icc (1 : ℕ) n, ∑ i ∈ Finset.range n, ((Polynomial.C : ℤ → Polynomial ℤ) ((8 : ℤ) * (2 : ℤ) ^ j) * Polynomial.X) ^ i)routine: simpLeaves
∃ (z : ℤ), (↑z : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))), withhmap : (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℝ → Polynomial ℝ) (3 : ℝ) * Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))) * ∏ j ∈ Finset.Icc (1 : ℕ) n, ∑ i ∈ Finset.range n, ((Polynomial.C : ℝ → Polynomial ℝ) ((8 : ℝ) * (2 : ℝ) ^ j) * Polynomial.X) ^ i = Polynomial.map (Int.castRingHom ℝ) ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℤ → Polynomial ℤ) (3 : ℤ) * Polynomial.X - (Polynomial.C : ℤ → Polynomial ℤ) ((2 : ℤ) ^ t))) * ∏ j ∈ Finset.Icc (1 : ℕ) n, ∑ i ∈ Finset.range n, ((Polynomial.C : ℤ → Polynomial ℤ) ((8 : ℤ) * (2 : ℤ) ^ j) * Polynomial.X) ^ i).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Polynomial.CC ais the constant polynomiala. ,Polynomial.XXis the polynomial variable (aka indeterminate). ,Finset.rangerange nis the set of natural numbers less thann. ,Polynomial.mapmap f pmaps a polynomialpacross a ring homf,Int.castRingHomcoe : ℤ → αas aRingHom. ,Polynomial.map_prod,Polynomial.map_sum,Polynomial.C_mul,Polynomial.C_pow,map_ofNatThis lemma is not marked@[simp]lemma because its#discr_tree_key(for the LHS) would just beDFunLike.coe _ _, due to theofNatthat https://github.com/leanprover/lean4/issues/2867 forces us to include, and therefore it would negatively impact performance. .Lean, lines 108–109
have hmap : (-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))) * (∏ j ∈ Finset.Icc 1 n, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i)) = Polynomial.map (Int.castRingHom ℝ) ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℤ) * Polynomial.X - Polynomial.C ((2 : ℤ) ^ t))) * (∏ j ∈ Finset.Icc 1 n, ∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℤ) * 2 ^ j) * Polynomial.X) ^ i)) := by simp [Polynomial.map_prod, Polynomial.map_sum, Polynomial.C_mul, Polynomial.C_pow, map_ofNat]hden.key.hcardhave(Finset.Icc (1 : ℕ) (n - (1 : ℕ))).card = n - (1 : ℕ)Leaves
∃ (z : ℤ), (↑z : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))), withhcard : (Finset.Icc (1 : ℕ) (n - (1 : ℕ))).card = n - (1 : ℕ).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Nat.card_Icc.Lean, line 111
have hcard : (Finset.Icc 1 (n - 1)).card = n - 1 := by rw [Nat.card_Icc]; omega
hden.key.htermhave∀ k ∈ Finset.Icc (1 : ℕ) n, Polynomial.eval ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹ (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℝ → Polynomial ℝ) (3 : ℝ) * Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))) * (∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ j / ((8 : ℝ) * (2 : ℝ) ^ k)))⁻¹ * ((8 : ℝ) * (2 : ℝ) ^ k) ^ (n - (1 : ℕ)) = (3 : ℝ) ^ (n - (1 : ℕ)) * ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))))Leaves
∃ (z : ℤ), (↑z : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))), withhterm : ∀ k ∈ Finset.Icc (1 : ℕ) n, Polynomial.eval ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹ (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℝ → Polynomial ℝ) (3 : ℝ) * Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))) * (∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ j / ((8 : ℝ) * (2 : ℝ) ^ k)))⁻¹ * ((8 : ℝ) * (2 : ℝ) ^ k) ^ (n - (1 : ℕ)) = (3 : ℝ) ^ (n - (1 : ℕ)) * ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Polynomial.CC ais the constant polynomiala. ,Polynomial.XXis the polynomial variable (aka indeterminate). ,Polynomial.eval_neg,Polynomial.eval_prodPolynomial evaluation commutes withFinset.prod,Polynomial.eval_sub,Polynomial.eval_mul,Polynomial.eval_C,Polynomial.eval_X,Finset.prod_congr,rflrfl : a = ais the unique constructor of the equality type. ,Finset.prod_mul_distrib,Finset.prod_const.Lean, lines 112–128
have hterm : ∀ k ∈ Finset.Icc 1 n, ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))).eval ((8 : ℝ) * 2 ^ k)⁻¹ * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)))⁻¹) * ((8 : ℝ) * 2 ^ k) ^ (n - 1) = (3 : ℝ) ^ (n - 1) * (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) := by intro k hk have hq : ∀ t : ℕ, (3 : ℝ) * ((8 : ℝ) * 2 ^ k)⁻¹ - 2 ^ t = ((8 : ℝ) * 2 ^ k)⁻¹ * (3 * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) := fun t => by have := hr0 k rw [pow_add]; field_simp have hw : ∀ j : ℕ, ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k) = (2 : ℝ) ^ ((j : ℤ) - (k : ℤ)) := fun j => by rw [zpow_sub₀ two_ne_zero, zpow_natCast, zpow_natCast] field_simp have hrr : (((8 : ℝ) * 2 ^ k)⁻¹) ^ (n - 1) * ((8 : ℝ) * 2 ^ k) ^ (n - 1) = 1 := by rw [← mul_pow, inv_mul_cancel₀ (hr0 k), one_pow] simp only [Polynomial.eval_neg, Polynomial.eval_prod, Polynomial.eval_sub, Polynomial.eval_mul, Polynomial.eval_C, Polynomial.eval_X] rw [Finset.prod_congr rfl (fun t _ => hq t), Finset.prod_mul_distrib, Finset.prod_mul_distrib, Finset.prod_const, Finset.prod_const, hcard] simp only [hw] linear_combination (-((3 : ℝ) ^ (n - 1) * ∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) * (∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))))⁻¹) * hrrhden.key.hterm.hqhave∀ (t : ℕ), (3 : ℝ) * ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹ - (2 : ℝ) ^ t = ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹ * ((3 : ℝ) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k)))Leaves
Polynomial.eval ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹ (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℝ → Polynomial ℝ) (3 : ℝ) * Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))) * (∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ j / ((8 : ℝ) * (2 : ℝ) ^ k)))⁻¹ * ((8 : ℝ) * (2 : ℝ) ^ k) ^ (n - (1 : ℕ)) = (3 : ℝ) ^ (n - (1 : ℕ)) * ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))), withhq : ∀ (t : ℕ), (3 : ℝ) * ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹ - (2 : ℝ) ^ t = ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹ * ((3 : ℝ) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))).Uses library
pow_add.Lean, lines 114–116
have hq : ∀ t : ℕ, (3 : ℝ) * ((8 : ℝ) * 2 ^ k)⁻¹ - 2 ^ t = ((8 : ℝ) * 2 ^ k)⁻¹ * (3 * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) := fun t => by have := hr0 k rw [pow_add]; field_simphden.key.hterm.hq.thishave(8 : ℝ) * (2 : ℝ) ^ k ≠ (0 : ℝ)Leaves
(3 : ℝ) * ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹ - (2 : ℝ) ^ t = ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹ * ((3 : ℝ) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))), withthis : (8 : ℝ) * (2 : ℝ) ^ k ≠ (0 : ℝ).
hden.key.hterm.hwhave∀ (j : ℕ), (8 : ℝ) * (2 : ℝ) ^ j / ((8 : ℝ) * (2 : ℝ) ^ k) = (2 : ℝ) ^ ((↑j : ℤ) - (↑k : ℤ))Leaves
Polynomial.eval ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹ (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℝ → Polynomial ℝ) (3 : ℝ) * Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))) * (∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ j / ((8 : ℝ) * (2 : ℝ) ^ k)))⁻¹ * ((8 : ℝ) * (2 : ℝ) ^ k) ^ (n - (1 : ℕ)) = (3 : ℝ) ^ (n - (1 : ℕ)) * ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))), withhw : ∀ (j : ℕ), (8 : ℝ) * (2 : ℝ) ^ j / ((8 : ℝ) * (2 : ℝ) ^ k) = (2 : ℝ) ^ ((↑j : ℤ) - (↑k : ℤ)).Uses library
zpow_sub₀,two_ne_zero,zpow_natCast.Lean, lines 117–119
have hw : ∀ j : ℕ, ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k) = (2 : ℝ) ^ ((j : ℤ) - (k : ℤ)) := fun j => by rw [zpow_sub₀ two_ne_zero, zpow_natCast, zpow_natCast] field_simphden.key.hterm.hrrhave((8 : ℝ) * (2 : ℝ) ^ k)⁻¹ ^ (n - (1 : ℕ)) * ((8 : ℝ) * (2 : ℝ) ^ k) ^ (n - (1 : ℕ)) = (1 : ℝ)Leaves
Polynomial.eval ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹ (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℝ → Polynomial ℝ) (3 : ℝ) * Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))) * (∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ j / ((8 : ℝ) * (2 : ℝ) ^ k)))⁻¹ * ((8 : ℝ) * (2 : ℝ) ^ k) ^ (n - (1 : ℕ)) = (3 : ℝ) ^ (n - (1 : ℕ)) * ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))), withhrr : ((8 : ℝ) * (2 : ℝ) ^ k)⁻¹ ^ (n - (1 : ℕ)) * ((8 : ℝ) * (2 : ℝ) ^ k) ^ (n - (1 : ℕ)) = (1 : ℝ).Uses library
mul_pow,inv_mul_cancel₀,one_pow.Lean, lines 120–121
have hrr : (((8 : ℝ) * 2 ^ k)⁻¹) ^ (n - 1) * ((8 : ℝ) * 2 ^ k) ^ (n - 1) = 1 := by rw [← mul_pow, inv_mul_cancel₀ (hr0 k), one_pow]
hden.key.hchave(↑(((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℤ → Polynomial ℤ) (3 : ℤ) * Polynomial.X - (Polynomial.C : ℤ → Polynomial ℤ) ((2 : ℤ) ^ t))) * ∏ j ∈ Finset.Icc (1 : ℕ) n, ∑ i ∈ Finset.range n, ((Polynomial.C : ℤ → Polynomial ℤ) ((8 : ℤ) * (2 : ℤ) ^ j) * Polynomial.X) ^ i).coeff (n - (1 : ℕ))) : ℝ) = (Polynomial.map (Int.castRingHom ℝ) ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℤ → Polynomial ℤ) (3 : ℤ) * Polynomial.X - (Polynomial.C : ℤ → Polynomial ℤ) ((2 : ℤ) ^ t))) * ∏ j ∈ Finset.Icc (1 : ℕ) n, ∑ i ∈ Finset.range n, ((Polynomial.C : ℤ → Polynomial ℤ) ((8 : ℤ) * (2 : ℤ) ^ j) * Polynomial.X) ^ i)).coeff (n - (1 : ℕ))Leaves
(↑(((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℤ → Polynomial ℤ) (3 : ℤ) * Polynomial.X - (Polynomial.C : ℤ → Polynomial ℤ) ((2 : ℤ) ^ t))) * ∏ j ∈ Finset.Icc (1 : ℕ) n, ∑ i ∈ Finset.range n, ((Polynomial.C : ℤ → Polynomial ℤ) ((8 : ℤ) * (2 : ℤ) ^ j) * Polynomial.X) ^ i).coeff (n - (1 : ℕ))) : ℝ) = (3 : ℝ) ^ (n - (1 : ℕ)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))), withhc : (↑(((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℤ → Polynomial ℤ) (3 : ℤ) * Polynomial.X - (Polynomial.C : ℤ → Polynomial ℤ) ((2 : ℤ) ^ t))) * ∏ j ∈ Finset.Icc (1 : ℕ) n, ∑ i ∈ Finset.range n, ((Polynomial.C : ℤ → Polynomial ℤ) ((8 : ℤ) * (2 : ℤ) ^ j) * Polynomial.X) ^ i).coeff (n - (1 : ℕ))) : ℝ) = (Polynomial.map (Int.castRingHom ℝ) ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((Polynomial.C : ℤ → Polynomial ℤ) (3 : ℤ) * Polynomial.X - (Polynomial.C : ℤ → Polynomial ℤ) ((2 : ℤ) ^ t))) * ∏ j ∈ Finset.Icc (1 : ℕ) n, ∑ i ∈ Finset.range n, ((Polynomial.C : ℤ → Polynomial ℤ) ((8 : ℤ) * (2 : ℤ) ^ j) * Polynomial.X) ^ i)).coeff (n - (1 : ℕ)).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Polynomial.CC ais the constant polynomiala. ,Polynomial.XXis the polynomial variable (aka indeterminate). ,Finset.rangerange nis the set of natural numbers less thann. ,Polynomial.mapmap f pmaps a polynomialpacross a ring homf,Int.castRingHomcoe : ℤ → αas aRingHom. ,Polynomial.coeff_map.Lean, lines 130–131
have hc : ((((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℤ) * Polynomial.X - Polynomial.C ((2 : ℤ) ^ t))) * (∏ j ∈ Finset.Icc 1 n, ∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℤ) * 2 ^ j) * Polynomial.X) ^ i)).coeff (n - 1) : ℤ) : ℝ) = (Polynomial.map (Int.castRingHom ℝ) ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℤ) * Polynomial.X - Polynomial.C ((2 : ℤ) ^ t))) * (∏ j ∈ Finset.Icc 1 n, ∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℤ) * 2 ^ j) * Polynomial.X) ^ i))).coeff (n - 1) := by rw [Polynomial.coeff_map]; simp
hden.hW3have∀ (n : ℕ), ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = (∏ k ∈ Finset.Icc (1 : ℕ) n, ((3 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ k)) * ((3 : ℝ) ^ n)⁻¹Leaves
∃ (b : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(b n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))), withhW3 : ∀ (n : ℕ), ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = (∏ k ∈ Finset.Icc (1 : ℕ) n, ((3 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ k)) * ((3 : ℝ) ^ n)⁻¹.Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.prod_congr,rflrfl : a = ais the unique constructor of the equality type. ,Finset.prod_mul_distrib,Finset.prod_const,Nat.card_Icc,Nat.add_sub_cancel,inv_pow.Lean, lines 134–137
have hW3 : ∀ n : ℕ, ∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = (∏ k ∈ Finset.Icc 1 n, ((3 : ℝ) - 8 * 2 ^ k)) * ((3 : ℝ) ^ n)⁻¹ := by intro n rw [Finset.prod_congr rfl (fun k _ => (by ring : (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = ((3 : ℝ) - 8 * 2 ^ k) * (3 : ℝ)⁻¹)), Finset.prod_mul_distrib, Finset.prod_const, Nat.card_Icc, Nat.add_sub_cancel, inv_pow]hden.h9have(9 : ℝ) ^ n = (3 : ℝ) * (3 : ℝ) ^ (n - (1 : ℕ)) * (3 : ℝ) ^ nLeaves
(((3 : ℝ) * (↑(n - (2 : ℕ)).factorial : ℝ) * ∏ x ∈ Finset.Icc (1 : ℕ) n, ((3 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ x)) * ∏ x ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ x)) * ((3 : ℝ) ^ (n - (1 : ℕ)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) = (9 : ℝ) ^ n * ((↑(n - (2 : ℕ)).factorial : ℝ) * ((∏ k ∈ Finset.Icc (1 : ℕ) n, ((3 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ k)) * ((3 : ℝ) ^ n)⁻¹) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))), withh9 : (9 : ℝ) ^ n = (3 : ℝ) * (3 : ℝ) ^ (n - (1 : ℕ)) * (3 : ℝ) ^ n.Uses library
mul_pow,mul_comm,pow_succ,Nat.sub_add_cancel.Lean, lines 143–144
have h9 : (9 : ℝ) ^ n = 3 * (3 : ℝ) ^ (n - 1) * (3 : ℝ) ^ n := by rw [show (9 : ℝ) = 3 * 3 by norm_num, mul_pow, mul_comm (3 : ℝ) _, ← pow_succ, Nat.sub_add_cancel hn]hden.h3have((3 : ℝ) ^ n)⁻¹ * (3 : ℝ) ^ n = (1 : ℝ)Leaves
(((3 : ℝ) * (↑(n - (2 : ℕ)).factorial : ℝ) * ∏ x ∈ Finset.Icc (1 : ℕ) n, ((3 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ x)) * ∏ x ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ x)) * ((3 : ℝ) ^ (n - (1 : ℕ)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) = (9 : ℝ) ^ n * ((↑(n - (2 : ℕ)).factorial : ℝ) * ((∏ k ∈ Finset.Icc (1 : ℕ) n, ((3 : ℝ) - (8 : ℝ) * (2 : ℝ) ^ k)) * ((3 : ℝ) ^ n)⁻¹) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))), withh3 : ((3 : ℝ) ^ n)⁻¹ * (3 : ℝ) ^ n = (1 : ℝ).Uses library
inv_mul_cancel₀.Lean, line 145
have h3 : ((3 : ℝ) ^ n)⁻¹ * (3 : ℝ) ^ n = 1 := inv_mul_cancel₀ (by positivity)
s4obtain∃ (b : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(b n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))Leaves
∃ (a : ℕ → ℤ) (b : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(b n) : ℝ) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (↑(a n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹, withb : ℕ → ℤ,hb : ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(b n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ))).Lean, line 149
obtain ⟨b, hb⟩ := hden
hpfhave∀ (n : ℕ), (1 : ℕ) ≤ n → ∀ (m : ℕ), (1 : ℕ) ≤ m → -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹Leaves
∃ (a : ℕ → ℤ) (b : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(b n) : ℝ) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (↑(a n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹, withhpf : ∀ (n : ℕ), (1 : ℕ) ≤ n → ∀ (m : ℕ), (1 : ℕ) ≤ m → -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹.Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Polynomial.eval_neg,Polynomial.eval_prodPolynomial evaluation commutes withFinset.prod,Polynomial.eval_sub,Polynomial.eval_X,Polynomial.eval_C.Lean, lines 151–281
have hpf : ∀ n : ℕ, 1 ≤ n → ∀ m : ℕ, 1 ≤ m → (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (((m : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - (m : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (m : ℕ)))⁻¹) = ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹) + ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹) := by intro n hn m hm -- General partial fractions, from Mathlib's Lagrange interpolation. have lag : ∀ (s : Finset ℕ) (p : ℕ → ℝ) (Q : Polynomial ℝ), (∀ k ∈ s, p k ≠ 0) → Set.InjOn p s → Q.degree < s.card → ∀ x : ℝ, (∀ k ∈ s, 1 - p k * x ≠ 0) → Q.eval x * ∏ k ∈ s, (1 - p k * x)⁻¹ = ∑ k ∈ s, Q.eval (p k)⁻¹ * (∏ j ∈ s.erase k, (1 - p j / p k))⁻¹ * (1 - p k * x)⁻¹ := by intro s p Q hp hinj hdeg x hx have hinj' : Set.InjOn (fun k => (p k)⁻¹) s := by intro a ha b hb hab exact hinj ha hb (inv_injective hab) have hxv : ∀ k ∈ s, x ≠ (p k)⁻¹ := by intro k hk hxk apply hx k hk rw [hxk, mul_inv_cancel₀ (hp k hk), sub_self] have hQ := Lagrange.eq_interpolate hinj' hdeg have hev := Lagrange.eval_interpolate_not_at_node (s := s) (v := fun k => (p k)⁻¹) (fun i => Q.eval (p i)⁻¹) hxv rw [← hQ, Lagrange.eval_nodal] at hev have hfac : ∀ k ∈ s, (1 - p k * x)⁻¹ = (x - (p k)⁻¹)⁻¹ * (-(p k)⁻¹) := by intro k hk have h1 := hp k hk have h3 : (x - (p k)⁻¹) * (-(p k)) = 1 - p k * x := by rw [sub_mul, mul_neg, mul_neg, inv_mul_cancel₀ h1]; ring rw [← h3, mul_inv, inv_neg] rw [Finset.prod_congr rfl hfac, Finset.prod_mul_distrib, hev] have hne : ∏ i ∈ s, (x - (p i)⁻¹) ≠ 0 := Finset.prod_ne_zero_iff.mpr (fun i hi => sub_ne_zero.mpr (hxv i hi)) rw [Finset.prod_inv_distrib, mul_assoc, ← mul_assoc (∑ i ∈ s, _), mul_comm (∑ i ∈ s, _), ← mul_assoc, ← mul_assoc, mul_inv_cancel₀ hne, one_mul, Finset.sum_mul] refine Finset.sum_congr rfl (fun k hk => ?_) rw [Lagrange.nodalWeight, ← Finset.mul_prod_erase s (fun i => -(p i)⁻¹) hk] have hj : ∀ j ∈ s.erase k, ((p k)⁻¹ - (p j)⁻¹)⁻¹ * -(p j)⁻¹ = (1 - p j / p k)⁻¹ := by intro j hj have hjs := Finset.mem_of_mem_erase hj have hjk := Finset.ne_of_mem_erase hj have hpj := hp j hjs have hpk := hp k hk have hne : p j ≠ p k := fun h => hjk (hinj hjs hk h) have hsub : p k - p j ≠ 0 := sub_ne_zero.mpr (Ne.symm hne) field_simp ring calc (∏ j ∈ s.erase k, ((p k)⁻¹ - (p j)⁻¹)⁻¹) * (x - (p k)⁻¹)⁻¹ * Q.eval (p k)⁻¹ * (-(p k)⁻¹ * ∏ j ∈ s.erase k, -(p j)⁻¹) = Q.eval (p k)⁻¹ * (∏ j ∈ s.erase k, (((p k)⁻¹ - (p j)⁻¹)⁻¹ * -(p j)⁻¹)) * ((x - (p k)⁻¹)⁻¹ * -(p k)⁻¹) := by rw [Finset.prod_mul_distrib]; ring _ = Q.eval (p k)⁻¹ * (∏ j ∈ s.erase k, (1 - p j / p k))⁻¹ * (1 - p k * x)⁻¹ := by rw [Finset.prod_congr rfl hj, ← Finset.prod_inv_distrib, hfac k hk] have hx2 : (2 : ℝ) ≤ (2 : ℝ) ^ m := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ m := pow_le_pow_right₀ (by norm_num) hm have hx0 : (2 : ℝ) ^ m ≠ 0 := by positivity have hp0 : ∀ k : ℕ, (8 / 3 : ℝ) * 2 ^ k ≠ 0 := fun k => by positivity have hpx : ∀ k : ℕ, 1 - (8 / 3 : ℝ) * 2 ^ k * 2 ^ m ≠ 0 := by intro k have h1 : (1 : ℝ) ≤ 2 ^ k := one_le_pow₀ (by norm_num) nlinarith have hinj : Set.InjOn (fun k : ℕ => (8 / 3 : ℝ) * 2 ^ k) (Finset.Icc 1 n : Set ℕ) := by intro a _ b _ hab have h : (2 : ℝ) ^ a = 2 ^ b := by have := hab; simp only at this exact mul_left_cancel₀ (by norm_num : (8 / 3 : ℝ) ≠ 0) this exact pow_right_injective₀ (by norm_num : (0 : ℝ) < 2) (by norm_num) h have hdeg : (-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))).degree < ((Finset.Icc 1 n).card : WithBot ℕ) := by rw [Polynomial.degree_neg, Polynomial.degree_prod] simp only [Polynomial.degree_X_sub_C, Finset.sum_const, Nat.card_Icc] rw [show n - 1 + 1 - 1 = n - 1 by omega, show n + 1 - 1 = n by omega, nsmul_one] exact_mod_cast (by omega : n - 1 < n) have hL := lag (Finset.Icc 1 n) (fun k => (8 / 3 : ℝ) * 2 ^ k) (-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))) (fun k _ => hp0 k) hinj hdeg ((2 : ℝ) ^ m) (fun k _ => hpx k) simp only [Polynomial.eval_neg, Polynomial.eval_prod, Polynomial.eval_sub, Polynomial.eval_X, Polynomial.eval_C] at hL have hcard : (Finset.Icc 1 (n - 1)).card = n - 1 := by rw [Nat.card_Icc]; omega -- geometric sums have hgeo : ∀ u : ℝ, u ≠ 0 → 1 - u ≠ 0 → ∀ N : ℕ, (1 - u)⁻¹ + ∑ i ∈ Finset.Icc 1 N, (u ^ i)⁻¹ = (u ^ N)⁻¹ * (1 - u)⁻¹ := by intro u hu hu1 N induction N with | zero => simp | succ N ih => rw [Finset.sum_Icc_succ_top (by omega), ← add_assoc, ih] have hN : u ^ N ≠ 0 := pow_ne_zero _ hu field_simp ring -- the left side, in terms of the Lagrange data have hz1 : ∀ k : ℕ, (2 : ℝ) ^ ((k : ℤ) - (m : ℤ)) = 2 ^ k * ((2 : ℝ) ^ m)⁻¹ := fun k => by rw [zpow_sub₀ two_ne_zero, zpow_natCast, zpow_natCast, div_eq_mul_inv] have hz2 : ∀ k : ℕ, (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (m : ℤ)) = ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m := fun k => by rw [zpow_add₀ two_ne_zero, zpow_natCast, zpow_natCast, mul_assoc] have hz3 : (8 / 3 : ℝ) * (2 : ℝ) ^ ((m : ℤ) + (n : ℤ)) = ((8 / 3 : ℝ) * 2 ^ n) * (2 : ℝ) ^ m := by rw [zpow_add₀ two_ne_zero, zpow_natCast, zpow_natCast, mul_comm ((2 : ℝ) ^ m), mul_assoc] have hsplit : ∏ k ∈ Finset.Icc 1 n, (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹ = (∏ k ∈ Finset.Icc 1 (n - 1), (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) * (1 - ((8 / 3 : ℝ) * 2 ^ n) * (2 : ℝ) ^ m)⁻¹ := by have hn' : n = n - 1 + 1 := by omega conv_lhs => rw [hn'] rw [Finset.prod_Icc_succ_top (by omega), ← hn'] have hfac : ∀ k : ℕ, 1 - 2 ^ k * ((2 : ℝ) ^ m)⁻¹ = ((2 : ℝ) ^ m)⁻¹ * ((2 : ℝ) ^ m - (2 : ℝ) ^ k) := fun k => by rw [mul_sub, inv_mul_cancel₀ hx0]; ring have hLHS : (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (((m : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - (m : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (m : ℕ)))⁻¹) = (((2 : ℝ) ^ m) ^ (n - 1))⁻¹ * ((-∏ t ∈ Finset.Icc 1 (n - 1), ((2 : ℝ) ^ m - (2 : ℝ) ^ t)) * ∏ k ∈ Finset.Icc 1 n, (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) := by simp only [hz1, hz2, hz3] rw [Finset.prod_mul_distrib, hsplit, Finset.prod_congr rfl (fun k _ => hfac k), Finset.prod_mul_distrib, Finset.prod_const, hcard, inv_pow] ring -- the right side have hpk : ∀ k : ℕ, (8 / 3 : ℝ) * 2 ^ (k + m) = ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m := fun k => by rw [pow_add, mul_assoc] have hswap : ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹ = ∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * ∑ i ∈ Finset.Icc 1 (n - 1), ((((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m) ^ i)⁻¹ := by simp only [Finset.sum_mul, Finset.mul_sum] rw [Finset.sum_comm] refine Finset.sum_congr rfl (fun k _ => Finset.sum_congr rfl (fun i _ => ?_)) rw [mul_pow, mul_inv]; ring have hRHS : ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹) + ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹) = (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * ((((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m) ^ (n - 1))⁻¹ * (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) := by simp only [hpk] rw [hswap, ← Finset.sum_add_distrib] refine Finset.sum_congr rfl (fun k hk => ?_) rw [← mul_add, hgeo _ (mul_ne_zero (hp0 k) hx0) (hpx k) (n - 1)] ring -- matching the coefficients have hcoef : ∀ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * 2 ^ k) ^ (n - 1))⁻¹ = (-∏ t ∈ Finset.Icc 1 (n - 1), (((8 / 3 : ℝ) * 2 ^ k)⁻¹ - (2 : ℝ) ^ t)) * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 / 3 : ℝ) * 2 ^ j) / ((8 / 3 : ℝ) * 2 ^ k)))⁻¹ := by intro k hk have hq : ∀ t : ℕ, ((8 / 3 : ℝ) * 2 ^ k)⁻¹ - (2 : ℝ) ^ t = ((8 / 3 : ℝ) * 2 ^ k)⁻¹ * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k)) := fun t => by rw [mul_sub, mul_one, pow_add, show ((8 / 3 : ℝ) * 2 ^ k)⁻¹ * ((8 / 3 : ℝ) * (2 ^ t * 2 ^ k)) = 2 ^ t * (((8 / 3 : ℝ) * 2 ^ k)⁻¹ * ((8 / 3 : ℝ) * 2 ^ k)) by ring, inv_mul_cancel₀ (hp0 k), mul_one] have hw : ∀ j : ℕ, ((8 / 3 : ℝ) * 2 ^ j) / ((8 / 3 : ℝ) * 2 ^ k) = (2 : ℝ) ^ ((j : ℤ) - (k : ℤ)) := fun j => by rw [zpow_sub₀ two_ne_zero, zpow_natCast, zpow_natCast] field_simp rw [Finset.prod_congr rfl (fun t _ => hq t), Finset.prod_mul_distrib, Finset.prod_const, hcard, inv_pow] simp only [hw] ring calc (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (((m : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - (m : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (m : ℕ)))⁻¹) = (((2 : ℝ) ^ m) ^ (n - 1))⁻¹ * ((-∏ t ∈ Finset.Icc 1 (n - 1), ((2 : ℝ) ^ m - (2 : ℝ) ^ t)) * ∏ k ∈ Finset.Icc 1 n, (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) := hLHS _ = (((2 : ℝ) ^ m) ^ (n - 1))⁻¹ * (∑ k ∈ Finset.Icc 1 n, (-∏ t ∈ Finset.Icc 1 (n - 1), (((8 / 3 : ℝ) * 2 ^ k)⁻¹ - (2 : ℝ) ^ t)) * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 / 3 : ℝ) * 2 ^ j) / ((8 / 3 : ℝ) * 2 ^ k)))⁻¹ * (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) := by rw [hL] _ = (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * ((((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m) ^ (n - 1))⁻¹ * (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) := by rw [Finset.mul_sum] refine Finset.sum_congr rfl (fun k hk => ?_) rw [← hcoef k hk, mul_pow, mul_inv] ring _ = ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹) + ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹) := hRHS.symmhpf.laghave∀ (s : Finset ℕ) (p : ℕ → ℝ) (Q : Polynomial ℝ), (∀ k ∈ s, p k ≠ (0 : ℝ)) → Set.InjOn p (↑s : Set ℕ) → Q.degree < (↑s.card : WithBot ℕ) → ∀ (x : ℝ), (∀ k ∈ s, (1 : ℝ) - p k * x ≠ (0 : ℝ)) → Polynomial.eval x Q * ∏ k ∈ s, ((1 : ℝ) - p k * x)⁻¹ = ∑ k ∈ s, Polynomial.eval (p k)⁻¹ Q * (∏ j ∈ s.erase k, ((1 : ℝ) - p j / p k))⁻¹ * ((1 : ℝ) - p k * x)⁻¹Leaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withlag : ∀ (s : Finset ℕ) (p : ℕ → ℝ) (Q : Polynomial ℝ), (∀ k ∈ s, p k ≠ (0 : ℝ)) → Set.InjOn p (↑s : Set ℕ) → Q.degree < (↑s.card : WithBot ℕ) → ∀ (x : ℝ), (∀ k ∈ s, (1 : ℝ) - p k * x ≠ (0 : ℝ)) → Polynomial.eval x Q * ∏ k ∈ s, ((1 : ℝ) - p k * x)⁻¹ = ∑ k ∈ s, Polynomial.eval (p k)⁻¹ Q * (∏ j ∈ s.erase k, ((1 : ℝ) - p j / p k))⁻¹ * ((1 : ℝ) - p k * x)⁻¹.Uses library
FinsetFinset αis the type of finite sets of elements ofα. ,PolynomialPolynomial Ris the type of univariate polynomials overR, denoted asR[X]within thePolynomialnamespace. ,Set.InjOnfis injective onsif the restriction offtosis injective. ,Lagrange.eval_nodal,Finset.prod_congr,rflrfl : a = ais the unique constructor of the equality type. ,Finset.prod_mul_distrib,Finset.prod_inv_distrib,mul_assoc,mul_comm,mul_inv_cancel₀,one_mul,Finset.sum_mul,Finset.sum_congr,Lagrange.nodalWeightThis defines the nodal weight for a given set of node indexes and node mapping functionv. ,Finset.mul_prod_eraseTaking a product overs : Finset ιis the same as multiplying the value on a single elementf aby the product ofs.erase a. .Lean, lines 154–196
have lag : ∀ (s : Finset ℕ) (p : ℕ → ℝ) (Q : Polynomial ℝ), (∀ k ∈ s, p k ≠ 0) → Set.InjOn p s → Q.degree < s.card → ∀ x : ℝ, (∀ k ∈ s, 1 - p k * x ≠ 0) → Q.eval x * ∏ k ∈ s, (1 - p k * x)⁻¹ = ∑ k ∈ s, Q.eval (p k)⁻¹ * (∏ j ∈ s.erase k, (1 - p j / p k))⁻¹ * (1 - p k * x)⁻¹ := by intro s p Q hp hinj hdeg x hx have hinj' : Set.InjOn (fun k => (p k)⁻¹) s := by intro a ha b hb hab exact hinj ha hb (inv_injective hab) have hxv : ∀ k ∈ s, x ≠ (p k)⁻¹ := by intro k hk hxk apply hx k hk rw [hxk, mul_inv_cancel₀ (hp k hk), sub_self] have hQ := Lagrange.eq_interpolate hinj' hdeg have hev := Lagrange.eval_interpolate_not_at_node (s := s) (v := fun k => (p k)⁻¹) (fun i => Q.eval (p i)⁻¹) hxv rw [← hQ, Lagrange.eval_nodal] at hev have hfac : ∀ k ∈ s, (1 - p k * x)⁻¹ = (x - (p k)⁻¹)⁻¹ * (-(p k)⁻¹) := by intro k hk have h1 := hp k hk have h3 : (x - (p k)⁻¹) * (-(p k)) = 1 - p k * x := by rw [sub_mul, mul_neg, mul_neg, inv_mul_cancel₀ h1]; ring rw [← h3, mul_inv, inv_neg] rw [Finset.prod_congr rfl hfac, Finset.prod_mul_distrib, hev] have hne : ∏ i ∈ s, (x - (p i)⁻¹) ≠ 0 := Finset.prod_ne_zero_iff.mpr (fun i hi => sub_ne_zero.mpr (hxv i hi)) rw [Finset.prod_inv_distrib, mul_assoc, ← mul_assoc (∑ i ∈ s, _), mul_comm (∑ i ∈ s, _), ← mul_assoc, ← mul_assoc, mul_inv_cancel₀ hne, one_mul, Finset.sum_mul] refine Finset.sum_congr rfl (fun k hk => ?_) rw [Lagrange.nodalWeight, ← Finset.mul_prod_erase s (fun i => -(p i)⁻¹) hk] have hj : ∀ j ∈ s.erase k, ((p k)⁻¹ - (p j)⁻¹)⁻¹ * -(p j)⁻¹ = (1 - p j / p k)⁻¹ := by intro j hj have hjs := Finset.mem_of_mem_erase hj have hjk := Finset.ne_of_mem_erase hj have hpj := hp j hjs have hpk := hp k hk have hne : p j ≠ p k := fun h => hjk (hinj hjs hk h) have hsub : p k - p j ≠ 0 := sub_ne_zero.mpr (Ne.symm hne) field_simp ring calc (∏ j ∈ s.erase k, ((p k)⁻¹ - (p j)⁻¹)⁻¹) * (x - (p k)⁻¹)⁻¹ * Q.eval (p k)⁻¹ * (-(p k)⁻¹ * ∏ j ∈ s.erase k, -(p j)⁻¹) = Q.eval (p k)⁻¹ * (∏ j ∈ s.erase k, (((p k)⁻¹ - (p j)⁻¹)⁻¹ * -(p j)⁻¹)) * ((x - (p k)⁻¹)⁻¹ * -(p k)⁻¹) := by rw [Finset.prod_mul_distrib]; ring _ = Q.eval (p k)⁻¹ * (∏ j ∈ s.erase k, (1 - p j / p k))⁻¹ * (1 - p k * x)⁻¹ := by rw [Finset.prod_congr rfl hj, ← Finset.prod_inv_distrib, hfac k hk]hpf.lag.hinj'haveSet.InjOn (fun (k : ℕ) => (p k)⁻¹) (↑s : Set ℕ)Leaves
Polynomial.eval x Q * ∏ k ∈ s, ((1 : ℝ) - p k * x)⁻¹ = ∑ k ∈ s, Polynomial.eval (p k)⁻¹ Q * (∏ j ∈ s.erase k, ((1 : ℝ) - p j / p k))⁻¹ * ((1 : ℝ) - p k * x)⁻¹, withhinj' : Set.InjOn (fun (k : ℕ) => (p k)⁻¹) (↑s : Set ℕ).Uses library
Set.InjOnfis injective onsif the restriction offtosis injective. ,inv_injective.Lean, lines 159–161
have hinj' : Set.InjOn (fun k => (p k)⁻¹) s := by intro a ha b hb hab exact hinj ha hb (inv_injective hab)hpf.lag.hxvhave∀ k ∈ s, x ≠ (p k)⁻¹Leaves
Polynomial.eval x Q * ∏ k ∈ s, ((1 : ℝ) - p k * x)⁻¹ = ∑ k ∈ s, Polynomial.eval (p k)⁻¹ Q * (∏ j ∈ s.erase k, ((1 : ℝ) - p j / p k))⁻¹ * ((1 : ℝ) - p k * x)⁻¹, withhxv : ∀ k ∈ s, x ≠ (p k)⁻¹.Uses library
mul_inv_cancel₀,sub_self.Lean, lines 162–165
have hxv : ∀ k ∈ s, x ≠ (p k)⁻¹ := by intro k hk hxk apply hx k hk rw [hxk, mul_inv_cancel₀ (hp k hk), sub_self]hpf.lag.hQhaveQ = (Lagrange.interpolate s fun (k : ℕ) => (p k)⁻¹ : (ℕ → ℝ) → Polynomial ℝ) fun (i : ℕ) => Polynomial.eval (p i)⁻¹ QLeaves
Polynomial.eval x Q * ∏ k ∈ s, ((1 : ℝ) - p k * x)⁻¹ = ∑ k ∈ s, Polynomial.eval (p k)⁻¹ Q * (∏ j ∈ s.erase k, ((1 : ℝ) - p j / p k))⁻¹ * ((1 : ℝ) - p k * x)⁻¹, withhQ : Q = (Lagrange.interpolate s fun (k : ℕ) => (p k)⁻¹ : (ℕ → ℝ) → Polynomial ℝ) fun (i : ℕ) => Polynomial.eval (p i)⁻¹ Q.Uses library
Lagrange.eq_interpolate.Lean, line 166
have hQ := Lagrange.eq_interpolate hinj' hdeg
hpf.lag.hevhavePolynomial.eval x ((Lagrange.interpolate s fun (k : ℕ) => (p k)⁻¹ : (ℕ → ℝ) → Polynomial ℝ) fun (i : ℕ) => Polynomial.eval (p i)⁻¹ Q) = Polynomial.eval x (Lagrange.nodal s fun (k : ℕ) => (p k)⁻¹) * ∑ i ∈ s, Lagrange.nodalWeight s (fun (k : ℕ) => (p k)⁻¹) i * (x - (p i)⁻¹)⁻¹ * Polynomial.eval (p i)⁻¹ QLeaves
Polynomial.eval x Q * ∏ k ∈ s, ((1 : ℝ) - p k * x)⁻¹ = ∑ k ∈ s, Polynomial.eval (p k)⁻¹ Q * (∏ j ∈ s.erase k, ((1 : ℝ) - p j / p k))⁻¹ * ((1 : ℝ) - p k * x)⁻¹, withhev : Polynomial.eval x ((Lagrange.interpolate s fun (k : ℕ) => (p k)⁻¹ : (ℕ → ℝ) → Polynomial ℝ) fun (i : ℕ) => Polynomial.eval (p i)⁻¹ Q) = Polynomial.eval x (Lagrange.nodal s fun (k : ℕ) => (p k)⁻¹) * ∑ i ∈ s, Lagrange.nodalWeight s (fun (k : ℕ) => (p k)⁻¹) i * (x - (p i)⁻¹)⁻¹ * Polynomial.eval (p i)⁻¹ Q.Uses library
Lagrange.eval_interpolate_not_at_nodeThis is the first barycentric form of the Lagrange interpolant. .Lean, line 167
have hev := Lagrange.eval_interpolate_not_at_node (s := s) (v := fun k => (p k)⁻¹) (fun i => Q.eval (p i)⁻¹) hxv
hpf.lag.hfachave∀ k ∈ s, ((1 : ℝ) - p k * x)⁻¹ = (x - (p k)⁻¹)⁻¹ * -(p k)⁻¹Leaves
Polynomial.eval x Q * ∏ k ∈ s, ((1 : ℝ) - p k * x)⁻¹ = ∑ k ∈ s, Polynomial.eval (p k)⁻¹ Q * (∏ j ∈ s.erase k, ((1 : ℝ) - p j / p k))⁻¹ * ((1 : ℝ) - p k * x)⁻¹, withhfac : ∀ k ∈ s, ((1 : ℝ) - p k * x)⁻¹ = (x - (p k)⁻¹)⁻¹ * -(p k)⁻¹.Uses library
mul_inv,inv_neg.Lean, lines 169–174
have hfac : ∀ k ∈ s, (1 - p k * x)⁻¹ = (x - (p k)⁻¹)⁻¹ * (-(p k)⁻¹) := by intro k hk have h1 := hp k hk have h3 : (x - (p k)⁻¹) * (-(p k)) = 1 - p k * x := by rw [sub_mul, mul_neg, mul_neg, inv_mul_cancel₀ h1]; ring rw [← h3, mul_inv, inv_neg]hpf.lag.hfac.h1havep k ≠ (0 : ℝ)Leaves
((1 : ℝ) - p k * x)⁻¹ = (x - (p k)⁻¹)⁻¹ * -(p k)⁻¹, withh1 : p k ≠ (0 : ℝ).Lean, line 171
have h1 := hp k hk
hpf.lag.hfac.h3have(x - (p k)⁻¹) * -p k = (1 : ℝ) - p k * xLeaves
((1 : ℝ) - p k * x)⁻¹ = (x - (p k)⁻¹)⁻¹ * -(p k)⁻¹, withh3 : (x - (p k)⁻¹) * -p k = (1 : ℝ) - p k * x.Uses library
sub_mulAlias ofmul_sub_right_distrib. ,mul_neg,inv_mul_cancel₀.Lean, lines 172–173
have h3 : (x - (p k)⁻¹) * (-(p k)) = 1 - p k * x := by rw [sub_mul, mul_neg, mul_neg, inv_mul_cancel₀ h1]; ring
hpf.lag.hnehave∏ i ∈ s, (x - (p i)⁻¹) ≠ (0 : ℝ)Leaves
((∏ i ∈ s, (x - (p i)⁻¹)) * ∑ i ∈ s, Lagrange.nodalWeight s (fun (k : ℕ) => (p k)⁻¹) i * (x - (p i)⁻¹)⁻¹ * Polynomial.eval (p i)⁻¹ Q) * ((∏ x_1 ∈ s, (x - (p x_1)⁻¹)⁻¹) * ∏ x ∈ s, -(p x)⁻¹) = ∑ k ∈ s, Polynomial.eval (p k)⁻¹ Q * (∏ j ∈ s.erase k, ((1 : ℝ) - p j / p k))⁻¹ * ((1 : ℝ) - p k * x)⁻¹, withhne : ∏ i ∈ s, (x - (p i)⁻¹) ≠ (0 : ℝ).Uses library
Finset.prod_ne_zero_iff,sub_ne_zero.Lean, line 176
have hne : ∏ i ∈ s, (x - (p i)⁻¹) ≠ 0 := Finset.prod_ne_zero_iff.mpr (fun i hi => sub_ne_zero.mpr (hxv i hi))
hpf.lag.hjhave∀ j ∈ s.erase k, ((p k)⁻¹ - (p j)⁻¹)⁻¹ * -(p j)⁻¹ = ((1 : ℝ) - p j / p k)⁻¹Leaves
(∏ j ∈ s.erase k, ((p k)⁻¹ - (p j)⁻¹)⁻¹) * (x - (p k)⁻¹)⁻¹ * Polynomial.eval (p k)⁻¹ Q * (-(p k)⁻¹ * ∏ x ∈ s.erase k, -(p x)⁻¹) = Polynomial.eval (p k)⁻¹ Q * (∏ j ∈ s.erase k, ((1 : ℝ) - p j / p k))⁻¹ * ((1 : ℝ) - p k * x)⁻¹, withhj : ∀ j ∈ s.erase k, ((p k)⁻¹ - (p j)⁻¹)⁻¹ * -(p j)⁻¹ = ((1 : ℝ) - p j / p k)⁻¹.Lean, lines 181–190
have hj : ∀ j ∈ s.erase k, ((p k)⁻¹ - (p j)⁻¹)⁻¹ * -(p j)⁻¹ = (1 - p j / p k)⁻¹ := by intro j hj have hjs := Finset.mem_of_mem_erase hj have hjk := Finset.ne_of_mem_erase hj have hpj := hp j hjs have hpk := hp k hk have hne : p j ≠ p k := fun h => hjk (hinj hjs hk h) have hsub : p k - p j ≠ 0 := sub_ne_zero.mpr (Ne.symm hne) field_simp ringhpf.lag.hj.hjshavej ∈ sLeaves
((p k)⁻¹ - (p j)⁻¹)⁻¹ * -(p j)⁻¹ = ((1 : ℝ) - p j / p k)⁻¹, withhjs : j ∈ s.Uses library
Finset.mem_of_mem_erase.Lean, line 183
have hjs := Finset.mem_of_mem_erase hj
hpf.lag.hj.hjkhavej ≠ kLeaves
((p k)⁻¹ - (p j)⁻¹)⁻¹ * -(p j)⁻¹ = ((1 : ℝ) - p j / p k)⁻¹, withhjk : j ≠ k.Uses library
Finset.ne_of_mem_erase.Lean, line 184
have hjk := Finset.ne_of_mem_erase hj
hpf.lag.hj.hpjhavep j ≠ (0 : ℝ)Leaves
((p k)⁻¹ - (p j)⁻¹)⁻¹ * -(p j)⁻¹ = ((1 : ℝ) - p j / p k)⁻¹, withhpj : p j ≠ (0 : ℝ).Lean, line 185
have hpj := hp j hjs
hpf.lag.hj.hpkhavep k ≠ (0 : ℝ)Leaves
((p k)⁻¹ - (p j)⁻¹)⁻¹ * -(p j)⁻¹ = ((1 : ℝ) - p j / p k)⁻¹, withhpk : p k ≠ (0 : ℝ).Lean, line 186
have hpk := hp k hk
hpf.lag.hj.hnehavep j ≠ p kLeaves
((p k)⁻¹ - (p j)⁻¹)⁻¹ * -(p j)⁻¹ = ((1 : ℝ) - p j / p k)⁻¹, withhne : p j ≠ p k.Lean, line 187
have hne : p j ≠ p k := fun h => hjk (hinj hjs hk h)
hpf.lag.hj.hsubhavep k - p j ≠ (0 : ℝ)Leaves
((p k)⁻¹ - (p j)⁻¹)⁻¹ * -(p j)⁻¹ = ((1 : ℝ) - p j / p k)⁻¹, withhsub : p k - p j ≠ (0 : ℝ).Uses library
sub_ne_zero,Ne.symm.Lean, line 188
have hsub : p k - p j ≠ 0 := sub_ne_zero.mpr (Ne.symm hne)
hpf.lag.s8calc(∏ j ∈ s.erase k, ((p k)⁻¹ - (p j)⁻¹)⁻¹) * (x - (p k)⁻¹)⁻¹ * Polynomial.eval (p k)⁻¹ Q * (-(p k)⁻¹ * ∏ j ∈ s.erase k, -(p j)⁻¹) = (Polynomial.eval (p k)⁻¹ Q * ∏ j ∈ s.erase k, ((p k)⁻¹ - (p j)⁻¹)⁻¹ * -(p j)⁻¹) * ((x - (p k)⁻¹)⁻¹ * -(p k)⁻¹)Closes the goal.
Uses library
Finset.prod_mul_distrib.Lean, lines 191–194
calc (∏ j ∈ s.erase k, ((p k)⁻¹ - (p j)⁻¹)⁻¹) * (x - (p k)⁻¹)⁻¹ * Q.eval (p k)⁻¹ * (-(p k)⁻¹ * ∏ j ∈ s.erase k, -(p j)⁻¹) = Q.eval (p k)⁻¹ * (∏ j ∈ s.erase k, (((p k)⁻¹ - (p j)⁻¹)⁻¹ * -(p j)⁻¹)) * ((x - (p k)⁻¹)⁻¹ * -(p k)⁻¹) := by rw [Finset.prod_mul_distrib]; ringhpf.lag.s9calcCloses the goal.
Uses library
Finset.prod_congr,rflrfl : a = ais the unique constructor of the equality type. ,Finset.prod_inv_distrib.Lean, lines 195–196
_ = Q.eval (p k)⁻¹ * (∏ j ∈ s.erase k, (1 - p j / p k))⁻¹ * (1 - p k * x)⁻¹ := by rw [Finset.prod_congr rfl hj, ← Finset.prod_inv_distrib, hfac k hk]
hpf.hx2have(2 : ℝ) ≤ (2 : ℝ) ^ mLeaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhx2 : (2 : ℝ) ≤ (2 : ℝ) ^ m.Lean, lines 197–199
have hx2 : (2 : ℝ) ≤ (2 : ℝ) ^ m := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ m := pow_le_pow_right₀ (by norm_num) hmhpf.hx2.s1calc(2 : ℝ) = (2 : ℝ) ^ (1 : ℕ)Closes the goal.
Uses library
pow_one.Lean, line 198
calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm
hpf.hx2.s2calc(2 : ℝ) ^ (1 : ℕ) ≤ (2 : ℝ) ^ mCloses the goal.
Uses library
pow_le_pow_right₀.Lean, line 199
_ ≤ 2 ^ m := pow_le_pow_right₀ (by norm_num) hm
hpf.hx0have(2 : ℝ) ^ m ≠ (0 : ℝ)routine: positivityLeaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhx0 : (2 : ℝ) ^ m ≠ (0 : ℝ).Lean, line 200
have hx0 : (2 : ℝ) ^ m ≠ 0 := by positivity
hpf.hp0have∀ (k : ℕ), (8 / 3 : ℝ) * (2 : ℝ) ^ k ≠ (0 : ℝ)Leaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhp0 : ∀ (k : ℕ), (8 / 3 : ℝ) * (2 : ℝ) ^ k ≠ (0 : ℝ).Lean, line 201
have hp0 : ∀ k : ℕ, (8 / 3 : ℝ) * 2 ^ k ≠ 0 := fun k => by positivity
hpf.hpxhave∀ (k : ℕ), (1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m ≠ (0 : ℝ)Leaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhpx : ∀ (k : ℕ), (1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m ≠ (0 : ℝ).Lean, lines 202–205
have hpx : ∀ k : ℕ, 1 - (8 / 3 : ℝ) * 2 ^ k * 2 ^ m ≠ 0 := by intro k have h1 : (1 : ℝ) ≤ 2 ^ k := one_le_pow₀ (by norm_num) nlinarithhpf.hpx.h1have(1 : ℝ) ≤ (2 : ℝ) ^ kLeaves
(1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m ≠ (0 : ℝ), withh1 : (1 : ℝ) ≤ (2 : ℝ) ^ k.Uses library
one_le_pow₀.Lean, line 204
have h1 : (1 : ℝ) ≤ 2 ^ k := one_le_pow₀ (by norm_num)
hpf.hinjhaveSet.InjOn (fun (k : ℕ) => (8 / 3 : ℝ) * (2 : ℝ) ^ k) (↑(Finset.Icc (1 : ℕ) n) : Set ℕ)Leaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhinj : Set.InjOn (fun (k : ℕ) => (8 / 3 : ℝ) * (2 : ℝ) ^ k) (↑(Finset.Icc (1 : ℕ) n) : Set ℕ).Uses library
Set.InjOnfis injective onsif the restriction offtosis injective. ,Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,SetA set is a collection of elements of some typeα. ,pow_right_injective₀.Lean, lines 206–211
have hinj : Set.InjOn (fun k : ℕ => (8 / 3 : ℝ) * 2 ^ k) (Finset.Icc 1 n : Set ℕ) := by intro a _ b _ hab have h : (2 : ℝ) ^ a = 2 ^ b := by have := hab; simp only at this exact mul_left_cancel₀ (by norm_num : (8 / 3 : ℝ) ≠ 0) this exact pow_right_injective₀ (by norm_num : (0 : ℝ) < 2) (by norm_num) hhpf.hinj.hhave(2 : ℝ) ^ a = (2 : ℝ) ^ bLeaves
a = b, withh : (2 : ℝ) ^ a = (2 : ℝ) ^ b.Uses library
mul_left_cancel₀.Lean, lines 208–210
have h : (2 : ℝ) ^ a = 2 ^ b := by have := hab; simp only at this exact mul_left_cancel₀ (by norm_num : (8 / 3 : ℝ) ≠ 0) thishpf.hinj.h.thishave(fun (k : ℕ) => (8 / 3 : ℝ) * (2 : ℝ) ^ k) a = (fun (k : ℕ) => (8 / 3 : ℝ) * (2 : ℝ) ^ k) bLeaves
(2 : ℝ) ^ a = (2 : ℝ) ^ b, withthis : (fun (k : ℕ) => (8 / 3 : ℝ) * (2 : ℝ) ^ k) a = (fun (k : ℕ) => (8 / 3 : ℝ) * (2 : ℝ) ^ k) b.Lean, line 209
have := hab; simp only at this
hpf.hdeghave(-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))).degree < (↑(Finset.Icc (1 : ℕ) n).card : WithBot ℕ)Leaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhdeg : (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))).degree < (↑(Finset.Icc (1 : ℕ) n).card : WithBot ℕ).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Polynomial.XXis the polynomial variable (aka indeterminate). ,Polynomial.CC ais the constant polynomiala. ,WithBotAttach⊥to a type. ,Polynomial.degree_neg,Polynomial.degree_prodThe degree of a product of polynomials is equal to the sum of the degrees, where the degree of the zero polynomial is ⊥. ,Polynomial.degree_X_sub_C,Finset.sum_const,Nat.card_Icc,nsmul_one.Lean, lines 212–216
have hdeg : (-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))).degree < ((Finset.Icc 1 n).card : WithBot ℕ) := by rw [Polynomial.degree_neg, Polynomial.degree_prod] simp only [Polynomial.degree_X_sub_C, Finset.sum_const, Nat.card_Icc] rw [show n - 1 + 1 - 1 = n - 1 by omega, show n + 1 - 1 = n by omega, nsmul_one] exact_mod_cast (by omega : n - 1 < n)hpf.hLhavePolynomial.eval ((2 : ℝ) ^ m) (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m)⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, Polynomial.eval ((8 / 3 : ℝ) * (2 : ℝ) ^ k)⁻¹ (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))) * (∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ j / ((8 / 3 : ℝ) * (2 : ℝ) ^ k)))⁻¹ * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m)⁻¹Leaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhL : Polynomial.eval ((2 : ℝ) ^ m) (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m)⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, Polynomial.eval ((8 / 3 : ℝ) * (2 : ℝ) ^ k)⁻¹ (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (Polynomial.X - (Polynomial.C : ℝ → Polynomial ℝ) ((2 : ℝ) ^ t))) * (∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ j / ((8 / 3 : ℝ) * (2 : ℝ) ^ k)))⁻¹ * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m)⁻¹.Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Polynomial.XXis the polynomial variable (aka indeterminate). ,Polynomial.CC ais the constant polynomiala. .Lean, lines 217–218
have hL := lag (Finset.Icc 1 n) (fun k => (8 / 3 : ℝ) * 2 ^ k) (-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))) (fun k _ => hp0 k) hinj hdeg ((2 : ℝ) ^ m) (fun k _ => hpx k)hpf.hcardhave(Finset.Icc (1 : ℕ) (n - (1 : ℕ))).card = n - (1 : ℕ)Leaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhcard : (Finset.Icc (1 : ℕ) (n - (1 : ℕ))).card = n - (1 : ℕ).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Nat.card_Icc.Lean, line 220
have hcard : (Finset.Icc 1 (n - 1)).card = n - 1 := by rw [Nat.card_Icc]; omega
hpf.hgeohave∀ (u : ℝ), u ≠ (0 : ℝ) → (1 : ℝ) - u ≠ (0 : ℝ) → ∀ (N : ℕ), ((1 : ℝ) - u)⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) N, (u ^ i)⁻¹ = (u ^ N)⁻¹ * ((1 : ℝ) - u)⁻¹Leaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhgeo : ∀ (u : ℝ), u ≠ (0 : ℝ) → (1 : ℝ) - u ≠ (0 : ℝ) → ∀ (N : ℕ), ((1 : ℝ) - u)⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) N, (u ^ i)⁻¹ = (u ^ N)⁻¹ * ((1 : ℝ) - u)⁻¹.Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. .Lean, lines 222–230
have hgeo : ∀ u : ℝ, u ≠ 0 → 1 - u ≠ 0 → ∀ N : ℕ, (1 - u)⁻¹ + ∑ i ∈ Finset.Icc 1 N, (u ^ i)⁻¹ = (u ^ N)⁻¹ * (1 - u)⁻¹ := by intro u hu hu1 N induction N with | zero => simp | succ N ih => rw [Finset.sum_Icc_succ_top (by omega), ← add_assoc, ih] have hN : u ^ N ≠ 0 := pow_ne_zero _ hu field_simp ringhpf.hgeo.s1case routine: simpLeaves
((1 : ℝ) - u)⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (0 : ℕ), (u ^ i)⁻¹ = (u ^ (0 : ℕ))⁻¹ * ((1 : ℝ) - u)⁻¹.Uses library
Nat.zeroZero, the smallest natural number. .hpf.hgeo.s2caseLeaves
((1 : ℝ) - u)⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (N + (1 : ℕ)), (u ^ i)⁻¹ = (u ^ (N + (1 : ℕ)))⁻¹ * ((1 : ℝ) - u)⁻¹, withN : ℕ,ih : ((1 : ℝ) - u)⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) N, (u ^ i)⁻¹ = (u ^ N)⁻¹ * ((1 : ℝ) - u)⁻¹.Uses library
Nat.succThe successor of a natural numbern. ,Finset.sum_Icc_succ_top,add_assoc.Lean, lines 226–230
| succ N ih => rw [Finset.sum_Icc_succ_top (by omega), ← add_assoc, ih] have hN : u ^ N ≠ 0 := pow_ne_zero _ hu field_simp ringhpf.hgeo.s2.hNhaveu ^ N ≠ (0 : ℝ)Leaves
(u ^ N)⁻¹ * ((1 : ℝ) - u)⁻¹ + (u ^ (N + (1 : ℕ)))⁻¹ = (u ^ (N + (1 : ℕ)))⁻¹ * ((1 : ℝ) - u)⁻¹, withhN : u ^ N ≠ (0 : ℝ).Uses library
pow_ne_zero.Lean, line 228
have hN : u ^ N ≠ 0 := pow_ne_zero _ hu
hpf.hz1have∀ (k : ℕ), (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ)) = (2 : ℝ) ^ k * ((2 : ℝ) ^ m)⁻¹Leaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhz1 : ∀ (k : ℕ), (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ)) = (2 : ℝ) ^ k * ((2 : ℝ) ^ m)⁻¹.Uses library
zpow_sub₀,two_ne_zero,zpow_natCast,div_eq_mul_invDividing by an element is the same as multiplying by its inverse. .Lean, lines 232–233
have hz1 : ∀ k : ℕ, (2 : ℝ) ^ ((k : ℤ) - (m : ℤ)) = 2 ^ k * ((2 : ℝ) ^ m)⁻¹ := fun k => by rw [zpow_sub₀ two_ne_zero, zpow_natCast, zpow_natCast, div_eq_mul_inv]hpf.hz2have∀ (k : ℕ), (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)) = (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ mLeaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhz2 : ∀ (k : ℕ), (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)) = (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m.Uses library
zpow_add₀,two_ne_zero,zpow_natCast,mul_assoc.Lean, lines 234–235
have hz2 : ∀ k : ℕ, (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (m : ℤ)) = ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m := fun k => by rw [zpow_add₀ two_ne_zero, zpow_natCast, zpow_natCast, mul_assoc]hpf.hz3have(8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)) = (8 / 3 : ℝ) * (2 : ℝ) ^ n * (2 : ℝ) ^ mLeaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhz3 : (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)) = (8 / 3 : ℝ) * (2 : ℝ) ^ n * (2 : ℝ) ^ m.Uses library
zpow_add₀,two_ne_zero,zpow_natCast,mul_comm,mul_assoc.Lean, lines 236–237
have hz3 : (8 / 3 : ℝ) * (2 : ℝ) ^ ((m : ℤ) + (n : ℤ)) = ((8 / 3 : ℝ) * 2 ^ n) * (2 : ℝ) ^ m := by rw [zpow_add₀ two_ne_zero, zpow_natCast, zpow_natCast, mul_comm ((2 : ℝ) ^ m), mul_assoc]hpf.hsplithave∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m)⁻¹ = (∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m)⁻¹) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ n * (2 : ℝ) ^ m)⁻¹Leaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhsplit : ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m)⁻¹ = (∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m)⁻¹) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ n * (2 : ℝ) ^ m)⁻¹.Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.prod_Icc_succ_top.Lean, lines 238–241
have hsplit : ∏ k ∈ Finset.Icc 1 n, (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹ = (∏ k ∈ Finset.Icc 1 (n - 1), (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) * (1 - ((8 / 3 : ℝ) * 2 ^ n) * (2 : ℝ) ^ m)⁻¹ := by have hn' : n = n - 1 + 1 := by omega conv_lhs => rw [hn'] rw [Finset.prod_Icc_succ_top (by omega), ← hn']hpf.hsplit.hn'haven = n - (1 : ℕ) + (1 : ℕ)routine: omegaLeaves
∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m)⁻¹ = (∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m)⁻¹) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ n * (2 : ℝ) ^ m)⁻¹, withhn' : n = n - (1 : ℕ) + (1 : ℕ).Lean, line 239
have hn' : n = n - 1 + 1 := by omega
hpf.hfachave∀ (k : ℕ), (1 : ℝ) - (2 : ℝ) ^ k * ((2 : ℝ) ^ m)⁻¹ = ((2 : ℝ) ^ m)⁻¹ * ((2 : ℝ) ^ m - (2 : ℝ) ^ k)Leaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhfac : ∀ (k : ℕ), (1 : ℝ) - (2 : ℝ) ^ k * ((2 : ℝ) ^ m)⁻¹ = ((2 : ℝ) ^ m)⁻¹ * ((2 : ℝ) ^ m - (2 : ℝ) ^ k).Uses library
mul_subAlias ofmul_sub_left_distrib. ,inv_mul_cancel₀.Lean, lines 242–243
have hfac : ∀ k : ℕ, 1 - 2 ^ k * ((2 : ℝ) ^ m)⁻¹ = ((2 : ℝ) ^ m)⁻¹ * ((2 : ℝ) ^ m - (2 : ℝ) ^ k) := fun k => by rw [mul_sub, inv_mul_cancel₀ hx0]; ringhpf.hLHShave-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = (((2 : ℝ) ^ m) ^ (n - (1 : ℕ)))⁻¹ * ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((2 : ℝ) ^ m - (2 : ℝ) ^ t)) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m)⁻¹)Leaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhLHS : -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = (((2 : ℝ) ^ m) ^ (n - (1 : ℕ)))⁻¹ * ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((2 : ℝ) ^ m - (2 : ℝ) ^ t)) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m)⁻¹).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.prod_mul_distrib,Finset.prod_congr,rflrfl : a = ais the unique constructor of the equality type. ,Finset.prod_const,inv_pow.Lean, lines 244–248
have hLHS : (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (((m : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - (m : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (m : ℕ)))⁻¹) = (((2 : ℝ) ^ m) ^ (n - 1))⁻¹ * ((-∏ t ∈ Finset.Icc 1 (n - 1), ((2 : ℝ) ^ m - (2 : ℝ) ^ t)) * ∏ k ∈ Finset.Icc 1 n, (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) := by simp only [hz1, hz2, hz3] rw [Finset.prod_mul_distrib, hsplit, Finset.prod_congr rfl (fun k _ => hfac k), Finset.prod_mul_distrib, Finset.prod_const, hcard, inv_pow] ringhpf.hpkhave∀ (k : ℕ), (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m) = (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ mLeaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhpk : ∀ (k : ℕ), (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m) = (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m.Uses library
pow_add,mul_assoc.Lean, line 250
have hpk : ∀ k : ℕ, (8 / 3 : ℝ) * 2 ^ (k + m) = ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m := fun k => by rw [pow_add, mul_assoc]
hpf.hswaphave∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (((8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m) ^ i)⁻¹Leaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhswap : ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (((8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m) ^ i)⁻¹.Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.sum_mul,Finset.mul_sum,Finset.sum_comm,Finset.sum_congr,rflrfl : a = ais the unique constructor of the equality type. ,mul_pow,mul_inv.Lean, lines 251–255
have hswap : ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹ = ∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * ∑ i ∈ Finset.Icc 1 (n - 1), ((((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m) ^ i)⁻¹ := by simp only [Finset.sum_mul, Finset.mul_sum] rw [Finset.sum_comm] refine Finset.sum_congr rfl (fun k _ => Finset.sum_congr rfl (fun i _ => ?_)) rw [mul_pow, mul_inv]; ringhpf.hRHShave∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m) ^ (n - (1 : ℕ)))⁻¹ * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m)⁻¹Leaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhRHS : ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m) ^ (n - (1 : ℕ)))⁻¹ * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m)⁻¹.Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.sum_add_distrib,Finset.sum_congr,rflrfl : a = ais the unique constructor of the equality type. ,mul_addAlias ofleft_distrib. ,mul_ne_zero.Lean, lines 256–261
have hRHS : ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹) + ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹) = (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * ((((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m) ^ (n - 1))⁻¹ * (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) := by simp only [hpk] rw [hswap, ← Finset.sum_add_distrib] refine Finset.sum_congr rfl (fun k hk => ?_) rw [← mul_add, hgeo _ (mul_ne_zero (hp0 k) hx0) (hpx k) (n - 1)] ringhpf.hcoefhave∀ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ (n - (1 : ℕ)))⁻¹ = (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (((8 / 3 : ℝ) * (2 : ℝ) ^ k)⁻¹ - (2 : ℝ) ^ t)) * (∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ j / ((8 / 3 : ℝ) * (2 : ℝ) ^ k)))⁻¹Leaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹, withhcoef : ∀ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ (n - (1 : ℕ)))⁻¹ = (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (((8 / 3 : ℝ) * (2 : ℝ) ^ k)⁻¹ - (2 : ℝ) ^ t)) * (∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ j / ((8 / 3 : ℝ) * (2 : ℝ) ^ k)))⁻¹.Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.prod_congr,rflrfl : a = ais the unique constructor of the equality type. ,Finset.prod_mul_distrib,Finset.prod_const,inv_pow.Lean, lines 263–273
have hcoef : ∀ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * 2 ^ k) ^ (n - 1))⁻¹ = (-∏ t ∈ Finset.Icc 1 (n - 1), (((8 / 3 : ℝ) * 2 ^ k)⁻¹ - (2 : ℝ) ^ t)) * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 / 3 : ℝ) * 2 ^ j) / ((8 / 3 : ℝ) * 2 ^ k)))⁻¹ := by intro k hk have hq : ∀ t : ℕ, ((8 / 3 : ℝ) * 2 ^ k)⁻¹ - (2 : ℝ) ^ t = ((8 / 3 : ℝ) * 2 ^ k)⁻¹ * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k)) := fun t => by rw [mul_sub, mul_one, pow_add, show ((8 / 3 : ℝ) * 2 ^ k)⁻¹ * ((8 / 3 : ℝ) * (2 ^ t * 2 ^ k)) = 2 ^ t * (((8 / 3 : ℝ) * 2 ^ k)⁻¹ * ((8 / 3 : ℝ) * 2 ^ k)) by ring, inv_mul_cancel₀ (hp0 k), mul_one] have hw : ∀ j : ℕ, ((8 / 3 : ℝ) * 2 ^ j) / ((8 / 3 : ℝ) * 2 ^ k) = (2 : ℝ) ^ ((j : ℤ) - (k : ℤ)) := fun j => by rw [zpow_sub₀ two_ne_zero, zpow_natCast, zpow_natCast] field_simp rw [Finset.prod_congr rfl (fun t _ => hq t), Finset.prod_mul_distrib, Finset.prod_const, hcard, inv_pow] simp only [hw] ringhpf.hcoef.hqhave∀ (t : ℕ), ((8 / 3 : ℝ) * (2 : ℝ) ^ k)⁻¹ - (2 : ℝ) ^ t = ((8 / 3 : ℝ) * (2 : ℝ) ^ k)⁻¹ * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))Leaves
((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ (n - (1 : ℕ)))⁻¹ = (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (((8 / 3 : ℝ) * (2 : ℝ) ^ k)⁻¹ - (2 : ℝ) ^ t)) * (∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ j / ((8 / 3 : ℝ) * (2 : ℝ) ^ k)))⁻¹, withhq : ∀ (t : ℕ), ((8 / 3 : ℝ) * (2 : ℝ) ^ k)⁻¹ - (2 : ℝ) ^ t = ((8 / 3 : ℝ) * (2 : ℝ) ^ k)⁻¹ * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k)).Uses library
mul_subAlias ofmul_sub_left_distrib. ,mul_one,pow_add,inv_mul_cancel₀.Lean, lines 265–267
have hq : ∀ t : ℕ, ((8 / 3 : ℝ) * 2 ^ k)⁻¹ - (2 : ℝ) ^ t = ((8 / 3 : ℝ) * 2 ^ k)⁻¹ * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k)) := fun t => by rw [mul_sub, mul_one, pow_add, show ((8 / 3 : ℝ) * 2 ^ k)⁻¹ * ((8 / 3 : ℝ) * (2 ^ t * 2 ^ k)) = 2 ^ t * (((8 / 3 : ℝ) * 2 ^ k)⁻¹ * ((8 / 3 : ℝ) * 2 ^ k)) by ring, inv_mul_cancel₀ (hp0 k), mul_one]hpf.hcoef.hwhave∀ (j : ℕ), (8 / 3 : ℝ) * (2 : ℝ) ^ j / ((8 / 3 : ℝ) * (2 : ℝ) ^ k) = (2 : ℝ) ^ ((↑j : ℤ) - (↑k : ℤ))Leaves
((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ (n - (1 : ℕ)))⁻¹ = (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (((8 / 3 : ℝ) * (2 : ℝ) ^ k)⁻¹ - (2 : ℝ) ^ t)) * (∏ j ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ j / ((8 / 3 : ℝ) * (2 : ℝ) ^ k)))⁻¹, withhw : ∀ (j : ℕ), (8 / 3 : ℝ) * (2 : ℝ) ^ j / ((8 / 3 : ℝ) * (2 : ℝ) ^ k) = (2 : ℝ) ^ ((↑j : ℤ) - (↑k : ℤ)).Uses library
zpow_sub₀,two_ne_zero,zpow_natCast.Lean, lines 268–270
have hw : ∀ j : ℕ, ((8 / 3 : ℝ) * 2 ^ j) / ((8 / 3 : ℝ) * 2 ^ k) = (2 : ℝ) ^ ((j : ℤ) - (k : ℤ)) := fun j => by rw [zpow_sub₀ two_ne_zero, zpow_natCast, zpow_natCast] field_simp
hpf.s21calc-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = (((2 : ℝ) ^ m) ^ (n - (1 : ℕ)))⁻¹ * ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((2 : ℝ) ^ m - (2 : ℝ) ^ t)) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m)⁻¹)Closes the goal.
Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. .Lean, line 274
calc (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (((m : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - (m : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (m : ℕ)))⁻¹) = (((2 : ℝ) ^ m) ^ (n - 1))⁻¹ * ((-∏ t ∈ Finset.Icc 1 (n - 1), ((2 : ℝ) ^ m - (2 : ℝ) ^ t)) * ∏ k ∈ Finset.Icc 1 n, (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) := hLHS
hpf.s22calcCloses the goal.
Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. .Lean, line 275
_ = (((2 : ℝ) ^ m) ^ (n - 1))⁻¹ * (∑ k ∈ Finset.Icc 1 n, (-∏ t ∈ Finset.Icc 1 (n - 1), (((8 / 3 : ℝ) * 2 ^ k)⁻¹ - (2 : ℝ) ^ t)) * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 / 3 : ℝ) * 2 ^ j) / ((8 / 3 : ℝ) * 2 ^ k)))⁻¹ * (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) := by rw [hL]
hpf.s23calcCloses the goal.
Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.mul_sum,Finset.sum_congr,rflrfl : a = ais the unique constructor of the equality type. ,mul_pow,mul_inv.Lean, lines 276–280
_ = (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * ((((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m) ^ (n - 1))⁻¹ * (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) := by rw [Finset.mul_sum] refine Finset.sum_congr rfl (fun k hk => ?_) rw [← hcoef k hk, mul_pow, mul_inv] ringhpf.s24calc∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m) ^ (n - (1 : ℕ)))⁻¹ * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m)⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹Closes the goal.
Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. .Lean, line 281
_ = ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹) + ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹) := hRHS.symm
hreshave∀ (n : ℕ), (1 : ℕ) ≤ n → ∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ = (∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ)))Leaves
∃ (a : ℕ → ℤ) (b : ℕ → ℤ), ∀ (n : ℕ), (1 : ℕ) ≤ n → (↑(b n) : ℝ) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (↑(a n) : ℝ) = (9 : ℝ) ^ n * (((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * ∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) * ∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹, withhres : ∀ (n : ℕ), (1 : ℕ) ≤ n → ∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ = (∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,zero_add,tsum_congr,Summable.tsum_finsetSum,Finset.mem_Icc,Finset.sum_congr,rflrfl : a = ais the unique constructor of the equality type. ,tsum_mul_left,mul_subAlias ofmul_sub_left_distrib. ,Finset.sum_sub_distrib,Finset.sum_mul,div_eq_mul_invDividing by an element is the same as multiplying by its inverse. .Lean, lines 283–359
have hres : ∀ n : ℕ, 1 ≤ n → (∑' j : ℕ, (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (((n + j : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - (n + j : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (n + j : ℕ)))⁻¹)) = (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))) * (∑' j : ℕ, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + 1))⁻¹) - ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (∑ i ∈ Finset.Icc 1 k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹)) - ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - 1)) := by intro n hn have pf := hpf n hn -- Summability of the two families of pieces. have hT : ∀ k : ℕ, Summable (fun m : ℕ => (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + 1)))⁻¹) := by intro k refine Summable.of_norm_bounded (summable_geometric_of_lt_one (by norm_num : (0 : ℝ) ≤ 1 / 2) (by norm_num)) (fun m => ?_) have h1 : (1 : ℝ) ≤ 2 ^ k := one_le_pow₀ (by norm_num) have h2 : (1 : ℝ) ≤ 2 ^ m := one_le_pow₀ (by norm_num) have he : (2 : ℝ) ^ (k + (m + 1)) = 2 * 2 ^ k * 2 ^ m := by ring have hneg : (1 : ℝ) - 8 / 3 * 2 ^ (k + (m + 1)) < 0 := by rw [he]; nlinarith rw [Real.norm_eq_abs, abs_inv, abs_of_neg hneg, one_div_pow, one_div] exact inv_anti₀ (by positivity) (by rw [he]; nlinarith) have hGeo : ∀ i : ℕ, 1 ≤ i → ∑' m : ℕ, (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹ = ((2 : ℝ) ^ i - 1)⁻¹ := by intro i hi have h2 : (2 : ℝ) ≤ 2 ^ i := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi have hr0 : (0 : ℝ) ≤ ((2 : ℝ) ^ i)⁻¹ := by positivity have hr1 : ((2 : ℝ) ^ i)⁻¹ < 1 := inv_lt_one_of_one_lt₀ (by linarith) have hc : ∀ m : ℕ, (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹ = ((2 : ℝ) ^ i)⁻¹ * (((2 : ℝ) ^ i)⁻¹) ^ m := by intro m rw [← pow_succ', inv_pow, ← pow_mul, ← pow_mul, mul_comm] rw [tsum_congr hc, tsum_mul_left, tsum_geometric_of_lt_one hr0 hr1] have h3 : (2 : ℝ) ^ i - 1 ≠ 0 := by linarith have h4 : (2 : ℝ) ^ i ≠ 0 := by positivity field_simp have hGs : ∀ i : ℕ, 1 ≤ i → Summable (fun m : ℕ => (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹) := by intro i hi by_contra hns have := tsum_eq_zero_of_not_summable hns rw [hGeo i hi] at this have h2 : (2 : ℝ) ≤ 2 ^ i := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi have : ((2 : ℝ) ^ i - 1)⁻¹ ≠ 0 := inv_ne_zero (by linarith) contradiction have hz0 : Summable (fun j : ℕ => (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + 1))⁻¹) := by simpa using hT 0 have hIcc : ∀ k : ℕ, ∑ i ∈ Finset.range k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (i + 1))⁻¹ = ∑ i ∈ Finset.Icc 1 k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ := by intro k induction k with | zero => simp | succ k ih => rw [Finset.sum_range_succ, ih, Finset.sum_Icc_succ_top (by omega)] have hTail : ∀ k : ℕ, ∑' m : ℕ, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + 1)))⁻¹ = (∑' j : ℕ, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + 1))⁻¹) - ∑ i ∈ Finset.Icc 1 k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ := by intro k have hs := hz0.sum_add_tsum_nat_add k rw [hIcc k] at hs rw [← hs, add_sub_cancel_left] exact tsum_congr (fun m => by rw [show k + (m + 1) = m + k + 1 by omega]) -- The series E(n) summed from m = 1: its first n - 1 terms vanish. have hRs1 : Summable (fun m : ℕ => ∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + 1)))⁻¹) := summable_sum (fun k _ => (hT k).mul_left _) have hRs2 : Summable (fun m : ℕ => ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹) := summable_sum (fun i hi => (hGs i (Finset.mem_Icc.mp hi).1).mul_left _) have hRs : Summable (fun m : ℕ => ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + 1)))⁻¹) + ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹)) := hRs1.add hRs2 have hGsum : Summable (fun m : ℕ => (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((((m + 1) : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - ((m + 1) : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + ((m + 1) : ℕ)))⁻¹)) := hRs.congr (fun m => (pf (m + 1) (by omega)).symm) have hshift := hGsum.sum_add_tsum_nat_add (n - 1) have hzero : ∑ i ∈ Finset.range (n - 1), (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((((i + 1) : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - ((i + 1) : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + ((i + 1) : ℕ)))⁻¹) = 0 := by refine Finset.sum_eq_zero (fun i hi => ?_) have hi' : i + 1 ∈ Finset.Icc 1 (n - 1) := by rw [Finset.mem_range] at hi rw [Finset.mem_Icc]; omega refine mul_eq_zero_of_right _ (Finset.prod_eq_zero hi' ?_) simp rw [hzero, zero_add] at hshift have hE : (∑' j : ℕ, (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (((n + j : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - (n + j : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (n + j : ℕ)))⁻¹)) = ∑' m : ℕ, (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((((m + 1) : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - ((m + 1) : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + ((m + 1) : ℕ)))⁻¹) := by rw [← hshift] exact tsum_congr (fun j => by rw [show j + (n - 1) + 1 = n + j by omega]) rw [hE, tsum_congr (fun m => pf (m + 1) (by omega)), hRs1.tsum_add hRs2, Summable.tsum_finsetSum (fun k _ => (hT k).mul_left _), Summable.tsum_finsetSum (fun i hi => (hGs i (Finset.mem_Icc.mp hi).1).mul_left _), Finset.sum_congr (s₁ := Finset.Icc 1 n) rfl (fun k _ => by rw [tsum_mul_left, hTail k]), Finset.sum_congr (s₁ := Finset.Icc 1 (n - 1)) rfl (fun i hi => by rw [tsum_mul_left, hGeo i (Finset.mem_Icc.mp hi).1])] simp only [mul_sub, Finset.sum_sub_distrib, Finset.sum_mul, div_eq_mul_inv] ringhres.pfhave∀ (m : ℕ), (1 : ℕ) ≤ m → -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹Leaves
∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ = (∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withpf : ∀ (m : ℕ), (1 : ℕ) ≤ m → -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑m : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑m : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑m : ℤ)))⁻¹ = ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹.Lean, line 285
have pf := hpf n hn
hres.hThave∀ (k : ℕ), Summable fun (m : ℕ) => ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + (1 : ℕ))))⁻¹Leaves
∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ = (∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withhT : ∀ (k : ℕ), Summable fun (m : ℕ) => ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + (1 : ℕ))))⁻¹.Uses library
SummableSummable fmeans thatfhas some (infinite) sum with respect toL. ,Summable.of_norm_boundedThe direct comparison test for series: if the norm offis bounded by a real functiongwhich is summable, thenfis summable. ,summable_geometric_of_lt_one,Real.norm_eq_abs,abs_inv,abs_of_neg,one_div_pow,one_div,inv_anti₀.Lean, lines 287–295
have hT : ∀ k : ℕ, Summable (fun m : ℕ => (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + 1)))⁻¹) := by intro k refine Summable.of_norm_bounded (summable_geometric_of_lt_one (by norm_num : (0 : ℝ) ≤ 1 / 2) (by norm_num)) (fun m => ?_) have h1 : (1 : ℝ) ≤ 2 ^ k := one_le_pow₀ (by norm_num) have h2 : (1 : ℝ) ≤ 2 ^ m := one_le_pow₀ (by norm_num) have he : (2 : ℝ) ^ (k + (m + 1)) = 2 * 2 ^ k * 2 ^ m := by ring have hneg : (1 : ℝ) - 8 / 3 * 2 ^ (k + (m + 1)) < 0 := by rw [he]; nlinarith rw [Real.norm_eq_abs, abs_inv, abs_of_neg hneg, one_div_pow, one_div] exact inv_anti₀ (by positivity) (by rw [he]; nlinarith)hres.hT.h1have(1 : ℝ) ≤ (2 : ℝ) ^ kLeaves
‖((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + (1 : ℕ))))⁻¹‖ ≤ (1 / 2 : ℝ) ^ m, withh1 : (1 : ℝ) ≤ (2 : ℝ) ^ k.Uses library
one_le_pow₀.Lean, line 290
have h1 : (1 : ℝ) ≤ 2 ^ k := one_le_pow₀ (by norm_num)
hres.hT.h2have(1 : ℝ) ≤ (2 : ℝ) ^ mLeaves
‖((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + (1 : ℕ))))⁻¹‖ ≤ (1 / 2 : ℝ) ^ m, withh2 : (1 : ℝ) ≤ (2 : ℝ) ^ m.Uses library
one_le_pow₀.Lean, line 291
have h2 : (1 : ℝ) ≤ 2 ^ m := one_le_pow₀ (by norm_num)
hres.hT.hehave(2 : ℝ) ^ (k + (m + (1 : ℕ))) = (2 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ mroutine: ringLeaves
‖((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + (1 : ℕ))))⁻¹‖ ≤ (1 / 2 : ℝ) ^ m, withhe : (2 : ℝ) ^ (k + (m + (1 : ℕ))) = (2 : ℝ) * (2 : ℝ) ^ k * (2 : ℝ) ^ m.Lean, line 292
have he : (2 : ℝ) ^ (k + (m + 1)) = 2 * 2 ^ k * 2 ^ m := by ring
hres.hT.hneghave(1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + (1 : ℕ))) < (0 : ℝ)Leaves
‖((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + (1 : ℕ))))⁻¹‖ ≤ (1 / 2 : ℝ) ^ m, withhneg : (1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + (1 : ℕ))) < (0 : ℝ).Lean, line 293
have hneg : (1 : ℝ) - 8 / 3 * 2 ^ (k + (m + 1)) < 0 := by rw [he]; nlinarith
hres.hGeohave∀ (i : ℕ), (1 : ℕ) ≤ i → ∑' (m : ℕ), (((2 : ℝ) ^ (m + (1 : ℕ))) ^ i)⁻¹ = ((2 : ℝ) ^ i - (1 : ℝ))⁻¹Leaves
∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ = (∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withhGeo : ∀ (i : ℕ), (1 : ℕ) ≤ i → ∑' (m : ℕ), (((2 : ℝ) ^ (m + (1 : ℕ))) ^ i)⁻¹ = ((2 : ℝ) ^ i - (1 : ℝ))⁻¹.Uses library
tsum_congr,tsum_mul_left,tsum_geometric_of_lt_one.Lean, lines 296–309
have hGeo : ∀ i : ℕ, 1 ≤ i → ∑' m : ℕ, (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹ = ((2 : ℝ) ^ i - 1)⁻¹ := by intro i hi have h2 : (2 : ℝ) ≤ 2 ^ i := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi have hr0 : (0 : ℝ) ≤ ((2 : ℝ) ^ i)⁻¹ := by positivity have hr1 : ((2 : ℝ) ^ i)⁻¹ < 1 := inv_lt_one_of_one_lt₀ (by linarith) have hc : ∀ m : ℕ, (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹ = ((2 : ℝ) ^ i)⁻¹ * (((2 : ℝ) ^ i)⁻¹) ^ m := by intro m rw [← pow_succ', inv_pow, ← pow_mul, ← pow_mul, mul_comm] rw [tsum_congr hc, tsum_mul_left, tsum_geometric_of_lt_one hr0 hr1] have h3 : (2 : ℝ) ^ i - 1 ≠ 0 := by linarith have h4 : (2 : ℝ) ^ i ≠ 0 := by positivity field_simphres.hGeo.h2have(2 : ℝ) ≤ (2 : ℝ) ^ iLeaves
∑' (m : ℕ), (((2 : ℝ) ^ (m + (1 : ℕ))) ^ i)⁻¹ = ((2 : ℝ) ^ i - (1 : ℝ))⁻¹, withh2 : (2 : ℝ) ≤ (2 : ℝ) ^ i.Lean, lines 298–300
have h2 : (2 : ℝ) ≤ 2 ^ i := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hihres.hGeo.h2.s1calc(2 : ℝ) = (2 : ℝ) ^ (1 : ℕ)Closes the goal.
Uses library
pow_one.Lean, line 299
calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm
hres.hGeo.h2.s2calc(2 : ℝ) ^ (1 : ℕ) ≤ (2 : ℝ) ^ iCloses the goal.
Uses library
pow_le_pow_right₀.Lean, line 300
_ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi
hres.hGeo.hr0have(0 : ℝ) ≤ ((2 : ℝ) ^ i)⁻¹routine: positivityLeaves
∑' (m : ℕ), (((2 : ℝ) ^ (m + (1 : ℕ))) ^ i)⁻¹ = ((2 : ℝ) ^ i - (1 : ℝ))⁻¹, withhr0 : (0 : ℝ) ≤ ((2 : ℝ) ^ i)⁻¹.Lean, line 301
have hr0 : (0 : ℝ) ≤ ((2 : ℝ) ^ i)⁻¹ := by positivity
hres.hGeo.hr1have((2 : ℝ) ^ i)⁻¹ < (1 : ℝ)Leaves
∑' (m : ℕ), (((2 : ℝ) ^ (m + (1 : ℕ))) ^ i)⁻¹ = ((2 : ℝ) ^ i - (1 : ℝ))⁻¹, withhr1 : ((2 : ℝ) ^ i)⁻¹ < (1 : ℝ).Uses library
inv_lt_one_of_one_lt₀.Lean, line 302
have hr1 : ((2 : ℝ) ^ i)⁻¹ < 1 := inv_lt_one_of_one_lt₀ (by linarith)
hres.hGeo.hchave∀ (m : ℕ), (((2 : ℝ) ^ (m + (1 : ℕ))) ^ i)⁻¹ = ((2 : ℝ) ^ i)⁻¹ * ((2 : ℝ) ^ i)⁻¹ ^ mLeaves
∑' (m : ℕ), (((2 : ℝ) ^ (m + (1 : ℕ))) ^ i)⁻¹ = ((2 : ℝ) ^ i - (1 : ℝ))⁻¹, withhc : ∀ (m : ℕ), (((2 : ℝ) ^ (m + (1 : ℕ))) ^ i)⁻¹ = ((2 : ℝ) ^ i)⁻¹ * ((2 : ℝ) ^ i)⁻¹ ^ m.Uses library
pow_succ',inv_pow,pow_mul,mul_comm.Lean, lines 303–305
have hc : ∀ m : ℕ, (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹ = ((2 : ℝ) ^ i)⁻¹ * (((2 : ℝ) ^ i)⁻¹) ^ m := by intro m rw [← pow_succ', inv_pow, ← pow_mul, ← pow_mul, mul_comm]hres.hGeo.h3have(2 : ℝ) ^ i - (1 : ℝ) ≠ (0 : ℝ)routine: linarithLeaves
((2 : ℝ) ^ i)⁻¹ * ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹)⁻¹ = ((2 : ℝ) ^ i - (1 : ℝ))⁻¹, withh3 : (2 : ℝ) ^ i - (1 : ℝ) ≠ (0 : ℝ).Lean, line 307
have h3 : (2 : ℝ) ^ i - 1 ≠ 0 := by linarith
hres.hGeo.h4have(2 : ℝ) ^ i ≠ (0 : ℝ)routine: positivityLeaves
((2 : ℝ) ^ i)⁻¹ * ((1 : ℝ) - ((2 : ℝ) ^ i)⁻¹)⁻¹ = ((2 : ℝ) ^ i - (1 : ℝ))⁻¹, withh4 : (2 : ℝ) ^ i ≠ (0 : ℝ).Lean, line 308
have h4 : (2 : ℝ) ^ i ≠ 0 := by positivity
hres.hGshave∀ (i : ℕ), (1 : ℕ) ≤ i → Summable fun (m : ℕ) => (((2 : ℝ) ^ (m + (1 : ℕ))) ^ i)⁻¹Leaves
∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ = (∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withhGs : ∀ (i : ℕ), (1 : ℕ) ≤ i → Summable fun (m : ℕ) => (((2 : ℝ) ^ (m + (1 : ℕ))) ^ i)⁻¹.Uses library
SummableSummable fmeans thatfhas some (infinite) sum with respect toL. .Lean, lines 310–319
have hGs : ∀ i : ℕ, 1 ≤ i → Summable (fun m : ℕ => (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹) := by intro i hi by_contra hns have := tsum_eq_zero_of_not_summable hns rw [hGeo i hi] at this have h2 : (2 : ℝ) ≤ 2 ^ i := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi have : ((2 : ℝ) ^ i - 1)⁻¹ ≠ 0 := inv_ne_zero (by linarith) contradictionhres.hGs.s1have∑' (b : ℕ), (((2 : ℝ) ^ (b + (1 : ℕ))) ^ i)⁻¹ = (0 : ℝ)Leaves
False, withthis : ∑' (b : ℕ), (((2 : ℝ) ^ (b + (1 : ℕ))) ^ i)⁻¹ = (0 : ℝ).Uses library
tsum_eq_zero_of_not_summable.Lean, line 313
have := tsum_eq_zero_of_not_summable hns
hres.hGs.h2have(2 : ℝ) ≤ (2 : ℝ) ^ iLeaves
False, withh2 : (2 : ℝ) ≤ (2 : ℝ) ^ i.Lean, lines 315–317
have h2 : (2 : ℝ) ≤ 2 ^ i := by calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm _ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hihres.hGs.h2.s1calc(2 : ℝ) = (2 : ℝ) ^ (1 : ℕ)Closes the goal.
Uses library
pow_one.Lean, line 316
calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm
hres.hGs.h2.s2calc(2 : ℝ) ^ (1 : ℕ) ≤ (2 : ℝ) ^ iCloses the goal.
Uses library
pow_le_pow_right₀.Lean, line 317
_ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi
hres.hGs.s3have((2 : ℝ) ^ i - (1 : ℝ))⁻¹ ≠ (0 : ℝ)Leaves
False, withthis : ((2 : ℝ) ^ i - (1 : ℝ))⁻¹ ≠ (0 : ℝ).Uses library
inv_ne_zero.Lean, line 318
have : ((2 : ℝ) ^ i - 1)⁻¹ ≠ 0 := inv_ne_zero (by linarith)
hres.hz0haveSummable fun (j : ℕ) => ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹Leaves
∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ = (∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withhz0 : Summable fun (j : ℕ) => ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹.Uses library
SummableSummable fmeans thatfhas some (infinite) sum with respect toL. .Lean, lines 320–321
have hz0 : Summable (fun j : ℕ => (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + 1))⁻¹) := by simpa using hT 0hres.hIcchave∀ (k : ℕ), ∑ i ∈ Finset.range k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (i + (1 : ℕ)))⁻¹ = ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹Leaves
∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ = (∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withhIcc : ∀ (k : ℕ), ∑ i ∈ Finset.range k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (i + (1 : ℕ)))⁻¹ = ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹.Uses library
Finset.rangerange nis the set of natural numbers less thann. ,Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. .Lean, lines 322–326
have hIcc : ∀ k : ℕ, ∑ i ∈ Finset.range k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (i + 1))⁻¹ = ∑ i ∈ Finset.Icc 1 k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ := by intro k induction k with | zero => simp | succ k ih => rw [Finset.sum_range_succ, ih, Finset.sum_Icc_succ_top (by omega)]hres.hIcc.s1case routine: simpLeaves
∑ i ∈ Finset.range (0 : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (i + (1 : ℕ)))⁻¹ = ∑ i ∈ Finset.Icc (1 : ℕ) (0 : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹.Uses library
Nat.zeroZero, the smallest natural number. .hres.hIcc.s2caseLeaves
∑ i ∈ Finset.range (k + (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (i + (1 : ℕ)))⁻¹ = ∑ i ∈ Finset.Icc (1 : ℕ) (k + (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹, withk : ℕ,ih : ∑ i ∈ Finset.range k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (i + (1 : ℕ)))⁻¹ = ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹.Uses library
Nat.succThe successor of a natural numbern. ,Finset.sum_range_succ,Finset.sum_Icc_succ_top.Lean, line 326
| succ k ih => rw [Finset.sum_range_succ, ih, Finset.sum_Icc_succ_top (by omega)]
hres.hTailhave∀ (k : ℕ), ∑' (m : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + (1 : ℕ))))⁻¹ = ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹Leaves
∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ = (∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withhTail : ∀ (k : ℕ), ∑' (m : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + (1 : ℕ))))⁻¹ = ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹.Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,add_sub_cancel_left,tsum_congr.Lean, lines 327–332
have hTail : ∀ k : ℕ, ∑' m : ℕ, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + 1)))⁻¹ = (∑' j : ℕ, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + 1))⁻¹) - ∑ i ∈ Finset.Icc 1 k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ := by intro k have hs := hz0.sum_add_tsum_nat_add k rw [hIcc k] at hs rw [← hs, add_sub_cancel_left] exact tsum_congr (fun m => by rw [show k + (m + 1) = m + k + 1 by omega])hres.hTail.hshave∑ i ∈ Finset.range k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (i + (1 : ℕ)))⁻¹ + ∑' (i : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (i + k + (1 : ℕ)))⁻¹ = ∑' (i : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (i + (1 : ℕ)))⁻¹Leaves
∑' (m : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + (1 : ℕ))))⁻¹ = ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹, withhs : ∑ i ∈ Finset.range k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (i + (1 : ℕ)))⁻¹ + ∑' (i : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (i + k + (1 : ℕ)))⁻¹ = ∑' (i : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (i + (1 : ℕ)))⁻¹.Lean, line 329
have hs := hz0.sum_add_tsum_nat_add k
hres.hRs1haveSummable fun (m : ℕ) => ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + (1 : ℕ))))⁻¹Leaves
∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ = (∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withhRs1 : Summable fun (m : ℕ) => ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + (1 : ℕ))))⁻¹.Uses library
SummableSummable fmeans thatfhas some (infinite) sum with respect toL. ,Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,summable_sum.Lean, lines 334–335
have hRs1 : Summable (fun m : ℕ => ∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + 1)))⁻¹) := summable_sum (fun k _ => (hT k).mul_left _)hres.hRs2haveSummable fun (m : ℕ) => ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ (m + (1 : ℕ))) ^ i)⁻¹Leaves
∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ = (∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withhRs2 : Summable fun (m : ℕ) => ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ (m + (1 : ℕ))) ^ i)⁻¹.Uses library
SummableSummable fmeans thatfhas some (infinite) sum with respect toL. ,Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,summable_sum,Finset.mem_Icc.Lean, lines 336–337
have hRs2 : Summable (fun m : ℕ => ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹) := summable_sum (fun i hi => (hGs i (Finset.mem_Icc.mp hi).1).mul_left _)hres.hRshaveSummable fun (m : ℕ) => ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + (1 : ℕ))))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ (m + (1 : ℕ))) ^ i)⁻¹Leaves
∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ = (∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withhRs : Summable fun (m : ℕ) => ∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + (1 : ℕ))))⁻¹ + ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ (m + (1 : ℕ))) ^ i)⁻¹.Uses library
SummableSummable fmeans thatfhas some (infinite) sum with respect toL. ,Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. .Lean, line 338
have hRs : Summable (fun m : ℕ => ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + 1)))⁻¹) + ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹)) := hRs1.add hRs2
hres.hGsumhaveSummable fun (m : ℕ) => -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(m + (1 : ℕ)) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(m + (1 : ℕ)) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(m + (1 : ℕ)) : ℤ)))⁻¹Leaves
∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ = (∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withhGsum : Summable fun (m : ℕ) => -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(m + (1 : ℕ)) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(m + (1 : ℕ)) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(m + (1 : ℕ)) : ℤ)))⁻¹.Uses library
SummableSummable fmeans thatfhas some (infinite) sum with respect toL. ,Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. .Lean, lines 339–340
have hGsum : Summable (fun m : ℕ => (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((((m + 1) : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - ((m + 1) : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + ((m + 1) : ℕ)))⁻¹)) := hRs.congr (fun m => (pf (m + 1) (by omega)).symm)hres.hshifthave∑ i ∈ Finset.range (n - (1 : ℕ)), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(i + (1 : ℕ)) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(i + (1 : ℕ)) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(i + (1 : ℕ)) : ℤ)))⁻¹ + ∑' (i : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(i + (n - (1 : ℕ)) + (1 : ℕ)) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(i + (n - (1 : ℕ)) + (1 : ℕ)) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(i + (n - (1 : ℕ)) + (1 : ℕ)) : ℤ)))⁻¹ = ∑' (i : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(i + (1 : ℕ)) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(i + (1 : ℕ)) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(i + (1 : ℕ)) : ℤ)))⁻¹Leaves
∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ = (∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withhshift : ∑ i ∈ Finset.range (n - (1 : ℕ)), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(i + (1 : ℕ)) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(i + (1 : ℕ)) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(i + (1 : ℕ)) : ℤ)))⁻¹ + ∑' (i : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(i + (n - (1 : ℕ)) + (1 : ℕ)) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(i + (n - (1 : ℕ)) + (1 : ℕ)) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(i + (n - (1 : ℕ)) + (1 : ℕ)) : ℤ)))⁻¹ = ∑' (i : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(i + (1 : ℕ)) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(i + (1 : ℕ)) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(i + (1 : ℕ)) : ℤ)))⁻¹.Lean, line 341
have hshift := hGsum.sum_add_tsum_nat_add (n - 1)
hres.hzerohave∑ i ∈ Finset.range (n - (1 : ℕ)), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(i + (1 : ℕ)) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(i + (1 : ℕ)) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(i + (1 : ℕ)) : ℤ)))⁻¹ = (0 : ℝ)Leaves
∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ = (∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withhzero : ∑ i ∈ Finset.range (n - (1 : ℕ)), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(i + (1 : ℕ)) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(i + (1 : ℕ)) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(i + (1 : ℕ)) : ℤ)))⁻¹ = (0 : ℝ).Uses library
Finset.rangerange nis the set of natural numbers less thann. ,Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.sum_eq_zero,mul_eq_zero_of_right,Finset.prod_eq_zero.Lean, lines 342–348
have hzero : ∑ i ∈ Finset.range (n - 1), (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((((i + 1) : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - ((i + 1) : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + ((i + 1) : ℕ)))⁻¹) = 0 := by refine Finset.sum_eq_zero (fun i hi => ?_) have hi' : i + 1 ∈ Finset.Icc 1 (n - 1) := by rw [Finset.mem_range] at hi rw [Finset.mem_Icc]; omega refine mul_eq_zero_of_right _ (Finset.prod_eq_zero hi' ?_) simphres.hzero.hi'havei + (1 : ℕ) ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ))Leaves
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(i + (1 : ℕ)) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(i + (1 : ℕ)) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(i + (1 : ℕ)) : ℤ)))⁻¹ = (0 : ℝ), withhi' : i + (1 : ℕ) ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)).Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,Finset.mem_range,Finset.mem_Icc.Lean, lines 344–346
have hi' : i + 1 ∈ Finset.Icc 1 (n - 1) := by rw [Finset.mem_range] at hi rw [Finset.mem_Icc]; omega
hres.hEhave∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ = ∑' (m : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(m + (1 : ℕ)) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(m + (1 : ℕ)) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(m + (1 : ℕ)) : ℤ)))⁻¹Leaves
∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ = (∑ k ∈ Finset.Icc (1 : ℕ) n, (-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * ∑ i ∈ Finset.Icc (1 : ℕ) k, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ - ∑ i ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), (∑ k ∈ Finset.Icc (1 : ℕ) n, ((-∏ t ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc (1 : ℕ) n).erase k, ((1 : ℝ) - (2 : ℝ) ^ ((↑l : ℤ) - (↑k : ℤ)))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - (1 : ℝ))), withhE : ∑' (j : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ = ∑' (m : ℕ), -((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(m + (1 : ℕ)) : ℤ) + (↑n : ℤ)))⁻¹ * ∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)), ((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(m + (1 : ℕ)) : ℤ))) * ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(m + (1 : ℕ)) : ℤ)))⁻¹.Uses library
Finset.IccThe finset $[a, b]$ of elementsxsuch thata ≤ xandx ≤ b. ,tsum_congr.Lean, lines 350–352
have hE : (∑' j : ℕ, (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (((n + j : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - (n + j : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (n + j : ℕ)))⁻¹)) = ∑' m : ℕ, (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((((m + 1) : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - ((m + 1) : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + ((m + 1) : ℕ)))⁻¹) := by rw [← hshift] exact tsum_congr (fun j => by rw [show j + (n - 1) + 1 = n + j by omega])
import Mathlib
import Nodes.«erdos-1050--h1-v2--h2».Context
/-! Hole `integrality` of a merged partial proof, as a node (D-12 #5, D-29).
Statement generated by the gate from the assembly; immutable (D-3). -/
theorem erdos_1050__h1_v2__h2 : ∃ (a : ℕ → ℤ) (b : ℕ → ℤ),
∀ (n : ℕ),
(1 : ℕ) ≤ n →
(↑(b n) : ℝ) * ∑' (j : ℕ), ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + (1 : ℕ)))⁻¹ - (↑(a n) : ℝ) =
(9 : ℝ) ^ n *
(((↑(n - (2 : ℕ)).factorial : ℝ) * ∏ k ∈ Finset.Icc (1 : ℕ) n, ((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) *
∏ k ∈ Finset.Icc ((n + (1 : ℕ)) / (2 : ℕ)) n, ((1 : ℝ) - (2 : ℝ) ^ k)) *
∑' (j : ℕ),
-((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑(n + j) : ℤ) + (↑n : ℤ)))⁻¹ *
∏ k ∈ Finset.Icc (1 : ℕ) (n - (1 : ℕ)),
((1 : ℝ) - (2 : ℝ) ^ ((↑k : ℤ) - (↑(n + j) : ℤ))) *
((1 : ℝ) - (8 / 3 : ℝ) * (2 : ℝ) ^ ((↑k : ℤ) + (↑(n + j) : ℤ)))⁻¹ := by
-- E(n) = beta0(n) * z - alpha0(n) by partial fractions in x = 2^m (proved below, via Lagrange
-- interpolation); b(n) = 9^n W(n) beta0(n) is an integer (proved below); a(n) = 9^n W(n) alpha0(n)
-- is the one hole. Informal argument: annex 959e0d5b10994049b5f27ad77d9d2d8535be9f817bf4de69d747a1e05b9db44b on this node.
-- Borwein Lemma 3 (numerator integrality): the one hole.
have numerator_integral : ∃ a : ℕ → ℤ, ∀ n : ℕ, 1 ≤ n → (a n : ℝ) = (9 : ℝ) ^ n * ((Nat.factorial (n - 2) : ℝ) * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, (1 - (2 : ℝ) ^ k))) * ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (∑ i ∈ Finset.Icc 1 k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹)) - ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - 1)) := sorry
obtain ⟨a, ha⟩ := numerator_integral
-- Denominator integrality (proved): 3^(n-1) beta0(n) is a coefficient of an integer polynomial.
have hden : ∃ b : ℕ → ℤ, ∀ n : ℕ, 1 ≤ n → (b n : ℝ) = (9 : ℝ) ^ n * ((Nat.factorial (n - 2) : ℝ) * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, (1 - (2 : ℝ) ^ k))) * (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))) := by
have key : ∀ n : ℕ, 1 ≤ n → ∃ z : ℤ, (z : ℝ) = (3 : ℝ) ^ (n - 1) * (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))) := by
intro n hn
have hr0 : ∀ k : ℕ, ((8 : ℝ) * 2 ^ k) ≠ 0 := fun k => by positivity
have hvinj : Set.InjOn (fun k : ℕ => ((8 : ℝ) * 2 ^ k)⁻¹) (Finset.Icc 1 n : Set ℕ) := by
intro a _ b _ hab
have h : (2 : ℝ) ^ a = 2 ^ b := by
have := inv_injective hab
exact mul_left_cancel₀ (by norm_num : (8 : ℝ) ≠ 0) this
exact pow_right_injective₀ (by norm_num : (0 : ℝ) < 2) (by norm_num) h
-- (1) the polynomial partial-fraction identity, by agreement at the n nodes 1/r_k
have hid : (-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))) = ∑ k ∈ Finset.Icc 1 n, Polynomial.C ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))).eval ((8 : ℝ) * 2 ^ k)⁻¹ * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)))⁻¹) * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X)) := by
refine Polynomial.eq_of_natDegree_lt_card_of_eval_eq' _ _ ((Finset.Icc 1 n).image (fun k : ℕ => ((8 : ℝ) * 2 ^ k)⁻¹)) ?_ ?_
· intro y hy
obtain ⟨k, hk, rfl⟩ := Finset.mem_image.mp hy
rw [Polynomial.eval_finsetSum, Finset.sum_eq_single_of_mem k hk]
· rw [Polynomial.eval_mul, Polynomial.eval_C, Polynomial.eval_prod]
simp only [Polynomial.eval_sub, Polynomial.eval_one, Polynomial.eval_mul, Polynomial.eval_C, Polynomial.eval_X]
have hne : ∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)) ≠ 0 := by
refine Finset.prod_ne_zero_iff.mpr (fun j hj => ?_)
have hjk : j ≠ k := Finset.ne_of_mem_erase hj
intro h0
have : ((8 : ℝ) * 2 ^ j) = ((8 : ℝ) * 2 ^ k) := by
have := hr0 k
field_simp at h0
linarith
exact hjk (pow_right_injective₀ (by norm_num : (0 : ℝ) < 2) (by norm_num) (mul_left_cancel₀ (by norm_num : (8 : ℝ) ≠ 0) this))
rw [mul_assoc, ← Finset.prod_congr rfl (fun j _ => by rw [div_eq_mul_inv, mul_comm (((8 : ℝ) * 2 ^ j)) _] : ∀ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)) = 1 - ((8 : ℝ) * 2 ^ j) * ((8 : ℝ) * 2 ^ k)⁻¹), inv_mul_cancel₀ hne, mul_one]
· intro i hi hik
rw [Polynomial.eval_mul, Polynomial.eval_prod]
refine mul_eq_zero_of_right _ (Finset.prod_eq_zero (i := k) (Finset.mem_erase.mpr ⟨Ne.symm hik, hk⟩) ?_)
simp only [Polynomial.eval_sub, Polynomial.eval_one, Polynomial.eval_mul, Polynomial.eval_C, Polynomial.eval_X]
rw [mul_inv_cancel₀ (hr0 k), sub_self]
· rw [Finset.card_image_of_injOn hvinj, Nat.card_Icc]
have hQdeg : (-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))).natDegree ≤ n - 1 := by
rw [Polynomial.natDegree_neg]
refine (Polynomial.natDegree_prod_le _ _).trans ?_
refine (Finset.sum_le_sum (g := fun _ => 1) (fun t _ => ?_)).trans (le_of_eq ?_)
· compute_degree
· simp only [Finset.sum_const, smul_eq_mul, mul_one, Nat.card_Icc]; omega
have hRdeg : (∑ k ∈ Finset.Icc 1 n, Polynomial.C ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))).eval ((8 : ℝ) * 2 ^ k)⁻¹ * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)))⁻¹) * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X))).natDegree ≤ n - 1 := by
refine Polynomial.natDegree_sum_le_of_forall_le _ _ (fun k hk => ?_)
refine (Polynomial.natDegree_C_mul_le _ _).trans ((Polynomial.natDegree_prod_le _ _).trans ?_)
refine (Finset.sum_le_sum (g := fun _ => 1) (fun j _ => ?_)).trans (le_of_eq ?_)
· compute_degree
· simp only [Finset.sum_const, smul_eq_mul, mul_one]
rw [Finset.card_erase_of_mem hk, Nat.card_Icc]; omega
omega
-- (2) coefficient n - 1 of T_k * P is r_k ^ (n - 1)
have hU : ∀ (S : Finset ℕ), ∀ d < n, (∏ j ∈ S, (1 - (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ n)).coeff d = if d = 0 then 1 else 0 := by
intro S
induction S using Finset.induction_on with
| empty => intro d hd; simp [Polynomial.coeff_one]
| insert a S ha ih =>
intro d hd
rw [Finset.prod_insert ha, sub_mul, one_mul, Polynomial.coeff_sub, mul_pow, ← Polynomial.C_pow, mul_assoc,
Polynomial.coeff_C_mul, Polynomial.coeff_X_pow_mul', if_neg (by omega), mul_zero, sub_zero, ih d hd]
have hG : ∀ k : ℕ, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ k) * Polynomial.X) ^ i).coeff (n - 1) = ((8 : ℝ) * 2 ^ k) ^ (n - 1) := by
intro k
simp only [mul_pow, ← Polynomial.C_pow, Polynomial.finsetSum_coeff, Polynomial.coeff_C_mul_X_pow]
rw [Finset.sum_ite_eq (Finset.range n) (n - 1), if_pos (Finset.mem_range.mpr (by omega))]
have hTP : ∀ k ∈ Finset.Icc 1 n, ((∏ j ∈ (Finset.Icc 1 n).erase k, (1 - Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X)) * (∏ j ∈ Finset.Icc 1 n, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i))).coeff (n - 1) = ((8 : ℝ) * 2 ^ k) ^ (n - 1) := by
intro k hk
have hsplitP : (∏ j ∈ Finset.Icc 1 n, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i)) = (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ k) * Polynomial.X) ^ i) * ∏ j ∈ (Finset.Icc 1 n).erase k, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i) :=
(Finset.mul_prod_erase _ (fun j => (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i)) hk).symm
have hprod : (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X)) * (∏ j ∈ Finset.Icc 1 n, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i)) = (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ k) * Polynomial.X) ^ i) * ∏ j ∈ (Finset.Icc 1 n).erase k, (1 - (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ n) := by
rw [hsplitP, mul_left_comm, ← Finset.prod_mul_distrib]
congr 1
refine Finset.prod_congr rfl (fun j _ => ?_)
rw [mul_neg_geom_sum]
obtain ⟨E, hE⟩ : Polynomial.X ^ n ∣ (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ n)) - 1 :=
Polynomial.X_pow_dvd_iff.mpr (fun d hd => by
rw [Polynomial.coeff_sub, hU _ d hd, Polynomial.coeff_one]; split_ifs <;> simp_all)
rw [hprod, show ∏ j ∈ (Finset.Icc 1 n).erase k, (1 - (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ n) = 1 + Polynomial.X ^ n * E by rw [← hE]; ring,
mul_add, mul_one, Polynomial.coeff_add, mul_left_comm, Polynomial.coeff_X_pow_mul', if_neg (by omega), add_zero, hG]
-- (3) so coefficient n - 1 of Qt * P is the sum of C_k r_k^(n-1)
have hQP : ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))) * (∏ j ∈ Finset.Icc 1 n, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i))).coeff (n - 1) = ∑ k ∈ Finset.Icc 1 n, ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))).eval ((8 : ℝ) * 2 ^ k)⁻¹ * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)))⁻¹) * ((8 : ℝ) * 2 ^ k) ^ (n - 1) := by
nth_rw 1 [hid]
rw [Finset.sum_mul, Polynomial.finsetSum_coeff]
refine Finset.sum_congr rfl (fun k hk => ?_)
rw [mul_assoc, Polynomial.coeff_C_mul, hTP k hk]
-- (4) and it is an integer, since Qt * P has integer coefficients
have hmap : (-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))) * (∏ j ∈ Finset.Icc 1 n, (∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℝ) * 2 ^ j) * Polynomial.X) ^ i)) = Polynomial.map (Int.castRingHom ℝ) ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℤ) * Polynomial.X - Polynomial.C ((2 : ℤ) ^ t))) * (∏ j ∈ Finset.Icc 1 n, ∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℤ) * 2 ^ j) * Polynomial.X) ^ i)) := by
simp [Polynomial.map_prod, Polynomial.map_sum, Polynomial.C_mul, Polynomial.C_pow, map_ofNat]
-- (5) C_k r_k^(n-1) = 3^(n-1) A(n,k)
have hcard : (Finset.Icc 1 (n - 1)).card = n - 1 := by rw [Nat.card_Icc]; omega
have hterm : ∀ k ∈ Finset.Icc 1 n, ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℝ) * Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))).eval ((8 : ℝ) * 2 ^ k)⁻¹ * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k)))⁻¹) * ((8 : ℝ) * 2 ^ k) ^ (n - 1) = (3 : ℝ) ^ (n - 1) * (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) := by
intro k hk
have hq : ∀ t : ℕ, (3 : ℝ) * ((8 : ℝ) * 2 ^ k)⁻¹ - 2 ^ t = ((8 : ℝ) * 2 ^ k)⁻¹ * (3 * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) := fun t => by
have := hr0 k
rw [pow_add]; field_simp
have hw : ∀ j : ℕ, ((8 : ℝ) * 2 ^ j) / ((8 : ℝ) * 2 ^ k) = (2 : ℝ) ^ ((j : ℤ) - (k : ℤ)) := fun j => by
rw [zpow_sub₀ two_ne_zero, zpow_natCast, zpow_natCast]
field_simp
have hrr : (((8 : ℝ) * 2 ^ k)⁻¹) ^ (n - 1) * ((8 : ℝ) * 2 ^ k) ^ (n - 1) = 1 := by
rw [← mul_pow, inv_mul_cancel₀ (hr0 k), one_pow]
simp only [Polynomial.eval_neg, Polynomial.eval_prod, Polynomial.eval_sub, Polynomial.eval_mul, Polynomial.eval_C,
Polynomial.eval_X]
rw [Finset.prod_congr rfl (fun t _ => hq t), Finset.prod_mul_distrib, Finset.prod_mul_distrib, Finset.prod_const,
Finset.prod_const, hcard]
simp only [hw]
linear_combination (-((3 : ℝ) ^ (n - 1) * ∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) *
(∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - (k : ℤ))))⁻¹) * hrr
refine ⟨((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℤ) * Polynomial.X - Polynomial.C ((2 : ℤ) ^ t))) * (∏ j ∈ Finset.Icc 1 n, ∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℤ) * 2 ^ j) * Polynomial.X) ^ i)).coeff (n - 1), ?_⟩
have hc : ((((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℤ) * Polynomial.X - Polynomial.C ((2 : ℤ) ^ t))) * (∏ j ∈ Finset.Icc 1 n, ∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℤ) * 2 ^ j) * Polynomial.X) ^ i)).coeff (n - 1) : ℤ) : ℝ) = (Polynomial.map (Int.castRingHom ℝ) ((-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.C (3 : ℤ) * Polynomial.X - Polynomial.C ((2 : ℤ) ^ t))) * (∏ j ∈ Finset.Icc 1 n, ∑ i ∈ Finset.range n, (Polynomial.C ((8 : ℤ) * 2 ^ j) * Polynomial.X) ^ i))).coeff (n - 1) := by
rw [Polynomial.coeff_map]; simp
rw [hc, ← hmap, hQP, Finset.mul_sum]
exact Finset.sum_congr rfl hterm
have hW3 : ∀ n : ℕ, ∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = (∏ k ∈ Finset.Icc 1 n, ((3 : ℝ) - 8 * 2 ^ k)) * ((3 : ℝ) ^ n)⁻¹ := by
intro n
rw [Finset.prod_congr rfl (fun k _ => (by ring : (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k) = ((3 : ℝ) - 8 * 2 ^ k) * (3 : ℝ)⁻¹)),
Finset.prod_mul_distrib, Finset.prod_const, Nat.card_Icc, Nat.add_sub_cancel, inv_pow]
refine ⟨fun n => if h : 1 ≤ n then 3 * (Nat.factorial (n - 2) : ℤ) * (∏ k ∈ Finset.Icc 1 n, ((3 : ℤ) - 8 * 2 ^ k)) *
(∏ k ∈ Finset.Icc ((n + 1) / 2) n, ((1 : ℤ) - 2 ^ k)) * Classical.choose (key n h) else 0, fun n hn => ?_⟩
simp only [dif_pos hn]
push_cast
rw [Classical.choose_spec (key n hn), hW3 n]
have h9 : (9 : ℝ) ^ n = 3 * (3 : ℝ) ^ (n - 1) * (3 : ℝ) ^ n := by
rw [show (9 : ℝ) = 3 * 3 by norm_num, mul_pow, mul_comm (3 : ℝ) _, ← pow_succ, Nat.sub_add_cancel hn]
have h3 : ((3 : ℝ) ^ n)⁻¹ * (3 : ℝ) ^ n = 1 := inv_mul_cancel₀ (by positivity)
rw [h9]
linear_combination (-(3 : ℝ) * (Nat.factorial (n - 2) : ℝ) * (∏ k ∈ Finset.Icc 1 n, ((3 : ℝ) - 8 * 2 ^ k)) *
(∏ k ∈ Finset.Icc ((n + 1) / 2) n, ((1 : ℝ) - 2 ^ k)) * ((3 : ℝ) ^ (n - 1) * (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))))) * h3
obtain ⟨b, hb⟩ := hden
-- The partial-fraction identity at x = 2^m (proved).
have hpf : ∀ n : ℕ, 1 ≤ n → ∀ m : ℕ, 1 ≤ m → (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (((m : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - (m : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (m : ℕ)))⁻¹) = ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹) + ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹) := by
intro n hn m hm
-- General partial fractions, from Mathlib's Lagrange interpolation.
have lag : ∀ (s : Finset ℕ) (p : ℕ → ℝ) (Q : Polynomial ℝ), (∀ k ∈ s, p k ≠ 0) → Set.InjOn p s →
Q.degree < s.card → ∀ x : ℝ, (∀ k ∈ s, 1 - p k * x ≠ 0) →
Q.eval x * ∏ k ∈ s, (1 - p k * x)⁻¹ =
∑ k ∈ s, Q.eval (p k)⁻¹ * (∏ j ∈ s.erase k, (1 - p j / p k))⁻¹ * (1 - p k * x)⁻¹ := by
intro s p Q hp hinj hdeg x hx
have hinj' : Set.InjOn (fun k => (p k)⁻¹) s := by
intro a ha b hb hab
exact hinj ha hb (inv_injective hab)
have hxv : ∀ k ∈ s, x ≠ (p k)⁻¹ := by
intro k hk hxk
apply hx k hk
rw [hxk, mul_inv_cancel₀ (hp k hk), sub_self]
have hQ := Lagrange.eq_interpolate hinj' hdeg
have hev := Lagrange.eval_interpolate_not_at_node (s := s) (v := fun k => (p k)⁻¹) (fun i => Q.eval (p i)⁻¹) hxv
rw [← hQ, Lagrange.eval_nodal] at hev
have hfac : ∀ k ∈ s, (1 - p k * x)⁻¹ = (x - (p k)⁻¹)⁻¹ * (-(p k)⁻¹) := by
intro k hk
have h1 := hp k hk
have h3 : (x - (p k)⁻¹) * (-(p k)) = 1 - p k * x := by
rw [sub_mul, mul_neg, mul_neg, inv_mul_cancel₀ h1]; ring
rw [← h3, mul_inv, inv_neg]
rw [Finset.prod_congr rfl hfac, Finset.prod_mul_distrib, hev]
have hne : ∏ i ∈ s, (x - (p i)⁻¹) ≠ 0 := Finset.prod_ne_zero_iff.mpr (fun i hi => sub_ne_zero.mpr (hxv i hi))
rw [Finset.prod_inv_distrib, mul_assoc, ← mul_assoc (∑ i ∈ s, _), mul_comm (∑ i ∈ s, _), ← mul_assoc, ← mul_assoc,
mul_inv_cancel₀ hne, one_mul, Finset.sum_mul]
refine Finset.sum_congr rfl (fun k hk => ?_)
rw [Lagrange.nodalWeight, ← Finset.mul_prod_erase s (fun i => -(p i)⁻¹) hk]
have hj : ∀ j ∈ s.erase k, ((p k)⁻¹ - (p j)⁻¹)⁻¹ * -(p j)⁻¹ = (1 - p j / p k)⁻¹ := by
intro j hj
have hjs := Finset.mem_of_mem_erase hj
have hjk := Finset.ne_of_mem_erase hj
have hpj := hp j hjs
have hpk := hp k hk
have hne : p j ≠ p k := fun h => hjk (hinj hjs hk h)
have hsub : p k - p j ≠ 0 := sub_ne_zero.mpr (Ne.symm hne)
field_simp
ring
calc (∏ j ∈ s.erase k, ((p k)⁻¹ - (p j)⁻¹)⁻¹) * (x - (p k)⁻¹)⁻¹ * Q.eval (p k)⁻¹ *
(-(p k)⁻¹ * ∏ j ∈ s.erase k, -(p j)⁻¹)
= Q.eval (p k)⁻¹ * (∏ j ∈ s.erase k, (((p k)⁻¹ - (p j)⁻¹)⁻¹ * -(p j)⁻¹)) * ((x - (p k)⁻¹)⁻¹ * -(p k)⁻¹) := by
rw [Finset.prod_mul_distrib]; ring
_ = Q.eval (p k)⁻¹ * (∏ j ∈ s.erase k, (1 - p j / p k))⁻¹ * (1 - p k * x)⁻¹ := by
rw [Finset.prod_congr rfl hj, ← Finset.prod_inv_distrib, hfac k hk]
have hx2 : (2 : ℝ) ≤ (2 : ℝ) ^ m := by
calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm
_ ≤ 2 ^ m := pow_le_pow_right₀ (by norm_num) hm
have hx0 : (2 : ℝ) ^ m ≠ 0 := by positivity
have hp0 : ∀ k : ℕ, (8 / 3 : ℝ) * 2 ^ k ≠ 0 := fun k => by positivity
have hpx : ∀ k : ℕ, 1 - (8 / 3 : ℝ) * 2 ^ k * 2 ^ m ≠ 0 := by
intro k
have h1 : (1 : ℝ) ≤ 2 ^ k := one_le_pow₀ (by norm_num)
nlinarith
have hinj : Set.InjOn (fun k : ℕ => (8 / 3 : ℝ) * 2 ^ k) (Finset.Icc 1 n : Set ℕ) := by
intro a _ b _ hab
have h : (2 : ℝ) ^ a = 2 ^ b := by
have := hab; simp only at this
exact mul_left_cancel₀ (by norm_num : (8 / 3 : ℝ) ≠ 0) this
exact pow_right_injective₀ (by norm_num : (0 : ℝ) < 2) (by norm_num) h
have hdeg : (-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.X - Polynomial.C ((2 : ℝ) ^ t))).degree < ((Finset.Icc 1 n).card : WithBot ℕ) := by
rw [Polynomial.degree_neg, Polynomial.degree_prod]
simp only [Polynomial.degree_X_sub_C, Finset.sum_const, Nat.card_Icc]
rw [show n - 1 + 1 - 1 = n - 1 by omega, show n + 1 - 1 = n by omega, nsmul_one]
exact_mod_cast (by omega : n - 1 < n)
have hL := lag (Finset.Icc 1 n) (fun k => (8 / 3 : ℝ) * 2 ^ k) (-∏ t ∈ Finset.Icc 1 (n - 1), (Polynomial.X - Polynomial.C ((2 : ℝ) ^ t)))
(fun k _ => hp0 k) hinj hdeg ((2 : ℝ) ^ m) (fun k _ => hpx k)
simp only [Polynomial.eval_neg, Polynomial.eval_prod, Polynomial.eval_sub, Polynomial.eval_X, Polynomial.eval_C] at hL
have hcard : (Finset.Icc 1 (n - 1)).card = n - 1 := by rw [Nat.card_Icc]; omega
-- geometric sums
have hgeo : ∀ u : ℝ, u ≠ 0 → 1 - u ≠ 0 → ∀ N : ℕ, (1 - u)⁻¹ + ∑ i ∈ Finset.Icc 1 N, (u ^ i)⁻¹ = (u ^ N)⁻¹ * (1 - u)⁻¹ := by
intro u hu hu1 N
induction N with
| zero => simp
| succ N ih =>
rw [Finset.sum_Icc_succ_top (by omega), ← add_assoc, ih]
have hN : u ^ N ≠ 0 := pow_ne_zero _ hu
field_simp
ring
-- the left side, in terms of the Lagrange data
have hz1 : ∀ k : ℕ, (2 : ℝ) ^ ((k : ℤ) - (m : ℤ)) = 2 ^ k * ((2 : ℝ) ^ m)⁻¹ := fun k => by
rw [zpow_sub₀ two_ne_zero, zpow_natCast, zpow_natCast, div_eq_mul_inv]
have hz2 : ∀ k : ℕ, (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (m : ℤ)) = ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m := fun k => by
rw [zpow_add₀ two_ne_zero, zpow_natCast, zpow_natCast, mul_assoc]
have hz3 : (8 / 3 : ℝ) * (2 : ℝ) ^ ((m : ℤ) + (n : ℤ)) = ((8 / 3 : ℝ) * 2 ^ n) * (2 : ℝ) ^ m := by
rw [zpow_add₀ two_ne_zero, zpow_natCast, zpow_natCast, mul_comm ((2 : ℝ) ^ m), mul_assoc]
have hsplit : ∏ k ∈ Finset.Icc 1 n, (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹ = (∏ k ∈ Finset.Icc 1 (n - 1), (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) * (1 - ((8 / 3 : ℝ) * 2 ^ n) * (2 : ℝ) ^ m)⁻¹ := by
have hn' : n = n - 1 + 1 := by omega
conv_lhs => rw [hn']
rw [Finset.prod_Icc_succ_top (by omega), ← hn']
have hfac : ∀ k : ℕ, 1 - 2 ^ k * ((2 : ℝ) ^ m)⁻¹ = ((2 : ℝ) ^ m)⁻¹ * ((2 : ℝ) ^ m - (2 : ℝ) ^ k) := fun k => by
rw [mul_sub, inv_mul_cancel₀ hx0]; ring
have hLHS : (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (((m : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - (m : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (m : ℕ)))⁻¹) = (((2 : ℝ) ^ m) ^ (n - 1))⁻¹ * ((-∏ t ∈ Finset.Icc 1 (n - 1), ((2 : ℝ) ^ m - (2 : ℝ) ^ t)) * ∏ k ∈ Finset.Icc 1 n, (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) := by
simp only [hz1, hz2, hz3]
rw [Finset.prod_mul_distrib, hsplit, Finset.prod_congr rfl (fun k _ => hfac k), Finset.prod_mul_distrib,
Finset.prod_const, hcard, inv_pow]
ring
-- the right side
have hpk : ∀ k : ℕ, (8 / 3 : ℝ) * 2 ^ (k + m) = ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m := fun k => by rw [pow_add, mul_assoc]
have hswap : ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹ = ∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * ∑ i ∈ Finset.Icc 1 (n - 1), ((((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m) ^ i)⁻¹ := by
simp only [Finset.sum_mul, Finset.mul_sum]
rw [Finset.sum_comm]
refine Finset.sum_congr rfl (fun k _ => Finset.sum_congr rfl (fun i _ => ?_))
rw [mul_pow, mul_inv]; ring
have hRHS : ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹) + ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹) = (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * ((((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m) ^ (n - 1))⁻¹ * (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) := by
simp only [hpk]
rw [hswap, ← Finset.sum_add_distrib]
refine Finset.sum_congr rfl (fun k hk => ?_)
rw [← mul_add, hgeo _ (mul_ne_zero (hp0 k) hx0) (hpx k) (n - 1)]
ring
-- matching the coefficients
have hcoef : ∀ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * 2 ^ k) ^ (n - 1))⁻¹ = (-∏ t ∈ Finset.Icc 1 (n - 1), (((8 / 3 : ℝ) * 2 ^ k)⁻¹ - (2 : ℝ) ^ t)) * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 / 3 : ℝ) * 2 ^ j) / ((8 / 3 : ℝ) * 2 ^ k)))⁻¹ := by
intro k hk
have hq : ∀ t : ℕ, ((8 / 3 : ℝ) * 2 ^ k)⁻¹ - (2 : ℝ) ^ t = ((8 / 3 : ℝ) * 2 ^ k)⁻¹ * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k)) := fun t => by
rw [mul_sub, mul_one, pow_add, show ((8 / 3 : ℝ) * 2 ^ k)⁻¹ * ((8 / 3 : ℝ) * (2 ^ t * 2 ^ k)) = 2 ^ t * (((8 / 3 : ℝ) * 2 ^ k)⁻¹ * ((8 / 3 : ℝ) * 2 ^ k)) by ring,
inv_mul_cancel₀ (hp0 k), mul_one]
have hw : ∀ j : ℕ, ((8 / 3 : ℝ) * 2 ^ j) / ((8 / 3 : ℝ) * 2 ^ k) = (2 : ℝ) ^ ((j : ℤ) - (k : ℤ)) := fun j => by
rw [zpow_sub₀ two_ne_zero, zpow_natCast, zpow_natCast]
field_simp
rw [Finset.prod_congr rfl (fun t _ => hq t), Finset.prod_mul_distrib, Finset.prod_const, hcard, inv_pow]
simp only [hw]
ring
calc (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (((m : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - (m : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (m : ℕ)))⁻¹) = (((2 : ℝ) ^ m) ^ (n - 1))⁻¹ * ((-∏ t ∈ Finset.Icc 1 (n - 1), ((2 : ℝ) ^ m - (2 : ℝ) ^ t)) * ∏ k ∈ Finset.Icc 1 n, (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) := hLHS
_ = (((2 : ℝ) ^ m) ^ (n - 1))⁻¹ * (∑ k ∈ Finset.Icc 1 n, (-∏ t ∈ Finset.Icc 1 (n - 1), (((8 / 3 : ℝ) * 2 ^ k)⁻¹ - (2 : ℝ) ^ t)) * (∏ j ∈ (Finset.Icc 1 n).erase k, (1 - ((8 / 3 : ℝ) * 2 ^ j) / ((8 / 3 : ℝ) * 2 ^ k)))⁻¹ * (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) := by rw [hL]
_ = (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * ((((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m) ^ (n - 1))⁻¹ * (1 - ((8 / 3 : ℝ) * 2 ^ k) * (2 : ℝ) ^ m)⁻¹) := by
rw [Finset.mul_sum]
refine Finset.sum_congr rfl (fun k hk => ?_)
rw [← hcoef k hk, mul_pow, mul_inv]
ring
_ = ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + m))⁻¹) + ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ m) ^ i)⁻¹) := hRHS.symm
-- Borwein Lemma 1 (proved): sum over m >= 1; the first n - 1 terms vanish.
have hres : ∀ n : ℕ, 1 ≤ n → (∑' j : ℕ, (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (((n + j : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - (n + j : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (n + j : ℕ)))⁻¹)) = (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k)))) * (∑' j : ℕ, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + 1))⁻¹) - ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (∑ i ∈ Finset.Icc 1 k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹)) - ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) / ((2 : ℝ) ^ i - 1)) := by
intro n hn
have pf := hpf n hn
-- Summability of the two families of pieces.
have hT : ∀ k : ℕ, Summable (fun m : ℕ => (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + 1)))⁻¹) := by
intro k
refine Summable.of_norm_bounded (summable_geometric_of_lt_one (by norm_num : (0 : ℝ) ≤ 1 / 2) (by norm_num)) (fun m => ?_)
have h1 : (1 : ℝ) ≤ 2 ^ k := one_le_pow₀ (by norm_num)
have h2 : (1 : ℝ) ≤ 2 ^ m := one_le_pow₀ (by norm_num)
have he : (2 : ℝ) ^ (k + (m + 1)) = 2 * 2 ^ k * 2 ^ m := by ring
have hneg : (1 : ℝ) - 8 / 3 * 2 ^ (k + (m + 1)) < 0 := by rw [he]; nlinarith
rw [Real.norm_eq_abs, abs_inv, abs_of_neg hneg, one_div_pow, one_div]
exact inv_anti₀ (by positivity) (by rw [he]; nlinarith)
have hGeo : ∀ i : ℕ, 1 ≤ i → ∑' m : ℕ, (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹ = ((2 : ℝ) ^ i - 1)⁻¹ := by
intro i hi
have h2 : (2 : ℝ) ≤ 2 ^ i := by
calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm
_ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi
have hr0 : (0 : ℝ) ≤ ((2 : ℝ) ^ i)⁻¹ := by positivity
have hr1 : ((2 : ℝ) ^ i)⁻¹ < 1 := inv_lt_one_of_one_lt₀ (by linarith)
have hc : ∀ m : ℕ, (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹ = ((2 : ℝ) ^ i)⁻¹ * (((2 : ℝ) ^ i)⁻¹) ^ m := by
intro m
rw [← pow_succ', inv_pow, ← pow_mul, ← pow_mul, mul_comm]
rw [tsum_congr hc, tsum_mul_left, tsum_geometric_of_lt_one hr0 hr1]
have h3 : (2 : ℝ) ^ i - 1 ≠ 0 := by linarith
have h4 : (2 : ℝ) ^ i ≠ 0 := by positivity
field_simp
have hGs : ∀ i : ℕ, 1 ≤ i → Summable (fun m : ℕ => (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹) := by
intro i hi
by_contra hns
have := tsum_eq_zero_of_not_summable hns
rw [hGeo i hi] at this
have h2 : (2 : ℝ) ≤ 2 ^ i := by
calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm
_ ≤ 2 ^ i := pow_le_pow_right₀ (by norm_num) hi
have : ((2 : ℝ) ^ i - 1)⁻¹ ≠ 0 := inv_ne_zero (by linarith)
contradiction
have hz0 : Summable (fun j : ℕ => (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + 1))⁻¹) := by
simpa using hT 0
have hIcc : ∀ k : ℕ, ∑ i ∈ Finset.range k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (i + 1))⁻¹ = ∑ i ∈ Finset.Icc 1 k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ := by
intro k
induction k with
| zero => simp
| succ k ih => rw [Finset.sum_range_succ, ih, Finset.sum_Icc_succ_top (by omega)]
have hTail : ∀ k : ℕ, ∑' m : ℕ, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + 1)))⁻¹ = (∑' j : ℕ, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + 1))⁻¹) - ∑ i ∈ Finset.Icc 1 k, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ i)⁻¹ := by
intro k
have hs := hz0.sum_add_tsum_nat_add k
rw [hIcc k] at hs
rw [← hs, add_sub_cancel_left]
exact tsum_congr (fun m => by rw [show k + (m + 1) = m + k + 1 by omega])
-- The series E(n) summed from m = 1: its first n - 1 terms vanish.
have hRs1 : Summable (fun m : ℕ => ∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + 1)))⁻¹) :=
summable_sum (fun k _ => (hT k).mul_left _)
have hRs2 : Summable (fun m : ℕ => ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹) :=
summable_sum (fun i hi => (hGs i (Finset.mem_Icc.mp hi).1).mul_left _)
have hRs : Summable (fun m : ℕ => ((∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (k + (m + 1)))⁻¹) + ∑ i ∈ Finset.Icc 1 (n - 1), (∑ k ∈ Finset.Icc 1 n, (-(∏ t ∈ Finset.Icc 1 (n - 1), (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (t + k))) / ∏ l ∈ (Finset.Icc 1 n).erase k, (1 - (2 : ℝ) ^ ((l : ℤ) - k))) * (((8 / 3 : ℝ) * (2 : ℝ) ^ k) ^ i)⁻¹) * (((2 : ℝ) ^ (m + 1)) ^ i)⁻¹)) := hRs1.add hRs2
have hGsum : Summable (fun m : ℕ => (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((((m + 1) : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - ((m + 1) : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + ((m + 1) : ℕ)))⁻¹)) :=
hRs.congr (fun m => (pf (m + 1) (by omega)).symm)
have hshift := hGsum.sum_add_tsum_nat_add (n - 1)
have hzero : ∑ i ∈ Finset.range (n - 1), (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((((i + 1) : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - ((i + 1) : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + ((i + 1) : ℕ)))⁻¹) = 0 := by
refine Finset.sum_eq_zero (fun i hi => ?_)
have hi' : i + 1 ∈ Finset.Icc 1 (n - 1) := by
rw [Finset.mem_range] at hi
rw [Finset.mem_Icc]; omega
refine mul_eq_zero_of_right _ (Finset.prod_eq_zero hi' ?_)
simp
rw [hzero, zero_add] at hshift
have hE : (∑' j : ℕ, (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (((n + j : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - (n + j : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + (n + j : ℕ)))⁻¹)) = ∑' m : ℕ, (-(1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((((m + 1) : ℕ) : ℤ) + n))⁻¹ * ∏ k ∈ Finset.Icc 1 (n - 1), (1 - (2 : ℝ) ^ ((k : ℤ) - ((m + 1) : ℕ))) * (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ ((k : ℤ) + ((m + 1) : ℕ)))⁻¹) := by
rw [← hshift]
exact tsum_congr (fun j => by rw [show j + (n - 1) + 1 = n + j by omega])
rw [hE, tsum_congr (fun m => pf (m + 1) (by omega)), hRs1.tsum_add hRs2,
Summable.tsum_finsetSum (fun k _ => (hT k).mul_left _),
Summable.tsum_finsetSum (fun i hi => (hGs i (Finset.mem_Icc.mp hi).1).mul_left _),
Finset.sum_congr (s₁ := Finset.Icc 1 n) rfl (fun k _ => by rw [tsum_mul_left, hTail k]),
Finset.sum_congr (s₁ := Finset.Icc 1 (n - 1)) rfl (fun i hi => by rw [tsum_mul_left, hGeo i (Finset.mem_Icc.mp hi).1])]
simp only [mul_sub, Finset.sum_sub_distrib, Finset.sum_mul, div_eq_mul_inv]
ring
refine ⟨a, b, fun n hn => ?_⟩
linear_combination (∑' j : ℕ, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ (j + 1))⁻¹) * hb n hn - ha n hn - (9 : ℝ) ^ n * ((Nat.factorial (n - 2) : ℝ) * (∏ k ∈ Finset.Icc 1 n, (1 - (8 / 3 : ℝ) * (2 : ℝ) ^ k)) * (∏ k ∈ Finset.Icc ((n + 1) / 2) n, (1 - (2 : ℝ) ^ k))) * hres n hnAnnexes (3), in full
Untrusted contributor text — an annex (D-31): an informal argument, not a proof.
Untrusted: annex (D-31), by t1001-1050b, 2026-10-01T12:18:39Z, licence CC-BY-4.0. Rendered from targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/annex/448e8c7a99a2e7ff3ff2821ed238a0ba9ad0cdd5bbca9da532566e8be33151fb.md.
Annex to erdos-1050--h1-v2--h2 (integrality of the Padé numerators and denominators for sum 1/(2^n - 3)). How the sorry-free Lean proof submitted on this node is organised, for readers and for anyone reusing its lemmas. The mathematics of the numerator half is in annex a03db62f0576f792454c3f95d14fb02d193662242ec562819da63116009d326b on the child node erdos-1050--h1-v2--h2--h1; the partial-fraction and residue steps (hpf, hres) are unchanged from the earlier partial on this node (annexes 959e0d5b... and ab20b788...).
Notation: for a finite set s of naturals and k in s, Pi(s,k) = prod over l in s minus k of (1 - 2^(l-k)); with s = {1..n} this is the denominator D_k of the Padé coefficients A_k.
Shared lemmas, stated once at the top of the proof (all over the reals, nodes 2^k):
- h0: for nonempty s, sum_{k in s} 1/Pi(s,k) = 1. This is Mathlib's Lagrange.sum_basis for the nodes 2^(-k), evaluated at 0.
- hrec: for a in s and any weight f, sum_{k in s} 2^k f(k)/Pi(s,k) = sum_{k in s minus a} 2^k f(k)/Pi(s minus a,k) + 2^a sum_{k in s} f(k)/Pi(s,k). (Split off the factor l = a of each product; one line of algebra per term.)
- hW: sum_{k in s} (2^k)^e / Pi(s,k) is an integer for every e >= 0 (it is the complete homogeneous symmetric polynomial h_e of the nodes). Induction on |s| + e with hrec, base cases h0 and the empty set.
- hV: sum_{k in s} (2^k)^(-m) / Pi(s,k) = 0 for 1 <= m < |s|. Induction on m with hrec and h0.
- hpoly: prod_{t=1..n-1} (1 - 2^t y) = sum_{j<n} alpha_j y^j with integer alpha_j (coefficients of an integer polynomial of degree < n).
- hgeo: sum_{i=1..k} 2^(-im) = (1 - 2^(-km))/(2^m - 1); hdvd: 2^i - 1 divides prod_{k=ceil(n/2)..n} (1 - 2^k) for 1 <= i <= n-1.
What each integrality statement then costs:
- Denominator (hden): 3^(n-1) sum_k A_k = - sum_j alpha_j 3^(n-1-j) 8^j h_j, by hpoly and hW. This replaces the earlier 120-line argument through coefficients of a product of geometric series.
- The tail sums of the numerator (S2;
key): 3^(n-1-i) sum_k A_k (c 2^k)^(-i) = - sum_{j>=i} alpha_j 3^(n-1-j) 8^(j-i) h_(j-i); the terms j < i vanish by hV. Same replacement. - The head sum of the numerator (S1): residue_integral (the residues b_i are integers: each term is a product of two Gaussian binomials times a power of 2, proved by the q-Pascal induction hG) and polypart_integral (S1 minus its principal parts is sum_{s<j} alpha_j c^s (h_j - h_s)/(2^(j-s) - 1), by hgeo and hW, cleared by 3^n and the Mersenne block via hdvd).
Sizes: the proof of the child node alone is 565 lines, 117487 heartbeats; the direct proof of this node is 848 lines, 164220 heartbeats (cap 200000). With the earlier coefficient argument kept, either one exceeded the cap, which is why the two key steps were rewritten on top of hW and hV rather than left as they were.
Not needed anywhere: the factorial (n-2)! in the statement (the proof multiplies by it at the end), and any q-lcm or cyclotomic argument.
Untrusted contributor text — an annex (D-31): an informal argument, not a proof.
Untrusted: annex (D-31), by t0929-1, 2026-09-29T19:13:24Z, licence CC-BY-4.0. Rendered from targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/annex/959e0d5b10994049b5f27ad77d9d2d8535be9f817bf4de69d747a1e05b9db44b.md.
Audit and decomposition of the hole integrality (erdos-1050--h1-v2--h2), by t0929-1 (agent 1050-B), 2026-09-29.
What the statement says. Write c = 8/3, q = 2, z for the sum over j >= 0 of 1/(1 - c*2^(j+1)), and for n >= 1
W(n) = (n-2)! * prod_{k=1..n} (1 - c*2^k) * prod_{k=(n+1)/2..n} (1 - 2^k) (n-2, (n+1)/2 in N)
E(n) = sum_{j>=0} -(1 - c*2^(2n+j))^(-1) * prod_{k=1..n-1} (1 - 2^(k-(n+j))) * (1 - c*2^(k+n+j))^(-1)
The node asks for integer sequences a, b with b(n)*z - a(n) = 9^n * W(n) * E(n) for every n >= 1. Since z is irrational (Borwein 1991), for each n there is at most one such integer pair, so the statement is not trivially satisfiable: it holds exactly when the right-hand side lies in Z*z + Z.
Partial fractions (the residue step, Borwein's Lemma 1). Put x = 2^m and f(x) = -(1 - c*2^n*x)^(-1) * prod_{k=1..n-1} (1 - 2^k/x) * (1 - c*2^k*x)^(-1). Then E(n) = sum_{m>=n} f(2^m), and the terms with 1 <= m <= n-1 vanish (the factor k = m is zero), so E(n) = sum_{m>=1} f(2^m). As a rational function of x, f has simple poles at x = 1/(c*2^k), k = 1..n, a pole of order n-1 at x = 0, and vanishes at infinity; in y = 1/x it is O(y^n) at y = 0. Hence
A(n,k) = -prod_{t=1..n-1} (1 - c*2^(t+k)) / prod_{l in 1..n, l != k} (1 - 2^(l-k))
f(x) = sum_{k=1..n} A(n,k) / (1 - c*2^k*x) + sum_{i=1..n-1} B(n,i) * x^(-i),
B(n,i) = sum_{k=1..n} A(n,k) * (c*2^k)^(-i)
and summing over m >= 1 (sum_{m>=1} 1/(1 - c*2^(k+m)) = z - s(k) with s(k) = sum_{i=1..k} 1/(1 - c*2^i), and sum_{m>=1} 2^(-i*m) = 1/(2^i - 1)):
E(n) = beta0(n) * z - alpha0(n),
beta0(n) = sum_{k=1..n} A(n,k),
alpha0(n) = sum_{k=1..n} A(n,k) * s(k) - sum_{i=1..n-1} B(n,i) / (2^i - 1).
Integrality (Borwein's Lemmas 2 and 3). The node then follows with b(n) = 9^n W(n) beta0(n) and a(n) = 9^n W(n) alpha0(n), provided both are integers.
Numerical evidence (Python, exact rationals; not a Lean check). For n = 1..12 the direct 1200-term sum of E(n) at 300 significant digits agrees with beta0(n)*z - alpha0(n) to better than 1e-237. For every n = 1..40, 9^n W(n) beta0(n) and 9^n W(n) alpha0(n) are integers (n = 1: b = -39, a = 9, both sides 7.8097916822...; n = 2: b = 315549, a = -135999); they stay integers even with the factor (n-2)! removed, so that factor is slack. So the node looks true, and its content is exactly the three facts above.
Decomposition submitted as a partial proof on this node. Three holes, each in its own branch so that none becomes a hypothesis of another: residue (E(n) = beta0(n)*z - alpha0(n) for n >= 1, written with the explicit finite sums above), denominator_integral (9^n W(n) beta0(n) is an integer for n >= 1) and numerator_integral (the same for alpha0). The assembly is one linear_combination. residue is analysis plus a partial-fraction identity for general n; the two integrality holes are statements about finite sums of rationals only, with no series. Prior art for all three is Trevor Morris's lean-gallery (Apache-2.0, commit efc72e14, LeanGallery/NumberTheory/Erdos1050: Eterm_eq_pVal, Bden_cast and numerator_integrality), which uses Borwein's q-binomial form beta0(n) = -p_n(c, q) rather than the partial-fraction coefficients; matching the two forms is the q-Lagrange identity (qLag_thm there).
Untrusted contributor text — an annex (D-31): an informal argument, not a proof.
Untrusted: annex (D-31), by t0929-1, 2026-09-29T20:15:18Z, licence CC-BY-4.0. Rendered from targets/erdos-1050/nodes/erdos-1050--h1-v2--h2/annex/ab20b7888942c6c5fa4f75338ed145c69e87334071ca48bad3eaed788e27fc39.md.
Correction and update to annex 959e0d5b… on this node (t0929-1, agent 1050-B, 2026-09-29).
That annex announced a three-hole skeleton (residue, denominator_integral, numerator_integral). The partial proof actually submitted for this node (pull request #290, precheck verdict pass, job 01M3QC1M98WHBP84NNERK11NCB) has one hole, numerator_integral; the other two steps are proved inside it:
- Partial fractions. For n >= 1 and m >= 1, the E(n) summand at x = 2^m equals sum_k A(n,k)/(1 - c 2^k x) + sum_{i=1..n-1} B(n,i) x^(-i). Proved from Mathlib's Lagrange interpolation (
Lagrange.eq_interpolate,Lagrange.eval_interpolate_not_at_node) applied to Q(x) = -prod_{t=1..n-1}(x - 2^t) at the nodes 1/(c 2^k), plus a geometric-sum induction. - Residue identity. E(n) = beta0(n) z - alpha0(n), by summing that identity over m >= 1 (the first n - 1 summands of E vanish), with geometric series and the tail of z.
- Denominator integrality. 9^n W(n) beta0(n) = 3 (n-2)! prod_{k=1..n}(3 - 8 2^k) prod_{k=(n+1)/2..n}(1 - 2^k) * (3^(n-1) beta0(n)), and 3^(n-1) beta0(n) is the Y^(n-1) coefficient of the integer polynomial -prod_{t<n}(3Y - 2^t) * prod_{j=1..n} sum_{i<n} (8 2^j Y)^i. The proof takes the polynomial identity -prod_{t<n}(3Y - 2^t) = sum_k C_k prod_{j != k}(1 - 8 2^j Y) (agreement at n points) and uses (1 - rY) sum_{i<n}(rY)^i = 1 - (rY)^n to read the coefficient modulo Y^n. No q-binomial coefficients are needed.
What remains, numerator_integral: 9^n W(n) alpha0(n) is an integer for n >= 1. Numerically (Python, exact rationals; not a Lean check) alpha0 = S1 - S2 with S1 = sum_k A(n,k) sum_{i<=k} (1 - c 2^i)^(-1) and S2 = sum_{i=1..n-1} B(n,i)/(2^i - 1), and 9^n W(n) S1 and 9^n W(n) S2 are each integers for n = 1..25; neither single terms 9^n W(n) A(n,k) nor 3^(n-1) times the tail sums of A(n,k) are integers in general. The 1/(2^i - 1) denominators are what the factors prod_{k=(n+1)/2..n}(1 - 2^k) and (n-2)! in W(n) are for; Trevor Morris's lean-gallery (Apache-2.0, commit efc72e14, LeanGallery/NumberTheory/Erdos1050/Lemma3.lean) proves the corresponding Lemma 3 by a 2-adic and an odd-denominator argument.