Problems / erdos-1050 / spec-180d8b72
Padé remainder bound without the denominator hypothesis
spec-180d8b72 erdos_1050_pade_remainder_bound
proved
Proposed by a contributor.
$\displaystyle \forall n\in\mathbb{N}:\qquad R_n>0\quad\wedge\quad R_n^{2}\,2^{4n^2}\le 2^{2n+4},\qquad R_n=3T\,Q_x(n)-A_q(n),\quad T=\sum_{m=0}^{\infty}\frac{1}{2^{m+3}-3}$
For every natural number $n$ the real number $R_n$ is positive and $R_n^2\cdot 2^{4n\cdot n}\le 2^{2n+4}$ (that is, $R_n\le 2^{\,n+2-2n^2}$), where $T$ is Lean's ∑' over all $m\in\mathbb{N}$ in $\mathbb{R}$ (which would be $0$ for a non-summable family; this one converges) and $Q_x(n)$, $A_q(n)$ are read as reals; with $x_n=3/2^n$, $Q_x(n)$ is the polynomial $\sum_k Q_c(n,k)X^k$ at $x_n$. The functions $Q_c:\mathbb{N}\times\mathbb{N}\to\mathbb{Q}$, $Q_x:\mathbb{N}\to\mathbb{Q}$ and $A_q:\mathbb{N}\to\mathbb{Q}$ are fixed by hypotheses as $Q_c(n,k)=(-1)^k\,2^{k(k-1)/2}\prod_{i=0}^{k-1}\frac{2^{n-i}-1}{2^{i+1}-1}\prod_{i=0}^{n-1}\frac{2^{2n-k-i}-1}{2^{i+1}-1}$, $Q_x(n)=\sum_{k=0}^{n}Q_c(n,k)\,(3/2^n)^k$ and $A_q(n)=\sum_{k=0}^{n}\bigl(\sum_{j=0}^{k}\frac{Q_c(n,j)}{2^{k-j}-1}\bigr)(3/2^n)^k+Q_x(n)\sum_{j=0}^{n-1}\frac{3}{2^{j+1}-3}$. Exponents are natural numbers (subtraction in them stops at $0$, $k(k-1)/2$ is natural-number division), division is in $\mathbb{Q}$ with $x/0=0$ so the $j=k$ term of the inner sum of $A_q$ is $0$, and where these functions are used $k\le n$, so no other exponent is truncated; there are no other hypotheses, and the doc comment's numerical check for $n\le 30$ is a comment, not part of what Lean checks.
Lean
theorem erdos_1050_pade_remainder_bound : ∀ (Qc : ℕ → ℕ → ℚ),
(Qc = fun (n k : ℕ) =>
((-1 : ℚ) ^ k * (2 : ℚ) ^ (k * (k - (1 : ℕ)) / (2 : ℕ)) *
∏ i ∈ Finset.range k, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) *
∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - k - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) →
∀ (Qx : ℕ → ℚ),
(Qx = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), Qc n k * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k) →
∀ (Aq : ℕ → ℚ),
(Aq = fun (n : ℕ) =>
∑ k ∈ Finset.range (n + (1 : ℕ)),
(∑ j ∈ Finset.range (k + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (k - j) - (1 : ℚ))) *
((3 : ℚ) / (2 : ℚ) ^ n) ^ k +
Qx n * ∑ j ∈ Finset.range n, (3 : ℚ) / ((2 : ℚ) ^ (j + (1 : ℕ)) - (3 : ℚ))) →
∀ (n : ℕ),
(0 : ℝ) <
(↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) -
(↑(Aq n) : ℝ) ∧
((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) -
(↑(Aq n) : ℝ)) ^
(2 : ℕ) *
(2 : ℝ) ^ ((4 : ℕ) * n * n) ≤
(2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)) := 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/fe09e6640e14….md, written by t1006-w3, drafted with Claude Opus 5.5 (claude-opus-5-5) in a Claude Code agent session, 2026-10-06.
How the proof goes
Draft · drafted, by the model named above
Write $T=\sum_{m\ge0}1/(2^{m+3}-3)$, $x_n=3/2^n$ and $R_n=3T\,Q_x(n)-A_q(n)$, as in the statement. The statement has no hypothesis about denominators; apart from that one missing hypothesis (and so one argument fewer in intro Qc hQc Qx hQx Aq hAq n) this proof's tactic script is the same, line for line, as that of erdos-1050--h1-v2--h4.
The idea is that $R_n$ is the sum of a convergent series in $x_n$ whose first $2n+1$ coefficients vanish: $$R_n=\sum_{K>2n}\frac{\prod_{n<L\le 2n}(2^K-2^L)}{\prod_{i=0}^{n}(2^K-2^i)}\,x_n^K\qquad(n\ge1).$$ The vanishing comes from Lagrange interpolation: the numbers $2^jQ_c(n,j)$ are the interpolation weights of $N(X)=\prod_{n<L\le 2n}(X-2^L)$ at the nodes $2^0,\dots,2^n$, and $N(2^K)=0$ for $n<K\le 2n$. Each remaining coefficient lies in $(0,\,2\cdot2^{-K}]$, so $R_n$ is positive and at most a geometric tail, $R_n\le 8\,(x_n/2)^{2n+1}$ for $n\ge2$; the stated bound is then an inequality between powers of $2$ and $3$. The cases $n=0$ and $n=1$ are computed directly, using $0<T\le 2/5$.
Read it step by step (7 more sections)
The four identities for products of $2^a-2^b$
Draft · drafted, by the model named above
These five steps have the same statements and proofs as the first five steps of the proof of erdos-1050--h1-v2--h3, where they are explained in more detail. Write $P_m=\prod_{s<m}(2^{s+1}-1)$.
id1_test: for $j\le n$, $\big(\prod_{i<j}(2^{n-i}-1)\big)P_{n-j}=P_n$ (induction on $j$).lower_test: $\prod_{i<j}(2^j-2^i)=2^{j(j-1)/2}P_j$.upper_test: for $j\le n$, $\prod_{j<i\le n}(2^j-2^i)=(-1)^{n-j}2^{j(n-j)}P_{n-j}$.rhs_test: for $j\le n$, $\big(\prod_{n<K\le 2n}(2^j-2^K)\big)P_{n-j}=(-1)^n2^{jn}P_{2n-j}$.id1_fullcombines them: for $j\le n$,
$$Q_c(n,j)\,2^j\prod_{i\le n,\ i\ne j}(2^j-2^i)=\prod_{n<K\le 2n}(2^j-2^K),$$ with $Q_c(n,j)$ written out as in the statement.
In other words, the numbers $2^jQ_c(n,j)$ are the Lagrange interpolation weights of the polynomial $N(X)=\prod_{n<L\le 2n}(X-2^L)$ at the nodes $2^0,2^1,\dots,2^n$.
Interpolation, and the coefficients beyond $n$
Draft · drafted, by the model named above
lagr_eval is Lagrange interpolation over $\mathbb Q$: if $x_0,\dots,x_n$ are distinct, $\deg N\le n$, and $r_j\prod_{i\ne j}(x_j-x_i)=N(x_j)$ for every $j\le n$, then $N=\sum_{j\le n}r_j\prod_{i\le n,\,i\ne j}(X-x_i)$. It is proved by showing the difference has degree at most $n$ and vanishes at the $n+1$ nodes.
tail_coeff is the identity the rest of the proof is built on. For $K>n$ and any $Q_c$ satisfying the conclusion of id1_full for all $j\le n$: $$\sum_{j=0}^{n}\frac{Q_c(n,j)}{2^{K-j}-1}=\frac{\prod_{n<L\le 2n}(2^K-2^L)}{\prod_{i=0}^{n}(2^K-2^i)}.$$ The proof takes the nodes $x_i=2^i$ and the polynomial $N$ above, checks that $\deg N\le n$ (tail_coeff.hNdeg) and the weight condition (tail_coeff.hr), applies lagr_eval, and evaluates both sides at $X=2^K$ (tail_coeff.hev). Dividing by $\prod_{i\le n}(2^K-2^i)$, which is nonzero because $K>n$, the $j$-th term becomes $Q_c(n,j)\,2^j/(2^K-2^j)=Q_c(n,j)/(2^{K-j}-1)$.
Splitting the constant $3T$
Draft · drafted, by the model named above
Let $T=\sum_{m\ge 0}1/(2^{m+3}-3)$ as in the statement.
split3T states that for every $n$ $$3T=\sum_{j<n}\frac{3}{2^{j+1}-3}+\sum_{m\ge 0}\frac{3}{2^{m+n+1}-3}.$$ With $g(m)=3/(2^{m+1}-3)$, $3T=\sum_{m\ge0}g(m+2)$, and $g(0)+g(1)=-3+3=0$ (split3T.hfirst), so $3T=\sum_{m\ge 0}g(m)$; this sum is then split after its first $n$ terms.
tail3 states that for $n\ge 1$ $$\sum_{m\ge0}\frac{3}{2^{m+n+1}-3}=\sum_{s\ge0}\frac{(3/2^n)^{s+1}}{2^{s+1}-1}.$$ Both sides are the double sum of the nonnegative numbers $f(m,s)=\big(3/2^{m+n+1}\big)^{s+1}$: summing over $s$ first gives the geometric series $3/(2^{m+n+1}-3)$ (tail3.inner1), and summing over $m$ first gives $(3/2^n)^{s+1}/(2^{s+1}-1)$ (tail3.inner2). The order of summation is exchanged because all terms are nonnegative and the double series converges (tail3.hU, tail3.hcomm).
The remainder as a power series
Draft · drafted, by the model named above
cauchy_fin is the product of a polynomial with a power series: if $\sum_{s\ge0}a_s x^{s+1}=A$, then the series over $K$ of $\sum_{j\le n,\ j<K}q_j\,a_{K-j-1}\,x^K$ has sum $\big(\sum_{j\le n}q_jx^j\big)A$.
h4_series states that for $n\ge 1$, with $x=3/2^n$, the remainder $R_n=3T\,Q_x(n)-A_q(n)$ is the sum of the series $$R_n=\sum_{K>2n}\frac{\prod_{n<L\le 2n}(2^K-2^L)}{\prod_{i=0}^{n}(2^K-2^i)}\,x^K .$$ The steps are these.
- Put $a_s=1/(2^{s+1}-1)$ and $A=\sum_{s\ge0}a_sx^{s+1}$, which converges because $x/2<1$ (
h4_series.hx2,h4_series.hAsum). - By
split3Tandtail3, $3T=c_n+A$ with $c_n=\sum_{j<n}3/(2^{j+1}-3)$ (h4_series.h3T). - The term $Q_x(n)\,c_n$ in $A_q(n)$ then cancels, leaving $R_n=Q_x(n)\,A-P$, where $P=\sum_{k\le n}\big(\sum_{j\le k}\frac{Q_c(n,j)}{2^{k-j}-1}\big)x^k$ (
h4_series.hval). cauchy_finwith $q_j=Q_c(n,j)$ expands $Q_x(n)\,A$ as a series in $K$, and $P$ is a finite series (h4_series.hP); their difference is computed coefficient by coefficient (h4_series.hfun):- for $K\le n$ the two coefficients are equal, because the term $j=K$ of $P$'s inner sum is $Q_c(n,K)/0=0$;
- for $K>n$ the coefficient is $\sum_{j\le n}Q_c(n,j)/(2^{K-j}-1)$, which
tail_coeffturns into the quotient of products, usingid1_fullfor the concrete $Q_c$ (h4_series.hid1); - for $n<K\le 2n$ that quotient is $0$, because the numerator contains the factor $2^K-2^K$.
Bounding each term
Draft · drafted, by the model named above
prod_one_sub_ge is the inequality $1-\sum_{i\in s}a_i\le\prod_{i\in s}(1-a_i)$ for $0\le a_i\le 1$, by induction on the finite set $s$.
nd_bound states that for $n\ge 1$ and $K\ge 2n+1$ the coefficient in h4_series satisfies $$0<\frac{\prod_{n<L\le 2n}(2^K-2^L)}{\prod_{i=0}^{n}(2^K-2^i)}\le 2\cdot 2^{-K}.$$ Every factor is positive since $L,i<K$. The numerator is at most $(2^K)^n$ (nd_bound.hN). The denominator is at least $(2^K)^{n+1}/2$ (nd_bound.hD): each factor is $2^K(1-2^{-(K-i)})$, the numbers $2^{-(K-i)}$ for $i\le n$ sum to at most $1/2$ because $K-n\ge 2$, and prod_one_sub_ge applies.
The bound for $n\ge 2$
Draft · drafted, by the model named above
ineq_pow states $9\cdot 81^n\le 256^n$ for $n\ge 2$ (induction on $n$).
h4_big is the conclusion of the statement for $n\ge 2$. Write $x=3/2^n$, so $x/2\le 3/8$ (h4_big.hx2), and let $G_K$ be the $K$-th term of the series in h4_series.
- Positivity. Every $G_K$ is $\ge 0$ and $G_{2n+1}>0$ (
h4_big.hGnn,h4_big.hGpos, both fromnd_bound), so the sum $R_n$ is positive. - Upper bound. By
nd_bound, $G_K\le 2(x/2)^K$ for $K>2n$. Summing the geometric series, $R_n\le 2(x/2)^{2n+1}/(1-x/2)\le 8(x/2)^{2n+1}$, using $1/(1-x/2)\le 4$. Squaring, $R_n^2\le 64\,(x/2)^{4n+2}$, and $x/2=3/2^{n+1}$. - Arithmetic. It remains that $64\cdot 3^{4n+2}\cdot 2^{4n^2}\le 2^{2n+4}\,(2^{n+1})^{4n+2}$. The right side is $2^{4n^2}\cdot 64\cdot 256^n$ and the left side is $2^{4n^2}\cdot 64\cdot 9\cdot 81^n$, so this is
ineq_pow. It is proved in $\mathbb N$ and cast to $\mathbb R$.
The constant $T$, and the cases $n=0$ and $n=1$
Draft · drafted, by the model named above
T_facts states that the series defining $T$ converges, $T>0$ and $T\le 2/5$, from $2^{m+3}-3\ge 5\cdot 2^m$, which bounds the $m$-th term by $\frac15 2^{-m}$. The step s17 takes $T>0$ and $T\le 2/5$ out of it.
The proof then introduces the hypotheses of the statement and splits on $n$.
- $n=0$: $Q_x(0)=1$ (
hQx0) and $A_q(0)=0$ (hAq0), so $R_0=3T>0$, and $R_0^2\cdot 2^0=9T^2$ (e), which is at most $2^4$ since $T\le 2/5$. - $n=1$: $Q_x(1)=3/2$ (
hQx1) and $A_q(1)=0$ (hAq1), so $R_1=\frac92T>0$, and $R_1^2\cdot 2^4\le 2^6$ again follows from $T\le 2/5$. - $n\ge 2$:
h4_big.
History: 1 version on record
2026-10-06 · written by t1006-w3, drafted with Claude Opus 5.5 (claude-opus-5-5) in a Claude Code agent session · not signed · current · explainer/fe09e6640e14….md · the first version of its chain
Read this version
How the proof goes
Write $T=\sum_{m\ge0}1/(2^{m+3}-3)$, $x_n=3/2^n$ and $R_n=3T\,Q_x(n)-A_q(n)$, as in the statement. The statement has no hypothesis about denominators; apart from that one missing hypothesis (and so one argument fewer in
intro Qc hQc Qx hQx Aq hAq n) this proof's tactic script is the same, line for line, as that oferdos-1050--h1-v2--h4.The idea is that $R_n$ is the sum of a convergent series in $x_n$ whose first $2n+1$ coefficients vanish: $$R_n=\sum_{K>2n}\frac{\prod_{n<L\le 2n}(2^K-2^L)}{\prod_{i=0}^{n}(2^K-2^i)}\,x_n^K\qquad(n\ge1).$$ The vanishing comes from Lagrange interpolation: the numbers $2^jQ_c(n,j)$ are the interpolation weights of $N(X)=\prod_{n<L\le 2n}(X-2^L)$ at the nodes $2^0,\dots,2^n$, and $N(2^K)=0$ for $n<K\le 2n$. Each remaining coefficient lies in $(0,\,2\cdot2^{-K}]$, so $R_n$ is positive and at most a geometric tail, $R_n\le 8\,(x_n/2)^{2n+1}$ for $n\ge2$; the stated bound is then an inequality between powers of $2$ and $3$. The cases $n=0$ and $n=1$ are computed directly, using $0<T\le 2/5$.
The four identities for products of $2^a-2^b$ (id1_test lower_test upper_test rhs_test id1_full)
These five steps have the same statements and proofs as the first five steps of the proof of
erdos-1050--h1-v2--h3, where they are explained in more detail. Write $P_m=\prod_{s<m}(2^{s+1}-1)$.id1_test: for $j\le n$, $\big(\prod_{i<j}(2^{n-i}-1)\big)P_{n-j}=P_n$ (induction on $j$).lower_test: $\prod_{i<j}(2^j-2^i)=2^{j(j-1)/2}P_j$.upper_test: for $j\le n$, $\prod_{j<i\le n}(2^j-2^i)=(-1)^{n-j}2^{j(n-j)}P_{n-j}$.rhs_test: for $j\le n$, $\big(\prod_{n<K\le 2n}(2^j-2^K)\big)P_{n-j}=(-1)^n2^{jn}P_{2n-j}$.id1_fullcombines them: for $j\le n$,
$$Q_c(n,j)\,2^j\prod_{i\le n,\ i\ne j}(2^j-2^i)=\prod_{n<K\le 2n}(2^j-2^K),$$ with $Q_c(n,j)$ written out as in the statement.
In other words, the numbers $2^jQ_c(n,j)$ are the Lagrange interpolation weights of the polynomial $N(X)=\prod_{n<L\le 2n}(X-2^L)$ at the nodes $2^0,2^1,\dots,2^n$.
Interpolation, and the coefficients beyond $n$ (lagr_eval tail_coeff)
lagr_evalis Lagrange interpolation over $\mathbb Q$: if $x_0,\dots,x_n$ are distinct, $\deg N\le n$, and $r_j\prod_{i\ne j}(x_j-x_i)=N(x_j)$ for every $j\le n$, then $N=\sum_{j\le n}r_j\prod_{i\le n,\,i\ne j}(X-x_i)$. It is proved by showing the difference has degree at most $n$ and vanishes at the $n+1$ nodes.tail_coeffis the identity the rest of the proof is built on. For $K>n$ and any $Q_c$ satisfying the conclusion ofid1_fullfor all $j\le n$: $$\sum_{j=0}^{n}\frac{Q_c(n,j)}{2^{K-j}-1}=\frac{\prod_{n<L\le 2n}(2^K-2^L)}{\prod_{i=0}^{n}(2^K-2^i)}.$$ The proof takes the nodes $x_i=2^i$ and the polynomial $N$ above, checks that $\deg N\le n$ (tail_coeff.hNdeg) and the weight condition (tail_coeff.hr), applieslagr_eval, and evaluates both sides at $X=2^K$ (tail_coeff.hev). Dividing by $\prod_{i\le n}(2^K-2^i)$, which is nonzero because $K>n$, the $j$-th term becomes $Q_c(n,j)\,2^j/(2^K-2^j)=Q_c(n,j)/(2^{K-j}-1)$.Splitting the constant $3T$ (tail3 split3T)
Let $T=\sum_{m\ge 0}1/(2^{m+3}-3)$ as in the statement.
split3Tstates that for every $n$ $$3T=\sum_{j<n}\frac{3}{2^{j+1}-3}+\sum_{m\ge 0}\frac{3}{2^{m+n+1}-3}.$$ With $g(m)=3/(2^{m+1}-3)$, $3T=\sum_{m\ge0}g(m+2)$, and $g(0)+g(1)=-3+3=0$ (split3T.hfirst), so $3T=\sum_{m\ge 0}g(m)$; this sum is then split after its first $n$ terms.tail3states that for $n\ge 1$ $$\sum_{m\ge0}\frac{3}{2^{m+n+1}-3}=\sum_{s\ge0}\frac{(3/2^n)^{s+1}}{2^{s+1}-1}.$$ Both sides are the double sum of the nonnegative numbers $f(m,s)=\big(3/2^{m+n+1}\big)^{s+1}$: summing over $s$ first gives the geometric series $3/(2^{m+n+1}-3)$ (tail3.inner1), and summing over $m$ first gives $(3/2^n)^{s+1}/(2^{s+1}-1)$ (tail3.inner2). The order of summation is exchanged because all terms are nonnegative and the double series converges (tail3.hU,tail3.hcomm).The remainder as a power series (cauchy_fin h4_series)
cauchy_finis the product of a polynomial with a power series: if $\sum_{s\ge0}a_s x^{s+1}=A$, then the series over $K$ of $\sum_{j\le n,\ j<K}q_j\,a_{K-j-1}\,x^K$ has sum $\big(\sum_{j\le n}q_jx^j\big)A$.h4_seriesstates that for $n\ge 1$, with $x=3/2^n$, the remainder $R_n=3T\,Q_x(n)-A_q(n)$ is the sum of the series $$R_n=\sum_{K>2n}\frac{\prod_{n<L\le 2n}(2^K-2^L)}{\prod_{i=0}^{n}(2^K-2^i)}\,x^K .$$ The steps are these.- Put $a_s=1/(2^{s+1}-1)$ and $A=\sum_{s\ge0}a_sx^{s+1}$, which converges because $x/2<1$ (
h4_series.hx2,h4_series.hAsum). - By
split3Tandtail3, $3T=c_n+A$ with $c_n=\sum_{j<n}3/(2^{j+1}-3)$ (h4_series.h3T). - The term $Q_x(n)\,c_n$ in $A_q(n)$ then cancels, leaving $R_n=Q_x(n)\,A-P$, where $P=\sum_{k\le n}\big(\sum_{j\le k}\frac{Q_c(n,j)}{2^{k-j}-1}\big)x^k$ (
h4_series.hval). cauchy_finwith $q_j=Q_c(n,j)$ expands $Q_x(n)\,A$ as a series in $K$, and $P$ is a finite series (h4_series.hP); their difference is computed coefficient by coefficient (h4_series.hfun):- for $K\le n$ the two coefficients are equal, because the term $j=K$ of $P$'s inner sum is $Q_c(n,K)/0=0$;
- for $K>n$ the coefficient is $\sum_{j\le n}Q_c(n,j)/(2^{K-j}-1)$, which
tail_coeffturns into the quotient of products, usingid1_fullfor the concrete $Q_c$ (h4_series.hid1); - for $n<K\le 2n$ that quotient is $0$, because the numerator contains the factor $2^K-2^K$.
Bounding each term (prod_one_sub_ge nd_bound)
prod_one_sub_geis the inequality $1-\sum_{i\in s}a_i\le\prod_{i\in s}(1-a_i)$ for $0\le a_i\le 1$, by induction on the finite set $s$.nd_boundstates that for $n\ge 1$ and $K\ge 2n+1$ the coefficient inh4_seriessatisfies $$0<\frac{\prod_{n<L\le 2n}(2^K-2^L)}{\prod_{i=0}^{n}(2^K-2^i)}\le 2\cdot 2^{-K}.$$ Every factor is positive since $L,i<K$. The numerator is at most $(2^K)^n$ (nd_bound.hN). The denominator is at least $(2^K)^{n+1}/2$ (nd_bound.hD): each factor is $2^K(1-2^{-(K-i)})$, the numbers $2^{-(K-i)}$ for $i\le n$ sum to at most $1/2$ because $K-n\ge 2$, andprod_one_sub_geapplies.The bound for $n\ge 2$ (ineq_pow h4_big)
ineq_powstates $9\cdot 81^n\le 256^n$ for $n\ge 2$ (induction on $n$).h4_bigis the conclusion of the statement for $n\ge 2$. Write $x=3/2^n$, so $x/2\le 3/8$ (h4_big.hx2), and let $G_K$ be the $K$-th term of the series inh4_series.- Positivity. Every $G_K$ is $\ge 0$ and $G_{2n+1}>0$ (
h4_big.hGnn,h4_big.hGpos, both fromnd_bound), so the sum $R_n$ is positive. - Upper bound. By
nd_bound, $G_K\le 2(x/2)^K$ for $K>2n$. Summing the geometric series, $R_n\le 2(x/2)^{2n+1}/(1-x/2)\le 8(x/2)^{2n+1}$, using $1/(1-x/2)\le 4$. Squaring, $R_n^2\le 64\,(x/2)^{4n+2}$, and $x/2=3/2^{n+1}$. - Arithmetic. It remains that $64\cdot 3^{4n+2}\cdot 2^{4n^2}\le 2^{2n+4}\,(2^{n+1})^{4n+2}$. The right side is $2^{4n^2}\cdot 64\cdot 256^n$ and the left side is $2^{4n^2}\cdot 64\cdot 9\cdot 81^n$, so this is
ineq_pow. It is proved in $\mathbb N$ and cast to $\mathbb R$.
The constant $T$, and the cases $n=0$ and $n=1$ (T_facts s17 hQx0 hAq0 e hQx1 hAq1)
T_factsstates that the series defining $T$ converges, $T>0$ and $T\le 2/5$, from $2^{m+3}-3\ge 5\cdot 2^m$, which bounds the $m$-th term by $\frac15 2^{-m}$. The steps17takes $T>0$ and $T\le 2/5$ out of it.The proof then introduces the hypotheses of the statement and splits on $n$.
- $n=0$: $Q_x(0)=1$ (
hQx0) and $A_q(0)=0$ (hAq0), so $R_0=3T>0$, and $R_0^2\cdot 2^0=9T^2$ (e), which is at most $2^4$ since $T\le 2/5$. - $n=1$: $Q_x(1)=3/2$ (
hQx1) and $A_q(1)=0$ (hAq1), so $R_1=\frac92T>0$, and $R_1^2\cdot 2^4\le 2^6$ again follows from $T\le 2/5$. - $n\ge 2$:
h4_big.
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, 000327, records the gate’s run.
The proof step by step (outline)
Checked by the kernel — an outline of the attested proof below: attestations/000327.json, merge commit dfc7b5cc45a9.
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.
id1_testhave∀ (n j : ℕ), j ≤ n → (∏ i ∈ Finset.range j, ((2 : ℚ) ^ (n - i) - (1 : ℚ))) * ∏ s ∈ Finset.range (n - j), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)) = ∏ s ∈ Finset.range n, ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ))Leaves
∀ (Qc : ℕ → ℕ → ℚ), (Qc = fun (n k : ℕ) => ((-1 : ℚ) ^ k * (2 : ℚ) ^ (k * (k - (1 : ℕ)) / (2 : ℕ)) * ∏ i ∈ Finset.range k, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * ∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - k - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) → ∀ (Qx : ℕ → ℚ), (Qx = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), Qc n k * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k) → ∀ (Aq : ℕ → ℚ), (Aq = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), (∑ j ∈ Finset.range (k + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (k - j) - (1 : ℚ))) * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k + Qx n * ∑ j ∈ Finset.range n, (3 : ℚ) / ((2 : ℚ) ^ (j + (1 : ℕ)) - (3 : ℚ))) → ∀ (n : ℕ), (0 : ℝ) < (↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ) ∧ ((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ)) ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)), withid1_test : ∀ (n j : ℕ), j ≤ n → (∏ i ∈ Finset.range j, ((2 : ℚ) ^ (n - i) - (1 : ℚ))) * ∏ s ∈ Finset.range (n - j), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)) = ∏ s ∈ Finset.range n, ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)).Uses library
Finset.rangerange nis the set of natural numbers less thann. .Lean, lines 28–39
have id1_test : ∀ (n j : ℕ) (hj : j ≤ n), (∏ i ∈ Finset.range j, ((2 : ℚ) ^ (n - i) - 1)) * ∏ s ∈ Finset.range (n - j), ((2 : ℚ) ^ (s + 1) - 1) = ∏ s ∈ Finset.range n, ((2 : ℚ) ^ (s + 1) - 1) := by intro n j hj induction j with | zero => simp | succ j ih => have ih' := ih (by omega) rw [Finset.prod_range_succ, ← ih'] obtain ⟨m, hm⟩ : ∃ m, n - j = m + 1 := ⟨n - j - 1, by omega⟩ rw [hm, Finset.prod_range_succ, show n - (j + 1) = m by omega] ringtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 28–39 at
dfc7b5cc45a9↗id1_test.s1case routine: simpLeaves
(∏ i ∈ Finset.range (0 : ℕ), ((2 : ℚ) ^ (n - i) - (1 : ℚ))) * ∏ s ∈ Finset.range (n - (0 : ℕ)), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)) = ∏ s ∈ Finset.range n, ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)), withhj : (0 : ℕ) ≤ n.Uses library
Nat.zeroZero, the smallest natural number. .Lean, line 33
| zero => simp
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 33 at
dfc7b5cc45a9↗id1_test.s2caseLeaves
(∏ i ∈ Finset.range (j + (1 : ℕ)), ((2 : ℚ) ^ (n - i) - (1 : ℚ))) * ∏ s ∈ Finset.range (n - (j + (1 : ℕ))), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)) = ∏ s ∈ Finset.range n, ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)), withj : ℕ,ih : j ≤ n → (∏ i ∈ Finset.range j, ((2 : ℚ) ^ (n - i) - (1 : ℚ))) * ∏ s ∈ Finset.range (n - j), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)) = ∏ s ∈ Finset.range n, ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)),hj : j + (1 : ℕ) ≤ n.Uses library
Nat.succThe successor of a natural numbern. ,Finset.prod_range_succ.Lean, lines 34–39
| succ j ih => have ih' := ih (by omega) rw [Finset.prod_range_succ, ← ih'] obtain ⟨m, hm⟩ : ∃ m, n - j = m + 1 := ⟨n - j - 1, by omega⟩ rw [hm, Finset.prod_range_succ, show n - (j + 1) = m by omega] ringtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 34–39 at
dfc7b5cc45a9↗id1_test.s2.ih'have(∏ i ∈ Finset.range j, ((2 : ℚ) ^ (n - i) - (1 : ℚ))) * ∏ s ∈ Finset.range (n - j), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)) = ∏ s ∈ Finset.range n, ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ))Leaves
(∏ i ∈ Finset.range (j + (1 : ℕ)), ((2 : ℚ) ^ (n - i) - (1 : ℚ))) * ∏ s ∈ Finset.range (n - (j + (1 : ℕ))), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)) = ∏ s ∈ Finset.range n, ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)), withih' : (∏ i ∈ Finset.range j, ((2 : ℚ) ^ (n - i) - (1 : ℚ))) * ∏ s ∈ Finset.range (n - j), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)) = ∏ s ∈ Finset.range n, ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)).Lean, line 35
have ih' := ih (by omega)
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 35 at
dfc7b5cc45a9↗id1_test.s2.s2obtain∃ (m : ℕ), n - j = m + (1 : ℕ)Leaves
(∏ x ∈ Finset.range j, ((2 : ℚ) ^ (n - x) - (1 : ℚ))) * ((2 : ℚ) ^ (n - j) - (1 : ℚ)) * ∏ s ∈ Finset.range (n - (j + (1 : ℕ))), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)) = (∏ i ∈ Finset.range j, ((2 : ℚ) ^ (n - i) - (1 : ℚ))) * ∏ s ∈ Finset.range (n - j), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)), withm : ℕ,hm : n - j = m + (1 : ℕ).Uses library
Exists.introExistential introduction. .Lean, line 37
obtain ⟨m, hm⟩ : ∃ m, n - j = m + 1 := ⟨n - j - 1, by omega⟩
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 37 at
dfc7b5cc45a9↗
lower_testhave∀ (j : ℕ), ∏ i ∈ Finset.range j, ((2 : ℚ) ^ j - (2 : ℚ) ^ i) = (2 : ℚ) ^ (j * (j - (1 : ℕ)) / (2 : ℕ)) * ∏ s ∈ Finset.range j, ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ))Leaves
∀ (Qc : ℕ → ℕ → ℚ), (Qc = fun (n k : ℕ) => ((-1 : ℚ) ^ k * (2 : ℚ) ^ (k * (k - (1 : ℕ)) / (2 : ℕ)) * ∏ i ∈ Finset.range k, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * ∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - k - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) → ∀ (Qx : ℕ → ℚ), (Qx = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), Qc n k * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k) → ∀ (Aq : ℕ → ℚ), (Aq = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), (∑ j ∈ Finset.range (k + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (k - j) - (1 : ℚ))) * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k + Qx n * ∑ j ∈ Finset.range n, (3 : ℚ) / ((2 : ℚ) ^ (j + (1 : ℕ)) - (3 : ℚ))) → ∀ (n : ℕ), (0 : ℝ) < (↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ) ∧ ((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ)) ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)), withlower_test : ∀ (j : ℕ), ∏ i ∈ Finset.range j, ((2 : ℚ) ^ j - (2 : ℚ) ^ i) = (2 : ℚ) ^ (j * (j - (1 : ℕ)) / (2 : ℕ)) * ∏ s ∈ Finset.range j, ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)).Uses library
Finset.rangerange nis the set of natural numbers less thann. ,Finset.prod_congr,rflrfl : a = ais the unique constructor of the equality type. ,Finset.prod_mul_distrib,Finset.prod_pow_eq_pow_sum,Finset.prod_range_reflect.Lean, lines 41–55
have lower_test : ∀ (j : ℕ), ∏ i ∈ Finset.range j, ((2 : ℚ) ^ j - 2 ^ i) = 2 ^ (j * (j - 1) / 2) * ∏ s ∈ Finset.range j, ((2 : ℚ) ^ (s + 1) - 1) := by intro j have h1 : ∀ i ∈ Finset.range j, ((2 : ℚ) ^ j - 2 ^ i) = 2 ^ i * (2 ^ (j - 1 - i + 1) - 1) := by intro i hi have hi' := Finset.mem_range.mp hi rw [mul_sub, ← pow_add, show i + (j - 1 - i + 1) = j by omega] ring rw [Finset.prod_congr rfl h1, Finset.prod_mul_distrib, Finset.prod_pow_eq_pow_sum, Finset.prod_range_reflect (fun s => ((2 : ℚ) ^ (s + 1) - 1)) j] congr 1 congr 1 have := Finset.sum_range_id_mul_two j omegatargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 41–55 at
dfc7b5cc45a9↗lower_test.h1have∀ i ∈ Finset.range j, (2 : ℚ) ^ j - (2 : ℚ) ^ i = (2 : ℚ) ^ i * ((2 : ℚ) ^ (j - (1 : ℕ) - i + (1 : ℕ)) - (1 : ℚ))Leaves
∏ i ∈ Finset.range j, ((2 : ℚ) ^ j - (2 : ℚ) ^ i) = (2 : ℚ) ^ (j * (j - (1 : ℕ)) / (2 : ℕ)) * ∏ s ∈ Finset.range j, ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)), withh1 : ∀ i ∈ Finset.range j, (2 : ℚ) ^ j - (2 : ℚ) ^ i = (2 : ℚ) ^ i * ((2 : ℚ) ^ (j - (1 : ℕ) - i + (1 : ℕ)) - (1 : ℚ)).Uses library
Finset.rangerange nis the set of natural numbers less thann. ,mul_subAlias ofmul_sub_left_distrib. ,pow_add.Lean, lines 45–49
have h1 : ∀ i ∈ Finset.range j, ((2 : ℚ) ^ j - 2 ^ i) = 2 ^ i * (2 ^ (j - 1 - i + 1) - 1) := by intro i hi have hi' := Finset.mem_range.mp hi rw [mul_sub, ← pow_add, show i + (j - 1 - i + 1) = j by omega] ringtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 45–49 at
dfc7b5cc45a9↗lower_test.h1.hi'havei < jLeaves
(2 : ℚ) ^ j - (2 : ℚ) ^ i = (2 : ℚ) ^ i * ((2 : ℚ) ^ (j - (1 : ℕ) - i + (1 : ℕ)) - (1 : ℚ)), withhi' : i < j.Uses library
Finset.mem_range.Lean, line 47
have hi' := Finset.mem_range.mp hi
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 47 at
dfc7b5cc45a9↗
lower_test.thishave(∑ i ∈ Finset.range j, i) * (2 : ℕ) = j * (j - (1 : ℕ))Leaves
∑ i ∈ Finset.range j, i = j * (j - (1 : ℕ)) / (2 : ℕ), withthis : (∑ i ∈ Finset.range j, i) * (2 : ℕ) = j * (j - (1 : ℕ)).Uses library
Finset.sum_range_id_mul_twoGauss' summation formula .Lean, line 54
have := Finset.sum_range_id_mul_two j
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 54 at
dfc7b5cc45a9↗
upper_testhave∀ (j n : ℕ), j ≤ n → ∏ i ∈ Finset.Ioc j n, ((2 : ℚ) ^ j - (2 : ℚ) ^ i) = (-1 : ℚ) ^ (n - j) * (2 : ℚ) ^ (j * (n - j)) * ∏ s ∈ Finset.range (n - j), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ))Leaves
∀ (Qc : ℕ → ℕ → ℚ), (Qc = fun (n k : ℕ) => ((-1 : ℚ) ^ k * (2 : ℚ) ^ (k * (k - (1 : ℕ)) / (2 : ℕ)) * ∏ i ∈ Finset.range k, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * ∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - k - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) → ∀ (Qx : ℕ → ℚ), (Qx = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), Qc n k * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k) → ∀ (Aq : ℕ → ℚ), (Aq = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), (∑ j ∈ Finset.range (k + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (k - j) - (1 : ℚ))) * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k + Qx n * ∑ j ∈ Finset.range n, (3 : ℚ) / ((2 : ℚ) ^ (j + (1 : ℕ)) - (3 : ℚ))) → ∀ (n : ℕ), (0 : ℝ) < (↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ) ∧ ((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ)) ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)), withupper_test : ∀ (j n : ℕ), j ≤ n → ∏ i ∈ Finset.Ioc j n, ((2 : ℚ) ^ j - (2 : ℚ) ^ i) = (-1 : ℚ) ^ (n - j) * (2 : ℚ) ^ (j * (n - j)) * ∏ s ∈ Finset.range (n - j), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)).Uses library
Finset.IocThe finset $(a, b]$ of elementsxsuch thata < xandx ≤ b. ,Finset.rangerange nis the set of natural numbers less thann. ,Finset.prod_Ico_eq_prod_range,Finset.prod_congr,rflrfl : a = ais the unique constructor of the equality type. ,Finset.prod_mul_distrib,Finset.prod_const,Finset.card_range,pow_mul.Lean, lines 57–69
have upper_test : ∀ (j n : ℕ) (hj : j ≤ n), ∏ i ∈ Finset.Ioc j n, ((2 : ℚ) ^ j - 2 ^ i) = (-1) ^ (n - j) * 2 ^ (j * (n - j)) * ∏ s ∈ Finset.range (n - j), ((2 : ℚ) ^ (s + 1) - 1) := by intro j n hj have e : Finset.Ioc j n = Finset.Ico (j + 1) (n + 1) := by ext x; simp only [Finset.mem_Ioc, Finset.mem_Ico]; omega rw [e, Finset.prod_Ico_eq_prod_range, show n + 1 - (j + 1) = n - j by omega] have h1 : ∀ t ∈ Finset.range (n - j), ((2 : ℚ) ^ j - 2 ^ (j + 1 + t)) = (-1) * 2 ^ j * (2 ^ (t + 1) - 1) := by intro t _ rw [show j + 1 + t = j + (t + 1) by ring, pow_add] ring rw [Finset.prod_congr rfl h1, Finset.prod_mul_distrib, Finset.prod_mul_distrib, Finset.prod_const, Finset.prod_const, Finset.card_range, ← pow_mul]targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 57–69 at
dfc7b5cc45a9↗upper_test.ehaveFinset.Ioc j n = Finset.Ico (j + (1 : ℕ)) (n + (1 : ℕ))Leaves
∏ i ∈ Finset.Ioc j n, ((2 : ℚ) ^ j - (2 : ℚ) ^ i) = (-1 : ℚ) ^ (n - j) * (2 : ℚ) ^ (j * (n - j)) * ∏ s ∈ Finset.range (n - j), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)), withe : Finset.Ioc j n = Finset.Ico (j + (1 : ℕ)) (n + (1 : ℕ)).Uses library
Finset.IocThe finset $(a, b]$ of elementsxsuch thata < xandx ≤ b. ,Finset.IcoThe finset $[a, b)$ of elementsxsuch thata ≤ xandx < b. ,Finset.mem_Ioc,Finset.mem_Ico.Lean, lines 61–62
have e : Finset.Ioc j n = Finset.Ico (j + 1) (n + 1) := by ext x; simp only [Finset.mem_Ioc, Finset.mem_Ico]; omegatargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 61–62 at
dfc7b5cc45a9↗upper_test.h1have∀ t ∈ Finset.range (n - j), (2 : ℚ) ^ j - (2 : ℚ) ^ (j + (1 : ℕ) + t) = (-1 : ℚ) * (2 : ℚ) ^ j * ((2 : ℚ) ^ (t + (1 : ℕ)) - (1 : ℚ))Leaves
∏ k ∈ Finset.range (n - j), ((2 : ℚ) ^ j - (2 : ℚ) ^ (j + (1 : ℕ) + k)) = (-1 : ℚ) ^ (n - j) * (2 : ℚ) ^ (j * (n - j)) * ∏ s ∈ Finset.range (n - j), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)), withh1 : ∀ t ∈ Finset.range (n - j), (2 : ℚ) ^ j - (2 : ℚ) ^ (j + (1 : ℕ) + t) = (-1 : ℚ) * (2 : ℚ) ^ j * ((2 : ℚ) ^ (t + (1 : ℕ)) - (1 : ℚ)).Uses library
Finset.rangerange nis the set of natural numbers less thann. ,pow_add.Lean, lines 64–67
have h1 : ∀ t ∈ Finset.range (n - j), ((2 : ℚ) ^ j - 2 ^ (j + 1 + t)) = (-1) * 2 ^ j * (2 ^ (t + 1) - 1) := by intro t _ rw [show j + 1 + t = j + (t + 1) by ring, pow_add] ringtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 64–67 at
dfc7b5cc45a9↗
rhs_testhave∀ (j n : ℕ), j ≤ n → (∏ K ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℚ) ^ j - (2 : ℚ) ^ K)) * ∏ s ∈ Finset.range (n - j), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)) = (-1 : ℚ) ^ n * (2 : ℚ) ^ (j * n) * ∏ s ∈ Finset.range ((2 : ℕ) * n - j), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ))Leaves
∀ (Qc : ℕ → ℕ → ℚ), (Qc = fun (n k : ℕ) => ((-1 : ℚ) ^ k * (2 : ℚ) ^ (k * (k - (1 : ℕ)) / (2 : ℕ)) * ∏ i ∈ Finset.range k, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * ∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - k - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) → ∀ (Qx : ℕ → ℚ), (Qx = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), Qc n k * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k) → ∀ (Aq : ℕ → ℚ), (Aq = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), (∑ j ∈ Finset.range (k + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (k - j) - (1 : ℚ))) * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k + Qx n * ∑ j ∈ Finset.range n, (3 : ℚ) / ((2 : ℚ) ^ (j + (1 : ℕ)) - (3 : ℚ))) → ∀ (n : ℕ), (0 : ℝ) < (↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ) ∧ ((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ)) ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)), withrhs_test : ∀ (j n : ℕ), j ≤ n → (∏ K ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℚ) ^ j - (2 : ℚ) ^ K)) * ∏ s ∈ Finset.range (n - j), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)) = (-1 : ℚ) ^ n * (2 : ℚ) ^ (j * n) * ∏ s ∈ Finset.range ((2 : ℕ) * n - j), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)).Uses library
Finset.IocThe finset $(a, b]$ of elementsxsuch thata < xandx ≤ b. ,Finset.rangerange nis the set of natural numbers less thann. ,Finset.prod_Ico_eq_prod_range,Finset.prod_congr,rflrfl : a = ais the unique constructor of the equality type. ,Finset.prod_mul_distrib,Finset.prod_const,Finset.card_range,pow_mul,Finset.prod_range_add.Lean, lines 71–87
have rhs_test : ∀ (j n : ℕ) (hj : j ≤ n), (∏ K ∈ Finset.Ioc n (2 * n), ((2 : ℚ) ^ j - 2 ^ K)) * ∏ s ∈ Finset.range (n - j), ((2 : ℚ) ^ (s + 1) - 1) = (-1) ^ n * 2 ^ (j * n) * ∏ s ∈ Finset.range (2 * n - j), ((2 : ℚ) ^ (s + 1) - 1) := by intro j n hj have e : Finset.Ioc n (2 * n) = Finset.Ico (n + 1) (2 * n + 1) := by ext x; simp only [Finset.mem_Ioc, Finset.mem_Ico]; omega rw [e, Finset.prod_Ico_eq_prod_range, show 2 * n + 1 - (n + 1) = n by omega] have h1 : ∀ t ∈ Finset.range n, ((2 : ℚ) ^ j - 2 ^ (n + 1 + t)) = (-1) * 2 ^ j * (2 ^ ((n - j) + t + 1) - 1) := by intro t _ rw [show n + 1 + t = j + ((n - j) + t + 1) by omega, pow_add] ring rw [Finset.prod_congr rfl h1, Finset.prod_mul_distrib, Finset.prod_mul_distrib, Finset.prod_const, Finset.prod_const, Finset.card_range, ← pow_mul, show 2 * n - j = (n - j) + n by omega, Finset.prod_range_add] ringtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 71–87 at
dfc7b5cc45a9↗rhs_test.ehaveFinset.Ioc n ((2 : ℕ) * n) = Finset.Ico (n + (1 : ℕ)) ((2 : ℕ) * n + (1 : ℕ))Leaves
(∏ K ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℚ) ^ j - (2 : ℚ) ^ K)) * ∏ s ∈ Finset.range (n - j), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)) = (-1 : ℚ) ^ n * (2 : ℚ) ^ (j * n) * ∏ s ∈ Finset.range ((2 : ℕ) * n - j), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)), withe : Finset.Ioc n ((2 : ℕ) * n) = Finset.Ico (n + (1 : ℕ)) ((2 : ℕ) * n + (1 : ℕ)).Uses library
Finset.IocThe finset $(a, b]$ of elementsxsuch thata < xandx ≤ b. ,Finset.IcoThe finset $[a, b)$ of elementsxsuch thata ≤ xandx < b. ,Finset.mem_Ioc,Finset.mem_Ico.Lean, lines 76–77
have e : Finset.Ioc n (2 * n) = Finset.Ico (n + 1) (2 * n + 1) := by ext x; simp only [Finset.mem_Ioc, Finset.mem_Ico]; omegatargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 76–77 at
dfc7b5cc45a9↗rhs_test.h1have∀ t ∈ Finset.range n, (2 : ℚ) ^ j - (2 : ℚ) ^ (n + (1 : ℕ) + t) = (-1 : ℚ) * (2 : ℚ) ^ j * ((2 : ℚ) ^ (n - j + t + (1 : ℕ)) - (1 : ℚ))Leaves
(∏ k ∈ Finset.range n, ((2 : ℚ) ^ j - (2 : ℚ) ^ (n + (1 : ℕ) + k))) * ∏ s ∈ Finset.range (n - j), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)) = (-1 : ℚ) ^ n * (2 : ℚ) ^ (j * n) * ∏ s ∈ Finset.range ((2 : ℕ) * n - j), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)), withh1 : ∀ t ∈ Finset.range n, (2 : ℚ) ^ j - (2 : ℚ) ^ (n + (1 : ℕ) + t) = (-1 : ℚ) * (2 : ℚ) ^ j * ((2 : ℚ) ^ (n - j + t + (1 : ℕ)) - (1 : ℚ)).Uses library
Finset.rangerange nis the set of natural numbers less thann. ,pow_add.Lean, lines 79–83
have h1 : ∀ t ∈ Finset.range n, ((2 : ℚ) ^ j - 2 ^ (n + 1 + t)) = (-1) * 2 ^ j * (2 ^ ((n - j) + t + 1) - 1) := by intro t _ rw [show n + 1 + t = j + ((n - j) + t + 1) by omega, pow_add] ringtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 79–83 at
dfc7b5cc45a9↗
id1_fullhave∀ (n j : ℕ), j ≤ n → (((-1 : ℚ) ^ j * (2 : ℚ) ^ (j * (j - (1 : ℕ)) / (2 : ℕ)) * ∏ i ∈ Finset.range j, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * ∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - j - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * (2 : ℚ) ^ j * ∏ i ∈ (Finset.range (n + (1 : ℕ))).erase j, ((2 : ℚ) ^ j - (2 : ℚ) ^ i) = ∏ K ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℚ) ^ j - (2 : ℚ) ^ K)Leaves
∀ (Qc : ℕ → ℕ → ℚ), (Qc = fun (n k : ℕ) => ((-1 : ℚ) ^ k * (2 : ℚ) ^ (k * (k - (1 : ℕ)) / (2 : ℕ)) * ∏ i ∈ Finset.range k, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * ∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - k - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) → ∀ (Qx : ℕ → ℚ), (Qx = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), Qc n k * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k) → ∀ (Aq : ℕ → ℚ), (Aq = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), (∑ j ∈ Finset.range (k + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (k - j) - (1 : ℚ))) * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k + Qx n * ∑ j ∈ Finset.range n, (3 : ℚ) / ((2 : ℚ) ^ (j + (1 : ℕ)) - (3 : ℚ))) → ∀ (n : ℕ), (0 : ℝ) < (↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ) ∧ ((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ)) ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)), withid1_full : ∀ (n j : ℕ), j ≤ n → (((-1 : ℚ) ^ j * (2 : ℚ) ^ (j * (j - (1 : ℕ)) / (2 : ℕ)) * ∏ i ∈ Finset.range j, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * ∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - j - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * (2 : ℚ) ^ j * ∏ i ∈ (Finset.range (n + (1 : ℕ))).erase j, ((2 : ℚ) ^ j - (2 : ℚ) ^ i) = ∏ K ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℚ) ^ j - (2 : ℚ) ^ K).Uses library
Finset.rangerange nis the set of natural numbers less thann. ,Finset.IocThe finset $(a, b]$ of elementsxsuch thata < xandx ≤ b. ,Finset.prod_union,mul_right_cancel₀,pow_add.Lean, lines 89–132
have id1_full : ∀ (n j : ℕ) (hj : j ≤ n), (((-1 : ℚ) ^ j * (2 : ℚ) ^ (j * (j - (1 : ℕ)) / (2 : ℕ)) * ∏ i ∈ Finset.range j, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * ∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - j - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * 2 ^ j * ∏ i ∈ (Finset.range (n + 1)).erase j, ((2 : ℚ) ^ j - 2 ^ i) = ∏ K ∈ Finset.Ioc n (2 * n), ((2 : ℚ) ^ j - 2 ^ K) := by intro n j hj have hPne : ∀ m : ℕ, ∏ s ∈ Finset.range m, ((2 : ℚ) ^ (s + 1) - 1) ≠ 0 := by intro m refine Finset.prod_ne_zero_iff.mpr (fun s _ => ?_) have : (1 : ℚ) < 2 ^ (s + 1) := one_lt_pow₀ (by norm_num) (by omega) linarith have hG1 : ∏ i ∈ Finset.range j, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ)) = (∏ s ∈ Finset.range n, ((2 : ℚ) ^ (s + 1) - 1)) / ((∏ s ∈ Finset.range (n - j), ((2 : ℚ) ^ (s + 1) - 1)) * ∏ s ∈ Finset.range j, ((2 : ℚ) ^ (s + 1) - 1)) := by rw [Finset.prod_div_distrib, ← id1_test n j hj] field_simp [hPne] have hG2 : ∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - j - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ)) = (∏ s ∈ Finset.range (2 * n - j), ((2 : ℚ) ^ (s + 1) - 1)) / ((∏ s ∈ Finset.range (n - j), ((2 : ℚ) ^ (s + 1) - 1)) * ∏ s ∈ Finset.range n, ((2 : ℚ) ^ (s + 1) - 1)) := by rw [Finset.prod_div_distrib, ← id1_test (2 * n - j) n (by omega), show 2 * n - j - n = n - j by omega] field_simp [hPne] have hsplit : (Finset.range (n + 1)).erase j = Finset.range j ∪ Finset.Ioc j n := by ext x; simp only [Finset.mem_erase, Finset.mem_range, Finset.mem_union, Finset.mem_Ioc]; omega have hdisj : Disjoint (Finset.range j) (Finset.Ioc j n) := by rw [Finset.disjoint_left] intro x hx hx' simp only [Finset.mem_range, Finset.mem_Ioc] at hx hx' omega have hR := rhs_test j n hj obtain ⟨m, rfl⟩ := Nat.exists_eq_add_of_le hj have hsign : (-1 : ℚ) ^ (j + m) = (-1) ^ j * (-1) ^ (j + m - j) := by rw [← pow_add]; congr 1; omega have ha : 2 * (j * (j - 1) / 2) = j * (j - 1) := Nat.two_mul_div_two_of_even (Nat.even_mul_pred_self _) have hexp : j * (j + m) = j * (j - (1 : ℕ)) / (2 : ℕ) + j + j * (j - (1 : ℕ)) / (2 : ℕ) + j * (j + m - j) := by rw [show j + m - j = m by omega] rcases j with _ | i · simp · simp only [Nat.add_sub_cancel] at ha ⊢ nlinarith [ha] rw [hG1, hG2, hsplit, Finset.prod_union hdisj, lower_test, upper_test j (j + m) hj] apply mul_right_cancel₀ (hPne (j + m - j)) rw [hR, hsign, hexp, pow_add, pow_add, pow_add] field_simp [hPne]targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 89–132 at
dfc7b5cc45a9↗id1_full.hPnehave∀ (m : ℕ), ∏ s ∈ Finset.range m, ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)) ≠ (0 : ℚ)Leaves
(((-1 : ℚ) ^ j * (2 : ℚ) ^ (j * (j - (1 : ℕ)) / (2 : ℕ)) * ∏ i ∈ Finset.range j, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * ∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - j - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * (2 : ℚ) ^ j * ∏ i ∈ (Finset.range (n + (1 : ℕ))).erase j, ((2 : ℚ) ^ j - (2 : ℚ) ^ i) = ∏ K ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℚ) ^ j - (2 : ℚ) ^ K), withhPne : ∀ (m : ℕ), ∏ s ∈ Finset.range m, ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)) ≠ (0 : ℚ).Uses library
Finset.rangerange nis the set of natural numbers less thann. ,Finset.prod_ne_zero_iff.Lean, lines 96–100
have hPne : ∀ m : ℕ, ∏ s ∈ Finset.range m, ((2 : ℚ) ^ (s + 1) - 1) ≠ 0 := by intro m refine Finset.prod_ne_zero_iff.mpr (fun s _ => ?_) have : (1 : ℚ) < 2 ^ (s + 1) := one_lt_pow₀ (by norm_num) (by omega) linarithtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 96–100 at
dfc7b5cc45a9↗id1_full.hPne.thishave(1 : ℚ) < (2 : ℚ) ^ (s + (1 : ℕ))Leaves
(2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ) ≠ (0 : ℚ), withthis : (1 : ℚ) < (2 : ℚ) ^ (s + (1 : ℕ)).Uses library
one_lt_pow₀.Lean, line 99
have : (1 : ℚ) < 2 ^ (s + 1) := one_lt_pow₀ (by norm_num) (by omega)
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 99 at
dfc7b5cc45a9↗
id1_full.hG1have∏ i ∈ Finset.range j, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ)) = (∏ s ∈ Finset.range n, ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ))) / ((∏ s ∈ Finset.range (n - j), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ))) * ∏ s ∈ Finset.range j, ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)))Leaves
(((-1 : ℚ) ^ j * (2 : ℚ) ^ (j * (j - (1 : ℕ)) / (2 : ℕ)) * ∏ i ∈ Finset.range j, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * ∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - j - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * (2 : ℚ) ^ j * ∏ i ∈ (Finset.range (n + (1 : ℕ))).erase j, ((2 : ℚ) ^ j - (2 : ℚ) ^ i) = ∏ K ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℚ) ^ j - (2 : ℚ) ^ K), withhG1 : ∏ i ∈ Finset.range j, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ)) = (∏ s ∈ Finset.range n, ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ))) / ((∏ s ∈ Finset.range (n - j), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ))) * ∏ s ∈ Finset.range j, ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ))).Uses library
Finset.rangerange nis the set of natural numbers less thann. ,Finset.prod_div_distrib.Lean, lines 101–105
have hG1 : ∏ i ∈ Finset.range j, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ)) = (∏ s ∈ Finset.range n, ((2 : ℚ) ^ (s + 1) - 1)) / ((∏ s ∈ Finset.range (n - j), ((2 : ℚ) ^ (s + 1) - 1)) * ∏ s ∈ Finset.range j, ((2 : ℚ) ^ (s + 1) - 1)) := by rw [Finset.prod_div_distrib, ← id1_test n j hj] field_simp [hPne]targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 101–105 at
dfc7b5cc45a9↗id1_full.hG2have∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - j - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ)) = (∏ s ∈ Finset.range ((2 : ℕ) * n - j), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ))) / ((∏ s ∈ Finset.range (n - j), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ))) * ∏ s ∈ Finset.range n, ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)))Leaves
(((-1 : ℚ) ^ j * (2 : ℚ) ^ (j * (j - (1 : ℕ)) / (2 : ℕ)) * ∏ i ∈ Finset.range j, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * ∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - j - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * (2 : ℚ) ^ j * ∏ i ∈ (Finset.range (n + (1 : ℕ))).erase j, ((2 : ℚ) ^ j - (2 : ℚ) ^ i) = ∏ K ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℚ) ^ j - (2 : ℚ) ^ K), withhG2 : ∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - j - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ)) = (∏ s ∈ Finset.range ((2 : ℕ) * n - j), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ))) / ((∏ s ∈ Finset.range (n - j), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ))) * ∏ s ∈ Finset.range n, ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ))).Uses library
Finset.rangerange nis the set of natural numbers less thann. ,Finset.prod_div_distrib.Lean, lines 106–110
have hG2 : ∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - j - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ)) = (∏ s ∈ Finset.range (2 * n - j), ((2 : ℚ) ^ (s + 1) - 1)) / ((∏ s ∈ Finset.range (n - j), ((2 : ℚ) ^ (s + 1) - 1)) * ∏ s ∈ Finset.range n, ((2 : ℚ) ^ (s + 1) - 1)) := by rw [Finset.prod_div_distrib, ← id1_test (2 * n - j) n (by omega), show 2 * n - j - n = n - j by omega] field_simp [hPne]targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 106–110 at
dfc7b5cc45a9↗id1_full.hsplithave(Finset.range (n + (1 : ℕ))).erase j = Finset.range j ∪ Finset.Ioc j nLeaves
(((-1 : ℚ) ^ j * (2 : ℚ) ^ (j * (j - (1 : ℕ)) / (2 : ℕ)) * ∏ i ∈ Finset.range j, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * ∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - j - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * (2 : ℚ) ^ j * ∏ i ∈ (Finset.range (n + (1 : ℕ))).erase j, ((2 : ℚ) ^ j - (2 : ℚ) ^ i) = ∏ K ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℚ) ^ j - (2 : ℚ) ^ K), withhsplit : (Finset.range (n + (1 : ℕ))).erase j = Finset.range j ∪ Finset.Ioc j n.Uses library
Finset.rangerange nis the set of natural numbers less thann. ,Finset.IocThe finset $(a, b]$ of elementsxsuch thata < xandx ≤ b. ,Finset.mem_erase,Finset.mem_range,Finset.mem_union,Finset.mem_Ioc.Lean, lines 111–112
have hsplit : (Finset.range (n + 1)).erase j = Finset.range j ∪ Finset.Ioc j n := by ext x; simp only [Finset.mem_erase, Finset.mem_range, Finset.mem_union, Finset.mem_Ioc]; omegatargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 111–112 at
dfc7b5cc45a9↗id1_full.hdisjhaveDisjoint (Finset.range j) (Finset.Ioc j n)Leaves
(((-1 : ℚ) ^ j * (2 : ℚ) ^ (j * (j - (1 : ℕ)) / (2 : ℕ)) * ∏ i ∈ Finset.range j, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * ∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - j - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * (2 : ℚ) ^ j * ∏ i ∈ (Finset.range (n + (1 : ℕ))).erase j, ((2 : ℚ) ^ j - (2 : ℚ) ^ i) = ∏ K ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℚ) ^ j - (2 : ℚ) ^ K), withhdisj : Disjoint (Finset.range j) (Finset.Ioc j n).Uses library
DisjointTwo elements of a lattice are disjoint if their inf is the bottom element. ,Finset.rangerange nis the set of natural numbers less thann. ,Finset.IocThe finset $(a, b]$ of elementsxsuch thata < xandx ≤ b. ,Finset.disjoint_left,Finset.mem_range,Finset.mem_Ioc.Lean, lines 113–117
have hdisj : Disjoint (Finset.range j) (Finset.Ioc j n) := by rw [Finset.disjoint_left] intro x hx hx' simp only [Finset.mem_range, Finset.mem_Ioc] at hx hx' omegatargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 113–117 at
dfc7b5cc45a9↗id1_full.hRhave(∏ K ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℚ) ^ j - (2 : ℚ) ^ K)) * ∏ s ∈ Finset.range (n - j), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)) = (-1 : ℚ) ^ n * (2 : ℚ) ^ (j * n) * ∏ s ∈ Finset.range ((2 : ℕ) * n - j), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ))Leaves
(((-1 : ℚ) ^ j * (2 : ℚ) ^ (j * (j - (1 : ℕ)) / (2 : ℕ)) * ∏ i ∈ Finset.range j, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * ∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - j - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * (2 : ℚ) ^ j * ∏ i ∈ (Finset.range (n + (1 : ℕ))).erase j, ((2 : ℚ) ^ j - (2 : ℚ) ^ i) = ∏ K ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℚ) ^ j - (2 : ℚ) ^ K), withhR : (∏ K ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℚ) ^ j - (2 : ℚ) ^ K)) * ∏ s ∈ Finset.range (n - j), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)) = (-1 : ℚ) ^ n * (2 : ℚ) ^ (j * n) * ∏ s ∈ Finset.range ((2 : ℕ) * n - j), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)).Lean, line 118
have hR := rhs_test j n hj
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 118 at
dfc7b5cc45a9↗id1_full.s7obtain∃ (k : ℕ), n = j + kLeaves
(((-1 : ℚ) ^ j * (2 : ℚ) ^ (j * (j - (1 : ℕ)) / (2 : ℕ)) * ∏ i ∈ Finset.range j, ((2 : ℚ) ^ (j + m - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * ∏ i ∈ Finset.range (j + m), ((2 : ℚ) ^ ((2 : ℕ) * (j + m) - j - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * (2 : ℚ) ^ j * ∏ i ∈ (Finset.range (j + m + (1 : ℕ))).erase j, ((2 : ℚ) ^ j - (2 : ℚ) ^ i) = ∏ K ∈ Finset.Ioc (j + m) ((2 : ℕ) * (j + m)), ((2 : ℚ) ^ j - (2 : ℚ) ^ K), withm : ℕ,hj : j ≤ j + m,hG1 : ∏ i ∈ Finset.range j, ((2 : ℚ) ^ (j + m - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ)) = (∏ s ∈ Finset.range (j + m), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ))) / ((∏ s ∈ Finset.range (j + m - j), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ))) * ∏ s ∈ Finset.range j, ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ))),hG2 : ∏ i ∈ Finset.range (j + m), ((2 : ℚ) ^ ((2 : ℕ) * (j + m) - j - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ)) = (∏ s ∈ Finset.range ((2 : ℕ) * (j + m) - j), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ))) / ((∏ s ∈ Finset.range (j + m - j), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ))) * ∏ s ∈ Finset.range (j + m), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ))),hsplit : (Finset.range (j + m + (1 : ℕ))).erase j = Finset.range j ∪ Finset.Ioc j (j + m),hdisj : Disjoint (Finset.range j) (Finset.Ioc j (j + m)),hR : (∏ K ∈ Finset.Ioc (j + m) ((2 : ℕ) * (j + m)), ((2 : ℚ) ^ j - (2 : ℚ) ^ K)) * ∏ s ∈ Finset.range (j + m - j), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)) = (-1 : ℚ) ^ (j + m) * (2 : ℚ) ^ (j * (j + m)) * ∏ s ∈ Finset.range ((2 : ℕ) * (j + m) - j), ((2 : ℚ) ^ (s + (1 : ℕ)) - (1 : ℚ)).Uses library
Nat.exists_eq_add_of_le.Lean, line 119
obtain ⟨m, rfl⟩ := Nat.exists_eq_add_of_le hj
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 119 at
dfc7b5cc45a9↗id1_full.hsignhave(-1 : ℚ) ^ (j + m) = (-1 : ℚ) ^ j * (-1 : ℚ) ^ (j + m - j)Leaves
(((-1 : ℚ) ^ j * (2 : ℚ) ^ (j * (j - (1 : ℕ)) / (2 : ℕ)) * ∏ i ∈ Finset.range j, ((2 : ℚ) ^ (j + m - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * ∏ i ∈ Finset.range (j + m), ((2 : ℚ) ^ ((2 : ℕ) * (j + m) - j - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * (2 : ℚ) ^ j * ∏ i ∈ (Finset.range (j + m + (1 : ℕ))).erase j, ((2 : ℚ) ^ j - (2 : ℚ) ^ i) = ∏ K ∈ Finset.Ioc (j + m) ((2 : ℕ) * (j + m)), ((2 : ℚ) ^ j - (2 : ℚ) ^ K), withhsign : (-1 : ℚ) ^ (j + m) = (-1 : ℚ) ^ j * (-1 : ℚ) ^ (j + m - j).Uses library
pow_add.Lean, lines 120–121
have hsign : (-1 : ℚ) ^ (j + m) = (-1) ^ j * (-1) ^ (j + m - j) := by rw [← pow_add]; congr 1; omegatargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 120–121 at
dfc7b5cc45a9↗id1_full.hahave(2 : ℕ) * (j * (j - (1 : ℕ)) / (2 : ℕ)) = j * (j - (1 : ℕ))Leaves
(((-1 : ℚ) ^ j * (2 : ℚ) ^ (j * (j - (1 : ℕ)) / (2 : ℕ)) * ∏ i ∈ Finset.range j, ((2 : ℚ) ^ (j + m - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * ∏ i ∈ Finset.range (j + m), ((2 : ℚ) ^ ((2 : ℕ) * (j + m) - j - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * (2 : ℚ) ^ j * ∏ i ∈ (Finset.range (j + m + (1 : ℕ))).erase j, ((2 : ℚ) ^ j - (2 : ℚ) ^ i) = ∏ K ∈ Finset.Ioc (j + m) ((2 : ℕ) * (j + m)), ((2 : ℚ) ^ j - (2 : ℚ) ^ K), withha : (2 : ℕ) * (j * (j - (1 : ℕ)) / (2 : ℕ)) = j * (j - (1 : ℕ)).Uses library
Nat.two_mul_div_two_of_even,Nat.even_mul_pred_self.Lean, line 122
have ha : 2 * (j * (j - 1) / 2) = j * (j - 1) := Nat.two_mul_div_two_of_even (Nat.even_mul_pred_self _)
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 122 at
dfc7b5cc45a9↗id1_full.hexphavej * (j + m) = j * (j - (1 : ℕ)) / (2 : ℕ) + j + j * (j - (1 : ℕ)) / (2 : ℕ) + j * (j + m - j)Leaves
(((-1 : ℚ) ^ j * (2 : ℚ) ^ (j * (j - (1 : ℕ)) / (2 : ℕ)) * ∏ i ∈ Finset.range j, ((2 : ℚ) ^ (j + m - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * ∏ i ∈ Finset.range (j + m), ((2 : ℚ) ^ ((2 : ℕ) * (j + m) - j - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * (2 : ℚ) ^ j * ∏ i ∈ (Finset.range (j + m + (1 : ℕ))).erase j, ((2 : ℚ) ^ j - (2 : ℚ) ^ i) = ∏ K ∈ Finset.Ioc (j + m) ((2 : ℕ) * (j + m)), ((2 : ℚ) ^ j - (2 : ℚ) ^ K), withhexp : j * (j + m) = j * (j - (1 : ℕ)) / (2 : ℕ) + j + j * (j - (1 : ℕ)) / (2 : ℕ) + j * (j + m - j).Lean, lines 123–128
have hexp : j * (j + m) = j * (j - (1 : ℕ)) / (2 : ℕ) + j + j * (j - (1 : ℕ)) / (2 : ℕ) + j * (j + m - j) := by rw [show j + m - j = m by omega] rcases j with _ | i · simp · simp only [Nat.add_sub_cancel] at ha ⊢ nlinarith [ha]targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 123–128 at
dfc7b5cc45a9↗id1_full.hexp.s1case routine: simpLeaves
(0 : ℕ) * ((0 : ℕ) + m) = (0 : ℕ) * ((0 : ℕ) - (1 : ℕ)) / (2 : ℕ) + (0 : ℕ) + (0 : ℕ) * ((0 : ℕ) - (1 : ℕ)) / (2 : ℕ) + (0 : ℕ) * m.id1_full.hexp.s2case routine: simp, nlinarithLeaves
(i + (1 : ℕ)) * (i + (1 : ℕ) + m) = (i + (1 : ℕ)) * (i + (1 : ℕ) - (1 : ℕ)) / (2 : ℕ) + (i + (1 : ℕ)) + (i + (1 : ℕ)) * (i + (1 : ℕ) - (1 : ℕ)) / (2 : ℕ) + (i + (1 : ℕ)) * m.Uses library
Nat.add_sub_cancel.Lean, lines 127–128
· simp only [Nat.add_sub_cancel] at ha ⊢ nlinarith [ha]targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 127–128 at
dfc7b5cc45a9↗
lagr_evalhave∀ (n : ℕ) (x : ℕ → ℚ), (∀ i ≤ n, ∀ j ≤ n, x i = x j → i = j) → ∀ (N : Polynomial ℚ), N.degree ≤ (↑n : WithBot ℕ) → ∀ (r : ℕ → ℚ), (∀ j ≤ n, r j * ∏ i ∈ (Finset.range (n + (1 : ℕ))).erase j, (x j - x i) = Polynomial.eval (x j) N) → N = ∑ j ∈ Finset.range (n + (1 : ℕ)), (Polynomial.C : ℚ → Polynomial ℚ) (r j) * ∏ i ∈ (Finset.range (n + (1 : ℕ))).erase j, (Polynomial.X - (Polynomial.C : ℚ → Polynomial ℚ) (x i))Leaves
∀ (Qc : ℕ → ℕ → ℚ), (Qc = fun (n k : ℕ) => ((-1 : ℚ) ^ k * (2 : ℚ) ^ (k * (k - (1 : ℕ)) / (2 : ℕ)) * ∏ i ∈ Finset.range k, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * ∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - k - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) → ∀ (Qx : ℕ → ℚ), (Qx = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), Qc n k * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k) → ∀ (Aq : ℕ → ℚ), (Aq = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), (∑ j ∈ Finset.range (k + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (k - j) - (1 : ℚ))) * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k + Qx n * ∑ j ∈ Finset.range n, (3 : ℚ) / ((2 : ℚ) ^ (j + (1 : ℕ)) - (3 : ℚ))) → ∀ (n : ℕ), (0 : ℝ) < (↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ) ∧ ((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ)) ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)), withlagr_eval : ∀ (n : ℕ) (x : ℕ → ℚ), (∀ i ≤ n, ∀ j ≤ n, x i = x j → i = j) → ∀ (N : Polynomial ℚ), N.degree ≤ (↑n : WithBot ℕ) → ∀ (r : ℕ → ℚ), (∀ j ≤ n, r j * ∏ i ∈ (Finset.range (n + (1 : ℕ))).erase j, (x j - x i) = Polynomial.eval (x j) N) → N = ∑ j ∈ Finset.range (n + (1 : ℕ)), (Polynomial.C : ℚ → Polynomial ℚ) (r j) * ∏ i ∈ (Finset.range (n + (1 : ℕ))).erase j, (Polynomial.X - (Polynomial.C : ℚ → Polynomial ℚ) (x i)).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). ,Polynomial.eq_of_degree_sub_lt_of_eval_finset_eq.Lean, lines 135–168
have lagr_eval : ∀ (n : ℕ) (x : ℕ → ℚ) (hx : ∀ i ≤ n, ∀ j ≤ n, x i = x j → i = j) (N : ℚ[X]) (hNdeg : N.degree ≤ n) (r : ℕ → ℚ) (hr : ∀ j ≤ n, r j * ∏ i ∈ (Finset.range (n + 1)).erase j, (x j - x i) = N.eval (x j)), N = ∑ j ∈ Finset.range (n + 1), C (r j) * ∏ i ∈ (Finset.range (n + 1)).erase j, (X - C (x i)) := by intro n x hx N hNdeg r hr have hinj : Set.InjOn x (Finset.range (n + 1) : Set ℕ) := by intro i hi j hj h simp only [Finset.coe_range, Set.mem_Iio] at hi hj exact hx i (by omega) j (by omega) h apply Polynomial.eq_of_degree_sub_lt_of_eval_finset_eq ((Finset.range (n + 1)).image x) · rw [Finset.card_image_of_injOn hinj, Finset.card_range] refine lt_of_le_of_lt (Polynomial.degree_sub_le _ _) (max_lt ?_ ?_) · exact lt_of_le_of_lt hNdeg (by exact_mod_cast Nat.lt_succ_self n) · refine lt_of_le_of_lt (Polynomial.degree_sum_le _ _) ?_ rw [Finset.sup_lt_iff (by exact WithBot.bot_lt_coe _)] intro j hj refine lt_of_le_of_lt (Polynomial.degree_mul_le _ _) ?_ refine lt_of_le_of_lt (add_le_add (Polynomial.degree_C_le) (Polynomial.degree_prod_le _ _)) ?_ have : ∑ i ∈ (Finset.range (n + 1)).erase j, (X - C (x i)).degree = ((n : ℕ) : WithBot ℕ) := by rw [Finset.sum_congr rfl (fun i _ => Polynomial.degree_X_sub_C (x i)), Finset.sum_const, Finset.card_erase_of_mem hj, Finset.card_range, Nat.add_sub_cancel] simp rw [this, zero_add] exact_mod_cast Nat.lt_succ_self n · intro y hy obtain ⟨k, hk, rfl⟩ := Finset.mem_image.mp hy have hk' : k ≤ n := by have := Finset.mem_range.mp hk; omega rw [← hr k hk', Polynomial.eval_finset_sum, Finset.sum_eq_single k] · simp [Polynomial.eval_prod] · intro j hj hjk simp only [Polynomial.eval_mul, Polynomial.eval_C, Polynomial.eval_prod, Polynomial.eval_sub, Polynomial.eval_X] rw [Finset.prod_eq_zero (i := k) (Finset.mem_erase.mpr ⟨Ne.symm hjk, hk⟩) (by ring), mul_zero] · intro h; exact absurd hk htargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 135–168 at
dfc7b5cc45a9↗lagr_eval.hinjhaveSet.InjOn x (↑(Finset.range (n + (1 : ℕ))) : Set ℕ)Leaves
N = ∑ j ∈ Finset.range (n + (1 : ℕ)), (Polynomial.C : ℚ → Polynomial ℚ) (r j) * ∏ i ∈ (Finset.range (n + (1 : ℕ))).erase j, (Polynomial.X - (Polynomial.C : ℚ → Polynomial ℚ) (x i)), withhinj : Set.InjOn x (↑(Finset.range (n + (1 : ℕ))) : Set ℕ).Uses library
Set.InjOnfis injective onsif the restriction offtosis injective. ,Finset.rangerange nis the set of natural numbers less thann. ,SetA set is a collection of elements of some typeα. ,Finset.coe_range,Set.mem_Iio.Lean, lines 140–143
have hinj : Set.InjOn x (Finset.range (n + 1) : Set ℕ) := by intro i hi j hj h simp only [Finset.coe_range, Set.mem_Iio] at hi hj exact hx i (by omega) j (by omega) htargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 140–143 at
dfc7b5cc45a9↗lagr_eval.s2caseLeaves
(N - ∑ j ∈ Finset.range (n + (1 : ℕ)), (Polynomial.C : ℚ → Polynomial ℚ) (r j) * ∏ i ∈ (Finset.range (n + (1 : ℕ))).erase j, (Polynomial.X - (Polynomial.C : ℚ → Polynomial ℚ) (x i))).degree < (↑(Finset.image x (Finset.range (n + (1 : ℕ)))).card : WithBot ℕ).Uses library
Finset.card_image_of_injOn,Finset.card_range,lt_of_le_of_lt,Polynomial.degree_sub_le,max_lt.Lean, lines 145–158
· rw [Finset.card_image_of_injOn hinj, Finset.card_range] refine lt_of_le_of_lt (Polynomial.degree_sub_le _ _) (max_lt ?_ ?_) · exact lt_of_le_of_lt hNdeg (by exact_mod_cast Nat.lt_succ_self n) · refine lt_of_le_of_lt (Polynomial.degree_sum_le _ _) ?_ rw [Finset.sup_lt_iff (by exact WithBot.bot_lt_coe _)] intro j hj refine lt_of_le_of_lt (Polynomial.degree_mul_le _ _) ?_ refine lt_of_le_of_lt (add_le_add (Polynomial.degree_C_le) (Polynomial.degree_prod_le _ _)) ?_ have : ∑ i ∈ (Finset.range (n + 1)).erase j, (X - C (x i)).degree = ((n : ℕ) : WithBot ℕ) := by rw [Finset.sum_congr rfl (fun i _ => Polynomial.degree_X_sub_C (x i)), Finset.sum_const, Finset.card_erase_of_mem hj, Finset.card_range, Nat.add_sub_cancel] simp rw [this, zero_add] exact_mod_cast Nat.lt_succ_self ntargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 145–158 at
dfc7b5cc45a9↗lagr_eval.s2.s1caseLeaves
N.degree < (↑(n + (1 : ℕ)) : WithBot ℕ).Uses library
lt_of_le_of_lt,Nat.lt_succ_self.Lean, line 147
· exact lt_of_le_of_lt hNdeg (by exact_mod_cast Nat.lt_succ_self n)
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 147 at
dfc7b5cc45a9↗lagr_eval.s2.s2caseLeaves
(∑ j ∈ Finset.range (n + (1 : ℕ)), (Polynomial.C : ℚ → Polynomial ℚ) (r j) * ∏ i ∈ (Finset.range (n + (1 : ℕ))).erase j, (Polynomial.X - (Polynomial.C : ℚ → Polynomial ℚ) (x i))).degree < (↑(n + (1 : ℕ)) : WithBot ℕ).Uses library
lt_of_le_of_lt,Polynomial.degree_sum_le,Finset.sup_lt_iff,WithBot.bot_lt_coe,Polynomial.degree_mul_le,add_le_add,Polynomial.degree_C_le,Polynomial.degree_prod_le,zero_add,Nat.lt_succ_self.Lean, lines 148–158
· refine lt_of_le_of_lt (Polynomial.degree_sum_le _ _) ?_ rw [Finset.sup_lt_iff (by exact WithBot.bot_lt_coe _)] intro j hj refine lt_of_le_of_lt (Polynomial.degree_mul_le _ _) ?_ refine lt_of_le_of_lt (add_le_add (Polynomial.degree_C_le) (Polynomial.degree_prod_le _ _)) ?_ have : ∑ i ∈ (Finset.range (n + 1)).erase j, (X - C (x i)).degree = ((n : ℕ) : WithBot ℕ) := by rw [Finset.sum_congr rfl (fun i _ => Polynomial.degree_X_sub_C (x i)), Finset.sum_const, Finset.card_erase_of_mem hj, Finset.card_range, Nat.add_sub_cancel] simp rw [this, zero_add] exact_mod_cast Nat.lt_succ_self ntargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 148–158 at
dfc7b5cc45a9↗lagr_eval.s2.s2.thishave∑ i ∈ (Finset.range (n + (1 : ℕ))).erase j, (Polynomial.X - (Polynomial.C : ℚ → Polynomial ℚ) (x i)).degree = (↑n : WithBot ℕ)Leaves
(0 : WithBot ℕ) + ∑ i ∈ (Finset.range (n + (1 : ℕ))).erase j, (Polynomial.X - (Polynomial.C : ℚ → Polynomial ℚ) (x i)).degree < (↑(n + (1 : ℕ)) : WithBot ℕ), withthis : ∑ i ∈ (Finset.range (n + (1 : ℕ))).erase j, (Polynomial.X - (Polynomial.C : ℚ → Polynomial ℚ) (x i)).degree = (↑n : WithBot ℕ).Uses library
Finset.rangerange nis the set of natural numbers less thann. ,Polynomial.XXis the polynomial variable (aka indeterminate). ,Polynomial.CC ais the constant polynomiala. ,WithBotAttach⊥to a type. ,Finset.sum_congr,rflrfl : a = ais the unique constructor of the equality type. ,Polynomial.degree_X_sub_C,Finset.sum_const,Finset.card_erase_of_mem$\#(s \setminus \{a\}) = \#s - 1$ if $a \in s$. ,Finset.card_range,Nat.add_sub_cancel.Lean, lines 153–156
have : ∑ i ∈ (Finset.range (n + 1)).erase j, (X - C (x i)).degree = ((n : ℕ) : WithBot ℕ) := by rw [Finset.sum_congr rfl (fun i _ => Polynomial.degree_X_sub_C (x i)), Finset.sum_const, Finset.card_erase_of_mem hj, Finset.card_range, Nat.add_sub_cancel] simptargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 153–156 at
dfc7b5cc45a9↗
lagr_eval.s3caseLeaves
∀ x_1 ∈ Finset.image x (Finset.range (n + (1 : ℕ))), Polynomial.eval x_1 N = Polynomial.eval x_1 (∑ j ∈ Finset.range (n + (1 : ℕ)), (Polynomial.C : ℚ → Polynomial ℚ) (r j) * ∏ i ∈ (Finset.range (n + (1 : ℕ))).erase j, (Polynomial.X - (Polynomial.C : ℚ → Polynomial ℚ) (x i))).Uses library
Polynomial.eval_finset_sumAlias ofPolynomial.eval_finsetSum. ,Finset.sum_eq_single.Lean, lines 159–168
· intro y hy obtain ⟨k, hk, rfl⟩ := Finset.mem_image.mp hy have hk' : k ≤ n := by have := Finset.mem_range.mp hk; omega rw [← hr k hk', Polynomial.eval_finset_sum, Finset.sum_eq_single k] · simp [Polynomial.eval_prod] · intro j hj hjk simp only [Polynomial.eval_mul, Polynomial.eval_C, Polynomial.eval_prod, Polynomial.eval_sub, Polynomial.eval_X] rw [Finset.prod_eq_zero (i := k) (Finset.mem_erase.mpr ⟨Ne.symm hjk, hk⟩) (by ring), mul_zero] · intro h; exact absurd hk htargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 159–168 at
dfc7b5cc45a9↗lagr_eval.s3.s1obtain∃ a ∈ Finset.range (n + (1 : ℕ)), x a = yLeaves
Polynomial.eval (x k) N = Polynomial.eval (x k) (∑ j ∈ Finset.range (n + (1 : ℕ)), (Polynomial.C : ℚ → Polynomial ℚ) (r j) * ∏ i ∈ (Finset.range (n + (1 : ℕ))).erase j, (Polynomial.X - (Polynomial.C : ℚ → Polynomial ℚ) (x i))), withk : ℕ,hk : k ∈ Finset.range (n + (1 : ℕ)),hy : x k ∈ Finset.image x (Finset.range (n + (1 : ℕ))).Uses library
Finset.mem_image.Lean, line 160
obtain ⟨k, hk, rfl⟩ := Finset.mem_image.mp hy
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 160 at
dfc7b5cc45a9↗lagr_eval.s3.hk'havek ≤ nLeaves
Polynomial.eval (x k) N = Polynomial.eval (x k) (∑ j ∈ Finset.range (n + (1 : ℕ)), (Polynomial.C : ℚ → Polynomial ℚ) (r j) * ∏ i ∈ (Finset.range (n + (1 : ℕ))).erase j, (Polynomial.X - (Polynomial.C : ℚ → Polynomial ℚ) (x i))), withhk' : k ≤ n.Lean, line 161
have hk' : k ≤ n := by have := Finset.mem_range.mp hk; omega
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 161 at
dfc7b5cc45a9↗lagr_eval.s3.hk'.thishavek < n + (1 : ℕ)Leaves
k ≤ n, withthis : k < n + (1 : ℕ).Uses library
Finset.mem_range.Lean, line 161
have hk' : k ≤ n := by have := Finset.mem_range.mp hk; omega
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 161 at
dfc7b5cc45a9↗
lagr_eval.s3.s3case routine: simpLeaves
r k * ∏ i ∈ (Finset.range (n + (1 : ℕ))).erase k, (x k - x i) = Polynomial.eval (x k) ((Polynomial.C : ℚ → Polynomial ℚ) (r k) * ∏ i ∈ (Finset.range (n + (1 : ℕ))).erase k, (Polynomial.X - (Polynomial.C : ℚ → Polynomial ℚ) (x i))).Uses library
Polynomial.eval_prodPolynomial evaluation commutes withFinset.prod.Lean, line 163
· simp [Polynomial.eval_prod]
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 163 at
dfc7b5cc45a9↗lagr_eval.s3.s4caseLeaves
∀ b ∈ Finset.range (n + (1 : ℕ)), b ≠ k → Polynomial.eval (x k) ((Polynomial.C : ℚ → Polynomial ℚ) (r b) * ∏ i ∈ (Finset.range (n + (1 : ℕ))).erase b, (Polynomial.X - (Polynomial.C : ℚ → Polynomial ℚ) (x i))) = (0 : ℚ).Uses library
Polynomial.eval_mul,Polynomial.eval_C,Polynomial.eval_prodPolynomial evaluation commutes withFinset.prod,Polynomial.eval_sub,Polynomial.eval_X,Finset.prod_eq_zero,Finset.mem_erase,And.introAnd.intro : a → b → a ∧ bis the constructor for the And operation. ,Ne.symm,MulZeroClass.mul_zeroZero is a right absorbing element for multiplication .Lean, lines 164–167
· intro j hj hjk simp only [Polynomial.eval_mul, Polynomial.eval_C, Polynomial.eval_prod, Polynomial.eval_sub, Polynomial.eval_X] rw [Finset.prod_eq_zero (i := k) (Finset.mem_erase.mpr ⟨Ne.symm hjk, hk⟩) (by ring), mul_zero]targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 164–167 at
dfc7b5cc45a9↗lagr_eval.s3.s5caseLeaves
k ∉ Finset.range (n + (1 : ℕ)) → Polynomial.eval (x k) ((Polynomial.C : ℚ → Polynomial ℚ) (r k) * ∏ i ∈ (Finset.range (n + (1 : ℕ))).erase k, (Polynomial.X - (Polynomial.C : ℚ → Polynomial ℚ) (x i))) = (0 : ℚ).Uses library
absurdAnything follows from two contradictory hypotheses. .Lean, line 168
· intro h; exact absurd hk h
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 168 at
dfc7b5cc45a9↗
tail_coeffhave∀ (n K : ℕ), n < K → ∀ (Qc : ℕ → ℕ → ℚ), (∀ j ≤ n, Qc n j * (2 : ℚ) ^ j * ∏ i ∈ (Finset.range (n + (1 : ℕ))).erase j, ((2 : ℚ) ^ j - (2 : ℚ) ^ i) = ∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℚ) ^ j - (2 : ℚ) ^ L)) → ∑ j ∈ Finset.range (n + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (K - j) - (1 : ℚ)) = (∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℚ) ^ K - (2 : ℚ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℚ) ^ K - (2 : ℚ) ^ i)Leaves
∀ (Qc : ℕ → ℕ → ℚ), (Qc = fun (n k : ℕ) => ((-1 : ℚ) ^ k * (2 : ℚ) ^ (k * (k - (1 : ℕ)) / (2 : ℕ)) * ∏ i ∈ Finset.range k, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * ∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - k - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) → ∀ (Qx : ℕ → ℚ), (Qx = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), Qc n k * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k) → ∀ (Aq : ℕ → ℚ), (Aq = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), (∑ j ∈ Finset.range (k + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (k - j) - (1 : ℚ))) * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k + Qx n * ∑ j ∈ Finset.range n, (3 : ℚ) / ((2 : ℚ) ^ (j + (1 : ℕ)) - (3 : ℚ))) → ∀ (n : ℕ), (0 : ℝ) < (↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ) ∧ ((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ)) ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)), withtail_coeff : ∀ (n K : ℕ), n < K → ∀ (Qc : ℕ → ℕ → ℚ), (∀ j ≤ n, Qc n j * (2 : ℚ) ^ j * ∏ i ∈ (Finset.range (n + (1 : ℕ))).erase j, ((2 : ℚ) ^ j - (2 : ℚ) ^ i) = ∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℚ) ^ j - (2 : ℚ) ^ L)) → ∑ j ∈ Finset.range (n + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (K - j) - (1 : ℚ)) = (∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℚ) ^ K - (2 : ℚ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℚ) ^ K - (2 : ℚ) ^ i).Uses library
Finset.rangerange nis the set of natural numbers less thann. ,Finset.IocThe finset $(a, b]$ of elementsxsuch thata < xandx ≤ b. ,Polynomial.XXis the polynomial variable (aka indeterminate). ,Polynomial.CC ais the constant polynomiala. ,Polynomial.eval_finset_sumAlias ofPolynomial.eval_finsetSum. ,Finset.sum_div,Finset.sum_congr,rflrfl : a = ais the unique constructor of the equality type. ,Polynomial.eval_mul,Polynomial.eval_C,Polynomial.eval_prodPolynomial evaluation commutes withFinset.prod,Polynomial.eval_sub,Polynomial.eval_X,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 170–222
have tail_coeff : ∀ (n K : ℕ) (hK : n < K) (Qc : ℕ → ℕ → ℚ) (hQc : ∀ j ≤ n, Qc n j * 2 ^ j * ∏ i ∈ (Finset.range (n + 1)).erase j, ((2 : ℚ) ^ j - 2 ^ i) = ∏ L ∈ Finset.Ioc n (2 * n), ((2 : ℚ) ^ j - 2 ^ L)), ∑ j ∈ Finset.range (n + 1), Qc n j / ((2 : ℚ) ^ (K - j) - 1) = (∏ L ∈ Finset.Ioc n (2 * n), ((2 : ℚ) ^ K - 2 ^ L)) / ∏ i ∈ Finset.range (n + 1), ((2 : ℚ) ^ K - 2 ^ i) := by intro n K hK Qc hQc set x : ℕ → ℚ := fun i => (2 : ℚ) ^ i with hxdef have hxinj : ∀ i ≤ n, ∀ j ≤ n, x i = x j → i = j := by intro i _ j _ h have h' : (2 : ℚ) ^ i = 2 ^ j := h exact Nat.pow_right_injective (le_refl 2) (by exact_mod_cast h') have hxne : ∀ a b : ℕ, a ≠ b → (2 : ℚ) ^ a - 2 ^ b ≠ 0 := by intro a b hab h apply hab exact Nat.pow_right_injective (le_refl 2) (by exact_mod_cast (sub_eq_zero.mp h)) set N : ℚ[X] := ∏ L ∈ Finset.Ioc n (2 * n), (X - C ((2 : ℚ) ^ L)) with hN have hNdeg : N.degree ≤ n := by rw [hN, Polynomial.degree_prod] rw [Finset.sum_congr rfl (fun L _ => Polynomial.degree_X_sub_C ((2 : ℚ) ^ L)), Finset.sum_const, Nat.card_Ioc] simp omega have hr : ∀ j ≤ n, (Qc n j * 2 ^ j) * ∏ i ∈ (Finset.range (n + 1)).erase j, (x j - x i) = N.eval (x j) := by intro j hj rw [hN, Polynomial.eval_prod] simp only [Polynomial.eval_sub, Polynomial.eval_X, Polynomial.eval_C, hxdef] exact hQc j hj have hL := lagr_eval n x hxinj N hNdeg (fun j => Qc n j * 2 ^ j) hr have hev := congrArg (Polynomial.eval ((2 : ℚ) ^ K)) hL rw [Polynomial.eval_finset_sum] at hev have hNK : N.eval ((2 : ℚ) ^ K) = ∏ L ∈ Finset.Ioc n (2 * n), ((2 : ℚ) ^ K - 2 ^ L) := by rw [hN, Polynomial.eval_prod] simp only [Polynomial.eval_sub, Polynomial.eval_X, Polynomial.eval_C] have hD : ∏ i ∈ Finset.range (n + 1), ((2 : ℚ) ^ K - 2 ^ i) ≠ 0 := Finset.prod_ne_zero_iff.mpr (fun i hi => hxne K i (by have := Finset.mem_range.mp hi; omega)) rw [hNK] at hev rw [hev, Finset.sum_div] refine Finset.sum_congr rfl (fun j hj => ?_) have hjn : j < n + 1 := Finset.mem_range.mp hj have hne1 : (2 : ℚ) ^ K - 2 ^ j ≠ 0 := hxne K j (by omega) have hne2 : (2 : ℚ) ^ (K - j) - 1 ≠ 0 := by have : (1 : ℚ) < 2 ^ (K - j) := one_lt_pow₀ (by norm_num) (by omega) linarith simp only [Polynomial.eval_mul, Polynomial.eval_C, Polynomial.eval_prod, Polynomial.eval_sub, Polynomial.eval_X, hxdef] rw [← Finset.mul_prod_erase (Finset.range (n + 1)) (fun i => (2 : ℚ) ^ K - 2 ^ i) hj] have hE : ∏ i ∈ (Finset.range (n + 1)).erase j, ((2 : ℚ) ^ K - 2 ^ i) ≠ 0 := Finset.prod_ne_zero_iff.mpr (fun i hi => hxne K i (by have := Finset.mem_range.mp (Finset.mem_of_mem_erase hi); omega)) have hpow : (2 : ℚ) ^ K = 2 ^ j * 2 ^ (K - j) := by rw [← pow_add]; congr 1; omega field_simp rw [hpow] ringtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 170–222 at
dfc7b5cc45a9↗tail_coeff.hxinjhave∀ i ≤ n, ∀ j ≤ n, x i = x j → i = jLeaves
∑ j ∈ Finset.range (n + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (K - j) - (1 : ℚ)) = (∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℚ) ^ K - (2 : ℚ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℚ) ^ K - (2 : ℚ) ^ i), withhxinj : ∀ i ≤ n, ∀ j ≤ n, x i = x j → i = j.Uses library
Nat.pow_right_injective,le_reflThe relation≤on a preorder is reflexive. .Lean, lines 177–180
have hxinj : ∀ i ≤ n, ∀ j ≤ n, x i = x j → i = j := by intro i _ j _ h have h' : (2 : ℚ) ^ i = 2 ^ j := h exact Nat.pow_right_injective (le_refl 2) (by exact_mod_cast h')targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 177–180 at
dfc7b5cc45a9↗tail_coeff.hxinj.h'have(2 : ℚ) ^ i = (2 : ℚ) ^ jLeaves
i = j, withh' : (2 : ℚ) ^ i = (2 : ℚ) ^ j.Lean, line 179
have h' : (2 : ℚ) ^ i = 2 ^ j := h
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 179 at
dfc7b5cc45a9↗
tail_coeff.hxnehave∀ (a b : ℕ), a ≠ b → (2 : ℚ) ^ a - (2 : ℚ) ^ b ≠ (0 : ℚ)Leaves
∑ j ∈ Finset.range (n + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (K - j) - (1 : ℚ)) = (∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℚ) ^ K - (2 : ℚ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℚ) ^ K - (2 : ℚ) ^ i), withhxne : ∀ (a b : ℕ), a ≠ b → (2 : ℚ) ^ a - (2 : ℚ) ^ b ≠ (0 : ℚ).Uses library
Nat.pow_right_injective,le_reflThe relation≤on a preorder is reflexive. ,sub_eq_zero.Lean, lines 181–184
have hxne : ∀ a b : ℕ, a ≠ b → (2 : ℚ) ^ a - 2 ^ b ≠ 0 := by intro a b hab h apply hab exact Nat.pow_right_injective (le_refl 2) (by exact_mod_cast (sub_eq_zero.mp h))targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 181–184 at
dfc7b5cc45a9↗tail_coeff.hNdeghaveN.degree ≤ (↑n : WithBot ℕ)Leaves
∑ j ∈ Finset.range (n + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (K - j) - (1 : ℚ)) = (∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℚ) ^ K - (2 : ℚ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℚ) ^ K - (2 : ℚ) ^ i), withhNdeg : N.degree ≤ (↑n : WithBot ℕ).Uses library
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 ⊥. ,Finset.sum_congr,rflrfl : a = ais the unique constructor of the equality type. ,Polynomial.degree_X_sub_C,Finset.sum_const,Nat.card_Ioc.Lean, lines 186–191
have hNdeg : N.degree ≤ n := by rw [hN, Polynomial.degree_prod] rw [Finset.sum_congr rfl (fun L _ => Polynomial.degree_X_sub_C ((2 : ℚ) ^ L)), Finset.sum_const, Nat.card_Ioc] simp omegatargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 186–191 at
dfc7b5cc45a9↗tail_coeff.hrhave∀ j ≤ n, Qc n j * (2 : ℚ) ^ j * ∏ i ∈ (Finset.range (n + (1 : ℕ))).erase j, (x j - x i) = Polynomial.eval (x j) NLeaves
∑ j ∈ Finset.range (n + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (K - j) - (1 : ℚ)) = (∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℚ) ^ K - (2 : ℚ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℚ) ^ K - (2 : ℚ) ^ i), withhr : ∀ j ≤ n, Qc n j * (2 : ℚ) ^ j * ∏ i ∈ (Finset.range (n + (1 : ℕ))).erase j, (x j - x i) = Polynomial.eval (x j) N.Uses library
Finset.rangerange nis the set of natural numbers less thann. ,Polynomial.eval_prodPolynomial evaluation commutes withFinset.prod,Polynomial.eval_sub,Polynomial.eval_X,Polynomial.eval_C.Lean, lines 192–196
have hr : ∀ j ≤ n, (Qc n j * 2 ^ j) * ∏ i ∈ (Finset.range (n + 1)).erase j, (x j - x i) = N.eval (x j) := by intro j hj rw [hN, Polynomial.eval_prod] simp only [Polynomial.eval_sub, Polynomial.eval_X, Polynomial.eval_C, hxdef] exact hQc j hjtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 192–196 at
dfc7b5cc45a9↗tail_coeff.hLhaveN = ∑ j ∈ Finset.range (n + (1 : ℕ)), (Polynomial.C : ℚ → Polynomial ℚ) (Qc n j * (2 : ℚ) ^ j) * ∏ i ∈ (Finset.range (n + (1 : ℕ))).erase j, (Polynomial.X - (Polynomial.C : ℚ → Polynomial ℚ) (x i))Leaves
∑ j ∈ Finset.range (n + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (K - j) - (1 : ℚ)) = (∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℚ) ^ K - (2 : ℚ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℚ) ^ K - (2 : ℚ) ^ i), withhL : N = ∑ j ∈ Finset.range (n + (1 : ℕ)), (Polynomial.C : ℚ → Polynomial ℚ) (Qc n j * (2 : ℚ) ^ j) * ∏ i ∈ (Finset.range (n + (1 : ℕ))).erase j, (Polynomial.X - (Polynomial.C : ℚ → Polynomial ℚ) (x i)).Lean, line 197
have hL := lagr_eval n x hxinj N hNdeg (fun j => Qc n j * 2 ^ j) hr
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 197 at
dfc7b5cc45a9↗tail_coeff.hevhavePolynomial.eval ((2 : ℚ) ^ K) N = Polynomial.eval ((2 : ℚ) ^ K) (∑ j ∈ Finset.range (n + (1 : ℕ)), (Polynomial.C : ℚ → Polynomial ℚ) (Qc n j * (2 : ℚ) ^ j) * ∏ i ∈ (Finset.range (n + (1 : ℕ))).erase j, (Polynomial.X - (Polynomial.C : ℚ → Polynomial ℚ) (x i)))Leaves
∑ j ∈ Finset.range (n + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (K - j) - (1 : ℚ)) = (∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℚ) ^ K - (2 : ℚ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℚ) ^ K - (2 : ℚ) ^ i), withhev : Polynomial.eval ((2 : ℚ) ^ K) N = Polynomial.eval ((2 : ℚ) ^ K) (∑ j ∈ Finset.range (n + (1 : ℕ)), (Polynomial.C : ℚ → Polynomial ℚ) (Qc n j * (2 : ℚ) ^ j) * ∏ i ∈ (Finset.range (n + (1 : ℕ))).erase j, (Polynomial.X - (Polynomial.C : ℚ → Polynomial ℚ) (x i))).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.Lean, line 198
have hev := congrArg (Polynomial.eval ((2 : ℚ) ^ K)) hL
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 198 at
dfc7b5cc45a9↗tail_coeff.hNKhavePolynomial.eval ((2 : ℚ) ^ K) N = ∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℚ) ^ K - (2 : ℚ) ^ L)Leaves
∑ j ∈ Finset.range (n + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (K - j) - (1 : ℚ)) = (∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℚ) ^ K - (2 : ℚ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℚ) ^ K - (2 : ℚ) ^ i), withhNK : Polynomial.eval ((2 : ℚ) ^ K) N = ∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℚ) ^ K - (2 : ℚ) ^ L).Uses library
Finset.IocThe finset $(a, b]$ of elementsxsuch thata < xandx ≤ b. ,Polynomial.eval_prodPolynomial evaluation commutes withFinset.prod,Polynomial.eval_sub,Polynomial.eval_X,Polynomial.eval_C.Lean, lines 200–202
have hNK : N.eval ((2 : ℚ) ^ K) = ∏ L ∈ Finset.Ioc n (2 * n), ((2 : ℚ) ^ K - 2 ^ L) := by rw [hN, Polynomial.eval_prod] simp only [Polynomial.eval_sub, Polynomial.eval_X, Polynomial.eval_C]targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 200–202 at
dfc7b5cc45a9↗tail_coeff.hDhave∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℚ) ^ K - (2 : ℚ) ^ i) ≠ (0 : ℚ)Leaves
∑ j ∈ Finset.range (n + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (K - j) - (1 : ℚ)) = (∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℚ) ^ K - (2 : ℚ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℚ) ^ K - (2 : ℚ) ^ i), withhD : ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℚ) ^ K - (2 : ℚ) ^ i) ≠ (0 : ℚ).Uses library
Finset.rangerange nis the set of natural numbers less thann. ,Finset.prod_ne_zero_iff.Lean, lines 203–204
have hD : ∏ i ∈ Finset.range (n + 1), ((2 : ℚ) ^ K - 2 ^ i) ≠ 0 := Finset.prod_ne_zero_iff.mpr (fun i hi => hxne K i (by have := Finset.mem_range.mp hi; omega))targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 203–204 at
dfc7b5cc45a9↗tail_coeff.hD.thishavei < n + (1 : ℕ)Leaves
K ≠ i, withthis : i < n + (1 : ℕ).Uses library
Finset.mem_range.Lean, line 204
Finset.prod_ne_zero_iff.mpr (fun i hi => hxne K i (by have := Finset.mem_range.mp hi; omega))
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 204 at
dfc7b5cc45a9↗
tail_coeff.hjnhavej < n + (1 : ℕ)Leaves
Qc n j / ((2 : ℚ) ^ (K - j) - (1 : ℚ)) = Polynomial.eval ((2 : ℚ) ^ K) ((Polynomial.C : ℚ → Polynomial ℚ) (Qc n j * (2 : ℚ) ^ j) * ∏ i ∈ (Finset.range (n + (1 : ℕ))).erase j, (Polynomial.X - (Polynomial.C : ℚ → Polynomial ℚ) (x i))) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℚ) ^ K - (2 : ℚ) ^ i), withhjn : j < n + (1 : ℕ).Uses library
Finset.mem_range.Lean, line 208
have hjn : j < n + 1 := Finset.mem_range.mp hj
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 208 at
dfc7b5cc45a9↗tail_coeff.hne1have(2 : ℚ) ^ K - (2 : ℚ) ^ j ≠ (0 : ℚ)Leaves
Qc n j / ((2 : ℚ) ^ (K - j) - (1 : ℚ)) = Polynomial.eval ((2 : ℚ) ^ K) ((Polynomial.C : ℚ → Polynomial ℚ) (Qc n j * (2 : ℚ) ^ j) * ∏ i ∈ (Finset.range (n + (1 : ℕ))).erase j, (Polynomial.X - (Polynomial.C : ℚ → Polynomial ℚ) (x i))) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℚ) ^ K - (2 : ℚ) ^ i), withhne1 : (2 : ℚ) ^ K - (2 : ℚ) ^ j ≠ (0 : ℚ).Lean, line 209
have hne1 : (2 : ℚ) ^ K - 2 ^ j ≠ 0 := hxne K j (by omega)
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 209 at
dfc7b5cc45a9↗tail_coeff.hne2have(2 : ℚ) ^ (K - j) - (1 : ℚ) ≠ (0 : ℚ)Leaves
Qc n j / ((2 : ℚ) ^ (K - j) - (1 : ℚ)) = Polynomial.eval ((2 : ℚ) ^ K) ((Polynomial.C : ℚ → Polynomial ℚ) (Qc n j * (2 : ℚ) ^ j) * ∏ i ∈ (Finset.range (n + (1 : ℕ))).erase j, (Polynomial.X - (Polynomial.C : ℚ → Polynomial ℚ) (x i))) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℚ) ^ K - (2 : ℚ) ^ i), withhne2 : (2 : ℚ) ^ (K - j) - (1 : ℚ) ≠ (0 : ℚ).Lean, lines 210–212
have hne2 : (2 : ℚ) ^ (K - j) - 1 ≠ 0 := by have : (1 : ℚ) < 2 ^ (K - j) := one_lt_pow₀ (by norm_num) (by omega) linarithtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 210–212 at
dfc7b5cc45a9↗tail_coeff.hne2.thishave(1 : ℚ) < (2 : ℚ) ^ (K - j)Leaves
(2 : ℚ) ^ (K - j) - (1 : ℚ) ≠ (0 : ℚ), withthis : (1 : ℚ) < (2 : ℚ) ^ (K - j).Uses library
one_lt_pow₀.Lean, line 211
have : (1 : ℚ) < 2 ^ (K - j) := one_lt_pow₀ (by norm_num) (by omega)
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 211 at
dfc7b5cc45a9↗
tail_coeff.hEhave∏ i ∈ (Finset.range (n + (1 : ℕ))).erase j, ((2 : ℚ) ^ K - (2 : ℚ) ^ i) ≠ (0 : ℚ)Leaves
Qc n j / ((2 : ℚ) ^ (K - j) - (1 : ℚ)) = (Qc n j * (2 : ℚ) ^ j * ∏ x ∈ (Finset.range (n + (1 : ℕ))).erase j, ((2 : ℚ) ^ K - (2 : ℚ) ^ x)) / (((2 : ℚ) ^ K - (2 : ℚ) ^ j) * ∏ x ∈ (Finset.range (n + (1 : ℕ))).erase j, ((2 : ℚ) ^ K - (2 : ℚ) ^ x)), withhE : ∏ i ∈ (Finset.range (n + (1 : ℕ))).erase j, ((2 : ℚ) ^ K - (2 : ℚ) ^ i) ≠ (0 : ℚ).Uses library
Finset.rangerange nis the set of natural numbers less thann. ,Finset.prod_ne_zero_iff.Lean, lines 216–218
have hE : ∏ i ∈ (Finset.range (n + 1)).erase j, ((2 : ℚ) ^ K - 2 ^ i) ≠ 0 := Finset.prod_ne_zero_iff.mpr (fun i hi => hxne K i (by have := Finset.mem_range.mp (Finset.mem_of_mem_erase hi); omega))targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 216–218 at
dfc7b5cc45a9↗tail_coeff.hE.thishavei < n + (1 : ℕ)Leaves
K ≠ i, withthis : i < n + (1 : ℕ).Uses library
Finset.mem_range,Finset.mem_of_mem_erase.Lean, line 218
have := Finset.mem_range.mp (Finset.mem_of_mem_erase hi); omega))
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 218 at
dfc7b5cc45a9↗
tail_coeff.hpowhave(2 : ℚ) ^ K = (2 : ℚ) ^ j * (2 : ℚ) ^ (K - j)Leaves
Qc n j / ((2 : ℚ) ^ (K - j) - (1 : ℚ)) = (Qc n j * (2 : ℚ) ^ j * ∏ x ∈ (Finset.range (n + (1 : ℕ))).erase j, ((2 : ℚ) ^ K - (2 : ℚ) ^ x)) / (((2 : ℚ) ^ K - (2 : ℚ) ^ j) * ∏ x ∈ (Finset.range (n + (1 : ℕ))).erase j, ((2 : ℚ) ^ K - (2 : ℚ) ^ x)), withhpow : (2 : ℚ) ^ K = (2 : ℚ) ^ j * (2 : ℚ) ^ (K - j).Uses library
pow_add.Lean, line 219
have hpow : (2 : ℚ) ^ K = 2 ^ j * 2 ^ (K - j) := by rw [← pow_add]; congr 1; omega
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 219 at
dfc7b5cc45a9↗
tail3have∀ (n : ℕ), (1 : ℕ) ≤ n → ∑' (m : ℕ), (3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ)) = ∑' (s : ℕ), ((3 : ℝ) / (2 : ℝ) ^ n) ^ (s + (1 : ℕ)) / ((2 : ℝ) ^ (s + (1 : ℕ)) - (1 : ℝ))Leaves
∀ (Qc : ℕ → ℕ → ℚ), (Qc = fun (n k : ℕ) => ((-1 : ℚ) ^ k * (2 : ℚ) ^ (k * (k - (1 : ℕ)) / (2 : ℕ)) * ∏ i ∈ Finset.range k, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * ∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - k - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) → ∀ (Qx : ℕ → ℚ), (Qx = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), Qc n k * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k) → ∀ (Aq : ℕ → ℚ), (Aq = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), (∑ j ∈ Finset.range (k + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (k - j) - (1 : ℚ))) * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k + Qx n * ∑ j ∈ Finset.range n, (3 : ℚ) / ((2 : ℚ) ^ (j + (1 : ℕ)) - (3 : ℚ))) → ∀ (n : ℕ), (0 : ℝ) < (↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ) ∧ ((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ)) ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)), withtail3 : ∀ (n : ℕ), (1 : ℕ) ≤ n → ∑' (m : ℕ), (3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ)) = ∑' (s : ℕ), ((3 : ℝ) / (2 : ℝ) ^ n) ^ (s + (1 : ℕ)) / ((2 : ℝ) ^ (s + (1 : ℕ)) - (1 : ℝ)).Uses library
tsum_congr.Lean, lines 225–289
have tail3 : ∀ (n : ℕ) (hn : 1 ≤ n), ∑' m : ℕ, (3 : ℝ) / (2 ^ (m + n + 1) - 3) = ∑' s : ℕ, ((3 : ℝ) / 2 ^ n) ^ (s + 1) / (2 ^ (s + 1) - 1) := by intro n hn set f : ℕ → ℕ → ℝ := fun m s => ((3 : ℝ) / 2 ^ (n + 1)) ^ (s + 1) * ((1 : ℝ) / 2 ^ (s + 1)) ^ m with hf have key : ∀ m s, f m s = ((3 : ℝ) / 2 ^ (m + n + 1)) ^ (s + 1) := by intro m s simp only [hf] rw [div_pow, div_pow, div_pow, one_pow, ← pow_mul, ← pow_mul, ← pow_mul, show (m + n + 1) * (s + 1) = (n + 1) * (s + 1) + (s + 1) * m by ring, pow_add] field_simp exact pow_add _ _ _ have hpos : ∀ m s, 0 ≤ f m s := fun m s => by rw [key]; positivity have h4 : ∀ m : ℕ, (4 : ℝ) ≤ 2 ^ (m + n + 1) := by intro m calc (4 : ℝ) = 2 ^ 2 := by norm_num _ ≤ 2 ^ (m + n + 1) := pow_le_pow_right₀ (by norm_num) (by omega) have inner1 : ∀ m, HasSum (f m) ((3 : ℝ) / (2 ^ (m + n + 1) - 3)) := by intro m have hr0 : 0 ≤ (3 : ℝ) / 2 ^ (m + n + 1) := by positivity have hr1 : (3 : ℝ) / 2 ^ (m + n + 1) < 1 := by rw [div_lt_one (by positivity)]; linarith [h4 m] have hg := (hasSum_geometric_of_lt_one hr0 hr1).mul_left ((3 : ℝ) / 2 ^ (m + n + 1)) have hfun : f m = fun s => (3 : ℝ) / 2 ^ (m + n + 1) * ((3 : ℝ) / 2 ^ (m + n + 1)) ^ s := by funext s; rw [key]; ring have hne : (2 : ℝ) ^ (m + n + 1) - 3 ≠ 0 := by linarith [h4 m] have hne2 : (2 : ℝ) ^ (m + n + 1) ≠ 0 := by positivity have hval : (3 : ℝ) / (2 ^ (m + n + 1) - 3) = 3 / 2 ^ (m + n + 1) * (1 - 3 / 2 ^ (m + n + 1))⁻¹ := by field_simp rw [hfun, hval] exact hg have inner2 : ∀ s, HasSum (fun m => f m s) (((3 : ℝ) / 2 ^ n) ^ (s + 1) / (2 ^ (s + 1) - 1)) := by intro s have hr0 : 0 ≤ (1 : ℝ) / 2 ^ (s + 1) := by positivity have hr1 : (1 : ℝ) / 2 ^ (s + 1) < 1 := by rw [div_lt_one (by positivity)] exact one_lt_pow₀ (by norm_num) (by omega) have hg := (hasSum_geometric_of_lt_one hr0 hr1).mul_left (((3 : ℝ) / 2 ^ (n + 1)) ^ (s + 1)) have hne : (2 : ℝ) ^ (s + 1) - 1 ≠ 0 := by have : (1 : ℝ) < 2 ^ (s + 1) := one_lt_pow₀ (by norm_num) (by omega) linarith have hval : ((3 : ℝ) / 2 ^ n) ^ (s + 1) / (2 ^ (s + 1) - 1) = ((3 : ℝ) / 2 ^ (n + 1)) ^ (s + 1) * (1 - 1 / 2 ^ (s + 1))⁻¹ := by rw [div_pow, div_pow, ← pow_mul, ← pow_mul, show (n + 1) * (s + 1) = n * (s + 1) + (s + 1) by ring, pow_add] field_simp exact pow_add _ _ _ rw [hval] exact hg have hsum1 : Summable (fun m : ℕ => (3 : ℝ) / (2 ^ (m + n + 1) - 3)) := by refine Summable.of_nonneg_of_le (fun m => ?_) (fun m => ?_) ((summable_geometric_two).mul_left 3) · have := h4 m; exact div_nonneg (by norm_num) (by linarith) · have hpow : (2 : ℝ) ^ (m + 2) ≤ 2 ^ (m + n + 1) := pow_le_pow_right₀ (by norm_num) (by omega) have h1 : (1 : ℝ) ≤ 2 ^ m := one_le_pow₀ (by norm_num) have h2 : (2 : ℝ) ^ (m + 2) = 4 * 2 ^ m := by rw [pow_add]; ring calc (3 : ℝ) / (2 ^ (m + n + 1) - 3) ≤ 3 / 2 ^ m := div_le_div_of_nonneg_left (by norm_num) (by positivity) (by linarith) _ = 3 * (1 / 2) ^ m := by rw [one_div_pow]; ring have hU : Summable (Function.uncurry f) := by refine (summable_prod_of_nonneg (fun p => hpos p.1 p.2)).mpr ⟨fun m => (inner1 m).summable, ?_⟩ exact hsum1.congr (fun m => ((inner1 m).tsum_eq).symm) have hcomm := hU.tsum_comm' (fun m => (inner1 m).summable) (fun s => (inner2 s).summable) rw [show (∑' m : ℕ, (3 : ℝ) / (2 ^ (m + n + 1) - 3)) = ∑' m, ∑' s, f m s from tsum_congr (fun m => ((inner1 m).tsum_eq).symm)] rw [← hcomm] exact tsum_congr (fun s => (inner2 s).tsum_eq)targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 225–289 at
dfc7b5cc45a9↗tail3.keyhave∀ (m s : ℕ), f m s = ((3 : ℝ) / (2 : ℝ) ^ (m + n + (1 : ℕ))) ^ (s + (1 : ℕ))Leaves
∑' (m : ℕ), (3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ)) = ∑' (s : ℕ), ((3 : ℝ) / (2 : ℝ) ^ n) ^ (s + (1 : ℕ)) / ((2 : ℝ) ^ (s + (1 : ℕ)) - (1 : ℝ)), withkey : ∀ (m s : ℕ), f m s = ((3 : ℝ) / (2 : ℝ) ^ (m + n + (1 : ℕ))) ^ (s + (1 : ℕ)).Uses library
div_pow,one_pow,pow_mul,pow_add.Lean, lines 229–235
have key : ∀ m s, f m s = ((3 : ℝ) / 2 ^ (m + n + 1)) ^ (s + 1) := by intro m s simp only [hf] rw [div_pow, div_pow, div_pow, one_pow, ← pow_mul, ← pow_mul, ← pow_mul, show (m + n + 1) * (s + 1) = (n + 1) * (s + 1) + (s + 1) * m by ring, pow_add] field_simp exact pow_add _ _ _targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 229–235 at
dfc7b5cc45a9↗tail3.hposhave∀ (m s : ℕ), (0 : ℝ) ≤ f m sLeaves
∑' (m : ℕ), (3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ)) = ∑' (s : ℕ), ((3 : ℝ) / (2 : ℝ) ^ n) ^ (s + (1 : ℕ)) / ((2 : ℝ) ^ (s + (1 : ℕ)) - (1 : ℝ)), withhpos : ∀ (m s : ℕ), (0 : ℝ) ≤ f m s.Lean, line 236
have hpos : ∀ m s, 0 ≤ f m s := fun m s => by rw [key]; positivity
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 236 at
dfc7b5cc45a9↗tail3.h4have∀ (m : ℕ), (4 : ℝ) ≤ (2 : ℝ) ^ (m + n + (1 : ℕ))Leaves
∑' (m : ℕ), (3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ)) = ∑' (s : ℕ), ((3 : ℝ) / (2 : ℝ) ^ n) ^ (s + (1 : ℕ)) / ((2 : ℝ) ^ (s + (1 : ℕ)) - (1 : ℝ)), withh4 : ∀ (m : ℕ), (4 : ℝ) ≤ (2 : ℝ) ^ (m + n + (1 : ℕ)).Lean, lines 237–240
have h4 : ∀ m : ℕ, (4 : ℝ) ≤ 2 ^ (m + n + 1) := by intro m calc (4 : ℝ) = 2 ^ 2 := by norm_num _ ≤ 2 ^ (m + n + 1) := pow_le_pow_right₀ (by norm_num) (by omega)targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 237–240 at
dfc7b5cc45a9↗tail3.h4.s1calc(4 : ℝ) = (2 : ℝ) ^ (2 : ℕ)routine: norm_numCloses the goal.
Lean, line 239
calc (4 : ℝ) = 2 ^ 2 := by norm_num
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 239 at
dfc7b5cc45a9↗tail3.h4.s2calc(2 : ℝ) ^ (2 : ℕ) ≤ (2 : ℝ) ^ (m + n + (1 : ℕ))Closes the goal.
Uses library
pow_le_pow_right₀.Lean, line 240
_ ≤ 2 ^ (m + n + 1) := pow_le_pow_right₀ (by norm_num) (by omega)
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 240 at
dfc7b5cc45a9↗
tail3.inner1have∀ (m : ℕ), HasSum (f m) ((3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ)))Leaves
∑' (m : ℕ), (3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ)) = ∑' (s : ℕ), ((3 : ℝ) / (2 : ℝ) ^ n) ^ (s + (1 : ℕ)) / ((2 : ℝ) ^ (s + (1 : ℕ)) - (1 : ℝ)), withinner1 : ∀ (m : ℕ), HasSum (f m) ((3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ))).Uses library
HasSumHasSum f a Lmeans that the (potentially infinite) sum of thef bforb : βconverges toaalong the SummationFilterL. .Lean, lines 241–255
have inner1 : ∀ m, HasSum (f m) ((3 : ℝ) / (2 ^ (m + n + 1) - 3)) := by intro m have hr0 : 0 ≤ (3 : ℝ) / 2 ^ (m + n + 1) := by positivity have hr1 : (3 : ℝ) / 2 ^ (m + n + 1) < 1 := by rw [div_lt_one (by positivity)]; linarith [h4 m] have hg := (hasSum_geometric_of_lt_one hr0 hr1).mul_left ((3 : ℝ) / 2 ^ (m + n + 1)) have hfun : f m = fun s => (3 : ℝ) / 2 ^ (m + n + 1) * ((3 : ℝ) / 2 ^ (m + n + 1)) ^ s := by funext s; rw [key]; ring have hne : (2 : ℝ) ^ (m + n + 1) - 3 ≠ 0 := by linarith [h4 m] have hne2 : (2 : ℝ) ^ (m + n + 1) ≠ 0 := by positivity have hval : (3 : ℝ) / (2 ^ (m + n + 1) - 3) = 3 / 2 ^ (m + n + 1) * (1 - 3 / 2 ^ (m + n + 1))⁻¹ := by field_simp rw [hfun, hval] exact hgtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 241–255 at
dfc7b5cc45a9↗tail3.inner1.hr0have(0 : ℝ) ≤ (3 : ℝ) / (2 : ℝ) ^ (m + n + (1 : ℕ))routine: positivityLeaves
HasSum (f m) ((3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ))), withhr0 : (0 : ℝ) ≤ (3 : ℝ) / (2 : ℝ) ^ (m + n + (1 : ℕ)).Lean, line 243
have hr0 : 0 ≤ (3 : ℝ) / 2 ^ (m + n + 1) := by positivity
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 243 at
dfc7b5cc45a9↗tail3.inner1.hr1have(3 : ℝ) / (2 : ℝ) ^ (m + n + (1 : ℕ)) < (1 : ℝ)Leaves
HasSum (f m) ((3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ))), withhr1 : (3 : ℝ) / (2 : ℝ) ^ (m + n + (1 : ℕ)) < (1 : ℝ).Uses library
div_lt_one.Lean, lines 244–245
have hr1 : (3 : ℝ) / 2 ^ (m + n + 1) < 1 := by rw [div_lt_one (by positivity)]; linarith [h4 m]targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 244–245 at
dfc7b5cc45a9↗tail3.inner1.hghaveHasSum (fun (i : ℕ) => (3 : ℝ) / (2 : ℝ) ^ (m + n + (1 : ℕ)) * ((3 : ℝ) / (2 : ℝ) ^ (m + n + (1 : ℕ))) ^ i) ((3 : ℝ) / (2 : ℝ) ^ (m + n + (1 : ℕ)) * ((1 : ℝ) - (3 : ℝ) / (2 : ℝ) ^ (m + n + (1 : ℕ)))⁻¹)Leaves
HasSum (f m) ((3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ))), withhg : HasSum (fun (i : ℕ) => (3 : ℝ) / (2 : ℝ) ^ (m + n + (1 : ℕ)) * ((3 : ℝ) / (2 : ℝ) ^ (m + n + (1 : ℕ))) ^ i) ((3 : ℝ) / (2 : ℝ) ^ (m + n + (1 : ℕ)) * ((1 : ℝ) - (3 : ℝ) / (2 : ℝ) ^ (m + n + (1 : ℕ)))⁻¹).Uses library
hasSum_geometric_of_lt_one.Lean, line 246
have hg := (hasSum_geometric_of_lt_one hr0 hr1).mul_left ((3 : ℝ) / 2 ^ (m + n + 1))
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 246 at
dfc7b5cc45a9↗tail3.inner1.hfunhavef m = fun (s : ℕ) => (3 : ℝ) / (2 : ℝ) ^ (m + n + (1 : ℕ)) * ((3 : ℝ) / (2 : ℝ) ^ (m + n + (1 : ℕ))) ^ sLeaves
HasSum (f m) ((3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ))), withhfun : f m = fun (s : ℕ) => (3 : ℝ) / (2 : ℝ) ^ (m + n + (1 : ℕ)) * ((3 : ℝ) / (2 : ℝ) ^ (m + n + (1 : ℕ))) ^ s.Lean, lines 247–248
have hfun : f m = fun s => (3 : ℝ) / 2 ^ (m + n + 1) * ((3 : ℝ) / 2 ^ (m + n + 1)) ^ s := by funext s; rw [key]; ringtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 247–248 at
dfc7b5cc45a9↗tail3.inner1.hnehave(2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ) ≠ (0 : ℝ)routine: linarithLeaves
HasSum (f m) ((3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ))), withhne : (2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ) ≠ (0 : ℝ).Lean, line 249
have hne : (2 : ℝ) ^ (m + n + 1) - 3 ≠ 0 := by linarith [h4 m]
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 249 at
dfc7b5cc45a9↗tail3.inner1.hne2have(2 : ℝ) ^ (m + n + (1 : ℕ)) ≠ (0 : ℝ)routine: positivityLeaves
HasSum (f m) ((3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ))), withhne2 : (2 : ℝ) ^ (m + n + (1 : ℕ)) ≠ (0 : ℝ).Lean, line 250
have hne2 : (2 : ℝ) ^ (m + n + 1) ≠ 0 := by positivity
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 250 at
dfc7b5cc45a9↗tail3.inner1.hvalhave(3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ)) = (3 : ℝ) / (2 : ℝ) ^ (m + n + (1 : ℕ)) * ((1 : ℝ) - (3 : ℝ) / (2 : ℝ) ^ (m + n + (1 : ℕ)))⁻¹routine: field_simpLeaves
HasSum (f m) ((3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ))), withhval : (3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ)) = (3 : ℝ) / (2 : ℝ) ^ (m + n + (1 : ℕ)) * ((1 : ℝ) - (3 : ℝ) / (2 : ℝ) ^ (m + n + (1 : ℕ)))⁻¹.Lean, lines 251–253
have hval : (3 : ℝ) / (2 ^ (m + n + 1) - 3) = 3 / 2 ^ (m + n + 1) * (1 - 3 / 2 ^ (m + n + 1))⁻¹ := by field_simptargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 251–253 at
dfc7b5cc45a9↗
tail3.inner2have∀ (s : ℕ), HasSum (fun (m : ℕ) => f m s) (((3 : ℝ) / (2 : ℝ) ^ n) ^ (s + (1 : ℕ)) / ((2 : ℝ) ^ (s + (1 : ℕ)) - (1 : ℝ)))Leaves
∑' (m : ℕ), (3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ)) = ∑' (s : ℕ), ((3 : ℝ) / (2 : ℝ) ^ n) ^ (s + (1 : ℕ)) / ((2 : ℝ) ^ (s + (1 : ℕ)) - (1 : ℝ)), withinner2 : ∀ (s : ℕ), HasSum (fun (m : ℕ) => f m s) (((3 : ℝ) / (2 : ℝ) ^ n) ^ (s + (1 : ℕ)) / ((2 : ℝ) ^ (s + (1 : ℕ)) - (1 : ℝ))).Uses library
HasSumHasSum f a Lmeans that the (potentially infinite) sum of thef bforb : βconverges toaalong the SummationFilterL. .Lean, lines 256–272
have inner2 : ∀ s, HasSum (fun m => f m s) (((3 : ℝ) / 2 ^ n) ^ (s + 1) / (2 ^ (s + 1) - 1)) := by intro s have hr0 : 0 ≤ (1 : ℝ) / 2 ^ (s + 1) := by positivity have hr1 : (1 : ℝ) / 2 ^ (s + 1) < 1 := by rw [div_lt_one (by positivity)] exact one_lt_pow₀ (by norm_num) (by omega) have hg := (hasSum_geometric_of_lt_one hr0 hr1).mul_left (((3 : ℝ) / 2 ^ (n + 1)) ^ (s + 1)) have hne : (2 : ℝ) ^ (s + 1) - 1 ≠ 0 := by have : (1 : ℝ) < 2 ^ (s + 1) := one_lt_pow₀ (by norm_num) (by omega) linarith have hval : ((3 : ℝ) / 2 ^ n) ^ (s + 1) / (2 ^ (s + 1) - 1) = ((3 : ℝ) / 2 ^ (n + 1)) ^ (s + 1) * (1 - 1 / 2 ^ (s + 1))⁻¹ := by rw [div_pow, div_pow, ← pow_mul, ← pow_mul, show (n + 1) * (s + 1) = n * (s + 1) + (s + 1) by ring, pow_add] field_simp exact pow_add _ _ _ rw [hval] exact hgtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 256–272 at
dfc7b5cc45a9↗tail3.inner2.hr0have(0 : ℝ) ≤ (1 : ℝ) / (2 : ℝ) ^ (s + (1 : ℕ))routine: positivityLeaves
HasSum (fun (m : ℕ) => f m s) (((3 : ℝ) / (2 : ℝ) ^ n) ^ (s + (1 : ℕ)) / ((2 : ℝ) ^ (s + (1 : ℕ)) - (1 : ℝ))), withhr0 : (0 : ℝ) ≤ (1 : ℝ) / (2 : ℝ) ^ (s + (1 : ℕ)).Lean, line 258
have hr0 : 0 ≤ (1 : ℝ) / 2 ^ (s + 1) := by positivity
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 258 at
dfc7b5cc45a9↗tail3.inner2.hr1have(1 : ℝ) / (2 : ℝ) ^ (s + (1 : ℕ)) < (1 : ℝ)Leaves
HasSum (fun (m : ℕ) => f m s) (((3 : ℝ) / (2 : ℝ) ^ n) ^ (s + (1 : ℕ)) / ((2 : ℝ) ^ (s + (1 : ℕ)) - (1 : ℝ))), withhr1 : (1 : ℝ) / (2 : ℝ) ^ (s + (1 : ℕ)) < (1 : ℝ).Uses library
div_lt_one,one_lt_pow₀.Lean, lines 259–261
have hr1 : (1 : ℝ) / 2 ^ (s + 1) < 1 := by rw [div_lt_one (by positivity)] exact one_lt_pow₀ (by norm_num) (by omega)targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 259–261 at
dfc7b5cc45a9↗tail3.inner2.hghaveHasSum (fun (i : ℕ) => ((3 : ℝ) / (2 : ℝ) ^ (n + (1 : ℕ))) ^ (s + (1 : ℕ)) * ((1 : ℝ) / (2 : ℝ) ^ (s + (1 : ℕ))) ^ i) (((3 : ℝ) / (2 : ℝ) ^ (n + (1 : ℕ))) ^ (s + (1 : ℕ)) * ((1 : ℝ) - (1 : ℝ) / (2 : ℝ) ^ (s + (1 : ℕ)))⁻¹)Leaves
HasSum (fun (m : ℕ) => f m s) (((3 : ℝ) / (2 : ℝ) ^ n) ^ (s + (1 : ℕ)) / ((2 : ℝ) ^ (s + (1 : ℕ)) - (1 : ℝ))), withhg : HasSum (fun (i : ℕ) => ((3 : ℝ) / (2 : ℝ) ^ (n + (1 : ℕ))) ^ (s + (1 : ℕ)) * ((1 : ℝ) / (2 : ℝ) ^ (s + (1 : ℕ))) ^ i) (((3 : ℝ) / (2 : ℝ) ^ (n + (1 : ℕ))) ^ (s + (1 : ℕ)) * ((1 : ℝ) - (1 : ℝ) / (2 : ℝ) ^ (s + (1 : ℕ)))⁻¹).Uses library
hasSum_geometric_of_lt_one.Lean, line 262
have hg := (hasSum_geometric_of_lt_one hr0 hr1).mul_left (((3 : ℝ) / 2 ^ (n + 1)) ^ (s + 1))
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 262 at
dfc7b5cc45a9↗tail3.inner2.hnehave(2 : ℝ) ^ (s + (1 : ℕ)) - (1 : ℝ) ≠ (0 : ℝ)Leaves
HasSum (fun (m : ℕ) => f m s) (((3 : ℝ) / (2 : ℝ) ^ n) ^ (s + (1 : ℕ)) / ((2 : ℝ) ^ (s + (1 : ℕ)) - (1 : ℝ))), withhne : (2 : ℝ) ^ (s + (1 : ℕ)) - (1 : ℝ) ≠ (0 : ℝ).Lean, lines 263–265
have hne : (2 : ℝ) ^ (s + 1) - 1 ≠ 0 := by have : (1 : ℝ) < 2 ^ (s + 1) := one_lt_pow₀ (by norm_num) (by omega) linarithtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 263–265 at
dfc7b5cc45a9↗tail3.inner2.hne.thishave(1 : ℝ) < (2 : ℝ) ^ (s + (1 : ℕ))Leaves
(2 : ℝ) ^ (s + (1 : ℕ)) - (1 : ℝ) ≠ (0 : ℝ), withthis : (1 : ℝ) < (2 : ℝ) ^ (s + (1 : ℕ)).Uses library
one_lt_pow₀.Lean, line 264
have : (1 : ℝ) < 2 ^ (s + 1) := one_lt_pow₀ (by norm_num) (by omega)
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 264 at
dfc7b5cc45a9↗
tail3.inner2.hvalhave((3 : ℝ) / (2 : ℝ) ^ n) ^ (s + (1 : ℕ)) / ((2 : ℝ) ^ (s + (1 : ℕ)) - (1 : ℝ)) = ((3 : ℝ) / (2 : ℝ) ^ (n + (1 : ℕ))) ^ (s + (1 : ℕ)) * ((1 : ℝ) - (1 : ℝ) / (2 : ℝ) ^ (s + (1 : ℕ)))⁻¹Leaves
HasSum (fun (m : ℕ) => f m s) (((3 : ℝ) / (2 : ℝ) ^ n) ^ (s + (1 : ℕ)) / ((2 : ℝ) ^ (s + (1 : ℕ)) - (1 : ℝ))), withhval : ((3 : ℝ) / (2 : ℝ) ^ n) ^ (s + (1 : ℕ)) / ((2 : ℝ) ^ (s + (1 : ℕ)) - (1 : ℝ)) = ((3 : ℝ) / (2 : ℝ) ^ (n + (1 : ℕ))) ^ (s + (1 : ℕ)) * ((1 : ℝ) - (1 : ℝ) / (2 : ℝ) ^ (s + (1 : ℕ)))⁻¹.Uses library
div_pow,pow_mul,pow_add.Lean, lines 266–270
have hval : ((3 : ℝ) / 2 ^ n) ^ (s + 1) / (2 ^ (s + 1) - 1) = ((3 : ℝ) / 2 ^ (n + 1)) ^ (s + 1) * (1 - 1 / 2 ^ (s + 1))⁻¹ := by rw [div_pow, div_pow, ← pow_mul, ← pow_mul, show (n + 1) * (s + 1) = n * (s + 1) + (s + 1) by ring, pow_add] field_simp exact pow_add _ _ _targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 266–270 at
dfc7b5cc45a9↗
tail3.hsum1haveSummable fun (m : ℕ) => (3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ))Leaves
∑' (m : ℕ), (3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ)) = ∑' (s : ℕ), ((3 : ℝ) / (2 : ℝ) ^ n) ^ (s + (1 : ℕ)) / ((2 : ℝ) ^ (s + (1 : ℕ)) - (1 : ℝ)), withhsum1 : Summable fun (m : ℕ) => (3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ)).Uses library
SummableSummable fmeans thatfhas some (infinite) sum with respect toL. ,Summable.of_nonneg_of_leComparison test of convergence of series of non-negative real numbers. ,summable_geometric_two.Lean, lines 273–281
have hsum1 : Summable (fun m : ℕ => (3 : ℝ) / (2 ^ (m + n + 1) - 3)) := by refine Summable.of_nonneg_of_le (fun m => ?_) (fun m => ?_) ((summable_geometric_two).mul_left 3) · have := h4 m; exact div_nonneg (by norm_num) (by linarith) · have hpow : (2 : ℝ) ^ (m + 2) ≤ 2 ^ (m + n + 1) := pow_le_pow_right₀ (by norm_num) (by omega) have h1 : (1 : ℝ) ≤ 2 ^ m := one_le_pow₀ (by norm_num) have h2 : (2 : ℝ) ^ (m + 2) = 4 * 2 ^ m := by rw [pow_add]; ring calc (3 : ℝ) / (2 ^ (m + n + 1) - 3) ≤ 3 / 2 ^ m := div_le_div_of_nonneg_left (by norm_num) (by positivity) (by linarith) _ = 3 * (1 / 2) ^ m := by rw [one_div_pow]; ringtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 273–281 at
dfc7b5cc45a9↗tail3.hsum1.s1caseLeaves
(0 : ℝ) ≤ (3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ)).Uses library
div_nonneg.Lean, line 275
· have := h4 m; exact div_nonneg (by norm_num) (by linarith)
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 275 at
dfc7b5cc45a9↗tail3.hsum1.s1.thishave(4 : ℝ) ≤ (2 : ℝ) ^ (m + n + (1 : ℕ))Leaves
(0 : ℝ) ≤ (3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ)), withthis : (4 : ℝ) ≤ (2 : ℝ) ^ (m + n + (1 : ℕ)).Lean, line 275
· have := h4 m; exact div_nonneg (by norm_num) (by linarith)
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 275 at
dfc7b5cc45a9↗
tail3.hsum1.s2caseLeaves
(3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ)) ≤ (3 : ℝ) * (1 / 2 : ℝ) ^ m.Lean, lines 276–281
· have hpow : (2 : ℝ) ^ (m + 2) ≤ 2 ^ (m + n + 1) := pow_le_pow_right₀ (by norm_num) (by omega) have h1 : (1 : ℝ) ≤ 2 ^ m := one_le_pow₀ (by norm_num) have h2 : (2 : ℝ) ^ (m + 2) = 4 * 2 ^ m := by rw [pow_add]; ring calc (3 : ℝ) / (2 ^ (m + n + 1) - 3) ≤ 3 / 2 ^ m := div_le_div_of_nonneg_left (by norm_num) (by positivity) (by linarith) _ = 3 * (1 / 2) ^ m := by rw [one_div_pow]; ringtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 276–281 at
dfc7b5cc45a9↗tail3.hsum1.s2.hpowhave(2 : ℝ) ^ (m + (2 : ℕ)) ≤ (2 : ℝ) ^ (m + n + (1 : ℕ))Leaves
(3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ)) ≤ (3 : ℝ) * (1 / 2 : ℝ) ^ m, withhpow : (2 : ℝ) ^ (m + (2 : ℕ)) ≤ (2 : ℝ) ^ (m + n + (1 : ℕ)).Uses library
pow_le_pow_right₀.Lean, line 276
· have hpow : (2 : ℝ) ^ (m + 2) ≤ 2 ^ (m + n + 1) := pow_le_pow_right₀ (by norm_num) (by omega)
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 276 at
dfc7b5cc45a9↗tail3.hsum1.s2.h1have(1 : ℝ) ≤ (2 : ℝ) ^ mLeaves
(3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ)) ≤ (3 : ℝ) * (1 / 2 : ℝ) ^ m, withh1 : (1 : ℝ) ≤ (2 : ℝ) ^ m.Uses library
one_le_pow₀.Lean, line 277
have h1 : (1 : ℝ) ≤ 2 ^ m := one_le_pow₀ (by norm_num)
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 277 at
dfc7b5cc45a9↗tail3.hsum1.s2.h2have(2 : ℝ) ^ (m + (2 : ℕ)) = (4 : ℝ) * (2 : ℝ) ^ mLeaves
(3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ)) ≤ (3 : ℝ) * (1 / 2 : ℝ) ^ m, withh2 : (2 : ℝ) ^ (m + (2 : ℕ)) = (4 : ℝ) * (2 : ℝ) ^ m.Uses library
pow_add.Lean, line 278
have h2 : (2 : ℝ) ^ (m + 2) = 4 * 2 ^ m := by rw [pow_add]; ring
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 278 at
dfc7b5cc45a9↗tail3.hsum1.s2.s4calc(3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ)) ≤ (3 : ℝ) / (2 : ℝ) ^ mCloses the goal.
Uses library
div_le_div_of_nonneg_left.Lean, lines 279–280
calc (3 : ℝ) / (2 ^ (m + n + 1) - 3) ≤ 3 / 2 ^ m := div_le_div_of_nonneg_left (by norm_num) (by positivity) (by linarith)targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 279–280 at
dfc7b5cc45a9↗tail3.hsum1.s2.s5calcCloses the goal.
Uses library
one_div_pow.Lean, line 281
_ = 3 * (1 / 2) ^ m := by rw [one_div_pow]; ring
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 281 at
dfc7b5cc45a9↗
tail3.hUhaveSummable (Function.uncurry f)Leaves
∑' (m : ℕ), (3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ)) = ∑' (s : ℕ), ((3 : ℝ) / (2 : ℝ) ^ n) ^ (s + (1 : ℕ)) / ((2 : ℝ) ^ (s + (1 : ℕ)) - (1 : ℝ)), withhU : Summable (Function.uncurry f).Uses library
SummableSummable fmeans thatfhas some (infinite) sum with respect toL. ,Function.uncurryTransforms a two-parameter function into an equivalent function from pairs. ,summable_prod_of_nonneg,And.introAnd.intro : a → b → a ∧ bis the constructor for the And operation. .Lean, lines 282–284
have hU : Summable (Function.uncurry f) := by refine (summable_prod_of_nonneg (fun p => hpos p.1 p.2)).mpr ⟨fun m => (inner1 m).summable, ?_⟩ exact hsum1.congr (fun m => ((inner1 m).tsum_eq).symm)targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 282–284 at
dfc7b5cc45a9↗tail3.hcommhave∑' (c : ℕ) (b : ℕ), f b c = ∑' (b : ℕ) (c : ℕ), f b cLeaves
∑' (m : ℕ), (3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ)) = ∑' (s : ℕ), ((3 : ℝ) / (2 : ℝ) ^ n) ^ (s + (1 : ℕ)) / ((2 : ℝ) ^ (s + (1 : ℕ)) - (1 : ℝ)), withhcomm : ∑' (c : ℕ) (b : ℕ), f b c = ∑' (b : ℕ) (c : ℕ), f b c.Lean, line 285
have hcomm := hU.tsum_comm' (fun m => (inner1 m).summable) (fun s => (inner2 s).summable)
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 285 at
dfc7b5cc45a9↗
split3Thave∀ (n : ℕ), (3 : ℝ) * ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)) = ∑ j ∈ Finset.range n, (3 : ℝ) / ((2 : ℝ) ^ (j + (1 : ℕ)) - (3 : ℝ)) + ∑' (m : ℕ), (3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ))Leaves
∀ (Qc : ℕ → ℕ → ℚ), (Qc = fun (n k : ℕ) => ((-1 : ℚ) ^ k * (2 : ℚ) ^ (k * (k - (1 : ℕ)) / (2 : ℕ)) * ∏ i ∈ Finset.range k, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * ∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - k - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) → ∀ (Qx : ℕ → ℚ), (Qx = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), Qc n k * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k) → ∀ (Aq : ℕ → ℚ), (Aq = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), (∑ j ∈ Finset.range (k + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (k - j) - (1 : ℚ))) * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k + Qx n * ∑ j ∈ Finset.range n, (3 : ℚ) / ((2 : ℚ) ^ (j + (1 : ℕ)) - (3 : ℚ))) → ∀ (n : ℕ), (0 : ℝ) < (↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ) ∧ ((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ)) ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)), withsplit3T : ∀ (n : ℕ), (3 : ℝ) * ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)) = ∑ j ∈ Finset.range n, (3 : ℝ) / ((2 : ℝ) ^ (j + (1 : ℕ)) - (3 : ℝ)) + ∑' (m : ℕ), (3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ)).Uses library
Finset.rangerange nis the set of natural numbers less thann. ,zero_add.Lean, lines 291–329
have split3T : ∀ (n : ℕ), 3 * ∑' m : ℕ, (1 : ℝ) / (2 ^ (m + 3) - 3) = ∑ j ∈ Finset.range n, (3 : ℝ) / (2 ^ (j + 1) - 3) + ∑' m : ℕ, (3 : ℝ) / (2 ^ (m + n + 1) - 3) := by intro n set g : ℕ → ℝ := fun m => (3 : ℝ) / (2 ^ (m + 1) - 3) with hg have hsum : Summable (fun m => g (m + 1)) := by refine Summable.of_nonneg_of_le (fun m => ?_) (fun m => ?_) ((summable_geometric_two).mul_left 3) · have : (4 : ℝ) ≤ 2 ^ (m + 1 + 1) := by calc (4 : ℝ) = 2 ^ 2 := by norm_num _ ≤ 2 ^ (m + 1 + 1) := pow_le_pow_right₀ (by norm_num) (by omega) simp only [hg]; exact div_nonneg (by norm_num) (by linarith) · have hpow : (2 : ℝ) ^ (m + 2) ≤ 2 ^ (m + 1 + 1) := le_of_eq (by ring_nf) have h1 : (1 : ℝ) ≤ 2 ^ m := one_le_pow₀ (by norm_num) have h2 : (2 : ℝ) ^ (m + 2) = 4 * 2 ^ m := by rw [pow_add]; ring simp only [hg] calc (3 : ℝ) / (2 ^ (m + 1 + 1) - 3) ≤ 3 / 2 ^ m := div_le_div_of_nonneg_left (by norm_num) (by positivity) (by linarith) _ = 3 * (1 / 2) ^ m := by rw [one_div_pow]; ring have hs : Summable g := (summable_nat_add_iff 1).mp hsum have e1 := hs.sum_add_tsum_nat_add n have e2 := hs.sum_add_tsum_nat_add 2 have h3T : 3 * ∑' m : ℕ, (1 : ℝ) / (2 ^ (m + 3) - 3) = ∑' m, g (m + 2) := by rw [← tsum_mul_left] refine tsum_congr (fun m => ?_) simp only [hg] rw [show m + 2 + 1 = m + 3 by ring] ring have hfirst : ∑ i ∈ Finset.range 2, g i = 0 := by simp only [hg, Finset.sum_range_succ, Finset.sum_range_zero] norm_num rw [h3T] have htail : ∑' m : ℕ, (3 : ℝ) / (2 ^ (m + n + 1) - 3) = ∑' m, g (m + n) := by refine tsum_congr (fun m => ?_) simp only [hg] rw [htail] have hrange : ∑ j ∈ Finset.range n, (3 : ℝ) / (2 ^ (j + 1) - 3) = ∑ i ∈ Finset.range n, g i := by simp only [hg] rw [hrange, e1] rw [← e2, hfirst, zero_add]targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 291–329 at
dfc7b5cc45a9↗split3T.hsumhaveSummable fun (m : ℕ) => g (m + (1 : ℕ))Leaves
(3 : ℝ) * ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)) = (Finset.range n).sum g + ∑' (m : ℕ), (3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ)), withhsum : Summable fun (m : ℕ) => g (m + (1 : ℕ)).Uses library
SummableSummable fmeans thatfhas some (infinite) sum with respect toL. ,Summable.of_nonneg_of_leComparison test of convergence of series of non-negative real numbers. ,summable_geometric_two.Lean, lines 296–308
have hsum : Summable (fun m => g (m + 1)) := by refine Summable.of_nonneg_of_le (fun m => ?_) (fun m => ?_) ((summable_geometric_two).mul_left 3) · have : (4 : ℝ) ≤ 2 ^ (m + 1 + 1) := by calc (4 : ℝ) = 2 ^ 2 := by norm_num _ ≤ 2 ^ (m + 1 + 1) := pow_le_pow_right₀ (by norm_num) (by omega) simp only [hg]; exact div_nonneg (by norm_num) (by linarith) · have hpow : (2 : ℝ) ^ (m + 2) ≤ 2 ^ (m + 1 + 1) := le_of_eq (by ring_nf) have h1 : (1 : ℝ) ≤ 2 ^ m := one_le_pow₀ (by norm_num) have h2 : (2 : ℝ) ^ (m + 2) = 4 * 2 ^ m := by rw [pow_add]; ring simp only [hg] calc (3 : ℝ) / (2 ^ (m + 1 + 1) - 3) ≤ 3 / 2 ^ m := div_le_div_of_nonneg_left (by norm_num) (by positivity) (by linarith) _ = 3 * (1 / 2) ^ m := by rw [one_div_pow]; ringtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 296–308 at
dfc7b5cc45a9↗split3T.hsum.s1caseLeaves
(0 : ℝ) ≤ g (m + (1 : ℕ)).Uses library
div_nonneg.Lean, lines 298–301
· have : (4 : ℝ) ≤ 2 ^ (m + 1 + 1) := by calc (4 : ℝ) = 2 ^ 2 := by norm_num _ ≤ 2 ^ (m + 1 + 1) := pow_le_pow_right₀ (by norm_num) (by omega) simp only [hg]; exact div_nonneg (by norm_num) (by linarith)targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 298–301 at
dfc7b5cc45a9↗split3T.hsum.s1.thishave(4 : ℝ) ≤ (2 : ℝ) ^ (m + (1 : ℕ) + (1 : ℕ))Leaves
(0 : ℝ) ≤ g (m + (1 : ℕ)), withthis : (4 : ℝ) ≤ (2 : ℝ) ^ (m + (1 : ℕ) + (1 : ℕ)).Lean, lines 298–300
· have : (4 : ℝ) ≤ 2 ^ (m + 1 + 1) := by calc (4 : ℝ) = 2 ^ 2 := by norm_num _ ≤ 2 ^ (m + 1 + 1) := pow_le_pow_right₀ (by norm_num) (by omega)targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 298–300 at
dfc7b5cc45a9↗split3T.hsum.s1.this.s1calc(4 : ℝ) = (2 : ℝ) ^ (2 : ℕ)routine: norm_numCloses the goal.
Lean, line 299
calc (4 : ℝ) = 2 ^ 2 := by norm_num
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 299 at
dfc7b5cc45a9↗split3T.hsum.s1.this.s2calc(2 : ℝ) ^ (2 : ℕ) ≤ (2 : ℝ) ^ (m + (1 : ℕ) + (1 : ℕ))Closes the goal.
Uses library
pow_le_pow_right₀.Lean, line 300
_ ≤ 2 ^ (m + 1 + 1) := pow_le_pow_right₀ (by norm_num) (by omega)
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 300 at
dfc7b5cc45a9↗
split3T.hsum.s2caseLeaves
g (m + (1 : ℕ)) ≤ (3 : ℝ) * (1 / 2 : ℝ) ^ m.Lean, lines 302–308
· have hpow : (2 : ℝ) ^ (m + 2) ≤ 2 ^ (m + 1 + 1) := le_of_eq (by ring_nf) have h1 : (1 : ℝ) ≤ 2 ^ m := one_le_pow₀ (by norm_num) have h2 : (2 : ℝ) ^ (m + 2) = 4 * 2 ^ m := by rw [pow_add]; ring simp only [hg] calc (3 : ℝ) / (2 ^ (m + 1 + 1) - 3) ≤ 3 / 2 ^ m := div_le_div_of_nonneg_left (by norm_num) (by positivity) (by linarith) _ = 3 * (1 / 2) ^ m := by rw [one_div_pow]; ringtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 302–308 at
dfc7b5cc45a9↗split3T.hsum.s2.hpowhave(2 : ℝ) ^ (m + (2 : ℕ)) ≤ (2 : ℝ) ^ (m + (1 : ℕ) + (1 : ℕ))Leaves
g (m + (1 : ℕ)) ≤ (3 : ℝ) * (1 / 2 : ℝ) ^ m, withhpow : (2 : ℝ) ^ (m + (2 : ℕ)) ≤ (2 : ℝ) ^ (m + (1 : ℕ) + (1 : ℕ)).Uses library
le_of_eq.Lean, line 302
· have hpow : (2 : ℝ) ^ (m + 2) ≤ 2 ^ (m + 1 + 1) := le_of_eq (by ring_nf)
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 302 at
dfc7b5cc45a9↗split3T.hsum.s2.h1have(1 : ℝ) ≤ (2 : ℝ) ^ mLeaves
g (m + (1 : ℕ)) ≤ (3 : ℝ) * (1 / 2 : ℝ) ^ m, withh1 : (1 : ℝ) ≤ (2 : ℝ) ^ m.Uses library
one_le_pow₀.Lean, line 303
have h1 : (1 : ℝ) ≤ 2 ^ m := one_le_pow₀ (by norm_num)
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 303 at
dfc7b5cc45a9↗split3T.hsum.s2.h2have(2 : ℝ) ^ (m + (2 : ℕ)) = (4 : ℝ) * (2 : ℝ) ^ mLeaves
g (m + (1 : ℕ)) ≤ (3 : ℝ) * (1 / 2 : ℝ) ^ m, withh2 : (2 : ℝ) ^ (m + (2 : ℕ)) = (4 : ℝ) * (2 : ℝ) ^ m.Uses library
pow_add.Lean, line 304
have h2 : (2 : ℝ) ^ (m + 2) = 4 * 2 ^ m := by rw [pow_add]; ring
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 304 at
dfc7b5cc45a9↗split3T.hsum.s2.s4calc(3 : ℝ) / ((2 : ℝ) ^ (m + (1 : ℕ) + (1 : ℕ)) - (3 : ℝ)) ≤ (3 : ℝ) / (2 : ℝ) ^ mCloses the goal.
Uses library
div_le_div_of_nonneg_left.Lean, lines 306–307
calc (3 : ℝ) / (2 ^ (m + 1 + 1) - 3) ≤ 3 / 2 ^ m := div_le_div_of_nonneg_left (by norm_num) (by positivity) (by linarith)targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 306–307 at
dfc7b5cc45a9↗split3T.hsum.s2.s5calcCloses the goal.
Uses library
one_div_pow.Lean, line 308
_ = 3 * (1 / 2) ^ m := by rw [one_div_pow]; ring
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 308 at
dfc7b5cc45a9↗
split3T.hshaveSummable gLeaves
(3 : ℝ) * ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)) = (Finset.range n).sum g + ∑' (m : ℕ), (3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ)), withhs : Summable g.Uses library
SummableSummable fmeans thatfhas some (infinite) sum with respect toL. ,summable_nat_add_iff.Lean, line 309
have hs : Summable g := (summable_nat_add_iff 1).mp hsum
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 309 at
dfc7b5cc45a9↗split3T.e1have∑ i ∈ Finset.range n, g i + ∑' (i : ℕ), g (i + n) = ∑' (i : ℕ), g iLeaves
(3 : ℝ) * ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)) = (Finset.range n).sum g + ∑' (m : ℕ), (3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ)), withe1 : ∑ i ∈ Finset.range n, g i + ∑' (i : ℕ), g (i + n) = ∑' (i : ℕ), g i.Lean, line 310
have e1 := hs.sum_add_tsum_nat_add n
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 310 at
dfc7b5cc45a9↗split3T.e2have∑ i ∈ Finset.range (2 : ℕ), g i + ∑' (i : ℕ), g (i + (2 : ℕ)) = ∑' (i : ℕ), g iLeaves
(3 : ℝ) * ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)) = (Finset.range n).sum g + ∑' (m : ℕ), (3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ)), withe2 : ∑ i ∈ Finset.range (2 : ℕ), g i + ∑' (i : ℕ), g (i + (2 : ℕ)) = ∑' (i : ℕ), g i.Lean, line 311
have e2 := hs.sum_add_tsum_nat_add 2
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 311 at
dfc7b5cc45a9↗split3T.h3Thave(3 : ℝ) * ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)) = ∑' (m : ℕ), g (m + (2 : ℕ))Leaves
(3 : ℝ) * ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)) = (Finset.range n).sum g + ∑' (m : ℕ), (3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ)), withh3T : (3 : ℝ) * ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)) = ∑' (m : ℕ), g (m + (2 : ℕ)).Uses library
tsum_mul_left,tsum_congr.Lean, lines 312–317
have h3T : 3 * ∑' m : ℕ, (1 : ℝ) / (2 ^ (m + 3) - 3) = ∑' m, g (m + 2) := by rw [← tsum_mul_left] refine tsum_congr (fun m => ?_) simp only [hg] rw [show m + 2 + 1 = m + 3 by ring] ringtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 312–317 at
dfc7b5cc45a9↗split3T.hfirsthave∑ i ∈ Finset.range (2 : ℕ), g i = (0 : ℝ)routine: simp, norm_numLeaves
(3 : ℝ) * ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)) = (Finset.range n).sum g + ∑' (m : ℕ), (3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ)), withhfirst : ∑ i ∈ Finset.range (2 : ℕ), g i = (0 : ℝ).Uses library
Finset.rangerange nis the set of natural numbers less thann. ,Finset.sum_range_succ,Finset.sum_range_zero.Lean, lines 318–320
have hfirst : ∑ i ∈ Finset.range 2, g i = 0 := by simp only [hg, Finset.sum_range_succ, Finset.sum_range_zero] norm_numtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 318–320 at
dfc7b5cc45a9↗split3T.htailhave∑' (m : ℕ), (3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ)) = ∑' (m : ℕ), g (m + n)Leaves
∑' (m : ℕ), g (m + (2 : ℕ)) = (Finset.range n).sum g + ∑' (m : ℕ), (3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ)), withhtail : ∑' (m : ℕ), (3 : ℝ) / ((2 : ℝ) ^ (m + n + (1 : ℕ)) - (3 : ℝ)) = ∑' (m : ℕ), g (m + n).Uses library
tsum_congr.Lean, lines 322–324
have htail : ∑' m : ℕ, (3 : ℝ) / (2 ^ (m + n + 1) - 3) = ∑' m, g (m + n) := by refine tsum_congr (fun m => ?_) simp only [hg]targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 322–324 at
dfc7b5cc45a9↗split3T.hrangehave∑ j ∈ Finset.range n, (3 : ℝ) / ((2 : ℝ) ^ (j + (1 : ℕ)) - (3 : ℝ)) = ∑ i ∈ Finset.range n, g iroutine: simpLeaves
∑' (m : ℕ), g (m + (2 : ℕ)) = (Finset.range n).sum g + ∑' (m : ℕ), g (m + n), withhrange : ∑ j ∈ Finset.range n, (3 : ℝ) / ((2 : ℝ) ^ (j + (1 : ℕ)) - (3 : ℝ)) = ∑ i ∈ Finset.range n, g i.Uses library
Finset.rangerange nis the set of natural numbers less thann. .Lean, lines 326–327
have hrange : ∑ j ∈ Finset.range n, (3 : ℝ) / (2 ^ (j + 1) - 3) = ∑ i ∈ Finset.range n, g i := by simp only [hg]targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 326–327 at
dfc7b5cc45a9↗
cauchy_finhave∀ (n : ℕ) (q a : ℕ → ℝ) (x A : ℝ), HasSum (fun (s : ℕ) => a s * x ^ (s + (1 : ℕ))) A → HasSum (fun (K : ℕ) => ∑ j ∈ Finset.range (n + (1 : ℕ)), if j < K then q j * a (K - j - (1 : ℕ)) * x ^ K else (0 : ℝ)) ((∑ j ∈ Finset.range (n + (1 : ℕ)), q j * x ^ j) * A)Leaves
∀ (Qc : ℕ → ℕ → ℚ), (Qc = fun (n k : ℕ) => ((-1 : ℚ) ^ k * (2 : ℚ) ^ (k * (k - (1 : ℕ)) / (2 : ℕ)) * ∏ i ∈ Finset.range k, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * ∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - k - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) → ∀ (Qx : ℕ → ℚ), (Qx = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), Qc n k * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k) → ∀ (Aq : ℕ → ℚ), (Aq = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), (∑ j ∈ Finset.range (k + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (k - j) - (1 : ℚ))) * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k + Qx n * ∑ j ∈ Finset.range n, (3 : ℚ) / ((2 : ℚ) ^ (j + (1 : ℕ)) - (3 : ℚ))) → ∀ (n : ℕ), (0 : ℝ) < (↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ) ∧ ((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ)) ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)), withcauchy_fin : ∀ (n : ℕ) (q a : ℕ → ℝ) (x A : ℝ), HasSum (fun (s : ℕ) => a s * x ^ (s + (1 : ℕ))) A → HasSum (fun (K : ℕ) => ∑ j ∈ Finset.range (n + (1 : ℕ)), if j < K then q j * a (K - j - (1 : ℕ)) * x ^ K else (0 : ℝ)) ((∑ j ∈ Finset.range (n + (1 : ℕ)), q j * x ^ j) * A).Uses library
HasSumHasSum f a Lmeans that the (potentially infinite) sum of thef bforb : βconverges toaalong the SummationFilterL. ,Finset.rangerange nis the set of natural numbers less thann. ,Finset.sum_mul,hasSum_sum,hasSum_nat_add_iff',sub_zero.Lean, lines 331–351
have cauchy_fin : ∀ (n : ℕ) (q a : ℕ → ℝ) (x A : ℝ) (hA : HasSum (fun s => a s * x ^ (s + 1)) A), HasSum (fun K => ∑ j ∈ Finset.range (n + 1), if j < K then q j * a (K - j - 1) * x ^ K else 0) ((∑ j ∈ Finset.range (n + 1), q j * x ^ j) * A) := by intro n q a x A hA rw [Finset.sum_mul] apply hasSum_sum intro j _ have h := hA.mul_left (q j * x ^ j) rw [← hasSum_nat_add_iff' (j + 1)] have hz : ∑ i ∈ Finset.range (j + 1), (if j < i then q j * a (i - j - 1) * x ^ i else 0) = 0 := Finset.sum_eq_zero (fun i hi => by have := Finset.mem_range.mp hi rw [if_neg (by omega)]) rw [hz, sub_zero] have hfun : (fun s => if j < s + (j + 1) then q j * a (s + (j + 1) - j - 1) * x ^ (s + (j + 1)) else 0) = fun s => q j * x ^ j * (a s * x ^ (s + 1)) := by funext s rw [if_pos (by omega), show s + (j + 1) - j - 1 = s by omega, show s + (j + 1) = j + (s + 1) by ring, pow_add] ring rw [hfun] exact htargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 331–351 at
dfc7b5cc45a9↗cauchy_fin.hhaveHasSum (fun (i : ℕ) => q j * x ^ j * (a i * x ^ (i + (1 : ℕ)))) (q j * x ^ j * A)Leaves
HasSum (fun (b : ℕ) => if j < b then q j * a (b - j - (1 : ℕ)) * x ^ b else (0 : ℝ)) (q j * x ^ j * A), withh : HasSum (fun (i : ℕ) => q j * x ^ j * (a i * x ^ (i + (1 : ℕ)))) (q j * x ^ j * A).Lean, line 338
have h := hA.mul_left (q j * x ^ j)
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 338 at
dfc7b5cc45a9↗cauchy_fin.hzhave(∑ i ∈ Finset.range (j + (1 : ℕ)), if j < i then q j * a (i - j - (1 : ℕ)) * x ^ i else (0 : ℝ)) = (0 : ℝ)Leaves
HasSum (fun (n : ℕ) => if j < n + (j + (1 : ℕ)) then q j * a (n + (j + (1 : ℕ)) - j - (1 : ℕ)) * x ^ (n + (j + (1 : ℕ))) else (0 : ℝ)) (q j * x ^ j * A - ∑ i ∈ Finset.range (j + (1 : ℕ)), if j < i then q j * a (i - j - (1 : ℕ)) * x ^ i else (0 : ℝ)), withhz : (∑ i ∈ Finset.range (j + (1 : ℕ)), if j < i then q j * a (i - j - (1 : ℕ)) * x ^ i else (0 : ℝ)) = (0 : ℝ).Uses library
Finset.rangerange nis the set of natural numbers less thann. ,Finset.sum_eq_zero,if_neg.Lean, lines 340–343
have hz : ∑ i ∈ Finset.range (j + 1), (if j < i then q j * a (i - j - 1) * x ^ i else 0) = 0 := Finset.sum_eq_zero (fun i hi => by have := Finset.mem_range.mp hi rw [if_neg (by omega)])targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 340–343 at
dfc7b5cc45a9↗cauchy_fin.hz.thishavei < j + (1 : ℕ)Leaves
(if j < i then q j * a (i - j - (1 : ℕ)) * x ^ i else (0 : ℝ)) = (0 : ℝ), withthis : i < j + (1 : ℕ).Uses library
Finset.mem_range.Lean, line 342
have := Finset.mem_range.mp hi
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 342 at
dfc7b5cc45a9↗
cauchy_fin.hfunhave(fun (s : ℕ) => if j < s + (j + (1 : ℕ)) then q j * a (s + (j + (1 : ℕ)) - j - (1 : ℕ)) * x ^ (s + (j + (1 : ℕ))) else (0 : ℝ)) = fun (s : ℕ) => q j * x ^ j * (a s * x ^ (s + (1 : ℕ)))Leaves
HasSum (fun (n : ℕ) => if j < n + (j + (1 : ℕ)) then q j * a (n + (j + (1 : ℕ)) - j - (1 : ℕ)) * x ^ (n + (j + (1 : ℕ))) else (0 : ℝ)) (q j * x ^ j * A), withhfun : (fun (s : ℕ) => if j < s + (j + (1 : ℕ)) then q j * a (s + (j + (1 : ℕ)) - j - (1 : ℕ)) * x ^ (s + (j + (1 : ℕ))) else (0 : ℝ)) = fun (s : ℕ) => q j * x ^ j * (a s * x ^ (s + (1 : ℕ))).Uses library
if_pos,pow_add.Lean, lines 345–349
have hfun : (fun s => if j < s + (j + 1) then q j * a (s + (j + 1) - j - 1) * x ^ (s + (j + 1)) else 0) = fun s => q j * x ^ j * (a s * x ^ (s + 1)) := by funext s rw [if_pos (by omega), show s + (j + 1) - j - 1 = s by omega, show s + (j + 1) = j + (s + 1) by ring, pow_add] ringtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 345–349 at
dfc7b5cc45a9↗
h4_serieshave∀ (Qc : ℕ → ℕ → ℚ), (Qc = fun (n k : ℕ) => ((-1 : ℚ) ^ k * (2 : ℚ) ^ (k * (k - (1 : ℕ)) / (2 : ℕ)) * ∏ i ∈ Finset.range k, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * ∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - k - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) → ∀ (Qx : ℕ → ℚ), (Qx = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), Qc n k * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k) → ∀ (Aq : ℕ → ℚ), (Aq = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), (∑ j ∈ Finset.range (k + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (k - j) - (1 : ℚ))) * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k + Qx n * ∑ j ∈ Finset.range n, (3 : ℚ) / ((2 : ℚ) ^ (j + (1 : ℕ)) - (3 : ℚ))) → ∀ (n : ℕ), (1 : ℕ) ≤ n → HasSum (fun (K : ℕ) => if (2 : ℕ) * n < K then ((∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i)) * ((3 : ℝ) / (2 : ℝ) ^ n) ^ K else (0 : ℝ)) ((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ))Leaves
∀ (Qc : ℕ → ℕ → ℚ), (Qc = fun (n k : ℕ) => ((-1 : ℚ) ^ k * (2 : ℚ) ^ (k * (k - (1 : ℕ)) / (2 : ℕ)) * ∏ i ∈ Finset.range k, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * ∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - k - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) → ∀ (Qx : ℕ → ℚ), (Qx = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), Qc n k * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k) → ∀ (Aq : ℕ → ℚ), (Aq = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), (∑ j ∈ Finset.range (k + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (k - j) - (1 : ℚ))) * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k + Qx n * ∑ j ∈ Finset.range n, (3 : ℚ) / ((2 : ℚ) ^ (j + (1 : ℕ)) - (3 : ℚ))) → ∀ (n : ℕ), (0 : ℝ) < (↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ) ∧ ((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ)) ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)), withh4_series : ∀ (Qc : ℕ → ℕ → ℚ), (Qc = fun (n k : ℕ) => ((-1 : ℚ) ^ k * (2 : ℚ) ^ (k * (k - (1 : ℕ)) / (2 : ℕ)) * ∏ i ∈ Finset.range k, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * ∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - k - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) → ∀ (Qx : ℕ → ℚ), (Qx = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), Qc n k * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k) → ∀ (Aq : ℕ → ℚ), (Aq = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), (∑ j ∈ Finset.range (k + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (k - j) - (1 : ℚ))) * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k + Qx n * ∑ j ∈ Finset.range n, (3 : ℚ) / ((2 : ℚ) ^ (j + (1 : ℕ)) - (3 : ℚ))) → ∀ (n : ℕ), (1 : ℕ) ≤ n → HasSum (fun (K : ℕ) => if (2 : ℕ) * n < K then ((∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i)) * ((3 : ℝ) / (2 : ℝ) ^ n) ^ K else (0 : ℝ)) ((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ)).Uses library
Finset.rangerange nis the set of natural numbers less thann. ,HasSumHasSum f a Lmeans that the (potentially infinite) sum of thef bforb : βconverges toaalong the SummationFilterL. ,Finset.IocThe finset $(a, b]$ of elementsxsuch thata < xandx ≤ b. .Lean, lines 353–472
have h4_series : ∀ (Qc : ℕ → ℕ → ℚ) (hQc : (Qc = fun (n k : ℕ) => ((-1 : ℚ) ^ k * (2 : ℚ) ^ (k * (k - (1 : ℕ)) / (2 : ℕ)) * ∏ i ∈ Finset.range k, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * ∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - k - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ)))) (Qx : ℕ → ℚ) (hQx : (Qx = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), Qc n k * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k)) (Aq : ℕ → ℚ) (hAq : (Aq = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), (∑ j ∈ Finset.range (k + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (k - j) - (1 : ℚ))) * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k + Qx n * ∑ j ∈ Finset.range n, (3 : ℚ) / ((2 : ℚ) ^ (j + (1 : ℕ)) - (3 : ℚ)))) (n : ℕ) (hn : 1 ≤ n), HasSum (fun K : ℕ => if 2 * n < K then ((∏ L ∈ Finset.Ioc n (2 * n), ((2 : ℝ) ^ K - 2 ^ L)) / ∏ i ∈ Finset.range (n + 1), ((2 : ℝ) ^ K - 2 ^ i)) * ((3 : ℝ) / 2 ^ n) ^ K else 0) ((Qx n : ℝ) * (3 * ∑' m : ℕ, (1 : ℝ) / (2 ^ (m + 3) - 3)) - (Aq n : ℝ)) := by intro Qc hQc Qx hQx Aq hAq n hn set x : ℝ := (3 : ℝ) / 2 ^ n with hxdef have hx0 : 0 ≤ x := by positivity have hx2 : x / 2 < 1 := by have : (2 : ℝ) ≤ 2 ^ n := by calc (2 : ℝ) = 2 ^ 1 := by norm_num _ ≤ 2 ^ n := pow_le_pow_right₀ (by norm_num) hn rw [hxdef, div_div, div_lt_one (by positivity)]; linarith set a : ℕ → ℝ := fun s => (1 : ℝ) / (2 ^ (s + 1) - 1) with hadef have hapos : ∀ s, 0 < (2 : ℝ) ^ (s + 1) - 1 := fun s => by have : (1 : ℝ) < 2 ^ (s + 1) := one_lt_pow₀ (by norm_num) (by omega) linarith have hAsum : Summable (fun s => a s * x ^ (s + 1)) := by refine Summable.of_nonneg_of_le (fun s => ?_) (fun s => ?_) ((summable_geometric_of_lt_one (by positivity) hx2).mul_left x) · simp only [hadef]; exact mul_nonneg (div_nonneg (by norm_num) (le_of_lt (hapos s))) (by positivity) · simp only [hadef] have h1 : (2 : ℝ) ^ s ≤ 2 ^ (s + 1) - 1 := by have : (1 : ℝ) ≤ 2 ^ s := one_le_pow₀ (by norm_num) rw [pow_succ]; linarith have hxs : 0 ≤ x ^ (s + 1) := by positivity calc 1 / (2 ^ (s + 1) - 1) * x ^ (s + 1) ≤ 1 / 2 ^ s * x ^ (s + 1) := by gcongr _ = x * (x / 2) ^ s := by have e : ∀ y : ℝ, 1 / 2 ^ s * y ^ (s + 1) = y * (y / 2) ^ s := by intro y; rw [div_pow, pow_succ]; field_simp exact e x set A := ∑' s, a s * x ^ (s + 1) with hAdef have hA : HasSum (fun s => a s * x ^ (s + 1)) A := hAsum.hasSum -- 3T = c + A have h3T : 3 * ∑' m : ℕ, (1 : ℝ) / (2 ^ (m + 3) - 3) = ∑ j ∈ Finset.range n, (3 : ℝ) / (2 ^ (j + 1) - 3) + A := by rw [split3T n, tail3 n hn, hAdef] congr 1 refine tsum_congr (fun s => ?_) simp only [hadef, hxdef] ring have hQxR : (Qx n : ℝ) = ∑ j ∈ Finset.range (n + 1), (Qc n j : ℝ) * x ^ j := by rw [hQx]; push_cast; rfl have hAqR : (Aq n : ℝ) = ∑ k ∈ Finset.range (n + 1), (∑ j ∈ Finset.range (k + 1), (Qc n j : ℝ) / ((2 : ℝ) ^ (k - j) - 1)) * x ^ k + (Qx n : ℝ) * ∑ j ∈ Finset.range n, (3 : ℝ) / (2 ^ (j + 1) - 3) := by rw [hAq]; push_cast; rfl have hC := cauchy_fin n (fun j => (Qc n j : ℝ)) a x A hA set P : ℝ := ∑ k ∈ Finset.range (n + 1), (∑ j ∈ Finset.range (k + 1), (Qc n j : ℝ) / ((2 : ℝ) ^ (k - j) - 1)) * x ^ k with hPdef have hP : HasSum (fun K => if K < n + 1 then (∑ j ∈ Finset.range (K + 1), (Qc n j : ℝ) / ((2 : ℝ) ^ (K - j) - 1)) * x ^ K else 0) P := by have h0 : HasSum (fun K => if K < n + 1 then (∑ j ∈ Finset.range (K + 1), (Qc n j : ℝ) / ((2 : ℝ) ^ (K - j) - 1)) * x ^ K else 0) (∑ K ∈ Finset.range (n + 1), if K < n + 1 then (∑ j ∈ Finset.range (K + 1), (Qc n j : ℝ) / ((2 : ℝ) ^ (K - j) - 1)) * x ^ K else 0) := hasSum_sum_of_ne_finset_zero (fun b hb => by rw [if_neg (by simpa using hb)]) have h1 : (∑ K ∈ Finset.range (n + 1), if K < n + 1 then (∑ j ∈ Finset.range (K + 1), (Qc n j : ℝ) / ((2 : ℝ) ^ (K - j) - 1)) * x ^ K else 0) = P := by rw [hPdef] exact Finset.sum_congr rfl (fun K hK => by rw [if_pos (Finset.mem_range.mp hK)]) rw [h1] at h0 exact h0 have hD := hC.sub hP have hval : (Qx n : ℝ) * (3 * ∑' m : ℕ, (1 : ℝ) / (2 ^ (m + 3) - 3)) - (Aq n : ℝ) = (∑ j ∈ Finset.range (n + 1), (Qc n j : ℝ) * x ^ j) * A - P := by rw [h3T, hAqR, hQxR]; ring rw [hval] have hid1 : ∀ j ≤ n, Qc n j * 2 ^ j * ∏ i ∈ (Finset.range (n + 1)).erase j, ((2 : ℚ) ^ j - 2 ^ i) = ∏ L ∈ Finset.Ioc n (2 * n), ((2 : ℚ) ^ j - 2 ^ L) := fun j hj => by subst hQc; exact id1_full n j hj have hfun : (fun K : ℕ => if 2 * n < K then ((∏ L ∈ Finset.Ioc n (2 * n), ((2 : ℝ) ^ K - 2 ^ L)) / ∏ i ∈ Finset.range (n + 1), ((2 : ℝ) ^ K - 2 ^ i)) * ((3 : ℝ) / 2 ^ n) ^ K else 0) = fun K => (∑ j ∈ Finset.range (n + 1), if j < K then (Qc n j : ℝ) * a (K - j - 1) * x ^ K else 0) - (if K < n + 1 then (∑ j ∈ Finset.range (K + 1), (Qc n j : ℝ) / ((2 : ℝ) ^ (K - j) - 1)) * x ^ K else 0) := by funext K symm by_cases hK : K < n + 1 · rw [if_pos hK, if_neg (by omega)] rw [Finset.sum_range_succ (fun j => (Qc n j : ℝ) / ((2 : ℝ) ^ (K - j) - 1)) K, Nat.sub_self, pow_zero, sub_self, div_zero, add_zero] have hsplit : ∑ j ∈ Finset.range (n + 1), (if j < K then (Qc n j : ℝ) * a (K - j - 1) * x ^ K else 0) = ∑ j ∈ Finset.range K, (Qc n j : ℝ) / ((2 : ℝ) ^ (K - j) - 1) * x ^ K := by rw [← Finset.sum_range_add_sum_Ico _ (show K ≤ n + 1 by omega)] rw [Finset.sum_eq_zero (s := Finset.Ico K (n + 1)) (fun j hj => by rw [if_neg (by have := Finset.mem_Ico.mp hj; omega)]), add_zero] refine Finset.sum_congr rfl (fun j hj => ?_) have hjK := Finset.mem_range.mp hj rw [if_pos hjK] simp only [hadef] rw [show K - j - 1 + 1 = K - j by omega] ring rw [hsplit, Finset.sum_mul, sub_self] · rw [if_neg hK, sub_zero] have hS : ∑ j ∈ Finset.range (n + 1), (if j < K then (Qc n j : ℝ) * a (K - j - 1) * x ^ K else 0) = ((∑ j ∈ Finset.range (n + 1), Qc n j / ((2 : ℚ) ^ (K - j) - 1) : ℚ) : ℝ) * x ^ K := by push_cast rw [Finset.sum_mul] refine Finset.sum_congr rfl (fun j hj => ?_) have hjK : j < K := by have := Finset.mem_range.mp hj; omega rw [if_pos hjK] simp only [hadef] rw [show K - j - 1 + 1 = K - j by omega] ring rw [hS, tail_coeff n K (by omega) Qc hid1] push_cast by_cases h2 : 2 * n < K · rw [if_pos h2] · rw [if_neg h2] rw [Finset.prod_eq_zero (i := K) (Finset.mem_Ioc.mpr ⟨by omega, by omega⟩) (sub_self _)] simp rw [hfun] exact hDtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 353–472 at
dfc7b5cc45a9↗h4_series.hx0have(0 : ℝ) ≤ xroutine: positivityLeaves
HasSum (fun (K : ℕ) => if (2 : ℕ) * n < K then ((∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i)) * x ^ K else (0 : ℝ)) ((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ)), withhx0 : (0 : ℝ) ≤ x.Lean, line 368
have hx0 : 0 ≤ x := by positivity
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 368 at
dfc7b5cc45a9↗h4_series.hx2havex / (2 : ℝ) < (1 : ℝ)Leaves
HasSum (fun (K : ℕ) => if (2 : ℕ) * n < K then ((∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i)) * x ^ K else (0 : ℝ)) ((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ)), withhx2 : x / (2 : ℝ) < (1 : ℝ).Uses library
div_div,div_lt_one.Lean, lines 369–373
have hx2 : x / 2 < 1 := by have : (2 : ℝ) ≤ 2 ^ n := by calc (2 : ℝ) = 2 ^ 1 := by norm_num _ ≤ 2 ^ n := pow_le_pow_right₀ (by norm_num) hn rw [hxdef, div_div, div_lt_one (by positivity)]; linarithtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 369–373 at
dfc7b5cc45a9↗h4_series.hx2.thishave(2 : ℝ) ≤ (2 : ℝ) ^ nLeaves
x / (2 : ℝ) < (1 : ℝ), withthis : (2 : ℝ) ≤ (2 : ℝ) ^ n.Lean, lines 370–372
have : (2 : ℝ) ≤ 2 ^ n := by calc (2 : ℝ) = 2 ^ 1 := by norm_num _ ≤ 2 ^ n := pow_le_pow_right₀ (by norm_num) hntargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 370–372 at
dfc7b5cc45a9↗h4_series.hx2.this.s1calc(2 : ℝ) = (2 : ℝ) ^ (1 : ℕ)routine: norm_numCloses the goal.
Lean, line 371
calc (2 : ℝ) = 2 ^ 1 := by norm_num
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 371 at
dfc7b5cc45a9↗h4_series.hx2.this.s2calc(2 : ℝ) ^ (1 : ℕ) ≤ (2 : ℝ) ^ nCloses the goal.
Uses library
pow_le_pow_right₀.Lean, line 372
_ ≤ 2 ^ n := pow_le_pow_right₀ (by norm_num) hn
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 372 at
dfc7b5cc45a9↗
h4_series.haposhave∀ (s : ℕ), (0 : ℝ) < (2 : ℝ) ^ (s + (1 : ℕ)) - (1 : ℝ)Leaves
HasSum (fun (K : ℕ) => if (2 : ℕ) * n < K then ((∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i)) * x ^ K else (0 : ℝ)) ((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ)), withhapos : ∀ (s : ℕ), (0 : ℝ) < (2 : ℝ) ^ (s + (1 : ℕ)) - (1 : ℝ).Lean, lines 375–377
have hapos : ∀ s, 0 < (2 : ℝ) ^ (s + 1) - 1 := fun s => by have : (1 : ℝ) < 2 ^ (s + 1) := one_lt_pow₀ (by norm_num) (by omega) linarithtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 375–377 at
dfc7b5cc45a9↗h4_series.hapos.thishave(1 : ℝ) < (2 : ℝ) ^ (s + (1 : ℕ))Leaves
(0 : ℝ) < (2 : ℝ) ^ (s + (1 : ℕ)) - (1 : ℝ), withthis : (1 : ℝ) < (2 : ℝ) ^ (s + (1 : ℕ)).Uses library
one_lt_pow₀.Lean, line 376
have : (1 : ℝ) < 2 ^ (s + 1) := one_lt_pow₀ (by norm_num) (by omega)
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 376 at
dfc7b5cc45a9↗
h4_series.hAsumhaveSummable fun (s : ℕ) => a s * x ^ (s + (1 : ℕ))Leaves
HasSum (fun (K : ℕ) => if (2 : ℕ) * n < K then ((∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i)) * x ^ K else (0 : ℝ)) ((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ)), withhAsum : Summable fun (s : ℕ) => a s * x ^ (s + (1 : ℕ)).Uses library
SummableSummable fmeans thatfhas some (infinite) sum with respect toL. ,Summable.of_nonneg_of_leComparison test of convergence of series of non-negative real numbers. ,summable_geometric_of_lt_one.Lean, lines 378–391
have hAsum : Summable (fun s => a s * x ^ (s + 1)) := by refine Summable.of_nonneg_of_le (fun s => ?_) (fun s => ?_) ((summable_geometric_of_lt_one (by positivity) hx2).mul_left x) · simp only [hadef]; exact mul_nonneg (div_nonneg (by norm_num) (le_of_lt (hapos s))) (by positivity) · simp only [hadef] have h1 : (2 : ℝ) ^ s ≤ 2 ^ (s + 1) - 1 := by have : (1 : ℝ) ≤ 2 ^ s := one_le_pow₀ (by norm_num) rw [pow_succ]; linarith have hxs : 0 ≤ x ^ (s + 1) := by positivity calc 1 / (2 ^ (s + 1) - 1) * x ^ (s + 1) ≤ 1 / 2 ^ s * x ^ (s + 1) := by gcongr _ = x * (x / 2) ^ s := by have e : ∀ y : ℝ, 1 / 2 ^ s * y ^ (s + 1) = y * (y / 2) ^ s := by intro y; rw [div_pow, pow_succ]; field_simp exact e xtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 378–391 at
dfc7b5cc45a9↗h4_series.hAsum.s1caseLeaves
(0 : ℝ) ≤ a s * x ^ (s + (1 : ℕ)).Uses library
mul_nonnegAlias ofLeft.mul_nonneg. ,div_nonneg,le_of_lt.Lean, line 380
· simp only [hadef]; exact mul_nonneg (div_nonneg (by norm_num) (le_of_lt (hapos s))) (by positivity)
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 380 at
dfc7b5cc45a9↗h4_series.hAsum.s2caseLeaves
a s * x ^ (s + (1 : ℕ)) ≤ x * (x / (2 : ℝ)) ^ s.Lean, lines 381–391
· simp only [hadef] have h1 : (2 : ℝ) ^ s ≤ 2 ^ (s + 1) - 1 := by have : (1 : ℝ) ≤ 2 ^ s := one_le_pow₀ (by norm_num) rw [pow_succ]; linarith have hxs : 0 ≤ x ^ (s + 1) := by positivity calc 1 / (2 ^ (s + 1) - 1) * x ^ (s + 1) ≤ 1 / 2 ^ s * x ^ (s + 1) := by gcongr _ = x * (x / 2) ^ s := by have e : ∀ y : ℝ, 1 / 2 ^ s * y ^ (s + 1) = y * (y / 2) ^ s := by intro y; rw [div_pow, pow_succ]; field_simp exact e xtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 381–391 at
dfc7b5cc45a9↗h4_series.hAsum.s2.h1have(2 : ℝ) ^ s ≤ (2 : ℝ) ^ (s + (1 : ℕ)) - (1 : ℝ)Leaves
(1 : ℝ) / ((2 : ℝ) ^ (s + (1 : ℕ)) - (1 : ℝ)) * x ^ (s + (1 : ℕ)) ≤ x * (x / (2 : ℝ)) ^ s, withh1 : (2 : ℝ) ^ s ≤ (2 : ℝ) ^ (s + (1 : ℕ)) - (1 : ℝ).Uses library
pow_succ.Lean, lines 382–384
have h1 : (2 : ℝ) ^ s ≤ 2 ^ (s + 1) - 1 := by have : (1 : ℝ) ≤ 2 ^ s := one_le_pow₀ (by norm_num) rw [pow_succ]; linarithtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 382–384 at
dfc7b5cc45a9↗h4_series.hAsum.s2.h1.thishave(1 : ℝ) ≤ (2 : ℝ) ^ sLeaves
(2 : ℝ) ^ s ≤ (2 : ℝ) ^ (s + (1 : ℕ)) - (1 : ℝ), withthis : (1 : ℝ) ≤ (2 : ℝ) ^ s.Uses library
one_le_pow₀.Lean, line 383
have : (1 : ℝ) ≤ 2 ^ s := one_le_pow₀ (by norm_num)
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 383 at
dfc7b5cc45a9↗
h4_series.hAsum.s2.hxshave(0 : ℝ) ≤ x ^ (s + (1 : ℕ))routine: positivityLeaves
(1 : ℝ) / ((2 : ℝ) ^ (s + (1 : ℕ)) - (1 : ℝ)) * x ^ (s + (1 : ℕ)) ≤ x * (x / (2 : ℝ)) ^ s, withhxs : (0 : ℝ) ≤ x ^ (s + (1 : ℕ)).Lean, line 385
have hxs : 0 ≤ x ^ (s + 1) := by positivity
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 385 at
dfc7b5cc45a9↗h4_series.hAsum.s2.s3calc(1 : ℝ) / ((2 : ℝ) ^ (s + (1 : ℕ)) - (1 : ℝ)) * x ^ (s + (1 : ℕ)) ≤ (1 : ℝ) / (2 : ℝ) ^ s * x ^ (s + (1 : ℕ))Closes the goal.
Lean, lines 386–387
calc 1 / (2 ^ (s + 1) - 1) * x ^ (s + 1) ≤ 1 / 2 ^ s * x ^ (s + 1) := by gcongrtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 386–387 at
dfc7b5cc45a9↗h4_series.hAsum.s2.s4calcCloses the goal.
Lean, lines 388–391
_ = x * (x / 2) ^ s := by have e : ∀ y : ℝ, 1 / 2 ^ s * y ^ (s + 1) = y * (y / 2) ^ s := by intro y; rw [div_pow, pow_succ]; field_simp exact e xtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 388–391 at
dfc7b5cc45a9↗h4_series.hAsum.s2.s4.ehave∀ (y : ℝ), (1 : ℝ) / (2 : ℝ) ^ s * y ^ (s + (1 : ℕ)) = y * (y / (2 : ℝ)) ^ sLeaves
(1 : ℝ) / (2 : ℝ) ^ s * x ^ (s + (1 : ℕ)) = x * (x / (2 : ℝ)) ^ s, withe : ∀ (y : ℝ), (1 : ℝ) / (2 : ℝ) ^ s * y ^ (s + (1 : ℕ)) = y * (y / (2 : ℝ)) ^ s.Uses library
div_pow,pow_succ.Lean, lines 389–390
have e : ∀ y : ℝ, 1 / 2 ^ s * y ^ (s + 1) = y * (y / 2) ^ s := by intro y; rw [div_pow, pow_succ]; field_simptargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 389–390 at
dfc7b5cc45a9↗
h4_series.hAhaveHasSum (fun (s : ℕ) => a s * x ^ (s + (1 : ℕ))) ALeaves
HasSum (fun (K : ℕ) => if (2 : ℕ) * n < K then ((∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i)) * x ^ K else (0 : ℝ)) ((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ)), withhA : HasSum (fun (s : ℕ) => a s * x ^ (s + (1 : ℕ))) A.Uses library
HasSumHasSum f a Lmeans that the (potentially infinite) sum of thef bforb : βconverges toaalong the SummationFilterL. .Lean, line 393
have hA : HasSum (fun s => a s * x ^ (s + 1)) A := hAsum.hasSum
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 393 at
dfc7b5cc45a9↗h4_series.h3Thave(3 : ℝ) * ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)) = ∑ j ∈ Finset.range n, (3 : ℝ) / ((2 : ℝ) ^ (j + (1 : ℕ)) - (3 : ℝ)) + ALeaves
HasSum (fun (K : ℕ) => if (2 : ℕ) * n < K then ((∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i)) * x ^ K else (0 : ℝ)) ((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ)), withh3T : (3 : ℝ) * ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)) = ∑ j ∈ Finset.range n, (3 : ℝ) / ((2 : ℝ) ^ (j + (1 : ℕ)) - (3 : ℝ)) + A.Uses library
Finset.rangerange nis the set of natural numbers less thann. ,tsum_congr.Lean, lines 395–400
have h3T : 3 * ∑' m : ℕ, (1 : ℝ) / (2 ^ (m + 3) - 3) = ∑ j ∈ Finset.range n, (3 : ℝ) / (2 ^ (j + 1) - 3) + A := by rw [split3T n, tail3 n hn, hAdef] congr 1 refine tsum_congr (fun s => ?_) simp only [hadef, hxdef] ringtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 395–400 at
dfc7b5cc45a9↗h4_series.hQxRhave(↑(Qx n) : ℝ) = ∑ j ∈ Finset.range (n + (1 : ℕ)), (↑(Qc n j) : ℝ) * x ^ jLeaves
HasSum (fun (K : ℕ) => if (2 : ℕ) * n < K then ((∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i)) * x ^ K else (0 : ℝ)) ((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ)), withhQxR : (↑(Qx n) : ℝ) = ∑ j ∈ Finset.range (n + (1 : ℕ)), (↑(Qc n j) : ℝ) * x ^ j.Uses library
Finset.rangerange nis the set of natural numbers less thann. .Lean, lines 401–402
have hQxR : (Qx n : ℝ) = ∑ j ∈ Finset.range (n + 1), (Qc n j : ℝ) * x ^ j := by rw [hQx]; push_cast; rfltargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 401–402 at
dfc7b5cc45a9↗h4_series.hAqRhave(↑(Aq n) : ℝ) = ∑ k ∈ Finset.range (n + (1 : ℕ)), (∑ j ∈ Finset.range (k + (1 : ℕ)), (↑(Qc n j) : ℝ) / ((2 : ℝ) ^ (k - j) - (1 : ℝ))) * x ^ k + (↑(Qx n) : ℝ) * ∑ j ∈ Finset.range n, (3 : ℝ) / ((2 : ℝ) ^ (j + (1 : ℕ)) - (3 : ℝ))Leaves
HasSum (fun (K : ℕ) => if (2 : ℕ) * n < K then ((∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i)) * x ^ K else (0 : ℝ)) ((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ)), withhAqR : (↑(Aq n) : ℝ) = ∑ k ∈ Finset.range (n + (1 : ℕ)), (∑ j ∈ Finset.range (k + (1 : ℕ)), (↑(Qc n j) : ℝ) / ((2 : ℝ) ^ (k - j) - (1 : ℝ))) * x ^ k + (↑(Qx n) : ℝ) * ∑ j ∈ Finset.range n, (3 : ℝ) / ((2 : ℝ) ^ (j + (1 : ℕ)) - (3 : ℝ)).Uses library
Finset.rangerange nis the set of natural numbers less thann. .Lean, lines 403–406
have hAqR : (Aq n : ℝ) = ∑ k ∈ Finset.range (n + 1), (∑ j ∈ Finset.range (k + 1), (Qc n j : ℝ) / ((2 : ℝ) ^ (k - j) - 1)) * x ^ k + (Qx n : ℝ) * ∑ j ∈ Finset.range n, (3 : ℝ) / (2 ^ (j + 1) - 3) := by rw [hAq]; push_cast; rfltargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 403–406 at
dfc7b5cc45a9↗h4_series.hChaveHasSum (fun (K : ℕ) => ∑ j ∈ Finset.range (n + (1 : ℕ)), if j < K then (↑(Qc n j) : ℝ) * a (K - j - (1 : ℕ)) * x ^ K else (0 : ℝ)) ((∑ j ∈ Finset.range (n + (1 : ℕ)), (↑(Qc n j) : ℝ) * x ^ j) * A)Leaves
HasSum (fun (K : ℕ) => if (2 : ℕ) * n < K then ((∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i)) * x ^ K else (0 : ℝ)) ((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ)), withhC : HasSum (fun (K : ℕ) => ∑ j ∈ Finset.range (n + (1 : ℕ)), if j < K then (↑(Qc n j) : ℝ) * a (K - j - (1 : ℕ)) * x ^ K else (0 : ℝ)) ((∑ j ∈ Finset.range (n + (1 : ℕ)), (↑(Qc n j) : ℝ) * x ^ j) * A).Lean, line 407
have hC := cauchy_fin n (fun j => (Qc n j : ℝ)) a x A hA
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 407 at
dfc7b5cc45a9↗h4_series.hPhaveHasSum (fun (K : ℕ) => if K < n + (1 : ℕ) then (∑ j ∈ Finset.range (K + (1 : ℕ)), (↑(Qc n j) : ℝ) / ((2 : ℝ) ^ (K - j) - (1 : ℝ))) * x ^ K else (0 : ℝ)) PLeaves
HasSum (fun (K : ℕ) => if (2 : ℕ) * n < K then ((∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i)) * x ^ K else (0 : ℝ)) ((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ)), withhP : HasSum (fun (K : ℕ) => if K < n + (1 : ℕ) then (∑ j ∈ Finset.range (K + (1 : ℕ)), (↑(Qc n j) : ℝ) / ((2 : ℝ) ^ (K - j) - (1 : ℝ))) * x ^ K else (0 : ℝ)) P.Uses library
HasSumHasSum f a Lmeans that the (potentially infinite) sum of thef bforb : βconverges toaalong the SummationFilterL. ,Finset.rangerange nis the set of natural numbers less thann. .Lean, lines 410–422
have hP : HasSum (fun K => if K < n + 1 then (∑ j ∈ Finset.range (K + 1), (Qc n j : ℝ) / ((2 : ℝ) ^ (K - j) - 1)) * x ^ K else 0) P := by have h0 : HasSum (fun K => if K < n + 1 then (∑ j ∈ Finset.range (K + 1), (Qc n j : ℝ) / ((2 : ℝ) ^ (K - j) - 1)) * x ^ K else 0) (∑ K ∈ Finset.range (n + 1), if K < n + 1 then (∑ j ∈ Finset.range (K + 1), (Qc n j : ℝ) / ((2 : ℝ) ^ (K - j) - 1)) * x ^ K else 0) := hasSum_sum_of_ne_finset_zero (fun b hb => by rw [if_neg (by simpa using hb)]) have h1 : (∑ K ∈ Finset.range (n + 1), if K < n + 1 then (∑ j ∈ Finset.range (K + 1), (Qc n j : ℝ) / ((2 : ℝ) ^ (K - j) - 1)) * x ^ K else 0) = P := by rw [hPdef] exact Finset.sum_congr rfl (fun K hK => by rw [if_pos (Finset.mem_range.mp hK)]) rw [h1] at h0 exact h0targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 410–422 at
dfc7b5cc45a9↗h4_series.hP.h0haveHasSum (fun (K : ℕ) => if K < n + (1 : ℕ) then (∑ j ∈ Finset.range (K + (1 : ℕ)), (↑(Qc n j) : ℝ) / ((2 : ℝ) ^ (K - j) - (1 : ℝ))) * x ^ K else (0 : ℝ)) (∑ K ∈ Finset.range (n + (1 : ℕ)), if K < n + (1 : ℕ) then (∑ j ∈ Finset.range (K + (1 : ℕ)), (↑(Qc n j) : ℝ) / ((2 : ℝ) ^ (K - j) - (1 : ℝ))) * x ^ K else (0 : ℝ))Leaves
HasSum (fun (K : ℕ) => if K < n + (1 : ℕ) then (∑ j ∈ Finset.range (K + (1 : ℕ)), (↑(Qc n j) : ℝ) / ((2 : ℝ) ^ (K - j) - (1 : ℝ))) * x ^ K else (0 : ℝ)) P, withh0 : HasSum (fun (K : ℕ) => if K < n + (1 : ℕ) then (∑ j ∈ Finset.range (K + (1 : ℕ)), (↑(Qc n j) : ℝ) / ((2 : ℝ) ^ (K - j) - (1 : ℝ))) * x ^ K else (0 : ℝ)) (∑ K ∈ Finset.range (n + (1 : ℕ)), if K < n + (1 : ℕ) then (∑ j ∈ Finset.range (K + (1 : ℕ)), (↑(Qc n j) : ℝ) / ((2 : ℝ) ^ (K - j) - (1 : ℝ))) * x ^ K else (0 : ℝ)).Uses library
HasSumHasSum f a Lmeans that the (potentially infinite) sum of thef bforb : βconverges toaalong the SummationFilterL. ,Finset.rangerange nis the set of natural numbers less thann. ,hasSum_sum_of_ne_finset_zeroIf a functionfvanishes outside of a finite sets, then itHasSum∑ b ∈ s, f b. ,if_neg.Lean, lines 412–416
have h0 : HasSum (fun K => if K < n + 1 then (∑ j ∈ Finset.range (K + 1), (Qc n j : ℝ) / ((2 : ℝ) ^ (K - j) - 1)) * x ^ K else 0) (∑ K ∈ Finset.range (n + 1), if K < n + 1 then (∑ j ∈ Finset.range (K + 1), (Qc n j : ℝ) / ((2 : ℝ) ^ (K - j) - 1)) * x ^ K else 0) := hasSum_sum_of_ne_finset_zero (fun b hb => by rw [if_neg (by simpa using hb)])targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 412–416 at
dfc7b5cc45a9↗h4_series.hP.h1have(∑ K ∈ Finset.range (n + (1 : ℕ)), if K < n + (1 : ℕ) then (∑ j ∈ Finset.range (K + (1 : ℕ)), (↑(Qc n j) : ℝ) / ((2 : ℝ) ^ (K - j) - (1 : ℝ))) * x ^ K else (0 : ℝ)) = PLeaves
HasSum (fun (K : ℕ) => if K < n + (1 : ℕ) then (∑ j ∈ Finset.range (K + (1 : ℕ)), (↑(Qc n j) : ℝ) / ((2 : ℝ) ^ (K - j) - (1 : ℝ))) * x ^ K else (0 : ℝ)) P, withh1 : (∑ K ∈ Finset.range (n + (1 : ℕ)), if K < n + (1 : ℕ) then (∑ j ∈ Finset.range (K + (1 : ℕ)), (↑(Qc n j) : ℝ) / ((2 : ℝ) ^ (K - j) - (1 : ℝ))) * x ^ K else (0 : ℝ)) = P.Uses library
Finset.rangerange nis the set of natural numbers less thann. ,Finset.sum_congr,rflrfl : a = ais the unique constructor of the equality type. ,if_pos,Finset.mem_range.Lean, lines 417–420
have h1 : (∑ K ∈ Finset.range (n + 1), if K < n + 1 then (∑ j ∈ Finset.range (K + 1), (Qc n j : ℝ) / ((2 : ℝ) ^ (K - j) - 1)) * x ^ K else 0) = P := by rw [hPdef] exact Finset.sum_congr rfl (fun K hK => by rw [if_pos (Finset.mem_range.mp hK)])targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 417–420 at
dfc7b5cc45a9↗
h4_series.hDhaveHasSum (fun (b : ℕ) => (∑ j ∈ Finset.range (n + (1 : ℕ)), if j < b then (↑(Qc n j) : ℝ) * a (b - j - (1 : ℕ)) * x ^ b else (0 : ℝ)) - if b < n + (1 : ℕ) then (∑ j ∈ Finset.range (b + (1 : ℕ)), (↑(Qc n j) : ℝ) / ((2 : ℝ) ^ (b - j) - (1 : ℝ))) * x ^ b else (0 : ℝ)) ((∑ j ∈ Finset.range (n + (1 : ℕ)), (↑(Qc n j) : ℝ) * x ^ j) * A - P)Leaves
HasSum (fun (K : ℕ) => if (2 : ℕ) * n < K then ((∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i)) * x ^ K else (0 : ℝ)) ((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ)), withhD : HasSum (fun (b : ℕ) => (∑ j ∈ Finset.range (n + (1 : ℕ)), if j < b then (↑(Qc n j) : ℝ) * a (b - j - (1 : ℕ)) * x ^ b else (0 : ℝ)) - if b < n + (1 : ℕ) then (∑ j ∈ Finset.range (b + (1 : ℕ)), (↑(Qc n j) : ℝ) / ((2 : ℝ) ^ (b - j) - (1 : ℝ))) * x ^ b else (0 : ℝ)) ((∑ j ∈ Finset.range (n + (1 : ℕ)), (↑(Qc n j) : ℝ) * x ^ j) * A - P).Lean, line 423
have hD := hC.sub hP
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 423 at
dfc7b5cc45a9↗h4_series.hvalhave(↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ) = (∑ j ∈ Finset.range (n + (1 : ℕ)), (↑(Qc n j) : ℝ) * x ^ j) * A - PLeaves
HasSum (fun (K : ℕ) => if (2 : ℕ) * n < K then ((∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i)) * x ^ K else (0 : ℝ)) ((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ)), withhval : (↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ) = (∑ j ∈ Finset.range (n + (1 : ℕ)), (↑(Qc n j) : ℝ) * x ^ j) * A - P.Uses library
Finset.rangerange nis the set of natural numbers less thann. .Lean, lines 424–426
have hval : (Qx n : ℝ) * (3 * ∑' m : ℕ, (1 : ℝ) / (2 ^ (m + 3) - 3)) - (Aq n : ℝ) = (∑ j ∈ Finset.range (n + 1), (Qc n j : ℝ) * x ^ j) * A - P := by rw [h3T, hAqR, hQxR]; ringtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 424–426 at
dfc7b5cc45a9↗h4_series.hid1have∀ j ≤ n, Qc n j * (2 : ℚ) ^ j * ∏ i ∈ (Finset.range (n + (1 : ℕ))).erase j, ((2 : ℚ) ^ j - (2 : ℚ) ^ i) = ∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℚ) ^ j - (2 : ℚ) ^ L)Leaves
HasSum (fun (K : ℕ) => if (2 : ℕ) * n < K then ((∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i)) * x ^ K else (0 : ℝ)) ((∑ j ∈ Finset.range (n + (1 : ℕ)), (↑(Qc n j) : ℝ) * x ^ j) * A - P), withhid1 : ∀ j ≤ n, Qc n j * (2 : ℚ) ^ j * ∏ i ∈ (Finset.range (n + (1 : ℕ))).erase j, ((2 : ℚ) ^ j - (2 : ℚ) ^ i) = ∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℚ) ^ j - (2 : ℚ) ^ L).Uses library
Finset.rangerange nis the set of natural numbers less thann. ,Finset.IocThe finset $(a, b]$ of elementsxsuch thata < xandx ≤ b. .Lean, lines 428–429
have hid1 : ∀ j ≤ n, Qc n j * 2 ^ j * ∏ i ∈ (Finset.range (n + 1)).erase j, ((2 : ℚ) ^ j - 2 ^ i) = ∏ L ∈ Finset.Ioc n (2 * n), ((2 : ℚ) ^ j - 2 ^ L) := fun j hj => by subst hQc; exact id1_full n j hjtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 428–429 at
dfc7b5cc45a9↗h4_series.hfunhave(fun (K : ℕ) => if (2 : ℕ) * n < K then ((∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i)) * ((3 : ℝ) / (2 : ℝ) ^ n) ^ K else (0 : ℝ)) = fun (K : ℕ) => (∑ j ∈ Finset.range (n + (1 : ℕ)), if j < K then (↑(Qc n j) : ℝ) * a (K - j - (1 : ℕ)) * x ^ K else (0 : ℝ)) - if K < n + (1 : ℕ) then (∑ j ∈ Finset.range (K + (1 : ℕ)), (↑(Qc n j) : ℝ) / ((2 : ℝ) ^ (K - j) - (1 : ℝ))) * x ^ K else (0 : ℝ)Leaves
HasSum (fun (K : ℕ) => if (2 : ℕ) * n < K then ((∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i)) * x ^ K else (0 : ℝ)) ((∑ j ∈ Finset.range (n + (1 : ℕ)), (↑(Qc n j) : ℝ) * x ^ j) * A - P), withhfun : (fun (K : ℕ) => if (2 : ℕ) * n < K then ((∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i)) * ((3 : ℝ) / (2 : ℝ) ^ n) ^ K else (0 : ℝ)) = fun (K : ℕ) => (∑ j ∈ Finset.range (n + (1 : ℕ)), if j < K then (↑(Qc n j) : ℝ) * a (K - j - (1 : ℕ)) * x ^ K else (0 : ℝ)) - if K < n + (1 : ℕ) then (∑ j ∈ Finset.range (K + (1 : ℕ)), (↑(Qc n j) : ℝ) / ((2 : ℝ) ^ (K - j) - (1 : ℝ))) * x ^ K else (0 : ℝ).Uses library
Finset.IocThe finset $(a, b]$ of elementsxsuch thata < xandx ≤ b. ,Finset.rangerange nis the set of natural numbers less thann. .Lean, lines 430–470
have hfun : (fun K : ℕ => if 2 * n < K then ((∏ L ∈ Finset.Ioc n (2 * n), ((2 : ℝ) ^ K - 2 ^ L)) / ∏ i ∈ Finset.range (n + 1), ((2 : ℝ) ^ K - 2 ^ i)) * ((3 : ℝ) / 2 ^ n) ^ K else 0) = fun K => (∑ j ∈ Finset.range (n + 1), if j < K then (Qc n j : ℝ) * a (K - j - 1) * x ^ K else 0) - (if K < n + 1 then (∑ j ∈ Finset.range (K + 1), (Qc n j : ℝ) / ((2 : ℝ) ^ (K - j) - 1)) * x ^ K else 0) := by funext K symm by_cases hK : K < n + 1 · rw [if_pos hK, if_neg (by omega)] rw [Finset.sum_range_succ (fun j => (Qc n j : ℝ) / ((2 : ℝ) ^ (K - j) - 1)) K, Nat.sub_self, pow_zero, sub_self, div_zero, add_zero] have hsplit : ∑ j ∈ Finset.range (n + 1), (if j < K then (Qc n j : ℝ) * a (K - j - 1) * x ^ K else 0) = ∑ j ∈ Finset.range K, (Qc n j : ℝ) / ((2 : ℝ) ^ (K - j) - 1) * x ^ K := by rw [← Finset.sum_range_add_sum_Ico _ (show K ≤ n + 1 by omega)] rw [Finset.sum_eq_zero (s := Finset.Ico K (n + 1)) (fun j hj => by rw [if_neg (by have := Finset.mem_Ico.mp hj; omega)]), add_zero] refine Finset.sum_congr rfl (fun j hj => ?_) have hjK := Finset.mem_range.mp hj rw [if_pos hjK] simp only [hadef] rw [show K - j - 1 + 1 = K - j by omega] ring rw [hsplit, Finset.sum_mul, sub_self] · rw [if_neg hK, sub_zero] have hS : ∑ j ∈ Finset.range (n + 1), (if j < K then (Qc n j : ℝ) * a (K - j - 1) * x ^ K else 0) = ((∑ j ∈ Finset.range (n + 1), Qc n j / ((2 : ℚ) ^ (K - j) - 1) : ℚ) : ℝ) * x ^ K := by push_cast rw [Finset.sum_mul] refine Finset.sum_congr rfl (fun j hj => ?_) have hjK : j < K := by have := Finset.mem_range.mp hj; omega rw [if_pos hjK] simp only [hadef] rw [show K - j - 1 + 1 = K - j by omega] ring rw [hS, tail_coeff n K (by omega) Qc hid1] push_cast by_cases h2 : 2 * n < K · rw [if_pos h2] · rw [if_neg h2] rw [Finset.prod_eq_zero (i := K) (Finset.mem_Ioc.mpr ⟨by omega, by omega⟩) (sub_self _)] simptargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 430–470 at
dfc7b5cc45a9↗h4_series.hfun.s1caseLeaves
((∑ j ∈ Finset.range (n + (1 : ℕ)), if j < K then (↑(Qc n j) : ℝ) * a (K - j - (1 : ℕ)) * x ^ K else (0 : ℝ)) - if K < n + (1 : ℕ) then (∑ j ∈ Finset.range (K + (1 : ℕ)), (↑(Qc n j) : ℝ) / ((2 : ℝ) ^ (K - j) - (1 : ℝ))) * x ^ K else (0 : ℝ)) = if (2 : ℕ) * n < K then ((∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i)) * ((3 : ℝ) / (2 : ℝ) ^ n) ^ K else (0 : ℝ).Uses library
if_pos,if_neg,Finset.sum_range_succ,Nat.sub_self,pow_zero,sub_self,div_zero,add_zero,Finset.sum_mul.Lean, lines 438–452
· rw [if_pos hK, if_neg (by omega)] rw [Finset.sum_range_succ (fun j => (Qc n j : ℝ) / ((2 : ℝ) ^ (K - j) - 1)) K, Nat.sub_self, pow_zero, sub_self, div_zero, add_zero] have hsplit : ∑ j ∈ Finset.range (n + 1), (if j < K then (Qc n j : ℝ) * a (K - j - 1) * x ^ K else 0) = ∑ j ∈ Finset.range K, (Qc n j : ℝ) / ((2 : ℝ) ^ (K - j) - 1) * x ^ K := by rw [← Finset.sum_range_add_sum_Ico _ (show K ≤ n + 1 by omega)] rw [Finset.sum_eq_zero (s := Finset.Ico K (n + 1)) (fun j hj => by rw [if_neg (by have := Finset.mem_Ico.mp hj; omega)]), add_zero] refine Finset.sum_congr rfl (fun j hj => ?_) have hjK := Finset.mem_range.mp hj rw [if_pos hjK] simp only [hadef] rw [show K - j - 1 + 1 = K - j by omega] ring rw [hsplit, Finset.sum_mul, sub_self]targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 438–452 at
dfc7b5cc45a9↗h4_series.hfun.s1.hsplithave(∑ j ∈ Finset.range (n + (1 : ℕ)), if j < K then (↑(Qc n j) : ℝ) * a (K - j - (1 : ℕ)) * x ^ K else (0 : ℝ)) = ∑ j ∈ Finset.range K, (↑(Qc n j) : ℝ) / ((2 : ℝ) ^ (K - j) - (1 : ℝ)) * x ^ KLeaves
(∑ j ∈ Finset.range (n + (1 : ℕ)), if j < K then (↑(Qc n j) : ℝ) * a (K - j - (1 : ℕ)) * x ^ K else (0 : ℝ)) - (∑ x ∈ Finset.range K, (↑(Qc n x) : ℝ) / ((2 : ℝ) ^ (K - x) - (1 : ℝ))) * x ^ K = (0 : ℝ), withhsplit : (∑ j ∈ Finset.range (n + (1 : ℕ)), if j < K then (↑(Qc n j) : ℝ) * a (K - j - (1 : ℕ)) * x ^ K else (0 : ℝ)) = ∑ j ∈ Finset.range K, (↑(Qc n j) : ℝ) / ((2 : ℝ) ^ (K - j) - (1 : ℝ)) * x ^ K.Uses library
Finset.rangerange nis the set of natural numbers less thann. ,Finset.sum_range_add_sum_Ico,Finset.sum_eq_zero,Finset.IcoThe finset $[a, b)$ of elementsxsuch thata ≤ xandx < b. ,if_neg,add_zero,Finset.sum_congr,rflrfl : a = ais the unique constructor of the equality type. ,if_pos.Lean, lines 441–451
have hsplit : ∑ j ∈ Finset.range (n + 1), (if j < K then (Qc n j : ℝ) * a (K - j - 1) * x ^ K else 0) = ∑ j ∈ Finset.range K, (Qc n j : ℝ) / ((2 : ℝ) ^ (K - j) - 1) * x ^ K := by rw [← Finset.sum_range_add_sum_Ico _ (show K ≤ n + 1 by omega)] rw [Finset.sum_eq_zero (s := Finset.Ico K (n + 1)) (fun j hj => by rw [if_neg (by have := Finset.mem_Ico.mp hj; omega)]), add_zero] refine Finset.sum_congr rfl (fun j hj => ?_) have hjK := Finset.mem_range.mp hj rw [if_pos hjK] simp only [hadef] rw [show K - j - 1 + 1 = K - j by omega] ringtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 441–451 at
dfc7b5cc45a9↗h4_series.hfun.s1.hsplit.thishaveK ≤ j ∧ j < n + (1 : ℕ)Leaves
¬j < K, withthis : K ≤ j ∧ j < n + (1 : ℕ).Uses library
Finset.mem_Ico.Lean, line 445
rw [if_neg (by have := Finset.mem_Ico.mp hj; omega)]), add_zero]
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 445 at
dfc7b5cc45a9↗h4_series.hfun.s1.hsplit.hjKhavej < KLeaves
(if j < K then (↑(Qc n j) : ℝ) * a (K - j - (1 : ℕ)) * x ^ K else (0 : ℝ)) = (↑(Qc n j) : ℝ) / ((2 : ℝ) ^ (K - j) - (1 : ℝ)) * x ^ K, withhjK : j < K.Uses library
Finset.mem_range.Lean, line 447
have hjK := Finset.mem_range.mp hj
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 447 at
dfc7b5cc45a9↗
h4_series.hfun.s2caseLeaves
((∑ j ∈ Finset.range (n + (1 : ℕ)), if j < K then (↑(Qc n j) : ℝ) * a (K - j - (1 : ℕ)) * x ^ K else (0 : ℝ)) - if K < n + (1 : ℕ) then (∑ j ∈ Finset.range (K + (1 : ℕ)), (↑(Qc n j) : ℝ) / ((2 : ℝ) ^ (K - j) - (1 : ℝ))) * x ^ K else (0 : ℝ)) = if (2 : ℕ) * n < K then ((∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i)) * ((3 : ℝ) / (2 : ℝ) ^ n) ^ K else (0 : ℝ).Uses library
if_neg,sub_zero.Lean, lines 453–470
· rw [if_neg hK, sub_zero] have hS : ∑ j ∈ Finset.range (n + 1), (if j < K then (Qc n j : ℝ) * a (K - j - 1) * x ^ K else 0) = ((∑ j ∈ Finset.range (n + 1), Qc n j / ((2 : ℚ) ^ (K - j) - 1) : ℚ) : ℝ) * x ^ K := by push_cast rw [Finset.sum_mul] refine Finset.sum_congr rfl (fun j hj => ?_) have hjK : j < K := by have := Finset.mem_range.mp hj; omega rw [if_pos hjK] simp only [hadef] rw [show K - j - 1 + 1 = K - j by omega] ring rw [hS, tail_coeff n K (by omega) Qc hid1] push_cast by_cases h2 : 2 * n < K · rw [if_pos h2] · rw [if_neg h2] rw [Finset.prod_eq_zero (i := K) (Finset.mem_Ioc.mpr ⟨by omega, by omega⟩) (sub_self _)] simptargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 453–470 at
dfc7b5cc45a9↗h4_series.hfun.s2.hShave(∑ j ∈ Finset.range (n + (1 : ℕ)), if j < K then (↑(Qc n j) : ℝ) * a (K - j - (1 : ℕ)) * x ^ K else (0 : ℝ)) = (↑(∑ j ∈ Finset.range (n + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (K - j) - (1 : ℚ))) : ℝ) * x ^ KLeaves
(∑ j ∈ Finset.range (n + (1 : ℕ)), if j < K then (↑(Qc n j) : ℝ) * a (K - j - (1 : ℕ)) * x ^ K else (0 : ℝ)) = if (2 : ℕ) * n < K then ((∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i)) * ((3 : ℝ) / (2 : ℝ) ^ n) ^ K else (0 : ℝ), withhS : (∑ j ∈ Finset.range (n + (1 : ℕ)), if j < K then (↑(Qc n j) : ℝ) * a (K - j - (1 : ℕ)) * x ^ K else (0 : ℝ)) = (↑(∑ j ∈ Finset.range (n + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (K - j) - (1 : ℚ))) : ℝ) * x ^ K.Uses library
Finset.rangerange nis the set of natural numbers less thann. ,Finset.sum_mul,Finset.sum_congr,rflrfl : a = ais the unique constructor of the equality type. ,if_pos.Lean, lines 454–463
have hS : ∑ j ∈ Finset.range (n + 1), (if j < K then (Qc n j : ℝ) * a (K - j - 1) * x ^ K else 0) = ((∑ j ∈ Finset.range (n + 1), Qc n j / ((2 : ℚ) ^ (K - j) - 1) : ℚ) : ℝ) * x ^ K := by push_cast rw [Finset.sum_mul] refine Finset.sum_congr rfl (fun j hj => ?_) have hjK : j < K := by have := Finset.mem_range.mp hj; omega rw [if_pos hjK] simp only [hadef] rw [show K - j - 1 + 1 = K - j by omega] ringtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 454–463 at
dfc7b5cc45a9↗h4_series.hfun.s2.hS.hjKhavej < KLeaves
(if j < K then (↑(Qc n j) : ℝ) * a (K - j - (1 : ℕ)) * x ^ K else (0 : ℝ)) = (↑(Qc n j) : ℝ) / ((2 : ℝ) ^ (K - j) - (1 : ℝ)) * x ^ K, withhjK : j < K.Lean, line 459
have hjK : j < K := by have := Finset.mem_range.mp hj; omega
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 459 at
dfc7b5cc45a9↗h4_series.hfun.s2.hS.hjK.thishavej < n + (1 : ℕ)Leaves
j < K, withthis : j < n + (1 : ℕ).Uses library
Finset.mem_range.Lean, line 459
have hjK : j < K := by have := Finset.mem_range.mp hj; omega
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 459 at
dfc7b5cc45a9↗
h4_series.hfun.s2.s2caseLeaves
((∏ x ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ x)) / ∏ x ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ x)) * x ^ K = if (2 : ℕ) * n < K then ((∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i)) * ((3 : ℝ) / (2 : ℝ) ^ n) ^ K else (0 : ℝ).Uses library
if_pos.Lean, line 467
· rw [if_pos h2]
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 467 at
dfc7b5cc45a9↗h4_series.hfun.s2.s3caseLeaves
((∏ x ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ x)) / ∏ x ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ x)) * x ^ K = if (2 : ℕ) * n < K then ((∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i)) * ((3 : ℝ) / (2 : ℝ) ^ n) ^ K else (0 : ℝ).Uses library
if_neg,Finset.prod_eq_zero,Finset.mem_Ioc,And.introAnd.intro : a → b → a ∧ bis the constructor for the And operation. ,sub_self.Lean, lines 468–470
· rw [if_neg h2] rw [Finset.prod_eq_zero (i := K) (Finset.mem_Ioc.mpr ⟨by omega, by omega⟩) (sub_self _)] simptargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 468–470 at
dfc7b5cc45a9↗
prod_one_sub_gehave∀ (s : Finset ℕ) (a : ℕ → ℝ), (∀ i ∈ s, (0 : ℝ) ≤ a i) → (∀ i ∈ s, a i ≤ (1 : ℝ)) → (1 : ℝ) - ∑ i ∈ s, a i ≤ ∏ i ∈ s, ((1 : ℝ) - a i)Leaves
∀ (Qc : ℕ → ℕ → ℚ), (Qc = fun (n k : ℕ) => ((-1 : ℚ) ^ k * (2 : ℚ) ^ (k * (k - (1 : ℕ)) / (2 : ℕ)) * ∏ i ∈ Finset.range k, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * ∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - k - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) → ∀ (Qx : ℕ → ℚ), (Qx = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), Qc n k * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k) → ∀ (Aq : ℕ → ℚ), (Aq = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), (∑ j ∈ Finset.range (k + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (k - j) - (1 : ℚ))) * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k + Qx n * ∑ j ∈ Finset.range n, (3 : ℚ) / ((2 : ℚ) ^ (j + (1 : ℕ)) - (3 : ℚ))) → ∀ (n : ℕ), (0 : ℝ) < (↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ) ∧ ((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ)) ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)), withprod_one_sub_ge : ∀ (s : Finset ℕ) (a : ℕ → ℝ), (∀ i ∈ s, (0 : ℝ) ≤ a i) → (∀ i ∈ s, a i ≤ (1 : ℝ)) → (1 : ℝ) - ∑ i ∈ s, a i ≤ ∏ i ∈ s, ((1 : ℝ) - a 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 475–490
have prod_one_sub_ge : ∀ (s : Finset ℕ) (a : ℕ → ℝ) (h0 : ∀ i ∈ s, 0 ≤ a i) (h1 : ∀ i ∈ s, a i ≤ 1), 1 - ∑ i ∈ s, a i ≤ ∏ i ∈ s, (1 - a i) := by intro s a h0 h1 induction s using Finset.induction_on with | empty => simp | insert j s hj ih => rw [Finset.sum_insert hj, Finset.prod_insert hj] have ih' := ih (fun i hi => h0 i (Finset.mem_insert_of_mem hi)) (fun i hi => h1 i (Finset.mem_insert_of_mem hi)) have haj0 := h0 j (Finset.mem_insert_self j s) have haj1 := h1 j (Finset.mem_insert_self j s) have hP : 0 ≤ ∏ i ∈ s, (1 - a i) := Finset.prod_nonneg (fun i hi => by linarith [h1 i (Finset.mem_insert_of_mem hi)]) have hP1 : ∏ i ∈ s, (1 - a i) ≤ 1 := Finset.prod_le_one (fun i hi => by linarith [h1 i (Finset.mem_insert_of_mem hi)]) (fun i hi => by linarith [h0 i (Finset.mem_insert_of_mem hi)]) nlinarithtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 475–490 at
dfc7b5cc45a9↗prod_one_sub_ge.s1case printed form did not read back: shown as its Lean lines onlyprod_one_sub_ge.s2caseLeaves
(1 : ℝ) - ∑ i ∈ insert j s, a i ≤ ∏ i ∈ insert j s, ((1 : ℝ) - a i), withj : ℕ,s : Finset ℕ,hj : j ∉ s,ih : (∀ i ∈ s, (0 : ℝ) ≤ a i) → (∀ i ∈ s, a i ≤ (1 : ℝ)) → (1 : ℝ) - ∑ i ∈ s, a i ≤ ∏ i ∈ s, ((1 : ℝ) - a i),h0 : ∀ i ∈ insert j s, (0 : ℝ) ≤ a i,h1 : ∀ i ∈ insert j s, a i ≤ (1 : ℝ).Uses library
Finset.sum_insert,Finset.prod_insert.Lean, lines 480–490
| insert j s hj ih => rw [Finset.sum_insert hj, Finset.prod_insert hj] have ih' := ih (fun i hi => h0 i (Finset.mem_insert_of_mem hi)) (fun i hi => h1 i (Finset.mem_insert_of_mem hi)) have haj0 := h0 j (Finset.mem_insert_self j s) have haj1 := h1 j (Finset.mem_insert_self j s) have hP : 0 ≤ ∏ i ∈ s, (1 - a i) := Finset.prod_nonneg (fun i hi => by linarith [h1 i (Finset.mem_insert_of_mem hi)]) have hP1 : ∏ i ∈ s, (1 - a i) ≤ 1 := Finset.prod_le_one (fun i hi => by linarith [h1 i (Finset.mem_insert_of_mem hi)]) (fun i hi => by linarith [h0 i (Finset.mem_insert_of_mem hi)]) nlinarithtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 480–490 at
dfc7b5cc45a9↗prod_one_sub_ge.s2.ih'have(1 : ℝ) - ∑ i ∈ s, a i ≤ ∏ i ∈ s, ((1 : ℝ) - a i)Leaves
(1 : ℝ) - (a j + ∑ x ∈ s, a x) ≤ ((1 : ℝ) - a j) * ∏ x ∈ s, ((1 : ℝ) - a x), withih' : (1 : ℝ) - ∑ i ∈ s, a i ≤ ∏ i ∈ s, ((1 : ℝ) - a i).Uses library
Finset.mem_insert_of_mem.Lean, line 482
have ih' := ih (fun i hi => h0 i (Finset.mem_insert_of_mem hi)) (fun i hi => h1 i (Finset.mem_insert_of_mem hi))
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 482 at
dfc7b5cc45a9↗prod_one_sub_ge.s2.haj0have(0 : ℝ) ≤ a jLeaves
(1 : ℝ) - (a j + ∑ x ∈ s, a x) ≤ ((1 : ℝ) - a j) * ∏ x ∈ s, ((1 : ℝ) - a x), withhaj0 : (0 : ℝ) ≤ a j.Uses library
Finset.mem_insert_self.Lean, line 483
have haj0 := h0 j (Finset.mem_insert_self j s)
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 483 at
dfc7b5cc45a9↗prod_one_sub_ge.s2.haj1havea j ≤ (1 : ℝ)Leaves
(1 : ℝ) - (a j + ∑ x ∈ s, a x) ≤ ((1 : ℝ) - a j) * ∏ x ∈ s, ((1 : ℝ) - a x), withhaj1 : a j ≤ (1 : ℝ).Uses library
Finset.mem_insert_self.Lean, line 484
have haj1 := h1 j (Finset.mem_insert_self j s)
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 484 at
dfc7b5cc45a9↗prod_one_sub_ge.s2.hPhave(0 : ℝ) ≤ ∏ i ∈ s, ((1 : ℝ) - a i)Leaves
(1 : ℝ) - (a j + ∑ x ∈ s, a x) ≤ ((1 : ℝ) - a j) * ∏ x ∈ s, ((1 : ℝ) - a x), withhP : (0 : ℝ) ≤ ∏ i ∈ s, ((1 : ℝ) - a i).Uses library
Finset.prod_nonneg,Finset.mem_insert_of_mem.Lean, lines 485–486
have hP : 0 ≤ ∏ i ∈ s, (1 - a i) := Finset.prod_nonneg (fun i hi => by linarith [h1 i (Finset.mem_insert_of_mem hi)])targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 485–486 at
dfc7b5cc45a9↗prod_one_sub_ge.s2.hP1have∏ i ∈ s, ((1 : ℝ) - a i) ≤ (1 : ℝ)Leaves
(1 : ℝ) - (a j + ∑ x ∈ s, a x) ≤ ((1 : ℝ) - a j) * ∏ x ∈ s, ((1 : ℝ) - a x), withhP1 : ∏ i ∈ s, ((1 : ℝ) - a i) ≤ (1 : ℝ).Uses library
Finset.prod_le_oneIf eachf i,i ∈ sbelongs to[0, 1], then their product is less than or equal to one. ,Finset.mem_insert_of_mem.Lean, lines 487–489
have hP1 : ∏ i ∈ s, (1 - a i) ≤ 1 := Finset.prod_le_one (fun i hi => by linarith [h1 i (Finset.mem_insert_of_mem hi)]) (fun i hi => by linarith [h0 i (Finset.mem_insert_of_mem hi)])targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 487–489 at
dfc7b5cc45a9↗
nd_boundhave∀ (n K : ℕ), (1 : ℕ) ≤ n → (2 : ℕ) * n + (1 : ℕ) ≤ K → (0 : ℝ) < (∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i) ∧ (∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i) ≤ (2 : ℝ) * (1 / 2 : ℝ) ^ KLeaves
∀ (Qc : ℕ → ℕ → ℚ), (Qc = fun (n k : ℕ) => ((-1 : ℚ) ^ k * (2 : ℚ) ^ (k * (k - (1 : ℕ)) / (2 : ℕ)) * ∏ i ∈ Finset.range k, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * ∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - k - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) → ∀ (Qx : ℕ → ℚ), (Qx = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), Qc n k * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k) → ∀ (Aq : ℕ → ℚ), (Aq = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), (∑ j ∈ Finset.range (k + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (k - j) - (1 : ℚ))) * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k + Qx n * ∑ j ∈ Finset.range n, (3 : ℚ) / ((2 : ℚ) ^ (j + (1 : ℕ)) - (3 : ℚ))) → ∀ (n : ℕ), (0 : ℝ) < (↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ) ∧ ((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ)) ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)), withnd_bound : ∀ (n K : ℕ), (1 : ℕ) ≤ n → (2 : ℕ) * n + (1 : ℕ) ≤ K → (0 : ℝ) < (∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i) ∧ (∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i) ≤ (2 : ℝ) * (1 / 2 : ℝ) ^ K.Uses library
Finset.IocThe finset $(a, b]$ of elementsxsuch thata < xandx ≤ b. ,Finset.rangerange nis the set of natural numbers less thann. ,And.introAnd.intro : a → b → a ∧ bis the constructor for the And operation. ,div_pos,div_le_iff₀Seediv_le_iff₀'for a version with multiplication on the other side. .Lean, lines 492–547
have nd_bound : ∀ (n K : ℕ) (hn : 1 ≤ n) (hK : 2 * n + 1 ≤ K), 0 < (∏ L ∈ Finset.Ioc n (2 * n), ((2 : ℝ) ^ K - 2 ^ L)) / ∏ i ∈ Finset.range (n + 1), ((2 : ℝ) ^ K - 2 ^ i) ∧ (∏ L ∈ Finset.Ioc n (2 * n), ((2 : ℝ) ^ K - 2 ^ L)) / ∏ i ∈ Finset.range (n + 1), ((2 : ℝ) ^ K - 2 ^ i) ≤ 2 * (1 / 2) ^ K := by intro n K hn hK have hlt : ∀ i, i < K → (0 : ℝ) < 2 ^ K - 2 ^ i := fun i hi => by have : (2 : ℝ) ^ i < 2 ^ K := pow_lt_pow_right₀ (by norm_num) hi linarith have hNpos : 0 < ∏ L ∈ Finset.Ioc n (2 * n), ((2 : ℝ) ^ K - 2 ^ L) := Finset.prod_pos (fun L hL => hlt L (by have := Finset.mem_Ioc.mp hL; omega)) have hDpos : 0 < ∏ i ∈ Finset.range (n + 1), ((2 : ℝ) ^ K - 2 ^ i) := Finset.prod_pos (fun i hi => hlt i (by have := Finset.mem_range.mp hi; omega)) refine ⟨div_pos hNpos hDpos, ?_⟩ have hN : ∏ L ∈ Finset.Ioc n (2 * n), ((2 : ℝ) ^ K - 2 ^ L) ≤ (2 ^ K) ^ n := by have := Finset.prod_le_prod (s := Finset.Ioc n (2 * n)) (f := fun L => (2 : ℝ) ^ K - 2 ^ L) (g := fun _ => (2 : ℝ) ^ K) (fun L hL => le_of_lt (hlt L (by have := Finset.mem_Ioc.mp hL; omega))) (fun L _ => by have : (0 : ℝ) < 2 ^ L := by positivity linarith) rw [Finset.prod_const, Nat.card_Ioc, show 2 * n - n = n by omega] at this exact this have hD : (2 ^ K) ^ (n + 1) / 2 ≤ ∏ i ∈ Finset.range (n + 1), ((2 : ℝ) ^ K - 2 ^ i) := by have hfac : ∀ i ∈ Finset.range (n + 1), (2 : ℝ) ^ K - 2 ^ i = 2 ^ K * (1 - (1 / 2) ^ (K - i)) := by intro i hi have hiK : i ≤ K := by have := Finset.mem_range.mp hi; omega have e : (2 : ℝ) ^ K = 2 ^ i * 2 ^ (K - i) := by rw [← pow_add]; congr 1; omega rw [mul_sub, mul_one, one_div_pow, mul_one_div, e] field_simp rw [Finset.prod_congr rfl hfac, Finset.prod_mul_distrib, Finset.prod_const, Finset.card_range] have hsum : ∑ i ∈ Finset.range (n + 1), ((1 : ℝ) / 2) ^ (K - i) ≤ 1 / 2 := by have e : ∀ i ∈ Finset.range (n + 1), ((1 : ℝ) / 2) ^ (K - i) = (1 / 2) ^ (K - n) * (1 / 2) ^ (n - i) := by intro i hi have := Finset.mem_range.mp hi rw [← pow_add]; congr 1; omega rw [Finset.sum_congr rfl e, ← Finset.mul_sum] have hg : ∑ i ∈ Finset.range (n + 1), ((1 : ℝ) / 2) ^ (n - i) ≤ 2 := by have hr := Finset.sum_range_reflect (fun i => ((1 : ℝ) / 2) ^ i) (n + 1) simp only [Nat.add_sub_cancel] at hr rw [hr] exact sum_geometric_two_le (n + 1) have hk : ((1 : ℝ) / 2) ^ (K - n) ≤ (1 / 2) ^ 2 := pow_le_pow_of_le_one (by norm_num) (by norm_num) (by omega) have hpos : 0 ≤ ((1 : ℝ) / 2) ^ (K - n) := by positivity nlinarith have hprod := prod_one_sub_ge (Finset.range (n + 1)) (fun i => ((1 : ℝ) / 2) ^ (K - i)) (fun i _ => by positivity) (fun i _ => pow_le_one₀ (by norm_num) (by norm_num)) have h2K : (0 : ℝ) < (2 ^ K) ^ (n + 1) := by positivity nlinarith rw [div_le_iff₀ hDpos] have h2K : (2 : ℝ) ^ K * (1 / 2) ^ K = 1 := by rw [← mul_pow]; norm_num have e2 : 2 * (1 / 2 : ℝ) ^ K * ((2 ^ K) ^ (n + 1) / 2) = (2 ^ K) ^ n := by rw [pow_succ] calc 2 * (1 / 2 : ℝ) ^ K * ((2 ^ K) ^ n * 2 ^ K / 2) = (2 ^ K * (1 / 2) ^ K) * (2 ^ K) ^ n := by ring _ = (2 ^ K) ^ n := by rw [h2K, one_mul] calc ∏ L ∈ Finset.Ioc n (2 * n), ((2 : ℝ) ^ K - 2 ^ L) ≤ (2 ^ K) ^ n := hN _ = 2 * (1 / 2) ^ K * ((2 ^ K) ^ (n + 1) / 2) := e2.symm _ ≤ 2 * (1 / 2) ^ K * ∏ i ∈ Finset.range (n + 1), ((2 : ℝ) ^ K - 2 ^ i) := by gcongrtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 492–547 at
dfc7b5cc45a9↗nd_bound.hlthave∀ i < K, (0 : ℝ) < (2 : ℝ) ^ K - (2 : ℝ) ^ iLeaves
(0 : ℝ) < (∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i) ∧ (∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i) ≤ (2 : ℝ) * (1 / 2 : ℝ) ^ K, withhlt : ∀ i < K, (0 : ℝ) < (2 : ℝ) ^ K - (2 : ℝ) ^ i.Lean, lines 497–499
have hlt : ∀ i, i < K → (0 : ℝ) < 2 ^ K - 2 ^ i := fun i hi => by have : (2 : ℝ) ^ i < 2 ^ K := pow_lt_pow_right₀ (by norm_num) hi linarithtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 497–499 at
dfc7b5cc45a9↗nd_bound.hlt.thishave(2 : ℝ) ^ i < (2 : ℝ) ^ KLeaves
(0 : ℝ) < (2 : ℝ) ^ K - (2 : ℝ) ^ i, withthis : (2 : ℝ) ^ i < (2 : ℝ) ^ K.Uses library
pow_lt_pow_right₀.Lean, line 498
have : (2 : ℝ) ^ i < 2 ^ K := pow_lt_pow_right₀ (by norm_num) hi
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 498 at
dfc7b5cc45a9↗
nd_bound.hNposhave(0 : ℝ) < ∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)Leaves
(0 : ℝ) < (∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i) ∧ (∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i) ≤ (2 : ℝ) * (1 / 2 : ℝ) ^ K, withhNpos : (0 : ℝ) < ∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L).Uses library
Finset.IocThe finset $(a, b]$ of elementsxsuch thata < xandx ≤ b. ,Finset.prod_pos.Lean, lines 500–501
have hNpos : 0 < ∏ L ∈ Finset.Ioc n (2 * n), ((2 : ℝ) ^ K - 2 ^ L) := Finset.prod_pos (fun L hL => hlt L (by have := Finset.mem_Ioc.mp hL; omega))targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 500–501 at
dfc7b5cc45a9↗nd_bound.hNpos.thishaven < L ∧ L ≤ (2 : ℕ) * nLeaves
L < K, withthis : n < L ∧ L ≤ (2 : ℕ) * n.Uses library
Finset.mem_Ioc.Lean, line 501
Finset.prod_pos (fun L hL => hlt L (by have := Finset.mem_Ioc.mp hL; omega))
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 501 at
dfc7b5cc45a9↗
nd_bound.hDposhave(0 : ℝ) < ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i)Leaves
(0 : ℝ) < (∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i) ∧ (∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i) ≤ (2 : ℝ) * (1 / 2 : ℝ) ^ K, withhDpos : (0 : ℝ) < ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i).Uses library
Finset.rangerange nis the set of natural numbers less thann. ,Finset.prod_pos.Lean, lines 502–503
have hDpos : 0 < ∏ i ∈ Finset.range (n + 1), ((2 : ℝ) ^ K - 2 ^ i) := Finset.prod_pos (fun i hi => hlt i (by have := Finset.mem_range.mp hi; omega))targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 502–503 at
dfc7b5cc45a9↗nd_bound.hDpos.thishavei < n + (1 : ℕ)Leaves
i < K, withthis : i < n + (1 : ℕ).Uses library
Finset.mem_range.Lean, line 503
Finset.prod_pos (fun i hi => hlt i (by have := Finset.mem_range.mp hi; omega))
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 503 at
dfc7b5cc45a9↗
nd_bound.hNhave∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L) ≤ ((2 : ℝ) ^ K) ^ nLeaves
(∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i) ≤ (2 : ℝ) * (1 / 2 : ℝ) ^ K, withhN : ∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L) ≤ ((2 : ℝ) ^ K) ^ n.Uses library
Finset.IocThe finset $(a, b]$ of elementsxsuch thata < xandx ≤ b. ,Finset.prod_const,Nat.card_Ioc.Lean, lines 505–511
have hN : ∏ L ∈ Finset.Ioc n (2 * n), ((2 : ℝ) ^ K - 2 ^ L) ≤ (2 ^ K) ^ n := by have := Finset.prod_le_prod (s := Finset.Ioc n (2 * n)) (f := fun L => (2 : ℝ) ^ K - 2 ^ L) (g := fun _ => (2 : ℝ) ^ K) (fun L hL => le_of_lt (hlt L (by have := Finset.mem_Ioc.mp hL; omega))) (fun L _ => by have : (0 : ℝ) < 2 ^ L := by positivity linarith) rw [Finset.prod_const, Nat.card_Ioc, show 2 * n - n = n by omega] at this exact thistargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 505–511 at
dfc7b5cc45a9↗nd_bound.hN.thishave∏ i ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ i) ≤ ∏ i ∈ Finset.Ioc n ((2 : ℕ) * n), (2 : ℝ) ^ KLeaves
∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L) ≤ ((2 : ℝ) ^ K) ^ n, withthis : ∏ i ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ i) ≤ ∏ i ∈ Finset.Ioc n ((2 : ℕ) * n), (2 : ℝ) ^ K.Uses library
Finset.prod_le_prodIf allf i,i ∈ s, are nonnegative and eachf iis less than or equal tog i, then the product off iis less than or equal to the product ofg i. ,Finset.IocThe finset $(a, b]$ of elementsxsuch thata < xandx ≤ b. ,le_of_lt.Lean, lines 506–509
have := Finset.prod_le_prod (s := Finset.Ioc n (2 * n)) (f := fun L => (2 : ℝ) ^ K - 2 ^ L) (g := fun _ => (2 : ℝ) ^ K) (fun L hL => le_of_lt (hlt L (by have := Finset.mem_Ioc.mp hL; omega))) (fun L _ => by have : (0 : ℝ) < 2 ^ L := by positivity linarith)targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 506–509 at
dfc7b5cc45a9↗nd_bound.hN.this.s1haven < L ∧ L ≤ (2 : ℕ) * nLeaves
L < K, withthis : n < L ∧ L ≤ (2 : ℕ) * n.Uses library
Finset.mem_Ioc.Lean, line 507
(fun L hL => le_of_lt (hlt L (by have := Finset.mem_Ioc.mp hL; omega))) (fun L _ => by
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 507 at
dfc7b5cc45a9↗nd_bound.hN.this.s2have(0 : ℝ) < (2 : ℝ) ^ Lroutine: positivityLeaves
(2 : ℝ) ^ K - (2 : ℝ) ^ L ≤ (2 : ℝ) ^ K, withthis : (0 : ℝ) < (2 : ℝ) ^ L.Lean, line 508
have : (0 : ℝ) < 2 ^ L := by positivity
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 508 at
dfc7b5cc45a9↗
nd_bound.hDhave((2 : ℝ) ^ K) ^ (n + (1 : ℕ)) / (2 : ℝ) ≤ ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i)Leaves
(∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i) ≤ (2 : ℝ) * (1 / 2 : ℝ) ^ K, withhD : ((2 : ℝ) ^ K) ^ (n + (1 : ℕ)) / (2 : ℝ) ≤ ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i).Uses library
Finset.rangerange nis the set of natural numbers less thann. ,Finset.prod_congr,rflrfl : a = ais the unique constructor of the equality type. ,Finset.prod_mul_distrib,Finset.prod_const,Finset.card_range.Lean, lines 512–538
have hD : (2 ^ K) ^ (n + 1) / 2 ≤ ∏ i ∈ Finset.range (n + 1), ((2 : ℝ) ^ K - 2 ^ i) := by have hfac : ∀ i ∈ Finset.range (n + 1), (2 : ℝ) ^ K - 2 ^ i = 2 ^ K * (1 - (1 / 2) ^ (K - i)) := by intro i hi have hiK : i ≤ K := by have := Finset.mem_range.mp hi; omega have e : (2 : ℝ) ^ K = 2 ^ i * 2 ^ (K - i) := by rw [← pow_add]; congr 1; omega rw [mul_sub, mul_one, one_div_pow, mul_one_div, e] field_simp rw [Finset.prod_congr rfl hfac, Finset.prod_mul_distrib, Finset.prod_const, Finset.card_range] have hsum : ∑ i ∈ Finset.range (n + 1), ((1 : ℝ) / 2) ^ (K - i) ≤ 1 / 2 := by have e : ∀ i ∈ Finset.range (n + 1), ((1 : ℝ) / 2) ^ (K - i) = (1 / 2) ^ (K - n) * (1 / 2) ^ (n - i) := by intro i hi have := Finset.mem_range.mp hi rw [← pow_add]; congr 1; omega rw [Finset.sum_congr rfl e, ← Finset.mul_sum] have hg : ∑ i ∈ Finset.range (n + 1), ((1 : ℝ) / 2) ^ (n - i) ≤ 2 := by have hr := Finset.sum_range_reflect (fun i => ((1 : ℝ) / 2) ^ i) (n + 1) simp only [Nat.add_sub_cancel] at hr rw [hr] exact sum_geometric_two_le (n + 1) have hk : ((1 : ℝ) / 2) ^ (K - n) ≤ (1 / 2) ^ 2 := pow_le_pow_of_le_one (by norm_num) (by norm_num) (by omega) have hpos : 0 ≤ ((1 : ℝ) / 2) ^ (K - n) := by positivity nlinarith have hprod := prod_one_sub_ge (Finset.range (n + 1)) (fun i => ((1 : ℝ) / 2) ^ (K - i)) (fun i _ => by positivity) (fun i _ => pow_le_one₀ (by norm_num) (by norm_num)) have h2K : (0 : ℝ) < (2 ^ K) ^ (n + 1) := by positivity nlinarithtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 512–538 at
dfc7b5cc45a9↗nd_bound.hD.hfachave∀ i ∈ Finset.range (n + (1 : ℕ)), (2 : ℝ) ^ K - (2 : ℝ) ^ i = (2 : ℝ) ^ K * ((1 : ℝ) - (1 / 2 : ℝ) ^ (K - i))Leaves
((2 : ℝ) ^ K) ^ (n + (1 : ℕ)) / (2 : ℝ) ≤ ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i), withhfac : ∀ i ∈ Finset.range (n + (1 : ℕ)), (2 : ℝ) ^ K - (2 : ℝ) ^ i = (2 : ℝ) ^ K * ((1 : ℝ) - (1 / 2 : ℝ) ^ (K - i)).Uses library
Finset.rangerange nis the set of natural numbers less thann. ,mul_subAlias ofmul_sub_left_distrib. ,mul_one,one_div_pow,mul_one_div.Lean, lines 513–518
have hfac : ∀ i ∈ Finset.range (n + 1), (2 : ℝ) ^ K - 2 ^ i = 2 ^ K * (1 - (1 / 2) ^ (K - i)) := by intro i hi have hiK : i ≤ K := by have := Finset.mem_range.mp hi; omega have e : (2 : ℝ) ^ K = 2 ^ i * 2 ^ (K - i) := by rw [← pow_add]; congr 1; omega rw [mul_sub, mul_one, one_div_pow, mul_one_div, e] field_simptargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 513–518 at
dfc7b5cc45a9↗nd_bound.hD.hfac.hiKhavei ≤ KLeaves
(2 : ℝ) ^ K - (2 : ℝ) ^ i = (2 : ℝ) ^ K * ((1 : ℝ) - (1 / 2 : ℝ) ^ (K - i)), withhiK : i ≤ K.Lean, line 515
have hiK : i ≤ K := by have := Finset.mem_range.mp hi; omega
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 515 at
dfc7b5cc45a9↗nd_bound.hD.hfac.hiK.thishavei < n + (1 : ℕ)Leaves
i ≤ K, withthis : i < n + (1 : ℕ).Uses library
Finset.mem_range.Lean, line 515
have hiK : i ≤ K := by have := Finset.mem_range.mp hi; omega
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 515 at
dfc7b5cc45a9↗
nd_bound.hD.hfac.ehave(2 : ℝ) ^ K = (2 : ℝ) ^ i * (2 : ℝ) ^ (K - i)Leaves
(2 : ℝ) ^ K - (2 : ℝ) ^ i = (2 : ℝ) ^ K * ((1 : ℝ) - (1 / 2 : ℝ) ^ (K - i)), withe : (2 : ℝ) ^ K = (2 : ℝ) ^ i * (2 : ℝ) ^ (K - i).Uses library
pow_add.Lean, line 516
have e : (2 : ℝ) ^ K = 2 ^ i * 2 ^ (K - i) := by rw [← pow_add]; congr 1; omega
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 516 at
dfc7b5cc45a9↗
nd_bound.hD.hsumhave∑ i ∈ Finset.range (n + (1 : ℕ)), (1 / 2 : ℝ) ^ (K - i) ≤ (1 / 2 : ℝ)Leaves
((2 : ℝ) ^ K) ^ (n + (1 : ℕ)) / (2 : ℝ) ≤ ((2 : ℝ) ^ K) ^ (n + (1 : ℕ)) * ∏ x ∈ Finset.range (n + (1 : ℕ)), ((1 : ℝ) - (1 / 2 : ℝ) ^ (K - x)), withhsum : ∑ i ∈ Finset.range (n + (1 : ℕ)), (1 / 2 : ℝ) ^ (K - i) ≤ (1 / 2 : ℝ).Uses library
Finset.rangerange nis the set of natural numbers less thann. ,Finset.sum_congr,rflrfl : a = ais the unique constructor of the equality type. ,Finset.mul_sum.Lean, lines 520–534
have hsum : ∑ i ∈ Finset.range (n + 1), ((1 : ℝ) / 2) ^ (K - i) ≤ 1 / 2 := by have e : ∀ i ∈ Finset.range (n + 1), ((1 : ℝ) / 2) ^ (K - i) = (1 / 2) ^ (K - n) * (1 / 2) ^ (n - i) := by intro i hi have := Finset.mem_range.mp hi rw [← pow_add]; congr 1; omega rw [Finset.sum_congr rfl e, ← Finset.mul_sum] have hg : ∑ i ∈ Finset.range (n + 1), ((1 : ℝ) / 2) ^ (n - i) ≤ 2 := by have hr := Finset.sum_range_reflect (fun i => ((1 : ℝ) / 2) ^ i) (n + 1) simp only [Nat.add_sub_cancel] at hr rw [hr] exact sum_geometric_two_le (n + 1) have hk : ((1 : ℝ) / 2) ^ (K - n) ≤ (1 / 2) ^ 2 := pow_le_pow_of_le_one (by norm_num) (by norm_num) (by omega) have hpos : 0 ≤ ((1 : ℝ) / 2) ^ (K - n) := by positivity nlinarithtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 520–534 at
dfc7b5cc45a9↗nd_bound.hD.hsum.ehave∀ i ∈ Finset.range (n + (1 : ℕ)), (1 / 2 : ℝ) ^ (K - i) = (1 / 2 : ℝ) ^ (K - n) * (1 / 2 : ℝ) ^ (n - i)Leaves
∑ i ∈ Finset.range (n + (1 : ℕ)), (1 / 2 : ℝ) ^ (K - i) ≤ (1 / 2 : ℝ), withe : ∀ i ∈ Finset.range (n + (1 : ℕ)), (1 / 2 : ℝ) ^ (K - i) = (1 / 2 : ℝ) ^ (K - n) * (1 / 2 : ℝ) ^ (n - i).Uses library
Finset.rangerange nis the set of natural numbers less thann. ,pow_add.Lean, lines 521–524
have e : ∀ i ∈ Finset.range (n + 1), ((1 : ℝ) / 2) ^ (K - i) = (1 / 2) ^ (K - n) * (1 / 2) ^ (n - i) := by intro i hi have := Finset.mem_range.mp hi rw [← pow_add]; congr 1; omegatargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 521–524 at
dfc7b5cc45a9↗nd_bound.hD.hsum.e.thishavei < n + (1 : ℕ)Leaves
(1 / 2 : ℝ) ^ (K - i) = (1 / 2 : ℝ) ^ (K - n) * (1 / 2 : ℝ) ^ (n - i), withthis : i < n + (1 : ℕ).Uses library
Finset.mem_range.Lean, line 523
have := Finset.mem_range.mp hi
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 523 at
dfc7b5cc45a9↗
nd_bound.hD.hsum.hghave∑ i ∈ Finset.range (n + (1 : ℕ)), (1 / 2 : ℝ) ^ (n - i) ≤ (2 : ℝ)Leaves
(1 / 2 : ℝ) ^ (K - n) * ∑ i ∈ Finset.range (n + (1 : ℕ)), (1 / 2 : ℝ) ^ (n - i) ≤ (1 / 2 : ℝ), withhg : ∑ i ∈ Finset.range (n + (1 : ℕ)), (1 / 2 : ℝ) ^ (n - i) ≤ (2 : ℝ).Uses library
Finset.rangerange nis the set of natural numbers less thann. ,Nat.add_sub_cancel,sum_geometric_two_le.Lean, lines 526–530
have hg : ∑ i ∈ Finset.range (n + 1), ((1 : ℝ) / 2) ^ (n - i) ≤ 2 := by have hr := Finset.sum_range_reflect (fun i => ((1 : ℝ) / 2) ^ i) (n + 1) simp only [Nat.add_sub_cancel] at hr rw [hr] exact sum_geometric_two_le (n + 1)targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 526–530 at
dfc7b5cc45a9↗nd_bound.hD.hsum.hg.hrhave∑ j ∈ Finset.range (n + (1 : ℕ)), (1 / 2 : ℝ) ^ (n + (1 : ℕ) - (1 : ℕ) - j) = ∑ j ∈ Finset.range (n + (1 : ℕ)), (1 / 2 : ℝ) ^ jLeaves
∑ i ∈ Finset.range (n + (1 : ℕ)), (1 / 2 : ℝ) ^ (n - i) ≤ (2 : ℝ), withhr : ∑ j ∈ Finset.range (n + (1 : ℕ)), (1 / 2 : ℝ) ^ (n + (1 : ℕ) - (1 : ℕ) - j) = ∑ j ∈ Finset.range (n + (1 : ℕ)), (1 / 2 : ℝ) ^ j.Uses library
Finset.sum_range_reflect.Lean, line 527
have hr := Finset.sum_range_reflect (fun i => ((1 : ℝ) / 2) ^ i) (n + 1)
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 527 at
dfc7b5cc45a9↗
nd_bound.hD.hsum.hkhave(1 / 2 : ℝ) ^ (K - n) ≤ (1 / 2 : ℝ) ^ (2 : ℕ)Leaves
(1 / 2 : ℝ) ^ (K - n) * ∑ i ∈ Finset.range (n + (1 : ℕ)), (1 / 2 : ℝ) ^ (n - i) ≤ (1 / 2 : ℝ), withhk : (1 / 2 : ℝ) ^ (K - n) ≤ (1 / 2 : ℝ) ^ (2 : ℕ).Uses library
pow_le_pow_of_le_one.Lean, lines 531–532
have hk : ((1 : ℝ) / 2) ^ (K - n) ≤ (1 / 2) ^ 2 := pow_le_pow_of_le_one (by norm_num) (by norm_num) (by omega)targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 531–532 at
dfc7b5cc45a9↗nd_bound.hD.hsum.hposhave(0 : ℝ) ≤ (1 / 2 : ℝ) ^ (K - n)routine: positivityLeaves
(1 / 2 : ℝ) ^ (K - n) * ∑ i ∈ Finset.range (n + (1 : ℕ)), (1 / 2 : ℝ) ^ (n - i) ≤ (1 / 2 : ℝ), withhpos : (0 : ℝ) ≤ (1 / 2 : ℝ) ^ (K - n).Lean, line 533
have hpos : 0 ≤ ((1 : ℝ) / 2) ^ (K - n) := by positivity
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 533 at
dfc7b5cc45a9↗
nd_bound.hD.hprodhave(1 : ℝ) - ∑ i ∈ Finset.range (n + (1 : ℕ)), (1 / 2 : ℝ) ^ (K - i) ≤ ∏ i ∈ Finset.range (n + (1 : ℕ)), ((1 : ℝ) - (1 / 2 : ℝ) ^ (K - i))Leaves
((2 : ℝ) ^ K) ^ (n + (1 : ℕ)) / (2 : ℝ) ≤ ((2 : ℝ) ^ K) ^ (n + (1 : ℕ)) * ∏ x ∈ Finset.range (n + (1 : ℕ)), ((1 : ℝ) - (1 / 2 : ℝ) ^ (K - x)), withhprod : (1 : ℝ) - ∑ i ∈ Finset.range (n + (1 : ℕ)), (1 / 2 : ℝ) ^ (K - i) ≤ ∏ i ∈ Finset.range (n + (1 : ℕ)), ((1 : ℝ) - (1 / 2 : ℝ) ^ (K - i)).Uses library
Finset.rangerange nis the set of natural numbers less thann. ,pow_le_one₀.Lean, lines 535–536
have hprod := prod_one_sub_ge (Finset.range (n + 1)) (fun i => ((1 : ℝ) / 2) ^ (K - i)) (fun i _ => by positivity) (fun i _ => pow_le_one₀ (by norm_num) (by norm_num))targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 535–536 at
dfc7b5cc45a9↗nd_bound.hD.h2Khave(0 : ℝ) < ((2 : ℝ) ^ K) ^ (n + (1 : ℕ))routine: positivityLeaves
((2 : ℝ) ^ K) ^ (n + (1 : ℕ)) / (2 : ℝ) ≤ ((2 : ℝ) ^ K) ^ (n + (1 : ℕ)) * ∏ x ∈ Finset.range (n + (1 : ℕ)), ((1 : ℝ) - (1 / 2 : ℝ) ^ (K - x)), withh2K : (0 : ℝ) < ((2 : ℝ) ^ K) ^ (n + (1 : ℕ)).Lean, line 537
have h2K : (0 : ℝ) < (2 ^ K) ^ (n + 1) := by positivity
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 537 at
dfc7b5cc45a9↗
nd_bound.h2Khave(2 : ℝ) ^ K * (1 / 2 : ℝ) ^ K = (1 : ℝ)Leaves
∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L) ≤ (2 : ℝ) * (1 / 2 : ℝ) ^ K * ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i), withh2K : (2 : ℝ) ^ K * (1 / 2 : ℝ) ^ K = (1 : ℝ).Uses library
mul_pow.Lean, line 540
have h2K : (2 : ℝ) ^ K * (1 / 2) ^ K = 1 := by rw [← mul_pow]; norm_num
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 540 at
dfc7b5cc45a9↗nd_bound.e2have(2 : ℝ) * (1 / 2 : ℝ) ^ K * (((2 : ℝ) ^ K) ^ (n + (1 : ℕ)) / (2 : ℝ)) = ((2 : ℝ) ^ K) ^ nLeaves
∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L) ≤ (2 : ℝ) * (1 / 2 : ℝ) ^ K * ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i), withe2 : (2 : ℝ) * (1 / 2 : ℝ) ^ K * (((2 : ℝ) ^ K) ^ (n + (1 : ℕ)) / (2 : ℝ)) = ((2 : ℝ) ^ K) ^ n.Uses library
pow_succ.Lean, lines 541–544
have e2 : 2 * (1 / 2 : ℝ) ^ K * ((2 ^ K) ^ (n + 1) / 2) = (2 ^ K) ^ n := by rw [pow_succ] calc 2 * (1 / 2 : ℝ) ^ K * ((2 ^ K) ^ n * 2 ^ K / 2) = (2 ^ K * (1 / 2) ^ K) * (2 ^ K) ^ n := by ring _ = (2 ^ K) ^ n := by rw [h2K, one_mul]targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 541–544 at
dfc7b5cc45a9↗nd_bound.e2.s1calc(2 : ℝ) * (1 / 2 : ℝ) ^ K * (((2 : ℝ) ^ K) ^ n * (2 : ℝ) ^ K / (2 : ℝ)) = (2 : ℝ) ^ K * (1 / 2 : ℝ) ^ K * ((2 : ℝ) ^ K) ^ nroutine: ringCloses the goal.
Lean, line 543
calc 2 * (1 / 2 : ℝ) ^ K * ((2 ^ K) ^ n * 2 ^ K / 2) = (2 ^ K * (1 / 2) ^ K) * (2 ^ K) ^ n := by ring
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 543 at
dfc7b5cc45a9↗nd_bound.e2.s2calcCloses the goal.
Uses library
one_mul.Lean, line 544
_ = (2 ^ K) ^ n := by rw [h2K, one_mul]
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 544 at
dfc7b5cc45a9↗
nd_bound.s8calc∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L) ≤ ((2 : ℝ) ^ K) ^ nCloses the goal.
Uses library
Finset.IocThe finset $(a, b]$ of elementsxsuch thata < xandx ≤ b. .Lean, line 545
calc ∏ L ∈ Finset.Ioc n (2 * n), ((2 : ℝ) ^ K - 2 ^ L) ≤ (2 ^ K) ^ n := hN
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 545 at
dfc7b5cc45a9↗nd_bound.s9calc((2 : ℝ) ^ K) ^ n = (2 : ℝ) * (1 / 2 : ℝ) ^ K * (((2 : ℝ) ^ K) ^ (n + (1 : ℕ)) / (2 : ℝ))Closes the goal.
Lean, line 546
_ = 2 * (1 / 2) ^ K * ((2 ^ K) ^ (n + 1) / 2) := e2.symm
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 546 at
dfc7b5cc45a9↗nd_bound.s10calcCloses the goal.
Uses library
Finset.rangerange nis the set of natural numbers less thann. .Lean, line 547
_ ≤ 2 * (1 / 2) ^ K * ∏ i ∈ Finset.range (n + 1), ((2 : ℝ) ^ K - 2 ^ i) := by gcongr
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 547 at
dfc7b5cc45a9↗
ineq_powhave∀ (n : ℕ), (2 : ℕ) ≤ n → (9 : ℕ) * (81 : ℕ) ^ n ≤ (256 : ℕ) ^ nLeaves
∀ (Qc : ℕ → ℕ → ℚ), (Qc = fun (n k : ℕ) => ((-1 : ℚ) ^ k * (2 : ℚ) ^ (k * (k - (1 : ℕ)) / (2 : ℕ)) * ∏ i ∈ Finset.range k, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * ∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - k - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) → ∀ (Qx : ℕ → ℚ), (Qx = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), Qc n k * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k) → ∀ (Aq : ℕ → ℚ), (Aq = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), (∑ j ∈ Finset.range (k + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (k - j) - (1 : ℚ))) * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k + Qx n * ∑ j ∈ Finset.range n, (3 : ℚ) / ((2 : ℚ) ^ (j + (1 : ℕ)) - (3 : ℚ))) → ∀ (n : ℕ), (0 : ℝ) < (↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ) ∧ ((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ)) ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)), withineq_pow : ∀ (n : ℕ), (2 : ℕ) ≤ n → (9 : ℕ) * (81 : ℕ) ^ n ≤ (256 : ℕ) ^ n.Lean, lines 550–560
have ineq_pow : ∀ (n : ℕ) (hn : 2 ≤ n), 9 * 81 ^ n ≤ 256 ^ n := by intro n hn induction n with | zero => omega | succ m ih => rcases (show m = 1 ∨ 2 ≤ m by omega) with rfl | hm · norm_num · have := ih hm rw [pow_succ, pow_succ] omegatargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 550–560 at
dfc7b5cc45a9↗ineq_pow.s1case routine: omegaLeaves
(9 : ℕ) * (81 : ℕ) ^ (0 : ℕ) ≤ (256 : ℕ) ^ (0 : ℕ), withhn : (2 : ℕ) ≤ (0 : ℕ).Uses library
Nat.zeroZero, the smallest natural number. .Lean, line 554
| zero => omega
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 554 at
dfc7b5cc45a9↗ineq_pow.s2caseLeaves
(9 : ℕ) * (81 : ℕ) ^ (m + (1 : ℕ)) ≤ (256 : ℕ) ^ (m + (1 : ℕ)), withm : ℕ,ih : (2 : ℕ) ≤ m → (9 : ℕ) * (81 : ℕ) ^ m ≤ (256 : ℕ) ^ m,hn : (2 : ℕ) ≤ m + (1 : ℕ).Uses library
Nat.succThe successor of a natural numbern. .Lean, lines 555–560
| succ m ih => rcases (show m = 1 ∨ 2 ≤ m by omega) with rfl | hm · norm_num · have := ih hm rw [pow_succ, pow_succ] omegatargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 555–560 at
dfc7b5cc45a9↗ineq_pow.s2.s1case routine: norm_numLeaves
(9 : ℕ) * (81 : ℕ) ^ ((1 : ℕ) + (1 : ℕ)) ≤ (256 : ℕ) ^ ((1 : ℕ) + (1 : ℕ)).Lean, line 557
· norm_num
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 557 at
dfc7b5cc45a9↗ineq_pow.s2.s2caseLeaves
(9 : ℕ) * (81 : ℕ) ^ (m + (1 : ℕ)) ≤ (256 : ℕ) ^ (m + (1 : ℕ)).Uses library
pow_succ.Lean, lines 558–560
· have := ih hm rw [pow_succ, pow_succ] omegatargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 558–560 at
dfc7b5cc45a9↗ineq_pow.s2.s2.thishave(9 : ℕ) * (81 : ℕ) ^ m ≤ (256 : ℕ) ^ mLeaves
(9 : ℕ) * (81 : ℕ) ^ (m + (1 : ℕ)) ≤ (256 : ℕ) ^ (m + (1 : ℕ)), withthis : (9 : ℕ) * (81 : ℕ) ^ m ≤ (256 : ℕ) ^ m.Lean, line 558
· have := ih hm
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 558 at
dfc7b5cc45a9↗
h4_bighave∀ (Qc : ℕ → ℕ → ℚ), (Qc = fun (n k : ℕ) => ((-1 : ℚ) ^ k * (2 : ℚ) ^ (k * (k - (1 : ℕ)) / (2 : ℕ)) * ∏ i ∈ Finset.range k, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * ∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - k - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) → ∀ (Qx : ℕ → ℚ), (Qx = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), Qc n k * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k) → ∀ (Aq : ℕ → ℚ), (Aq = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), (∑ j ∈ Finset.range (k + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (k - j) - (1 : ℚ))) * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k + Qx n * ∑ j ∈ Finset.range n, (3 : ℚ) / ((2 : ℚ) ^ (j + (1 : ℕ)) - (3 : ℚ))) → ∀ (n : ℕ), (2 : ℕ) ≤ n → (0 : ℝ) < (↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ) ∧ ((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ)) ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ))Leaves
∀ (Qc : ℕ → ℕ → ℚ), (Qc = fun (n k : ℕ) => ((-1 : ℚ) ^ k * (2 : ℚ) ^ (k * (k - (1 : ℕ)) / (2 : ℕ)) * ∏ i ∈ Finset.range k, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * ∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - k - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) → ∀ (Qx : ℕ → ℚ), (Qx = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), Qc n k * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k) → ∀ (Aq : ℕ → ℚ), (Aq = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), (∑ j ∈ Finset.range (k + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (k - j) - (1 : ℚ))) * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k + Qx n * ∑ j ∈ Finset.range n, (3 : ℚ) / ((2 : ℚ) ^ (j + (1 : ℕ)) - (3 : ℚ))) → ∀ (n : ℕ), (0 : ℝ) < (↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ) ∧ ((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ)) ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)), withh4_big : ∀ (Qc : ℕ → ℕ → ℚ), (Qc = fun (n k : ℕ) => ((-1 : ℚ) ^ k * (2 : ℚ) ^ (k * (k - (1 : ℕ)) / (2 : ℕ)) * ∏ i ∈ Finset.range k, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * ∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - k - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) → ∀ (Qx : ℕ → ℚ), (Qx = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), Qc n k * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k) → ∀ (Aq : ℕ → ℚ), (Aq = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), (∑ j ∈ Finset.range (k + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (k - j) - (1 : ℚ))) * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k + Qx n * ∑ j ∈ Finset.range n, (3 : ℚ) / ((2 : ℚ) ^ (j + (1 : ℕ)) - (3 : ℚ))) → ∀ (n : ℕ), (2 : ℕ) ≤ n → (0 : ℝ) < (↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ) ∧ ((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ)) ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)).Uses library
Finset.rangerange nis the set of natural numbers less thann. ,Finset.IocThe finset $(a, b]$ of elementsxsuch thata < xandx ≤ b. ,And.introAnd.intro : a → b → a ∧ bis the constructor for the And operation. .Lean, lines 562–655
have h4_big : ∀ (Qc : ℕ → ℕ → ℚ) (hQc : (Qc = fun (n k : ℕ) => ((-1 : ℚ) ^ k * (2 : ℚ) ^ (k * (k - (1 : ℕ)) / (2 : ℕ)) * ∏ i ∈ Finset.range k, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * ∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - k - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ)))) (Qx : ℕ → ℚ) (hQx : (Qx = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), Qc n k * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k)) (Aq : ℕ → ℚ) (hAq : (Aq = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), (∑ j ∈ Finset.range (k + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (k - j) - (1 : ℚ))) * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k + Qx n * ∑ j ∈ Finset.range n, (3 : ℚ) / ((2 : ℚ) ^ (j + (1 : ℕ)) - (3 : ℚ)))) (n : ℕ) (hn : 2 ≤ n), (0 : ℝ) < (Qx n : ℝ) * (3 * ∑' m : ℕ, (1 : ℝ) / (2 ^ (m + 3) - 3)) - (Aq n : ℝ) ∧ ((Qx n : ℝ) * (3 * ∑' m : ℕ, (1 : ℝ) / (2 ^ (m + 3) - 3)) - (Aq n : ℝ)) ^ 2 * (2 : ℝ) ^ (4 * n * n) ≤ (2 : ℝ) ^ (2 * n + 4) := by intro Qc hQc Qx hQx Aq hAq n hn have hS := h4_series Qc hQc Qx hQx Aq hAq n (by omega) set r := (Qx n : ℝ) * (3 * ∑' m : ℕ, (1 : ℝ) / (2 ^ (m + 3) - 3)) - (Aq n : ℝ) with hr set x : ℝ := (3 : ℝ) / 2 ^ n with hxdef have hx0 : 0 < x := by positivity have hx2 : x / 2 ≤ 3 / 8 := by have : (4 : ℝ) ≤ 2 ^ n := by calc (4 : ℝ) = 2 ^ 2 := by norm_num _ ≤ 2 ^ n := pow_le_pow_right₀ (by norm_num) hn rw [hxdef, div_div, div_le_div_iff₀ (by positivity) (by norm_num)]; linarith set G : ℕ → ℝ := fun K => if 2 * n < K then ((∏ L ∈ Finset.Ioc n (2 * n), ((2 : ℝ) ^ K - 2 ^ L)) / ∏ i ∈ Finset.range (n + 1), ((2 : ℝ) ^ K - 2 ^ i)) * x ^ K else 0 with hG have hGnn : ∀ K, 0 ≤ G K := by intro K; simp only [hG] split_ifs with h · exact mul_nonneg (le_of_lt (nd_bound n K (by omega) (by omega)).1) (by positivity) · exact le_refl 0 have hGpos : 0 < G (2 * n + 1) := by simp only [hG]; rw [if_pos (by omega)] exact mul_pos (nd_bound n (2 * n + 1) (by omega) (by omega)).1 (by positivity) refine ⟨?_, ?_⟩ · exact hasSum_lt (f := fun _ => (0 : ℝ)) (g := G) (i := 2 * n + 1) (fun K => hGnn K) hGpos hasSum_zero hS · set H : ℕ → ℝ := fun K => if 2 * n < K then 2 * (x / 2) ^ K else 0 with hH have hGH : ∀ K, G K ≤ H K := by intro K; simp only [hG, hH] split_ifs with h · have hb := (nd_bound n K (by omega) (by omega)).2 calc ((∏ L ∈ Finset.Ioc n (2 * n), ((2 : ℝ) ^ K - 2 ^ L)) / ∏ i ∈ Finset.range (n + 1), ((2 : ℝ) ^ K - 2 ^ i)) * x ^ K ≤ 2 * (1 / 2) ^ K * x ^ K := by gcongr _ = 2 * (x / 2) ^ K := by ring · exact le_refl 0 have hq : x / 2 < 1 := by linarith have hHsum : HasSum H (2 * (x / 2) ^ (2 * n + 1) * (1 - x / 2)⁻¹) := by rw [← hasSum_nat_add_iff' (2 * n + 1)] have hz : ∑ i ∈ Finset.range (2 * n + 1), H i = 0 := Finset.sum_eq_zero (fun i hi => by simp only [hH]; rw [if_neg (by have := Finset.mem_range.mp hi; omega)]) rw [hz, sub_zero] have hgeo := (hasSum_geometric_of_lt_one (by positivity) hq).mul_left (2 * (x / 2) ^ (2 * n + 1)) have hfun : (fun s => H (s + (2 * n + 1))) = fun s => 2 * (x / 2) ^ (2 * n + 1) * (x / 2) ^ s := by funext s; simp only [hH]; rw [if_pos (by omega), pow_add]; ring rw [hfun] exact hgeo have hrle : r ≤ 2 * (x / 2) ^ (2 * n + 1) * (1 - x / 2)⁻¹ := hasSum_le hGH hS hHsum have hr0 : 0 ≤ r := le_of_lt (hasSum_lt (f := fun _ => (0 : ℝ)) (g := G) (i := 2 * n + 1) (fun K => hGnn K) hGpos hasSum_zero hS) have hr8 : r ≤ 8 * (x / 2) ^ (2 * n + 1) := by have hinv : (1 - x / 2)⁻¹ ≤ 4 := by rw [inv_le_comm₀ (by linarith) (by norm_num)]; linarith have hp : 0 ≤ 2 * (x / 2) ^ (2 * n + 1) := by positivity calc r ≤ 2 * (x / 2) ^ (2 * n + 1) * (1 - x / 2)⁻¹ := hrle _ ≤ 2 * (x / 2) ^ (2 * n + 1) * 4 := by gcongr _ = 8 * (x / 2) ^ (2 * n + 1) := by ring have hsq : r ^ 2 ≤ (8 * (x / 2) ^ (2 * n + 1)) ^ 2 := pow_le_pow_left₀ hr0 hr8 2 have hnat : 64 * 3 ^ (4 * n + 2) * 2 ^ (4 * n * n) ≤ 2 ^ (2 * n + 4) * (2 ^ (n + 1)) ^ (4 * n + 2) := by have e1 : (2 : ℕ) ^ (2 * n + 4) * (2 ^ (n + 1)) ^ (4 * n + 2) = 2 ^ (4 * n * n) * (64 * 256 ^ n) := by rw [← pow_mul, ← pow_add, show (256 : ℕ) = 2 ^ 8 by norm_num, ← pow_mul, show (64 : ℕ) = 2 ^ 6 by norm_num, ← pow_add, ← pow_add] congr 1; ring have e2 : 64 * 3 ^ (4 * n + 2) * 2 ^ (4 * n * n) = 2 ^ (4 * n * n) * (64 * (9 * 81 ^ n)) := by rw [show (81 : ℕ) = 3 ^ 4 by norm_num, ← pow_mul, pow_add]; ring rw [e1, e2] have := ineq_pow n hn gcongr have hreal : (64 : ℝ) * 3 ^ (4 * n + 2) * 2 ^ (4 * n * n) ≤ 2 ^ (2 * n + 4) * (2 ^ (n + 1)) ^ (4 * n + 2) := by exact_mod_cast hnat have hx2' : x / 2 = 3 / 2 ^ (n + 1) := by rw [hxdef, pow_succ]; field_simp have hsq' : r ^ 2 ≤ 64 * (x / 2) ^ (4 * n + 2) := by calc r ^ 2 ≤ (8 * (x / 2) ^ (2 * n + 1)) ^ 2 := hsq _ = 64 * (x / 2) ^ (4 * n + 2) := by ring have hkey : (x / 2) ^ (4 * n + 2) * ((2 : ℝ) ^ (n + 1)) ^ (4 * n + 2) = 3 ^ (4 * n + 2) := by rw [← mul_pow, hx2', div_mul_cancel₀ _ (by positivity)] have hP : (0 : ℝ) < ((2 : ℝ) ^ (n + 1)) ^ (4 * n + 2) := by positivity have hmain : 64 * (x / 2) ^ (4 * n + 2) * (2 : ℝ) ^ (4 * n * n) ≤ 2 ^ (2 * n + 4) := by refine le_of_mul_le_mul_right ?_ hP calc 64 * (x / 2) ^ (4 * n + 2) * (2 : ℝ) ^ (4 * n * n) * ((2 : ℝ) ^ (n + 1)) ^ (4 * n + 2) = 64 * 3 ^ (4 * n + 2) * 2 ^ (4 * n * n) := by rw [← hkey]; ring _ ≤ 2 ^ (2 * n + 4) * ((2 : ℝ) ^ (n + 1)) ^ (4 * n + 2) := hreal calc r ^ 2 * (2 : ℝ) ^ (4 * n * n) ≤ 64 * (x / 2) ^ (4 * n + 2) * 2 ^ (4 * n * n) := by gcongr _ ≤ 2 ^ (2 * n + 4) := hmaintargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 562–655 at
dfc7b5cc45a9↗h4_big.hShaveHasSum (fun (K : ℕ) => if (2 : ℕ) * n < K then ((∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i)) * ((3 : ℝ) / (2 : ℝ) ^ n) ^ K else (0 : ℝ)) ((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ))Leaves
(0 : ℝ) < (↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ) ∧ ((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ)) ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)), withhS : HasSum (fun (K : ℕ) => if (2 : ℕ) * n < K then ((∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i)) * ((3 : ℝ) / (2 : ℝ) ^ n) ^ K else (0 : ℝ)) ((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ)).Lean, line 575
have hS := h4_series Qc hQc Qx hQx Aq hAq n (by omega)
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 575 at
dfc7b5cc45a9↗h4_big.hx0have(0 : ℝ) < xroutine: positivityLeaves
(0 : ℝ) < r ∧ r ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)), withhx0 : (0 : ℝ) < x.Lean, line 578
have hx0 : 0 < x := by positivity
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 578 at
dfc7b5cc45a9↗h4_big.hx2havex / (2 : ℝ) ≤ (3 / 8 : ℝ)Leaves
(0 : ℝ) < r ∧ r ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)), withhx2 : x / (2 : ℝ) ≤ (3 / 8 : ℝ).Uses library
div_div,div_le_div_iff₀.Lean, lines 579–583
have hx2 : x / 2 ≤ 3 / 8 := by have : (4 : ℝ) ≤ 2 ^ n := by calc (4 : ℝ) = 2 ^ 2 := by norm_num _ ≤ 2 ^ n := pow_le_pow_right₀ (by norm_num) hn rw [hxdef, div_div, div_le_div_iff₀ (by positivity) (by norm_num)]; linarithtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 579–583 at
dfc7b5cc45a9↗h4_big.hx2.thishave(4 : ℝ) ≤ (2 : ℝ) ^ nLeaves
x / (2 : ℝ) ≤ (3 / 8 : ℝ), withthis : (4 : ℝ) ≤ (2 : ℝ) ^ n.Lean, lines 580–582
have : (4 : ℝ) ≤ 2 ^ n := by calc (4 : ℝ) = 2 ^ 2 := by norm_num _ ≤ 2 ^ n := pow_le_pow_right₀ (by norm_num) hntargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 580–582 at
dfc7b5cc45a9↗h4_big.hx2.this.s1calc(4 : ℝ) = (2 : ℝ) ^ (2 : ℕ)routine: norm_numCloses the goal.
Lean, line 581
calc (4 : ℝ) = 2 ^ 2 := by norm_num
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 581 at
dfc7b5cc45a9↗h4_big.hx2.this.s2calc(2 : ℝ) ^ (2 : ℕ) ≤ (2 : ℝ) ^ nCloses the goal.
Uses library
pow_le_pow_right₀.Lean, line 582
_ ≤ 2 ^ n := pow_le_pow_right₀ (by norm_num) hn
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 582 at
dfc7b5cc45a9↗
h4_big.hGnnhave∀ (K : ℕ), (0 : ℝ) ≤ G KLeaves
(0 : ℝ) < r ∧ r ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)), withhGnn : ∀ (K : ℕ), (0 : ℝ) ≤ G K.Lean, lines 587–591
have hGnn : ∀ K, 0 ≤ G K := by intro K; simp only [hG] split_ifs with h · exact mul_nonneg (le_of_lt (nd_bound n K (by omega) (by omega)).1) (by positivity) · exact le_refl 0targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 587–591 at
dfc7b5cc45a9↗h4_big.hGnn.s1caseLeaves
(0 : ℝ) ≤ ((∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ L ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) * x ^ K.Uses library
mul_nonnegAlias ofLeft.mul_nonneg. ,le_of_lt.Lean, line 590
· exact mul_nonneg (le_of_lt (nd_bound n K (by omega) (by omega)).1) (by positivity)
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 590 at
dfc7b5cc45a9↗h4_big.hGnn.s2caseLeaves
(0 : ℝ) ≤ (0 : ℝ).Uses library
le_reflThe relation≤on a preorder is reflexive. .Lean, line 591
· exact le_refl 0
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 591 at
dfc7b5cc45a9↗
h4_big.hGposhave(0 : ℝ) < G ((2 : ℕ) * n + (1 : ℕ))Leaves
(0 : ℝ) < r ∧ r ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)), withhGpos : (0 : ℝ) < G ((2 : ℕ) * n + (1 : ℕ)).Uses library
if_pos,mul_posAlias ofLeft.mul_pos. .Lean, lines 592–594
have hGpos : 0 < G (2 * n + 1) := by simp only [hG]; rw [if_pos (by omega)] exact mul_pos (nd_bound n (2 * n + 1) (by omega) (by omega)).1 (by positivity)targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 592–594 at
dfc7b5cc45a9↗h4_big.s6caseLeaves
(0 : ℝ) < r.Uses library
hasSum_lt,hasSum_zeroConstant zero function has sum0.Lean, line 596
· exact hasSum_lt (f := fun _ => (0 : ℝ)) (g := G) (i := 2 * n + 1) (fun K => hGnn K) hGpos hasSum_zero hS
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 596 at
dfc7b5cc45a9↗h4_big.s7caseLeaves
r ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)).Lean, lines 597–655
· set H : ℕ → ℝ := fun K => if 2 * n < K then 2 * (x / 2) ^ K else 0 with hH have hGH : ∀ K, G K ≤ H K := by intro K; simp only [hG, hH] split_ifs with h · have hb := (nd_bound n K (by omega) (by omega)).2 calc ((∏ L ∈ Finset.Ioc n (2 * n), ((2 : ℝ) ^ K - 2 ^ L)) / ∏ i ∈ Finset.range (n + 1), ((2 : ℝ) ^ K - 2 ^ i)) * x ^ K ≤ 2 * (1 / 2) ^ K * x ^ K := by gcongr _ = 2 * (x / 2) ^ K := by ring · exact le_refl 0 have hq : x / 2 < 1 := by linarith have hHsum : HasSum H (2 * (x / 2) ^ (2 * n + 1) * (1 - x / 2)⁻¹) := by rw [← hasSum_nat_add_iff' (2 * n + 1)] have hz : ∑ i ∈ Finset.range (2 * n + 1), H i = 0 := Finset.sum_eq_zero (fun i hi => by simp only [hH]; rw [if_neg (by have := Finset.mem_range.mp hi; omega)]) rw [hz, sub_zero] have hgeo := (hasSum_geometric_of_lt_one (by positivity) hq).mul_left (2 * (x / 2) ^ (2 * n + 1)) have hfun : (fun s => H (s + (2 * n + 1))) = fun s => 2 * (x / 2) ^ (2 * n + 1) * (x / 2) ^ s := by funext s; simp only [hH]; rw [if_pos (by omega), pow_add]; ring rw [hfun] exact hgeo have hrle : r ≤ 2 * (x / 2) ^ (2 * n + 1) * (1 - x / 2)⁻¹ := hasSum_le hGH hS hHsum have hr0 : 0 ≤ r := le_of_lt (hasSum_lt (f := fun _ => (0 : ℝ)) (g := G) (i := 2 * n + 1) (fun K => hGnn K) hGpos hasSum_zero hS) have hr8 : r ≤ 8 * (x / 2) ^ (2 * n + 1) := by have hinv : (1 - x / 2)⁻¹ ≤ 4 := by rw [inv_le_comm₀ (by linarith) (by norm_num)]; linarith have hp : 0 ≤ 2 * (x / 2) ^ (2 * n + 1) := by positivity calc r ≤ 2 * (x / 2) ^ (2 * n + 1) * (1 - x / 2)⁻¹ := hrle _ ≤ 2 * (x / 2) ^ (2 * n + 1) * 4 := by gcongr _ = 8 * (x / 2) ^ (2 * n + 1) := by ring have hsq : r ^ 2 ≤ (8 * (x / 2) ^ (2 * n + 1)) ^ 2 := pow_le_pow_left₀ hr0 hr8 2 have hnat : 64 * 3 ^ (4 * n + 2) * 2 ^ (4 * n * n) ≤ 2 ^ (2 * n + 4) * (2 ^ (n + 1)) ^ (4 * n + 2) := by have e1 : (2 : ℕ) ^ (2 * n + 4) * (2 ^ (n + 1)) ^ (4 * n + 2) = 2 ^ (4 * n * n) * (64 * 256 ^ n) := by rw [← pow_mul, ← pow_add, show (256 : ℕ) = 2 ^ 8 by norm_num, ← pow_mul, show (64 : ℕ) = 2 ^ 6 by norm_num, ← pow_add, ← pow_add] congr 1; ring have e2 : 64 * 3 ^ (4 * n + 2) * 2 ^ (4 * n * n) = 2 ^ (4 * n * n) * (64 * (9 * 81 ^ n)) := by rw [show (81 : ℕ) = 3 ^ 4 by norm_num, ← pow_mul, pow_add]; ring rw [e1, e2] have := ineq_pow n hn gcongr have hreal : (64 : ℝ) * 3 ^ (4 * n + 2) * 2 ^ (4 * n * n) ≤ 2 ^ (2 * n + 4) * (2 ^ (n + 1)) ^ (4 * n + 2) := by exact_mod_cast hnat have hx2' : x / 2 = 3 / 2 ^ (n + 1) := by rw [hxdef, pow_succ]; field_simp have hsq' : r ^ 2 ≤ 64 * (x / 2) ^ (4 * n + 2) := by calc r ^ 2 ≤ (8 * (x / 2) ^ (2 * n + 1)) ^ 2 := hsq _ = 64 * (x / 2) ^ (4 * n + 2) := by ring have hkey : (x / 2) ^ (4 * n + 2) * ((2 : ℝ) ^ (n + 1)) ^ (4 * n + 2) = 3 ^ (4 * n + 2) := by rw [← mul_pow, hx2', div_mul_cancel₀ _ (by positivity)] have hP : (0 : ℝ) < ((2 : ℝ) ^ (n + 1)) ^ (4 * n + 2) := by positivity have hmain : 64 * (x / 2) ^ (4 * n + 2) * (2 : ℝ) ^ (4 * n * n) ≤ 2 ^ (2 * n + 4) := by refine le_of_mul_le_mul_right ?_ hP calc 64 * (x / 2) ^ (4 * n + 2) * (2 : ℝ) ^ (4 * n * n) * ((2 : ℝ) ^ (n + 1)) ^ (4 * n + 2) = 64 * 3 ^ (4 * n + 2) * 2 ^ (4 * n * n) := by rw [← hkey]; ring _ ≤ 2 ^ (2 * n + 4) * ((2 : ℝ) ^ (n + 1)) ^ (4 * n + 2) := hreal calc r ^ 2 * (2 : ℝ) ^ (4 * n * n) ≤ 64 * (x / 2) ^ (4 * n + 2) * 2 ^ (4 * n * n) := by gcongr _ ≤ 2 ^ (2 * n + 4) := hmaintargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 597–655 at
dfc7b5cc45a9↗h4_big.s7.hGHhave∀ (K : ℕ), G K ≤ H KLeaves
r ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)), withhGH : ∀ (K : ℕ), G K ≤ H K.Lean, lines 598–606
have hGH : ∀ K, G K ≤ H K := by intro K; simp only [hG, hH] split_ifs with h · have hb := (nd_bound n K (by omega) (by omega)).2 calc ((∏ L ∈ Finset.Ioc n (2 * n), ((2 : ℝ) ^ K - 2 ^ L)) / ∏ i ∈ Finset.range (n + 1), ((2 : ℝ) ^ K - 2 ^ i)) * x ^ K ≤ 2 * (1 / 2) ^ K * x ^ K := by gcongr _ = 2 * (x / 2) ^ K := by ring · exact le_refl 0targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 598–606 at
dfc7b5cc45a9↗h4_big.s7.hGH.s1caseLeaves
((∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ L ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) * x ^ K ≤ (2 : ℝ) * (x / (2 : ℝ)) ^ K.Lean, lines 601–605
· have hb := (nd_bound n K (by omega) (by omega)).2 calc ((∏ L ∈ Finset.Ioc n (2 * n), ((2 : ℝ) ^ K - 2 ^ L)) / ∏ i ∈ Finset.range (n + 1), ((2 : ℝ) ^ K - 2 ^ i)) * x ^ K ≤ 2 * (1 / 2) ^ K * x ^ K := by gcongr _ = 2 * (x / 2) ^ K := by ringtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 601–605 at
dfc7b5cc45a9↗h4_big.s7.hGH.s1.hbhave(∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i) ≤ (2 : ℝ) * (1 / 2 : ℝ) ^ KLeaves
((∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ L ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) * x ^ K ≤ (2 : ℝ) * (x / (2 : ℝ)) ^ K, withhb : (∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i) ≤ (2 : ℝ) * (1 / 2 : ℝ) ^ K.Lean, line 601
· have hb := (nd_bound n K (by omega) (by omega)).2
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 601 at
dfc7b5cc45a9↗h4_big.s7.hGH.s1.s2calc((∏ L ∈ Finset.Ioc n ((2 : ℕ) * n), ((2 : ℝ) ^ K - (2 : ℝ) ^ L)) / ∏ i ∈ Finset.range (n + (1 : ℕ)), ((2 : ℝ) ^ K - (2 : ℝ) ^ i)) * x ^ K ≤ (2 : ℝ) * (1 / 2 : ℝ) ^ K * x ^ KCloses the goal.
Uses library
Finset.IocThe finset $(a, b]$ of elementsxsuch thata < xandx ≤ b. ,Finset.rangerange nis the set of natural numbers less thann. .Lean, lines 602–604
calc ((∏ L ∈ Finset.Ioc n (2 * n), ((2 : ℝ) ^ K - 2 ^ L)) / ∏ i ∈ Finset.range (n + 1), ((2 : ℝ) ^ K - 2 ^ i)) * x ^ K ≤ 2 * (1 / 2) ^ K * x ^ K := by gcongrtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 602–604 at
dfc7b5cc45a9↗h4_big.s7.hGH.s1.s3calc routine: ringCloses the goal.
Lean, line 605
_ = 2 * (x / 2) ^ K := by ring
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 605 at
dfc7b5cc45a9↗
h4_big.s7.hGH.s2caseLeaves
(0 : ℝ) ≤ (0 : ℝ).Uses library
le_reflThe relation≤on a preorder is reflexive. .Lean, line 606
· exact le_refl 0
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 606 at
dfc7b5cc45a9↗
h4_big.s7.hqhavex / (2 : ℝ) < (1 : ℝ)routine: linarithLeaves
r ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)), withhq : x / (2 : ℝ) < (1 : ℝ).Lean, line 607
have hq : x / 2 < 1 := by linarith
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 607 at
dfc7b5cc45a9↗h4_big.s7.hHsumhaveHasSum H ((2 : ℝ) * (x / (2 : ℝ)) ^ ((2 : ℕ) * n + (1 : ℕ)) * ((1 : ℝ) - x / (2 : ℝ))⁻¹)Leaves
r ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)), withhHsum : HasSum H ((2 : ℝ) * (x / (2 : ℝ)) ^ ((2 : ℕ) * n + (1 : ℕ)) * ((1 : ℝ) - x / (2 : ℝ))⁻¹).Uses library
HasSumHasSum f a Lmeans that the (potentially infinite) sum of thef bforb : βconverges toaalong the SummationFilterL. ,hasSum_nat_add_iff',sub_zero.Lean, lines 608–618
have hHsum : HasSum H (2 * (x / 2) ^ (2 * n + 1) * (1 - x / 2)⁻¹) := by rw [← hasSum_nat_add_iff' (2 * n + 1)] have hz : ∑ i ∈ Finset.range (2 * n + 1), H i = 0 := Finset.sum_eq_zero (fun i hi => by simp only [hH]; rw [if_neg (by have := Finset.mem_range.mp hi; omega)]) rw [hz, sub_zero] have hgeo := (hasSum_geometric_of_lt_one (by positivity) hq).mul_left (2 * (x / 2) ^ (2 * n + 1)) have hfun : (fun s => H (s + (2 * n + 1))) = fun s => 2 * (x / 2) ^ (2 * n + 1) * (x / 2) ^ s := by funext s; simp only [hH]; rw [if_pos (by omega), pow_add]; ring rw [hfun] exact hgeotargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 608–618 at
dfc7b5cc45a9↗h4_big.s7.hHsum.hzhave∑ i ∈ Finset.range ((2 : ℕ) * n + (1 : ℕ)), H i = (0 : ℝ)Leaves
HasSum (fun (n_1 : ℕ) => H (n_1 + ((2 : ℕ) * n + (1 : ℕ)))) ((2 : ℝ) * (x / (2 : ℝ)) ^ ((2 : ℕ) * n + (1 : ℕ)) * ((1 : ℝ) - x / (2 : ℝ))⁻¹ - ∑ i ∈ Finset.range ((2 : ℕ) * n + (1 : ℕ)), H i), withhz : ∑ i ∈ Finset.range ((2 : ℕ) * n + (1 : ℕ)), H i = (0 : ℝ).Uses library
Finset.rangerange nis the set of natural numbers less thann. ,Finset.sum_eq_zero,if_neg.Lean, lines 610–612
have hz : ∑ i ∈ Finset.range (2 * n + 1), H i = 0 := Finset.sum_eq_zero (fun i hi => by simp only [hH]; rw [if_neg (by have := Finset.mem_range.mp hi; omega)])targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 610–612 at
dfc7b5cc45a9↗h4_big.s7.hHsum.hz.thishavei < (2 : ℕ) * n + (1 : ℕ)Leaves
¬(2 : ℕ) * n < i, withthis : i < (2 : ℕ) * n + (1 : ℕ).Uses library
Finset.mem_range.Lean, line 612
simp only [hH]; rw [if_neg (by have := Finset.mem_range.mp hi; omega)])
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 612 at
dfc7b5cc45a9↗
h4_big.s7.hHsum.hgeohaveHasSum (fun (i : ℕ) => (2 : ℝ) * (x / (2 : ℝ)) ^ ((2 : ℕ) * n + (1 : ℕ)) * (x / (2 : ℝ)) ^ i) ((2 : ℝ) * (x / (2 : ℝ)) ^ ((2 : ℕ) * n + (1 : ℕ)) * ((1 : ℝ) - x / (2 : ℝ))⁻¹)Leaves
HasSum (fun (n_1 : ℕ) => H (n_1 + ((2 : ℕ) * n + (1 : ℕ)))) ((2 : ℝ) * (x / (2 : ℝ)) ^ ((2 : ℕ) * n + (1 : ℕ)) * ((1 : ℝ) - x / (2 : ℝ))⁻¹), withhgeo : HasSum (fun (i : ℕ) => (2 : ℝ) * (x / (2 : ℝ)) ^ ((2 : ℕ) * n + (1 : ℕ)) * (x / (2 : ℝ)) ^ i) ((2 : ℝ) * (x / (2 : ℝ)) ^ ((2 : ℕ) * n + (1 : ℕ)) * ((1 : ℝ) - x / (2 : ℝ))⁻¹).Uses library
hasSum_geometric_of_lt_one.Lean, line 614
have hgeo := (hasSum_geometric_of_lt_one (by positivity) hq).mul_left (2 * (x / 2) ^ (2 * n + 1))
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 614 at
dfc7b5cc45a9↗h4_big.s7.hHsum.hfunhave(fun (s : ℕ) => H (s + ((2 : ℕ) * n + (1 : ℕ)))) = fun (s : ℕ) => (2 : ℝ) * (x / (2 : ℝ)) ^ ((2 : ℕ) * n + (1 : ℕ)) * (x / (2 : ℝ)) ^ sLeaves
HasSum (fun (n_1 : ℕ) => H (n_1 + ((2 : ℕ) * n + (1 : ℕ)))) ((2 : ℝ) * (x / (2 : ℝ)) ^ ((2 : ℕ) * n + (1 : ℕ)) * ((1 : ℝ) - x / (2 : ℝ))⁻¹), withhfun : (fun (s : ℕ) => H (s + ((2 : ℕ) * n + (1 : ℕ)))) = fun (s : ℕ) => (2 : ℝ) * (x / (2 : ℝ)) ^ ((2 : ℕ) * n + (1 : ℕ)) * (x / (2 : ℝ)) ^ s.Uses library
if_pos,pow_add.Lean, lines 615–616
have hfun : (fun s => H (s + (2 * n + 1))) = fun s => 2 * (x / 2) ^ (2 * n + 1) * (x / 2) ^ s := by funext s; simp only [hH]; rw [if_pos (by omega), pow_add]; ringtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 615–616 at
dfc7b5cc45a9↗
h4_big.s7.hrlehaver ≤ (2 : ℝ) * (x / (2 : ℝ)) ^ ((2 : ℕ) * n + (1 : ℕ)) * ((1 : ℝ) - x / (2 : ℝ))⁻¹Leaves
r ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)), withhrle : r ≤ (2 : ℝ) * (x / (2 : ℝ)) ^ ((2 : ℕ) * n + (1 : ℕ)) * ((1 : ℝ) - x / (2 : ℝ))⁻¹.Uses library
hasSum_le.Lean, line 619
have hrle : r ≤ 2 * (x / 2) ^ (2 * n + 1) * (1 - x / 2)⁻¹ := hasSum_le hGH hS hHsum
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 619 at
dfc7b5cc45a9↗h4_big.s7.hr0have(0 : ℝ) ≤ rLeaves
r ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)), withhr0 : (0 : ℝ) ≤ r.Uses library
le_of_lt,hasSum_lt,hasSum_zeroConstant zero function has sum0.Lean, lines 620–621
have hr0 : 0 ≤ r := le_of_lt (hasSum_lt (f := fun _ => (0 : ℝ)) (g := G) (i := 2 * n + 1) (fun K => hGnn K) hGpos hasSum_zero hS)targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 620–621 at
dfc7b5cc45a9↗h4_big.s7.hr8haver ≤ (8 : ℝ) * (x / (2 : ℝ)) ^ ((2 : ℕ) * n + (1 : ℕ))Leaves
r ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)), withhr8 : r ≤ (8 : ℝ) * (x / (2 : ℝ)) ^ ((2 : ℕ) * n + (1 : ℕ)).Lean, lines 622–628
have hr8 : r ≤ 8 * (x / 2) ^ (2 * n + 1) := by have hinv : (1 - x / 2)⁻¹ ≤ 4 := by rw [inv_le_comm₀ (by linarith) (by norm_num)]; linarith have hp : 0 ≤ 2 * (x / 2) ^ (2 * n + 1) := by positivity calc r ≤ 2 * (x / 2) ^ (2 * n + 1) * (1 - x / 2)⁻¹ := hrle _ ≤ 2 * (x / 2) ^ (2 * n + 1) * 4 := by gcongr _ = 8 * (x / 2) ^ (2 * n + 1) := by ringtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 622–628 at
dfc7b5cc45a9↗h4_big.s7.hr8.hinvhave((1 : ℝ) - x / (2 : ℝ))⁻¹ ≤ (4 : ℝ)Leaves
r ≤ (8 : ℝ) * (x / (2 : ℝ)) ^ ((2 : ℕ) * n + (1 : ℕ)), withhinv : ((1 : ℝ) - x / (2 : ℝ))⁻¹ ≤ (4 : ℝ).Uses library
inv_le_comm₀See alsoinv_le_of_inv_le₀for a one-sided implication with one fewer assumption. .Lean, lines 623–624
have hinv : (1 - x / 2)⁻¹ ≤ 4 := by rw [inv_le_comm₀ (by linarith) (by norm_num)]; linarithtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 623–624 at
dfc7b5cc45a9↗h4_big.s7.hr8.hphave(0 : ℝ) ≤ (2 : ℝ) * (x / (2 : ℝ)) ^ ((2 : ℕ) * n + (1 : ℕ))routine: positivityLeaves
r ≤ (8 : ℝ) * (x / (2 : ℝ)) ^ ((2 : ℕ) * n + (1 : ℕ)), withhp : (0 : ℝ) ≤ (2 : ℝ) * (x / (2 : ℝ)) ^ ((2 : ℕ) * n + (1 : ℕ)).Lean, line 625
have hp : 0 ≤ 2 * (x / 2) ^ (2 * n + 1) := by positivity
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 625 at
dfc7b5cc45a9↗h4_big.s7.hr8.s3calcr ≤ (2 : ℝ) * (x / (2 : ℝ)) ^ ((2 : ℕ) * n + (1 : ℕ)) * ((1 : ℝ) - x / (2 : ℝ))⁻¹Closes the goal.
Lean, line 626
calc r ≤ 2 * (x / 2) ^ (2 * n + 1) * (1 - x / 2)⁻¹ := hrle
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 626 at
dfc7b5cc45a9↗h4_big.s7.hr8.s4calcCloses the goal.
Lean, line 627
_ ≤ 2 * (x / 2) ^ (2 * n + 1) * 4 := by gcongr
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 627 at
dfc7b5cc45a9↗h4_big.s7.hr8.s5calc routine: ringCloses the goal.
Lean, line 628
_ = 8 * (x / 2) ^ (2 * n + 1) := by ring
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 628 at
dfc7b5cc45a9↗
h4_big.s7.hsqhaver ^ (2 : ℕ) ≤ ((8 : ℝ) * (x / (2 : ℝ)) ^ ((2 : ℕ) * n + (1 : ℕ))) ^ (2 : ℕ)Leaves
r ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)), withhsq : r ^ (2 : ℕ) ≤ ((8 : ℝ) * (x / (2 : ℝ)) ^ ((2 : ℕ) * n + (1 : ℕ))) ^ (2 : ℕ).Uses library
pow_le_pow_left₀.Lean, line 629
have hsq : r ^ 2 ≤ (8 * (x / 2) ^ (2 * n + 1)) ^ 2 := pow_le_pow_left₀ hr0 hr8 2
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 629 at
dfc7b5cc45a9↗h4_big.s7.hnathave(64 : ℕ) * (3 : ℕ) ^ ((4 : ℕ) * n + (2 : ℕ)) * (2 : ℕ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℕ) ^ ((2 : ℕ) * n + (4 : ℕ)) * ((2 : ℕ) ^ (n + (1 : ℕ))) ^ ((4 : ℕ) * n + (2 : ℕ))Leaves
r ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)), withhnat : (64 : ℕ) * (3 : ℕ) ^ ((4 : ℕ) * n + (2 : ℕ)) * (2 : ℕ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℕ) ^ ((2 : ℕ) * n + (4 : ℕ)) * ((2 : ℕ) ^ (n + (1 : ℕ))) ^ ((4 : ℕ) * n + (2 : ℕ)).Lean, lines 630–639
have hnat : 64 * 3 ^ (4 * n + 2) * 2 ^ (4 * n * n) ≤ 2 ^ (2 * n + 4) * (2 ^ (n + 1)) ^ (4 * n + 2) := by have e1 : (2 : ℕ) ^ (2 * n + 4) * (2 ^ (n + 1)) ^ (4 * n + 2) = 2 ^ (4 * n * n) * (64 * 256 ^ n) := by rw [← pow_mul, ← pow_add, show (256 : ℕ) = 2 ^ 8 by norm_num, ← pow_mul, show (64 : ℕ) = 2 ^ 6 by norm_num, ← pow_add, ← pow_add] congr 1; ring have e2 : 64 * 3 ^ (4 * n + 2) * 2 ^ (4 * n * n) = 2 ^ (4 * n * n) * (64 * (9 * 81 ^ n)) := by rw [show (81 : ℕ) = 3 ^ 4 by norm_num, ← pow_mul, pow_add]; ring rw [e1, e2] have := ineq_pow n hn gcongrtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 630–639 at
dfc7b5cc45a9↗h4_big.s7.hnat.e1have(2 : ℕ) ^ ((2 : ℕ) * n + (4 : ℕ)) * ((2 : ℕ) ^ (n + (1 : ℕ))) ^ ((4 : ℕ) * n + (2 : ℕ)) = (2 : ℕ) ^ ((4 : ℕ) * n * n) * ((64 : ℕ) * (256 : ℕ) ^ n)Leaves
(64 : ℕ) * (3 : ℕ) ^ ((4 : ℕ) * n + (2 : ℕ)) * (2 : ℕ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℕ) ^ ((2 : ℕ) * n + (4 : ℕ)) * ((2 : ℕ) ^ (n + (1 : ℕ))) ^ ((4 : ℕ) * n + (2 : ℕ)), withe1 : (2 : ℕ) ^ ((2 : ℕ) * n + (4 : ℕ)) * ((2 : ℕ) ^ (n + (1 : ℕ))) ^ ((4 : ℕ) * n + (2 : ℕ)) = (2 : ℕ) ^ ((4 : ℕ) * n * n) * ((64 : ℕ) * (256 : ℕ) ^ n).Uses library
pow_mul,pow_add.Lean, lines 631–634
have e1 : (2 : ℕ) ^ (2 * n + 4) * (2 ^ (n + 1)) ^ (4 * n + 2) = 2 ^ (4 * n * n) * (64 * 256 ^ n) := by rw [← pow_mul, ← pow_add, show (256 : ℕ) = 2 ^ 8 by norm_num, ← pow_mul, show (64 : ℕ) = 2 ^ 6 by norm_num, ← pow_add, ← pow_add] congr 1; ringtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 631–634 at
dfc7b5cc45a9↗h4_big.s7.hnat.e2have(64 : ℕ) * (3 : ℕ) ^ ((4 : ℕ) * n + (2 : ℕ)) * (2 : ℕ) ^ ((4 : ℕ) * n * n) = (2 : ℕ) ^ ((4 : ℕ) * n * n) * ((64 : ℕ) * ((9 : ℕ) * (81 : ℕ) ^ n))Leaves
(64 : ℕ) * (3 : ℕ) ^ ((4 : ℕ) * n + (2 : ℕ)) * (2 : ℕ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℕ) ^ ((2 : ℕ) * n + (4 : ℕ)) * ((2 : ℕ) ^ (n + (1 : ℕ))) ^ ((4 : ℕ) * n + (2 : ℕ)), withe2 : (64 : ℕ) * (3 : ℕ) ^ ((4 : ℕ) * n + (2 : ℕ)) * (2 : ℕ) ^ ((4 : ℕ) * n * n) = (2 : ℕ) ^ ((4 : ℕ) * n * n) * ((64 : ℕ) * ((9 : ℕ) * (81 : ℕ) ^ n)).Uses library
pow_mul,pow_add.Lean, lines 635–636
have e2 : 64 * 3 ^ (4 * n + 2) * 2 ^ (4 * n * n) = 2 ^ (4 * n * n) * (64 * (9 * 81 ^ n)) := by rw [show (81 : ℕ) = 3 ^ 4 by norm_num, ← pow_mul, pow_add]; ringtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 635–636 at
dfc7b5cc45a9↗h4_big.s7.hnat.thishave(9 : ℕ) * (81 : ℕ) ^ n ≤ (256 : ℕ) ^ nLeaves
(2 : ℕ) ^ ((4 : ℕ) * n * n) * ((64 : ℕ) * ((9 : ℕ) * (81 : ℕ) ^ n)) ≤ (2 : ℕ) ^ ((4 : ℕ) * n * n) * ((64 : ℕ) * (256 : ℕ) ^ n), withthis : (9 : ℕ) * (81 : ℕ) ^ n ≤ (256 : ℕ) ^ n.Lean, line 638
have := ineq_pow n hn
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 638 at
dfc7b5cc45a9↗
h4_big.s7.hrealhave(64 : ℝ) * (3 : ℝ) ^ ((4 : ℕ) * n + (2 : ℕ)) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)) * ((2 : ℝ) ^ (n + (1 : ℕ))) ^ ((4 : ℕ) * n + (2 : ℕ))Leaves
r ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)), withhreal : (64 : ℝ) * (3 : ℝ) ^ ((4 : ℕ) * n + (2 : ℕ)) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)) * ((2 : ℝ) ^ (n + (1 : ℕ))) ^ ((4 : ℕ) * n + (2 : ℕ)).Lean, lines 640–641
have hreal : (64 : ℝ) * 3 ^ (4 * n + 2) * 2 ^ (4 * n * n) ≤ 2 ^ (2 * n + 4) * (2 ^ (n + 1)) ^ (4 * n + 2) := by exact_mod_cast hnattargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 640–641 at
dfc7b5cc45a9↗h4_big.s7.hx2'havex / (2 : ℝ) = (3 : ℝ) / (2 : ℝ) ^ (n + (1 : ℕ))Leaves
r ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)), withhx2' : x / (2 : ℝ) = (3 : ℝ) / (2 : ℝ) ^ (n + (1 : ℕ)).Uses library
pow_succ.Lean, line 642
have hx2' : x / 2 = 3 / 2 ^ (n + 1) := by rw [hxdef, pow_succ]; field_simp
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 642 at
dfc7b5cc45a9↗h4_big.s7.hsq'haver ^ (2 : ℕ) ≤ (64 : ℝ) * (x / (2 : ℝ)) ^ ((4 : ℕ) * n + (2 : ℕ))Leaves
r ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)), withhsq' : r ^ (2 : ℕ) ≤ (64 : ℝ) * (x / (2 : ℝ)) ^ ((4 : ℕ) * n + (2 : ℕ)).Lean, lines 643–645
have hsq' : r ^ 2 ≤ 64 * (x / 2) ^ (4 * n + 2) := by calc r ^ 2 ≤ (8 * (x / 2) ^ (2 * n + 1)) ^ 2 := hsq _ = 64 * (x / 2) ^ (4 * n + 2) := by ringtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 643–645 at
dfc7b5cc45a9↗h4_big.s7.hsq'.s1calcr ^ (2 : ℕ) ≤ ((8 : ℝ) * (x / (2 : ℝ)) ^ ((2 : ℕ) * n + (1 : ℕ))) ^ (2 : ℕ)Closes the goal.
Lean, line 644
calc r ^ 2 ≤ (8 * (x / 2) ^ (2 * n + 1)) ^ 2 := hsq
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 644 at
dfc7b5cc45a9↗h4_big.s7.hsq'.s2calc routine: ringCloses the goal.
Lean, line 645
_ = 64 * (x / 2) ^ (4 * n + 2) := by ring
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 645 at
dfc7b5cc45a9↗
h4_big.s7.hkeyhave(x / (2 : ℝ)) ^ ((4 : ℕ) * n + (2 : ℕ)) * ((2 : ℝ) ^ (n + (1 : ℕ))) ^ ((4 : ℕ) * n + (2 : ℕ)) = (3 : ℝ) ^ ((4 : ℕ) * n + (2 : ℕ))Leaves
r ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)), withhkey : (x / (2 : ℝ)) ^ ((4 : ℕ) * n + (2 : ℕ)) * ((2 : ℝ) ^ (n + (1 : ℕ))) ^ ((4 : ℕ) * n + (2 : ℕ)) = (3 : ℝ) ^ ((4 : ℕ) * n + (2 : ℕ)).Uses library
mul_pow,div_mul_cancel₀.Lean, lines 646–647
have hkey : (x / 2) ^ (4 * n + 2) * ((2 : ℝ) ^ (n + 1)) ^ (4 * n + 2) = 3 ^ (4 * n + 2) := by rw [← mul_pow, hx2', div_mul_cancel₀ _ (by positivity)]targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 646–647 at
dfc7b5cc45a9↗h4_big.s7.hPhave(0 : ℝ) < ((2 : ℝ) ^ (n + (1 : ℕ))) ^ ((4 : ℕ) * n + (2 : ℕ))routine: positivityLeaves
r ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)), withhP : (0 : ℝ) < ((2 : ℝ) ^ (n + (1 : ℕ))) ^ ((4 : ℕ) * n + (2 : ℕ)).Lean, line 648
have hP : (0 : ℝ) < ((2 : ℝ) ^ (n + 1)) ^ (4 * n + 2) := by positivity
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 648 at
dfc7b5cc45a9↗h4_big.s7.hmainhave(64 : ℝ) * (x / (2 : ℝ)) ^ ((4 : ℕ) * n + (2 : ℕ)) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ))Leaves
r ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)), withhmain : (64 : ℝ) * (x / (2 : ℝ)) ^ ((4 : ℕ) * n + (2 : ℕ)) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)).Uses library
le_of_mul_le_mul_right.Lean, lines 649–653
have hmain : 64 * (x / 2) ^ (4 * n + 2) * (2 : ℝ) ^ (4 * n * n) ≤ 2 ^ (2 * n + 4) := by refine le_of_mul_le_mul_right ?_ hP calc 64 * (x / 2) ^ (4 * n + 2) * (2 : ℝ) ^ (4 * n * n) * ((2 : ℝ) ^ (n + 1)) ^ (4 * n + 2) = 64 * 3 ^ (4 * n + 2) * 2 ^ (4 * n * n) := by rw [← hkey]; ring _ ≤ 2 ^ (2 * n + 4) * ((2 : ℝ) ^ (n + 1)) ^ (4 * n + 2) := hrealtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 649–653 at
dfc7b5cc45a9↗h4_big.s7.hmain.s1calc(64 : ℝ) * (x / (2 : ℝ)) ^ ((4 : ℕ) * n + (2 : ℕ)) * (2 : ℝ) ^ ((4 : ℕ) * n * n) * ((2 : ℝ) ^ (n + (1 : ℕ))) ^ ((4 : ℕ) * n + (2 : ℕ)) = (64 : ℝ) * (3 : ℝ) ^ ((4 : ℕ) * n + (2 : ℕ)) * (2 : ℝ) ^ ((4 : ℕ) * n * n)Closes the goal.
Lean, lines 651–652
calc 64 * (x / 2) ^ (4 * n + 2) * (2 : ℝ) ^ (4 * n * n) * ((2 : ℝ) ^ (n + 1)) ^ (4 * n + 2) = 64 * 3 ^ (4 * n + 2) * 2 ^ (4 * n * n) := by rw [← hkey]; ringtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 651–652 at
dfc7b5cc45a9↗h4_big.s7.hmain.s2calc(64 : ℝ) * (3 : ℝ) ^ ((4 : ℕ) * n + (2 : ℕ)) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)) * ((2 : ℝ) ^ (n + (1 : ℕ))) ^ ((4 : ℕ) * n + (2 : ℕ))Closes the goal.
Lean, line 653
_ ≤ 2 ^ (2 * n + 4) * ((2 : ℝ) ^ (n + 1)) ^ (4 * n + 2) := hreal
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 653 at
dfc7b5cc45a9↗
h4_big.s7.s15calcr ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (64 : ℝ) * (x / (2 : ℝ)) ^ ((4 : ℕ) * n + (2 : ℕ)) * (2 : ℝ) ^ ((4 : ℕ) * n * n)Closes the goal.
Lean, line 654
calc r ^ 2 * (2 : ℝ) ^ (4 * n * n) ≤ 64 * (x / 2) ^ (4 * n + 2) * 2 ^ (4 * n * n) := by gcongr
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 654 at
dfc7b5cc45a9↗h4_big.s7.s16calc(64 : ℝ) * (x / (2 : ℝ)) ^ ((4 : ℕ) * n + (2 : ℕ)) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ))Closes the goal.
Lean, line 655
_ ≤ 2 ^ (2 * n + 4) := hmain
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 655 at
dfc7b5cc45a9↗
T_factshave(Summable fun (m : ℕ) => (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ))) ∧ (0 : ℝ) < ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)) ∧ ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)) ≤ (2 / 5 : ℝ)Leaves
∀ (Qc : ℕ → ℕ → ℚ), (Qc = fun (n k : ℕ) => ((-1 : ℚ) ^ k * (2 : ℚ) ^ (k * (k - (1 : ℕ)) / (2 : ℕ)) * ∏ i ∈ Finset.range k, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * ∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - k - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) → ∀ (Qx : ℕ → ℚ), (Qx = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), Qc n k * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k) → ∀ (Aq : ℕ → ℚ), (Aq = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), (∑ j ∈ Finset.range (k + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (k - j) - (1 : ℚ))) * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k + Qx n * ∑ j ∈ Finset.range n, (3 : ℚ) / ((2 : ℚ) ^ (j + (1 : ℕ)) - (3 : ℚ))) → ∀ (n : ℕ), (0 : ℝ) < (↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ) ∧ ((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ)) ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)), withT_facts : (Summable fun (m : ℕ) => (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ))) ∧ (0 : ℝ) < ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)) ∧ ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)) ≤ (2 / 5 : ℝ).Uses library
SummableSummable fmeans thatfhas some (infinite) sum with respect toL. ,And.introAnd.intro : a → b → a ∧ bis the constructor for the And operation. .Lean, lines 658–681
have T_facts : Summable (fun m : ℕ => (1 : ℝ) / (2 ^ (m + 3) - 3)) ∧ 0 < ∑' m : ℕ, (1 : ℝ) / (2 ^ (m + 3) - 3) ∧ ∑' m : ℕ, (1 : ℝ) / (2 ^ (m + 3) - 3) ≤ 2 / 5 := by have h5 : ∀ m : ℕ, 5 * (2 : ℝ) ^ m ≤ 2 ^ (m + 3) - 3 := by intro m have h1 : (1 : ℝ) ≤ 2 ^ m := one_le_pow₀ (by norm_num) have e : (2 : ℝ) ^ (m + 3) = 8 * 2 ^ m := by rw [pow_add]; norm_num; ring rw [e]; linarith have hpos : ∀ m : ℕ, 0 < (2 : ℝ) ^ (m + 3) - 3 := fun m => by have := h5 m; have : (0 : ℝ) < 2 ^ m := by positivity linarith have hle : ∀ m : ℕ, (1 : ℝ) / (2 ^ (m + 3) - 3) ≤ (1 / 5) * (1 / 2) ^ m := by intro m have e : (1 / 5 : ℝ) * (1 / 2) ^ m = 1 / (5 * 2 ^ m) := by rw [one_div_pow]; field_simp rw [e] exact one_div_le_one_div_of_le (by positivity) (h5 m) have hs : Summable (fun m : ℕ => (1 : ℝ) / (2 ^ (m + 3) - 3)) := Summable.of_nonneg_of_le (fun m => le_of_lt (one_div_pos.mpr (hpos m))) hle (summable_geometric_two.mul_left (1 / 5)) refine ⟨hs, ?_, ?_⟩ · exact hs.tsum_pos (fun m => le_of_lt (one_div_pos.mpr (hpos m))) 0 (one_div_pos.mpr (hpos 0)) · calc ∑' m : ℕ, (1 : ℝ) / (2 ^ (m + 3) - 3) ≤ ∑' m : ℕ, (1 / 5 : ℝ) * (1 / 2) ^ m := hs.tsum_le_tsum hle (summable_geometric_two.mul_left (1 / 5)) _ = 2 / 5 := by rw [tsum_mul_left, tsum_geometric_two]; norm_numtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 658–681 at
dfc7b5cc45a9↗T_facts.h5have∀ (m : ℕ), (5 : ℝ) * (2 : ℝ) ^ m ≤ (2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)Leaves
(Summable fun (m : ℕ) => (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ))) ∧ (0 : ℝ) < ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)) ∧ ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)) ≤ (2 / 5 : ℝ), withh5 : ∀ (m : ℕ), (5 : ℝ) * (2 : ℝ) ^ m ≤ (2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ).Lean, lines 660–664
have h5 : ∀ m : ℕ, 5 * (2 : ℝ) ^ m ≤ 2 ^ (m + 3) - 3 := by intro m have h1 : (1 : ℝ) ≤ 2 ^ m := one_le_pow₀ (by norm_num) have e : (2 : ℝ) ^ (m + 3) = 8 * 2 ^ m := by rw [pow_add]; norm_num; ring rw [e]; linarithtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 660–664 at
dfc7b5cc45a9↗T_facts.h5.h1have(1 : ℝ) ≤ (2 : ℝ) ^ mLeaves
(5 : ℝ) * (2 : ℝ) ^ m ≤ (2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ), withh1 : (1 : ℝ) ≤ (2 : ℝ) ^ m.Uses library
one_le_pow₀.Lean, line 662
have h1 : (1 : ℝ) ≤ 2 ^ m := one_le_pow₀ (by norm_num)
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 662 at
dfc7b5cc45a9↗T_facts.h5.ehave(2 : ℝ) ^ (m + (3 : ℕ)) = (8 : ℝ) * (2 : ℝ) ^ mLeaves
(5 : ℝ) * (2 : ℝ) ^ m ≤ (2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ), withe : (2 : ℝ) ^ (m + (3 : ℕ)) = (8 : ℝ) * (2 : ℝ) ^ m.Uses library
pow_add.Lean, line 663
have e : (2 : ℝ) ^ (m + 3) = 8 * 2 ^ m := by rw [pow_add]; norm_num; ring
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 663 at
dfc7b5cc45a9↗
T_facts.hposhave∀ (m : ℕ), (0 : ℝ) < (2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)Leaves
(Summable fun (m : ℕ) => (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ))) ∧ (0 : ℝ) < ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)) ∧ ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)) ≤ (2 / 5 : ℝ), withhpos : ∀ (m : ℕ), (0 : ℝ) < (2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ).Lean, lines 665–667
have hpos : ∀ m : ℕ, 0 < (2 : ℝ) ^ (m + 3) - 3 := fun m => by have := h5 m; have : (0 : ℝ) < 2 ^ m := by positivity linarithtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 665–667 at
dfc7b5cc45a9↗T_facts.hpos.s1have(5 : ℝ) * (2 : ℝ) ^ m ≤ (2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)Leaves
(0 : ℝ) < (2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ), withthis : (5 : ℝ) * (2 : ℝ) ^ m ≤ (2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ).Lean, line 666
have := h5 m; have : (0 : ℝ) < 2 ^ m := by positivity
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 666 at
dfc7b5cc45a9↗T_facts.hpos.s2have(0 : ℝ) < (2 : ℝ) ^ mroutine: positivityLeaves
(0 : ℝ) < (2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ), withthis : (0 : ℝ) < (2 : ℝ) ^ m.Lean, line 666
have := h5 m; have : (0 : ℝ) < 2 ^ m := by positivity
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 666 at
dfc7b5cc45a9↗
T_facts.hlehave∀ (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)) ≤ (1 / 5 : ℝ) * (1 / 2 : ℝ) ^ mLeaves
(Summable fun (m : ℕ) => (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ))) ∧ (0 : ℝ) < ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)) ∧ ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)) ≤ (2 / 5 : ℝ), withhle : ∀ (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)) ≤ (1 / 5 : ℝ) * (1 / 2 : ℝ) ^ m.Uses library
one_div_le_one_div_of_le.Lean, lines 668–673
have hle : ∀ m : ℕ, (1 : ℝ) / (2 ^ (m + 3) - 3) ≤ (1 / 5) * (1 / 2) ^ m := by intro m have e : (1 / 5 : ℝ) * (1 / 2) ^ m = 1 / (5 * 2 ^ m) := by rw [one_div_pow]; field_simp rw [e] exact one_div_le_one_div_of_le (by positivity) (h5 m)targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 668–673 at
dfc7b5cc45a9↗T_facts.hle.ehave(1 / 5 : ℝ) * (1 / 2 : ℝ) ^ m = (1 : ℝ) / ((5 : ℝ) * (2 : ℝ) ^ m)Leaves
(1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)) ≤ (1 / 5 : ℝ) * (1 / 2 : ℝ) ^ m, withe : (1 / 5 : ℝ) * (1 / 2 : ℝ) ^ m = (1 : ℝ) / ((5 : ℝ) * (2 : ℝ) ^ m).Uses library
one_div_pow.Lean, lines 670–671
have e : (1 / 5 : ℝ) * (1 / 2) ^ m = 1 / (5 * 2 ^ m) := by rw [one_div_pow]; field_simptargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 670–671 at
dfc7b5cc45a9↗
T_facts.hshaveSummable fun (m : ℕ) => (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ))Leaves
(Summable fun (m : ℕ) => (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ))) ∧ (0 : ℝ) < ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)) ∧ ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)) ≤ (2 / 5 : ℝ), withhs : Summable fun (m : ℕ) => (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)).Uses library
SummableSummable fmeans thatfhas some (infinite) sum with respect toL. ,Summable.of_nonneg_of_leComparison test of convergence of series of non-negative real numbers. ,le_of_lt,one_div_pos,summable_geometric_two.Lean, lines 674–676
have hs : Summable (fun m : ℕ => (1 : ℝ) / (2 ^ (m + 3) - 3)) := Summable.of_nonneg_of_le (fun m => le_of_lt (one_div_pos.mpr (hpos m))) hle (summable_geometric_two.mul_left (1 / 5))targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 674–676 at
dfc7b5cc45a9↗T_facts.s5caseLeaves
(0 : ℝ) < ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)).Uses library
le_of_lt,one_div_pos.Lean, line 678
· exact hs.tsum_pos (fun m => le_of_lt (one_div_pos.mpr (hpos m))) 0 (one_div_pos.mpr (hpos 0))
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 678 at
dfc7b5cc45a9↗T_facts.s6caseLeaves
∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)) ≤ (2 / 5 : ℝ).Lean, lines 679–681
· calc ∑' m : ℕ, (1 : ℝ) / (2 ^ (m + 3) - 3) ≤ ∑' m : ℕ, (1 / 5 : ℝ) * (1 / 2) ^ m := hs.tsum_le_tsum hle (summable_geometric_two.mul_left (1 / 5)) _ = 2 / 5 := by rw [tsum_mul_left, tsum_geometric_two]; norm_numtargets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 679–681 at
dfc7b5cc45a9↗T_facts.s6.s1calc∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)) ≤ ∑' (m : ℕ), (1 / 5 : ℝ) * (1 / 2 : ℝ) ^ mCloses the goal.
Uses library
summable_geometric_two.Lean, lines 679–680
· calc ∑' m : ℕ, (1 : ℝ) / (2 ^ (m + 3) - 3) ≤ ∑' m : ℕ, (1 / 5 : ℝ) * (1 / 2) ^ m := hs.tsum_le_tsum hle (summable_geometric_two.mul_left (1 / 5))targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 679–680 at
dfc7b5cc45a9↗T_facts.s6.s2calcCloses the goal.
Uses library
tsum_mul_left,tsum_geometric_two.Lean, line 681
_ = 2 / 5 := by rw [tsum_mul_left, tsum_geometric_two]; norm_num
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 681 at
dfc7b5cc45a9↗
s17obtain(Summable fun (m : ℕ) => (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ))) ∧ (0 : ℝ) < ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)) ∧ ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)) ≤ (2 / 5 : ℝ)Leaves
∀ (Qc : ℕ → ℕ → ℚ), (Qc = fun (n k : ℕ) => ((-1 : ℚ) ^ k * (2 : ℚ) ^ (k * (k - (1 : ℕ)) / (2 : ℕ)) * ∏ i ∈ Finset.range k, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) * ∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - k - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) → ∀ (Qx : ℕ → ℚ), (Qx = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), Qc n k * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k) → ∀ (Aq : ℕ → ℚ), (Aq = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), (∑ j ∈ Finset.range (k + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (k - j) - (1 : ℚ))) * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k + Qx n * ∑ j ∈ Finset.range n, (3 : ℚ) / ((2 : ℚ) ^ (j + (1 : ℕ)) - (3 : ℚ))) → ∀ (n : ℕ), (0 : ℝ) < (↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ) ∧ ((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq n) : ℝ)) ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * n * n) ≤ (2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)), withleft✝ : Summable fun (m : ℕ) => (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)),hTpos : (0 : ℝ) < ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)),hTle : ∑' (m : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (m + (3 : ℕ)) - (3 : ℝ)) ≤ (2 / 5 : ℝ).Lean, line 682
obtain ⟨_, hTpos, hTle⟩ := T_facts
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 682 at
dfc7b5cc45a9↗hQx0haveQx (0 : ℕ) = (1 : ℚ)Leaves
(0 : ℝ) < (↑(Qx (0 : ℕ)) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq (0 : ℕ)) : ℝ) ∧ ((↑(Qx (0 : ℕ)) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq (0 : ℕ)) : ℝ)) ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * (0 : ℕ) * (0 : ℕ)) ≤ (2 : ℝ) ^ ((2 : ℕ) * (0 : ℕ) + (4 : ℕ)), withhQx0 : Qx (0 : ℕ) = (1 : ℚ).Lean, line 686
have hQx0 : Qx 0 = 1 := by rw [hQx, hQc]; simp
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 686 at
dfc7b5cc45a9↗hAq0haveAq (0 : ℕ) = (0 : ℚ)Leaves
(0 : ℝ) < (↑(Qx (0 : ℕ)) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq (0 : ℕ)) : ℝ) ∧ ((↑(Qx (0 : ℕ)) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq (0 : ℕ)) : ℝ)) ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * (0 : ℕ) * (0 : ℕ)) ≤ (2 : ℝ) ^ ((2 : ℕ) * (0 : ℕ) + (4 : ℕ)), withhAq0 : Aq (0 : ℕ) = (0 : ℚ).Lean, line 687
have hAq0 : Aq 0 = 0 := by rw [hAq]; simp
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 687 at
dfc7b5cc45a9↗ehave((1 : ℝ) * ((3 : ℝ) * T) - (0 : ℝ)) ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * (0 : ℕ) * (0 : ℕ)) = (9 : ℝ) * (T * T)routine: ringLeaves
((1 : ℝ) * ((3 : ℝ) * T) - (0 : ℝ)) ^ (2 : ℕ) * (2 : ℝ) ^ (0 : ℕ) ≤ (2 : ℝ) ^ (4 : ℕ), withe : ((1 : ℝ) * ((3 : ℝ) * T) - (0 : ℝ)) ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * (0 : ℕ) * (0 : ℕ)) = (9 : ℝ) * (T * T).Lean, line 692
have e : ((1 : ℝ) * (3 * T) - 0) ^ 2 * (2 : ℝ) ^ (4 * 0 * 0) = 9 * (T * T) := by ring
targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, line 692 at
dfc7b5cc45a9↗hQx1haveQx (1 : ℕ) = (3 / 2 : ℚ)Leaves
(0 : ℝ) < (↑(Qx (1 : ℕ)) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq (1 : ℕ)) : ℝ) ∧ ((↑(Qx (1 : ℕ)) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq (1 : ℕ)) : ℝ)) ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * (1 : ℕ) * (1 : ℕ)) ≤ (2 : ℝ) ^ ((2 : ℕ) * (1 : ℕ) + (4 : ℕ)), withhQx1 : Qx (1 : ℕ) = (3 / 2 : ℚ).Uses library
Finset.sum_range_succ,Finset.prod_range_succ.Lean, lines 698–699
have hQx1 : Qx 1 = 3 / 2 := by rw [hQx, hQc]; norm_num [Finset.sum_range_succ, Finset.prod_range_succ]targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 698–699 at
dfc7b5cc45a9↗hAq1haveAq (1 : ℕ) = (0 : ℚ)Leaves
(0 : ℝ) < (↑(Qx (1 : ℕ)) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq (1 : ℕ)) : ℝ) ∧ ((↑(Qx (1 : ℕ)) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) - (↑(Aq (1 : ℕ)) : ℝ)) ^ (2 : ℕ) * (2 : ℝ) ^ ((4 : ℕ) * (1 : ℕ) * (1 : ℕ)) ≤ (2 : ℝ) ^ ((2 : ℕ) * (1 : ℕ) + (4 : ℕ)), withhAq1 : Aq (1 : ℕ) = (0 : ℚ).Uses library
Finset.sum_range_succ,Finset.prod_range_succ.Lean, lines 700–702
have hAq1 : Aq 1 = 0 := by rw [hAq]; simp only [hQx1]; rw [hQc] norm_num [Finset.sum_range_succ, Finset.prod_range_succ]targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, lines 700–702 at
dfc7b5cc45a9↗
The proof in Lean (Proof.lean)
Checked by the kernel — these bytes are the ones its attestation names: attestations/000327.json, merge commit dfc7b5cc45a9.
artifact_hash of the attestation below, so these are the bytes the gate checked. Rendered from targets/erdos-1050/nodes/spec-180d8b72/Proof.lean, sha256 3ff2a2cfeae6.import Mathlib
import Nodes.«spec-180d8b72».Context
/-- erdos-1050, Borwein's route: the remainder bound `hrem` of the skeleton on erdos-1050--h1-v2 (hole erdos-1050--h1-v2--h4), without the denominator bound `hden` that the hole carries as an unused hypothesis (revision request, graph PR #229). With T = sum 1/(2^(n+3) - 3) and x_n = 3/2^n, the Pade remainder R_n = Q_n(x_n) * 3T - A_n is positive and R_n^2 * 2^(4n^2) <= 2^(2n+4). Numerically checked for n <= 30 (tightest at n = 1). -/
theorem erdos_1050_pade_remainder_bound : ∀ (Qc : ℕ → ℕ → ℚ),
(Qc = fun (n k : ℕ) =>
((-1 : ℚ) ^ k * (2 : ℚ) ^ (k * (k - (1 : ℕ)) / (2 : ℕ)) *
∏ i ∈ Finset.range k, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) *
∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - k - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) →
∀ (Qx : ℕ → ℚ),
(Qx = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), Qc n k * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k) →
∀ (Aq : ℕ → ℚ),
(Aq = fun (n : ℕ) =>
∑ k ∈ Finset.range (n + (1 : ℕ)),
(∑ j ∈ Finset.range (k + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (k - j) - (1 : ℚ))) *
((3 : ℚ) / (2 : ℚ) ^ n) ^ k +
Qx n * ∑ j ∈ Finset.range n, (3 : ℚ) / ((2 : ℚ) ^ (j + (1 : ℕ)) - (3 : ℚ))) →
∀ (n : ℕ),
(0 : ℝ) <
(↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) -
(↑(Aq n) : ℝ) ∧
((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) -
(↑(Aq n) : ℝ)) ^
(2 : ℕ) *
(2 : ℝ) ^ ((4 : ℕ) * n * n) ≤
(2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)) := by
open Polynomial in
have id1_test : ∀ (n j : ℕ) (hj : j ≤ n),
(∏ i ∈ Finset.range j, ((2 : ℚ) ^ (n - i) - 1)) * ∏ s ∈ Finset.range (n - j), ((2 : ℚ) ^ (s + 1) - 1) =
∏ s ∈ Finset.range n, ((2 : ℚ) ^ (s + 1) - 1) := by
intro n j hj
induction j with
| zero => simp
| succ j ih =>
have ih' := ih (by omega)
rw [Finset.prod_range_succ, ← ih']
obtain ⟨m, hm⟩ : ∃ m, n - j = m + 1 := ⟨n - j - 1, by omega⟩
rw [hm, Finset.prod_range_succ, show n - (j + 1) = m by omega]
ring
open Polynomial in
have lower_test : ∀ (j : ℕ),
∏ i ∈ Finset.range j, ((2 : ℚ) ^ j - 2 ^ i) =
2 ^ (j * (j - 1) / 2) * ∏ s ∈ Finset.range j, ((2 : ℚ) ^ (s + 1) - 1) := by
intro j
have h1 : ∀ i ∈ Finset.range j, ((2 : ℚ) ^ j - 2 ^ i) = 2 ^ i * (2 ^ (j - 1 - i + 1) - 1) := by
intro i hi
have hi' := Finset.mem_range.mp hi
rw [mul_sub, ← pow_add, show i + (j - 1 - i + 1) = j by omega]
ring
rw [Finset.prod_congr rfl h1, Finset.prod_mul_distrib, Finset.prod_pow_eq_pow_sum,
Finset.prod_range_reflect (fun s => ((2 : ℚ) ^ (s + 1) - 1)) j]
congr 1
congr 1
have := Finset.sum_range_id_mul_two j
omega
open Polynomial in
have upper_test : ∀ (j n : ℕ) (hj : j ≤ n),
∏ i ∈ Finset.Ioc j n, ((2 : ℚ) ^ j - 2 ^ i) =
(-1) ^ (n - j) * 2 ^ (j * (n - j)) * ∏ s ∈ Finset.range (n - j), ((2 : ℚ) ^ (s + 1) - 1) := by
intro j n hj
have e : Finset.Ioc j n = Finset.Ico (j + 1) (n + 1) := by
ext x; simp only [Finset.mem_Ioc, Finset.mem_Ico]; omega
rw [e, Finset.prod_Ico_eq_prod_range, show n + 1 - (j + 1) = n - j by omega]
have h1 : ∀ t ∈ Finset.range (n - j), ((2 : ℚ) ^ j - 2 ^ (j + 1 + t)) = (-1) * 2 ^ j * (2 ^ (t + 1) - 1) := by
intro t _
rw [show j + 1 + t = j + (t + 1) by ring, pow_add]
ring
rw [Finset.prod_congr rfl h1, Finset.prod_mul_distrib, Finset.prod_mul_distrib, Finset.prod_const,
Finset.prod_const, Finset.card_range, ← pow_mul]
open Polynomial in
have rhs_test : ∀ (j n : ℕ) (hj : j ≤ n),
(∏ K ∈ Finset.Ioc n (2 * n), ((2 : ℚ) ^ j - 2 ^ K)) *
∏ s ∈ Finset.range (n - j), ((2 : ℚ) ^ (s + 1) - 1) =
(-1) ^ n * 2 ^ (j * n) * ∏ s ∈ Finset.range (2 * n - j), ((2 : ℚ) ^ (s + 1) - 1) := by
intro j n hj
have e : Finset.Ioc n (2 * n) = Finset.Ico (n + 1) (2 * n + 1) := by
ext x; simp only [Finset.mem_Ioc, Finset.mem_Ico]; omega
rw [e, Finset.prod_Ico_eq_prod_range, show 2 * n + 1 - (n + 1) = n by omega]
have h1 : ∀ t ∈ Finset.range n, ((2 : ℚ) ^ j - 2 ^ (n + 1 + t)) =
(-1) * 2 ^ j * (2 ^ ((n - j) + t + 1) - 1) := by
intro t _
rw [show n + 1 + t = j + ((n - j) + t + 1) by omega, pow_add]
ring
rw [Finset.prod_congr rfl h1, Finset.prod_mul_distrib, Finset.prod_mul_distrib, Finset.prod_const,
Finset.prod_const, Finset.card_range, ← pow_mul,
show 2 * n - j = (n - j) + n by omega, Finset.prod_range_add]
ring
open Polynomial in
have id1_full : ∀ (n j : ℕ) (hj : j ≤ n),
(((-1 : ℚ) ^ j * (2 : ℚ) ^ (j * (j - (1 : ℕ)) / (2 : ℕ)) *
∏ i ∈ Finset.range j, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) *
∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - j - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) *
2 ^ j * ∏ i ∈ (Finset.range (n + 1)).erase j, ((2 : ℚ) ^ j - 2 ^ i) =
∏ K ∈ Finset.Ioc n (2 * n), ((2 : ℚ) ^ j - 2 ^ K) := by
intro n j hj
have hPne : ∀ m : ℕ, ∏ s ∈ Finset.range m, ((2 : ℚ) ^ (s + 1) - 1) ≠ 0 := by
intro m
refine Finset.prod_ne_zero_iff.mpr (fun s _ => ?_)
have : (1 : ℚ) < 2 ^ (s + 1) := one_lt_pow₀ (by norm_num) (by omega)
linarith
have hG1 : ∏ i ∈ Finset.range j, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ)) =
(∏ s ∈ Finset.range n, ((2 : ℚ) ^ (s + 1) - 1)) /
((∏ s ∈ Finset.range (n - j), ((2 : ℚ) ^ (s + 1) - 1)) * ∏ s ∈ Finset.range j, ((2 : ℚ) ^ (s + 1) - 1)) := by
rw [Finset.prod_div_distrib, ← id1_test n j hj]
field_simp [hPne]
have hG2 : ∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - j - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ)) =
(∏ s ∈ Finset.range (2 * n - j), ((2 : ℚ) ^ (s + 1) - 1)) /
((∏ s ∈ Finset.range (n - j), ((2 : ℚ) ^ (s + 1) - 1)) * ∏ s ∈ Finset.range n, ((2 : ℚ) ^ (s + 1) - 1)) := by
rw [Finset.prod_div_distrib, ← id1_test (2 * n - j) n (by omega), show 2 * n - j - n = n - j by omega]
field_simp [hPne]
have hsplit : (Finset.range (n + 1)).erase j = Finset.range j ∪ Finset.Ioc j n := by
ext x; simp only [Finset.mem_erase, Finset.mem_range, Finset.mem_union, Finset.mem_Ioc]; omega
have hdisj : Disjoint (Finset.range j) (Finset.Ioc j n) := by
rw [Finset.disjoint_left]
intro x hx hx'
simp only [Finset.mem_range, Finset.mem_Ioc] at hx hx'
omega
have hR := rhs_test j n hj
obtain ⟨m, rfl⟩ := Nat.exists_eq_add_of_le hj
have hsign : (-1 : ℚ) ^ (j + m) = (-1) ^ j * (-1) ^ (j + m - j) := by
rw [← pow_add]; congr 1; omega
have ha : 2 * (j * (j - 1) / 2) = j * (j - 1) := Nat.two_mul_div_two_of_even (Nat.even_mul_pred_self _)
have hexp : j * (j + m) = j * (j - (1 : ℕ)) / (2 : ℕ) + j + j * (j - (1 : ℕ)) / (2 : ℕ) + j * (j + m - j) := by
rw [show j + m - j = m by omega]
rcases j with _ | i
· simp
· simp only [Nat.add_sub_cancel] at ha ⊢
nlinarith [ha]
rw [hG1, hG2, hsplit, Finset.prod_union hdisj, lower_test, upper_test j (j + m) hj]
apply mul_right_cancel₀ (hPne (j + m - j))
rw [hR, hsign, hexp, pow_add, pow_add, pow_add]
field_simp [hPne]
clear id1_test lower_test upper_test rhs_test
open Polynomial in
have lagr_eval : ∀ (n : ℕ) (x : ℕ → ℚ) (hx : ∀ i ≤ n, ∀ j ≤ n, x i = x j → i = j)
(N : ℚ[X]) (hNdeg : N.degree ≤ n) (r : ℕ → ℚ)
(hr : ∀ j ≤ n, r j * ∏ i ∈ (Finset.range (n + 1)).erase j, (x j - x i) = N.eval (x j)),
N = ∑ j ∈ Finset.range (n + 1), C (r j) * ∏ i ∈ (Finset.range (n + 1)).erase j, (X - C (x i)) := by
intro n x hx N hNdeg r hr
have hinj : Set.InjOn x (Finset.range (n + 1) : Set ℕ) := by
intro i hi j hj h
simp only [Finset.coe_range, Set.mem_Iio] at hi hj
exact hx i (by omega) j (by omega) h
apply Polynomial.eq_of_degree_sub_lt_of_eval_finset_eq ((Finset.range (n + 1)).image x)
· rw [Finset.card_image_of_injOn hinj, Finset.card_range]
refine lt_of_le_of_lt (Polynomial.degree_sub_le _ _) (max_lt ?_ ?_)
· exact lt_of_le_of_lt hNdeg (by exact_mod_cast Nat.lt_succ_self n)
· refine lt_of_le_of_lt (Polynomial.degree_sum_le _ _) ?_
rw [Finset.sup_lt_iff (by exact WithBot.bot_lt_coe _)]
intro j hj
refine lt_of_le_of_lt (Polynomial.degree_mul_le _ _) ?_
refine lt_of_le_of_lt (add_le_add (Polynomial.degree_C_le) (Polynomial.degree_prod_le _ _)) ?_
have : ∑ i ∈ (Finset.range (n + 1)).erase j, (X - C (x i)).degree = ((n : ℕ) : WithBot ℕ) := by
rw [Finset.sum_congr rfl (fun i _ => Polynomial.degree_X_sub_C (x i)), Finset.sum_const,
Finset.card_erase_of_mem hj, Finset.card_range, Nat.add_sub_cancel]
simp
rw [this, zero_add]
exact_mod_cast Nat.lt_succ_self n
· intro y hy
obtain ⟨k, hk, rfl⟩ := Finset.mem_image.mp hy
have hk' : k ≤ n := by have := Finset.mem_range.mp hk; omega
rw [← hr k hk', Polynomial.eval_finset_sum, Finset.sum_eq_single k]
· simp [Polynomial.eval_prod]
· intro j hj hjk
simp only [Polynomial.eval_mul, Polynomial.eval_C, Polynomial.eval_prod, Polynomial.eval_sub,
Polynomial.eval_X]
rw [Finset.prod_eq_zero (i := k) (Finset.mem_erase.mpr ⟨Ne.symm hjk, hk⟩) (by ring), mul_zero]
· intro h; exact absurd hk h
open Polynomial in
have tail_coeff : ∀ (n K : ℕ) (hK : n < K) (Qc : ℕ → ℕ → ℚ)
(hQc : ∀ j ≤ n, Qc n j * 2 ^ j * ∏ i ∈ (Finset.range (n + 1)).erase j, ((2 : ℚ) ^ j - 2 ^ i) =
∏ L ∈ Finset.Ioc n (2 * n), ((2 : ℚ) ^ j - 2 ^ L)),
∑ j ∈ Finset.range (n + 1), Qc n j / ((2 : ℚ) ^ (K - j) - 1) =
(∏ L ∈ Finset.Ioc n (2 * n), ((2 : ℚ) ^ K - 2 ^ L)) / ∏ i ∈ Finset.range (n + 1), ((2 : ℚ) ^ K - 2 ^ i) := by
intro n K hK Qc hQc
set x : ℕ → ℚ := fun i => (2 : ℚ) ^ i with hxdef
have hxinj : ∀ i ≤ n, ∀ j ≤ n, x i = x j → i = j := by
intro i _ j _ h
have h' : (2 : ℚ) ^ i = 2 ^ j := h
exact Nat.pow_right_injective (le_refl 2) (by exact_mod_cast h')
have hxne : ∀ a b : ℕ, a ≠ b → (2 : ℚ) ^ a - 2 ^ b ≠ 0 := by
intro a b hab h
apply hab
exact Nat.pow_right_injective (le_refl 2) (by exact_mod_cast (sub_eq_zero.mp h))
set N : ℚ[X] := ∏ L ∈ Finset.Ioc n (2 * n), (X - C ((2 : ℚ) ^ L)) with hN
have hNdeg : N.degree ≤ n := by
rw [hN, Polynomial.degree_prod]
rw [Finset.sum_congr rfl (fun L _ => Polynomial.degree_X_sub_C ((2 : ℚ) ^ L)), Finset.sum_const,
Nat.card_Ioc]
simp
omega
have hr : ∀ j ≤ n, (Qc n j * 2 ^ j) * ∏ i ∈ (Finset.range (n + 1)).erase j, (x j - x i) = N.eval (x j) := by
intro j hj
rw [hN, Polynomial.eval_prod]
simp only [Polynomial.eval_sub, Polynomial.eval_X, Polynomial.eval_C, hxdef]
exact hQc j hj
have hL := lagr_eval n x hxinj N hNdeg (fun j => Qc n j * 2 ^ j) hr
have hev := congrArg (Polynomial.eval ((2 : ℚ) ^ K)) hL
rw [Polynomial.eval_finset_sum] at hev
have hNK : N.eval ((2 : ℚ) ^ K) = ∏ L ∈ Finset.Ioc n (2 * n), ((2 : ℚ) ^ K - 2 ^ L) := by
rw [hN, Polynomial.eval_prod]
simp only [Polynomial.eval_sub, Polynomial.eval_X, Polynomial.eval_C]
have hD : ∏ i ∈ Finset.range (n + 1), ((2 : ℚ) ^ K - 2 ^ i) ≠ 0 :=
Finset.prod_ne_zero_iff.mpr (fun i hi => hxne K i (by have := Finset.mem_range.mp hi; omega))
rw [hNK] at hev
rw [hev, Finset.sum_div]
refine Finset.sum_congr rfl (fun j hj => ?_)
have hjn : j < n + 1 := Finset.mem_range.mp hj
have hne1 : (2 : ℚ) ^ K - 2 ^ j ≠ 0 := hxne K j (by omega)
have hne2 : (2 : ℚ) ^ (K - j) - 1 ≠ 0 := by
have : (1 : ℚ) < 2 ^ (K - j) := one_lt_pow₀ (by norm_num) (by omega)
linarith
simp only [Polynomial.eval_mul, Polynomial.eval_C, Polynomial.eval_prod, Polynomial.eval_sub,
Polynomial.eval_X, hxdef]
rw [← Finset.mul_prod_erase (Finset.range (n + 1)) (fun i => (2 : ℚ) ^ K - 2 ^ i) hj]
have hE : ∏ i ∈ (Finset.range (n + 1)).erase j, ((2 : ℚ) ^ K - 2 ^ i) ≠ 0 :=
Finset.prod_ne_zero_iff.mpr (fun i hi => hxne K i (by
have := Finset.mem_range.mp (Finset.mem_of_mem_erase hi); omega))
have hpow : (2 : ℚ) ^ K = 2 ^ j * 2 ^ (K - j) := by rw [← pow_add]; congr 1; omega
field_simp
rw [hpow]
ring
clear lagr_eval
open Polynomial in
have tail3 : ∀ (n : ℕ) (hn : 1 ≤ n),
∑' m : ℕ, (3 : ℝ) / (2 ^ (m + n + 1) - 3) = ∑' s : ℕ, ((3 : ℝ) / 2 ^ n) ^ (s + 1) / (2 ^ (s + 1) - 1) := by
intro n hn
set f : ℕ → ℕ → ℝ := fun m s => ((3 : ℝ) / 2 ^ (n + 1)) ^ (s + 1) * ((1 : ℝ) / 2 ^ (s + 1)) ^ m with hf
have key : ∀ m s, f m s = ((3 : ℝ) / 2 ^ (m + n + 1)) ^ (s + 1) := by
intro m s
simp only [hf]
rw [div_pow, div_pow, div_pow, one_pow, ← pow_mul, ← pow_mul, ← pow_mul,
show (m + n + 1) * (s + 1) = (n + 1) * (s + 1) + (s + 1) * m by ring, pow_add]
field_simp
exact pow_add _ _ _
have hpos : ∀ m s, 0 ≤ f m s := fun m s => by rw [key]; positivity
have h4 : ∀ m : ℕ, (4 : ℝ) ≤ 2 ^ (m + n + 1) := by
intro m
calc (4 : ℝ) = 2 ^ 2 := by norm_num
_ ≤ 2 ^ (m + n + 1) := pow_le_pow_right₀ (by norm_num) (by omega)
have inner1 : ∀ m, HasSum (f m) ((3 : ℝ) / (2 ^ (m + n + 1) - 3)) := by
intro m
have hr0 : 0 ≤ (3 : ℝ) / 2 ^ (m + n + 1) := by positivity
have hr1 : (3 : ℝ) / 2 ^ (m + n + 1) < 1 := by
rw [div_lt_one (by positivity)]; linarith [h4 m]
have hg := (hasSum_geometric_of_lt_one hr0 hr1).mul_left ((3 : ℝ) / 2 ^ (m + n + 1))
have hfun : f m = fun s => (3 : ℝ) / 2 ^ (m + n + 1) * ((3 : ℝ) / 2 ^ (m + n + 1)) ^ s := by
funext s; rw [key]; ring
have hne : (2 : ℝ) ^ (m + n + 1) - 3 ≠ 0 := by linarith [h4 m]
have hne2 : (2 : ℝ) ^ (m + n + 1) ≠ 0 := by positivity
have hval : (3 : ℝ) / (2 ^ (m + n + 1) - 3) =
3 / 2 ^ (m + n + 1) * (1 - 3 / 2 ^ (m + n + 1))⁻¹ := by
field_simp
rw [hfun, hval]
exact hg
have inner2 : ∀ s, HasSum (fun m => f m s) (((3 : ℝ) / 2 ^ n) ^ (s + 1) / (2 ^ (s + 1) - 1)) := by
intro s
have hr0 : 0 ≤ (1 : ℝ) / 2 ^ (s + 1) := by positivity
have hr1 : (1 : ℝ) / 2 ^ (s + 1) < 1 := by
rw [div_lt_one (by positivity)]
exact one_lt_pow₀ (by norm_num) (by omega)
have hg := (hasSum_geometric_of_lt_one hr0 hr1).mul_left (((3 : ℝ) / 2 ^ (n + 1)) ^ (s + 1))
have hne : (2 : ℝ) ^ (s + 1) - 1 ≠ 0 := by
have : (1 : ℝ) < 2 ^ (s + 1) := one_lt_pow₀ (by norm_num) (by omega)
linarith
have hval : ((3 : ℝ) / 2 ^ n) ^ (s + 1) / (2 ^ (s + 1) - 1) =
((3 : ℝ) / 2 ^ (n + 1)) ^ (s + 1) * (1 - 1 / 2 ^ (s + 1))⁻¹ := by
rw [div_pow, div_pow, ← pow_mul, ← pow_mul, show (n + 1) * (s + 1) = n * (s + 1) + (s + 1) by ring, pow_add]
field_simp
exact pow_add _ _ _
rw [hval]
exact hg
have hsum1 : Summable (fun m : ℕ => (3 : ℝ) / (2 ^ (m + n + 1) - 3)) := by
refine Summable.of_nonneg_of_le (fun m => ?_) (fun m => ?_) ((summable_geometric_two).mul_left 3)
· have := h4 m; exact div_nonneg (by norm_num) (by linarith)
· have hpow : (2 : ℝ) ^ (m + 2) ≤ 2 ^ (m + n + 1) := pow_le_pow_right₀ (by norm_num) (by omega)
have h1 : (1 : ℝ) ≤ 2 ^ m := one_le_pow₀ (by norm_num)
have h2 : (2 : ℝ) ^ (m + 2) = 4 * 2 ^ m := by rw [pow_add]; ring
calc (3 : ℝ) / (2 ^ (m + n + 1) - 3) ≤ 3 / 2 ^ m :=
div_le_div_of_nonneg_left (by norm_num) (by positivity) (by linarith)
_ = 3 * (1 / 2) ^ m := by rw [one_div_pow]; ring
have hU : Summable (Function.uncurry f) := by
refine (summable_prod_of_nonneg (fun p => hpos p.1 p.2)).mpr ⟨fun m => (inner1 m).summable, ?_⟩
exact hsum1.congr (fun m => ((inner1 m).tsum_eq).symm)
have hcomm := hU.tsum_comm' (fun m => (inner1 m).summable) (fun s => (inner2 s).summable)
rw [show (∑' m : ℕ, (3 : ℝ) / (2 ^ (m + n + 1) - 3)) = ∑' m, ∑' s, f m s from
tsum_congr (fun m => ((inner1 m).tsum_eq).symm)]
rw [← hcomm]
exact tsum_congr (fun s => (inner2 s).tsum_eq)
open Polynomial in
have split3T : ∀ (n : ℕ),
3 * ∑' m : ℕ, (1 : ℝ) / (2 ^ (m + 3) - 3) =
∑ j ∈ Finset.range n, (3 : ℝ) / (2 ^ (j + 1) - 3) + ∑' m : ℕ, (3 : ℝ) / (2 ^ (m + n + 1) - 3) := by
intro n
set g : ℕ → ℝ := fun m => (3 : ℝ) / (2 ^ (m + 1) - 3) with hg
have hsum : Summable (fun m => g (m + 1)) := by
refine Summable.of_nonneg_of_le (fun m => ?_) (fun m => ?_) ((summable_geometric_two).mul_left 3)
· have : (4 : ℝ) ≤ 2 ^ (m + 1 + 1) := by
calc (4 : ℝ) = 2 ^ 2 := by norm_num
_ ≤ 2 ^ (m + 1 + 1) := pow_le_pow_right₀ (by norm_num) (by omega)
simp only [hg]; exact div_nonneg (by norm_num) (by linarith)
· have hpow : (2 : ℝ) ^ (m + 2) ≤ 2 ^ (m + 1 + 1) := le_of_eq (by ring_nf)
have h1 : (1 : ℝ) ≤ 2 ^ m := one_le_pow₀ (by norm_num)
have h2 : (2 : ℝ) ^ (m + 2) = 4 * 2 ^ m := by rw [pow_add]; ring
simp only [hg]
calc (3 : ℝ) / (2 ^ (m + 1 + 1) - 3) ≤ 3 / 2 ^ m :=
div_le_div_of_nonneg_left (by norm_num) (by positivity) (by linarith)
_ = 3 * (1 / 2) ^ m := by rw [one_div_pow]; ring
have hs : Summable g := (summable_nat_add_iff 1).mp hsum
have e1 := hs.sum_add_tsum_nat_add n
have e2 := hs.sum_add_tsum_nat_add 2
have h3T : 3 * ∑' m : ℕ, (1 : ℝ) / (2 ^ (m + 3) - 3) = ∑' m, g (m + 2) := by
rw [← tsum_mul_left]
refine tsum_congr (fun m => ?_)
simp only [hg]
rw [show m + 2 + 1 = m + 3 by ring]
ring
have hfirst : ∑ i ∈ Finset.range 2, g i = 0 := by
simp only [hg, Finset.sum_range_succ, Finset.sum_range_zero]
norm_num
rw [h3T]
have htail : ∑' m : ℕ, (3 : ℝ) / (2 ^ (m + n + 1) - 3) = ∑' m, g (m + n) := by
refine tsum_congr (fun m => ?_)
simp only [hg]
rw [htail]
have hrange : ∑ j ∈ Finset.range n, (3 : ℝ) / (2 ^ (j + 1) - 3) = ∑ i ∈ Finset.range n, g i := by
simp only [hg]
rw [hrange, e1]
rw [← e2, hfirst, zero_add]
open Polynomial in
have cauchy_fin : ∀ (n : ℕ) (q a : ℕ → ℝ) (x A : ℝ) (hA : HasSum (fun s => a s * x ^ (s + 1)) A),
HasSum (fun K => ∑ j ∈ Finset.range (n + 1), if j < K then q j * a (K - j - 1) * x ^ K else 0)
((∑ j ∈ Finset.range (n + 1), q j * x ^ j) * A) := by
intro n q a x A hA
rw [Finset.sum_mul]
apply hasSum_sum
intro j _
have h := hA.mul_left (q j * x ^ j)
rw [← hasSum_nat_add_iff' (j + 1)]
have hz : ∑ i ∈ Finset.range (j + 1), (if j < i then q j * a (i - j - 1) * x ^ i else 0) = 0 :=
Finset.sum_eq_zero (fun i hi => by
have := Finset.mem_range.mp hi
rw [if_neg (by omega)])
rw [hz, sub_zero]
have hfun : (fun s => if j < s + (j + 1) then q j * a (s + (j + 1) - j - 1) * x ^ (s + (j + 1)) else 0) =
fun s => q j * x ^ j * (a s * x ^ (s + 1)) := by
funext s
rw [if_pos (by omega), show s + (j + 1) - j - 1 = s by omega, show s + (j + 1) = j + (s + 1) by ring, pow_add]
ring
rw [hfun]
exact h
open Polynomial in
have h4_series : ∀ (Qc : ℕ → ℕ → ℚ) (hQc : (Qc = fun (n k : ℕ) =>
((-1 : ℚ) ^ k * (2 : ℚ) ^ (k * (k - (1 : ℕ)) / (2 : ℕ)) *
∏ i ∈ Finset.range k, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) *
∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - k - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ)))) (Qx : ℕ → ℚ) (hQx : (Qx = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), Qc n k * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k))
(Aq : ℕ → ℚ) (hAq : (Aq = fun (n : ℕ) =>
∑ k ∈ Finset.range (n + (1 : ℕ)),
(∑ j ∈ Finset.range (k + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (k - j) - (1 : ℚ))) *
((3 : ℚ) / (2 : ℚ) ^ n) ^ k +
Qx n * ∑ j ∈ Finset.range n, (3 : ℚ) / ((2 : ℚ) ^ (j + (1 : ℕ)) - (3 : ℚ)))) (n : ℕ) (hn : 1 ≤ n),
HasSum (fun K : ℕ => if 2 * n < K then
((∏ L ∈ Finset.Ioc n (2 * n), ((2 : ℝ) ^ K - 2 ^ L)) / ∏ i ∈ Finset.range (n + 1), ((2 : ℝ) ^ K - 2 ^ i)) *
((3 : ℝ) / 2 ^ n) ^ K else 0)
((Qx n : ℝ) * (3 * ∑' m : ℕ, (1 : ℝ) / (2 ^ (m + 3) - 3)) - (Aq n : ℝ)) := by
intro Qc hQc Qx hQx Aq hAq n hn
set x : ℝ := (3 : ℝ) / 2 ^ n with hxdef
have hx0 : 0 ≤ x := by positivity
have hx2 : x / 2 < 1 := by
have : (2 : ℝ) ≤ 2 ^ n := by
calc (2 : ℝ) = 2 ^ 1 := by norm_num
_ ≤ 2 ^ n := pow_le_pow_right₀ (by norm_num) hn
rw [hxdef, div_div, div_lt_one (by positivity)]; linarith
set a : ℕ → ℝ := fun s => (1 : ℝ) / (2 ^ (s + 1) - 1) with hadef
have hapos : ∀ s, 0 < (2 : ℝ) ^ (s + 1) - 1 := fun s => by
have : (1 : ℝ) < 2 ^ (s + 1) := one_lt_pow₀ (by norm_num) (by omega)
linarith
have hAsum : Summable (fun s => a s * x ^ (s + 1)) := by
refine Summable.of_nonneg_of_le (fun s => ?_) (fun s => ?_) ((summable_geometric_of_lt_one (by positivity) hx2).mul_left x)
· simp only [hadef]; exact mul_nonneg (div_nonneg (by norm_num) (le_of_lt (hapos s))) (by positivity)
· simp only [hadef]
have h1 : (2 : ℝ) ^ s ≤ 2 ^ (s + 1) - 1 := by
have : (1 : ℝ) ≤ 2 ^ s := one_le_pow₀ (by norm_num)
rw [pow_succ]; linarith
have hxs : 0 ≤ x ^ (s + 1) := by positivity
calc 1 / (2 ^ (s + 1) - 1) * x ^ (s + 1) ≤ 1 / 2 ^ s * x ^ (s + 1) := by
gcongr
_ = x * (x / 2) ^ s := by
have e : ∀ y : ℝ, 1 / 2 ^ s * y ^ (s + 1) = y * (y / 2) ^ s := by
intro y; rw [div_pow, pow_succ]; field_simp
exact e x
set A := ∑' s, a s * x ^ (s + 1) with hAdef
have hA : HasSum (fun s => a s * x ^ (s + 1)) A := hAsum.hasSum
-- 3T = c + A
have h3T : 3 * ∑' m : ℕ, (1 : ℝ) / (2 ^ (m + 3) - 3) = ∑ j ∈ Finset.range n, (3 : ℝ) / (2 ^ (j + 1) - 3) + A := by
rw [split3T n, tail3 n hn, hAdef]
congr 1
refine tsum_congr (fun s => ?_)
simp only [hadef, hxdef]
ring
have hQxR : (Qx n : ℝ) = ∑ j ∈ Finset.range (n + 1), (Qc n j : ℝ) * x ^ j := by
rw [hQx]; push_cast; rfl
have hAqR : (Aq n : ℝ) = ∑ k ∈ Finset.range (n + 1),
(∑ j ∈ Finset.range (k + 1), (Qc n j : ℝ) / ((2 : ℝ) ^ (k - j) - 1)) * x ^ k +
(Qx n : ℝ) * ∑ j ∈ Finset.range n, (3 : ℝ) / (2 ^ (j + 1) - 3) := by
rw [hAq]; push_cast; rfl
have hC := cauchy_fin n (fun j => (Qc n j : ℝ)) a x A hA
set P : ℝ := ∑ k ∈ Finset.range (n + 1),
(∑ j ∈ Finset.range (k + 1), (Qc n j : ℝ) / ((2 : ℝ) ^ (k - j) - 1)) * x ^ k with hPdef
have hP : HasSum (fun K => if K < n + 1 then
(∑ j ∈ Finset.range (K + 1), (Qc n j : ℝ) / ((2 : ℝ) ^ (K - j) - 1)) * x ^ K else 0) P := by
have h0 : HasSum (fun K => if K < n + 1 then
(∑ j ∈ Finset.range (K + 1), (Qc n j : ℝ) / ((2 : ℝ) ^ (K - j) - 1)) * x ^ K else 0)
(∑ K ∈ Finset.range (n + 1), if K < n + 1 then
(∑ j ∈ Finset.range (K + 1), (Qc n j : ℝ) / ((2 : ℝ) ^ (K - j) - 1)) * x ^ K else 0) :=
hasSum_sum_of_ne_finset_zero (fun b hb => by rw [if_neg (by simpa using hb)])
have h1 : (∑ K ∈ Finset.range (n + 1), if K < n + 1 then
(∑ j ∈ Finset.range (K + 1), (Qc n j : ℝ) / ((2 : ℝ) ^ (K - j) - 1)) * x ^ K else 0) = P := by
rw [hPdef]
exact Finset.sum_congr rfl (fun K hK => by rw [if_pos (Finset.mem_range.mp hK)])
rw [h1] at h0
exact h0
have hD := hC.sub hP
have hval : (Qx n : ℝ) * (3 * ∑' m : ℕ, (1 : ℝ) / (2 ^ (m + 3) - 3)) - (Aq n : ℝ) =
(∑ j ∈ Finset.range (n + 1), (Qc n j : ℝ) * x ^ j) * A - P := by
rw [h3T, hAqR, hQxR]; ring
rw [hval]
have hid1 : ∀ j ≤ n, Qc n j * 2 ^ j * ∏ i ∈ (Finset.range (n + 1)).erase j, ((2 : ℚ) ^ j - 2 ^ i) =
∏ L ∈ Finset.Ioc n (2 * n), ((2 : ℚ) ^ j - 2 ^ L) := fun j hj => by subst hQc; exact id1_full n j hj
have hfun : (fun K : ℕ => if 2 * n < K then
((∏ L ∈ Finset.Ioc n (2 * n), ((2 : ℝ) ^ K - 2 ^ L)) / ∏ i ∈ Finset.range (n + 1), ((2 : ℝ) ^ K - 2 ^ i)) *
((3 : ℝ) / 2 ^ n) ^ K else 0) =
fun K => (∑ j ∈ Finset.range (n + 1), if j < K then (Qc n j : ℝ) * a (K - j - 1) * x ^ K else 0) -
(if K < n + 1 then (∑ j ∈ Finset.range (K + 1), (Qc n j : ℝ) / ((2 : ℝ) ^ (K - j) - 1)) * x ^ K else 0) := by
funext K
symm
by_cases hK : K < n + 1
· rw [if_pos hK, if_neg (by omega)]
rw [Finset.sum_range_succ (fun j => (Qc n j : ℝ) / ((2 : ℝ) ^ (K - j) - 1)) K, Nat.sub_self, pow_zero, sub_self,
div_zero, add_zero]
have hsplit : ∑ j ∈ Finset.range (n + 1), (if j < K then (Qc n j : ℝ) * a (K - j - 1) * x ^ K else 0) =
∑ j ∈ Finset.range K, (Qc n j : ℝ) / ((2 : ℝ) ^ (K - j) - 1) * x ^ K := by
rw [← Finset.sum_range_add_sum_Ico _ (show K ≤ n + 1 by omega)]
rw [Finset.sum_eq_zero (s := Finset.Ico K (n + 1)) (fun j hj => by
rw [if_neg (by have := Finset.mem_Ico.mp hj; omega)]), add_zero]
refine Finset.sum_congr rfl (fun j hj => ?_)
have hjK := Finset.mem_range.mp hj
rw [if_pos hjK]
simp only [hadef]
rw [show K - j - 1 + 1 = K - j by omega]
ring
rw [hsplit, Finset.sum_mul, sub_self]
· rw [if_neg hK, sub_zero]
have hS : ∑ j ∈ Finset.range (n + 1), (if j < K then (Qc n j : ℝ) * a (K - j - 1) * x ^ K else 0) =
((∑ j ∈ Finset.range (n + 1), Qc n j / ((2 : ℚ) ^ (K - j) - 1) : ℚ) : ℝ) * x ^ K := by
push_cast
rw [Finset.sum_mul]
refine Finset.sum_congr rfl (fun j hj => ?_)
have hjK : j < K := by have := Finset.mem_range.mp hj; omega
rw [if_pos hjK]
simp only [hadef]
rw [show K - j - 1 + 1 = K - j by omega]
ring
rw [hS, tail_coeff n K (by omega) Qc hid1]
push_cast
by_cases h2 : 2 * n < K
· rw [if_pos h2]
· rw [if_neg h2]
rw [Finset.prod_eq_zero (i := K) (Finset.mem_Ioc.mpr ⟨by omega, by omega⟩) (sub_self _)]
simp
rw [hfun]
exact hD
clear split3T tail3 cauchy_fin tail_coeff id1_full
open Polynomial in
have prod_one_sub_ge : ∀ (s : Finset ℕ) (a : ℕ → ℝ) (h0 : ∀ i ∈ s, 0 ≤ a i) (h1 : ∀ i ∈ s, a i ≤ 1),
1 - ∑ i ∈ s, a i ≤ ∏ i ∈ s, (1 - a i) := by
intro s a h0 h1
induction s using Finset.induction_on with
| empty => simp
| insert j s hj ih =>
rw [Finset.sum_insert hj, Finset.prod_insert hj]
have ih' := ih (fun i hi => h0 i (Finset.mem_insert_of_mem hi)) (fun i hi => h1 i (Finset.mem_insert_of_mem hi))
have haj0 := h0 j (Finset.mem_insert_self j s)
have haj1 := h1 j (Finset.mem_insert_self j s)
have hP : 0 ≤ ∏ i ∈ s, (1 - a i) :=
Finset.prod_nonneg (fun i hi => by linarith [h1 i (Finset.mem_insert_of_mem hi)])
have hP1 : ∏ i ∈ s, (1 - a i) ≤ 1 :=
Finset.prod_le_one (fun i hi => by linarith [h1 i (Finset.mem_insert_of_mem hi)])
(fun i hi => by linarith [h0 i (Finset.mem_insert_of_mem hi)])
nlinarith
open Polynomial in
have nd_bound : ∀ (n K : ℕ) (hn : 1 ≤ n) (hK : 2 * n + 1 ≤ K),
0 < (∏ L ∈ Finset.Ioc n (2 * n), ((2 : ℝ) ^ K - 2 ^ L)) / ∏ i ∈ Finset.range (n + 1), ((2 : ℝ) ^ K - 2 ^ i) ∧
(∏ L ∈ Finset.Ioc n (2 * n), ((2 : ℝ) ^ K - 2 ^ L)) / ∏ i ∈ Finset.range (n + 1), ((2 : ℝ) ^ K - 2 ^ i)
≤ 2 * (1 / 2) ^ K := by
intro n K hn hK
have hlt : ∀ i, i < K → (0 : ℝ) < 2 ^ K - 2 ^ i := fun i hi => by
have : (2 : ℝ) ^ i < 2 ^ K := pow_lt_pow_right₀ (by norm_num) hi
linarith
have hNpos : 0 < ∏ L ∈ Finset.Ioc n (2 * n), ((2 : ℝ) ^ K - 2 ^ L) :=
Finset.prod_pos (fun L hL => hlt L (by have := Finset.mem_Ioc.mp hL; omega))
have hDpos : 0 < ∏ i ∈ Finset.range (n + 1), ((2 : ℝ) ^ K - 2 ^ i) :=
Finset.prod_pos (fun i hi => hlt i (by have := Finset.mem_range.mp hi; omega))
refine ⟨div_pos hNpos hDpos, ?_⟩
have hN : ∏ L ∈ Finset.Ioc n (2 * n), ((2 : ℝ) ^ K - 2 ^ L) ≤ (2 ^ K) ^ n := by
have := Finset.prod_le_prod (s := Finset.Ioc n (2 * n)) (f := fun L => (2 : ℝ) ^ K - 2 ^ L) (g := fun _ => (2 : ℝ) ^ K)
(fun L hL => le_of_lt (hlt L (by have := Finset.mem_Ioc.mp hL; omega))) (fun L _ => by
have : (0 : ℝ) < 2 ^ L := by positivity
linarith)
rw [Finset.prod_const, Nat.card_Ioc, show 2 * n - n = n by omega] at this
exact this
have hD : (2 ^ K) ^ (n + 1) / 2 ≤ ∏ i ∈ Finset.range (n + 1), ((2 : ℝ) ^ K - 2 ^ i) := by
have hfac : ∀ i ∈ Finset.range (n + 1), (2 : ℝ) ^ K - 2 ^ i = 2 ^ K * (1 - (1 / 2) ^ (K - i)) := by
intro i hi
have hiK : i ≤ K := by have := Finset.mem_range.mp hi; omega
have e : (2 : ℝ) ^ K = 2 ^ i * 2 ^ (K - i) := by rw [← pow_add]; congr 1; omega
rw [mul_sub, mul_one, one_div_pow, mul_one_div, e]
field_simp
rw [Finset.prod_congr rfl hfac, Finset.prod_mul_distrib, Finset.prod_const, Finset.card_range]
have hsum : ∑ i ∈ Finset.range (n + 1), ((1 : ℝ) / 2) ^ (K - i) ≤ 1 / 2 := by
have e : ∀ i ∈ Finset.range (n + 1), ((1 : ℝ) / 2) ^ (K - i) = (1 / 2) ^ (K - n) * (1 / 2) ^ (n - i) := by
intro i hi
have := Finset.mem_range.mp hi
rw [← pow_add]; congr 1; omega
rw [Finset.sum_congr rfl e, ← Finset.mul_sum]
have hg : ∑ i ∈ Finset.range (n + 1), ((1 : ℝ) / 2) ^ (n - i) ≤ 2 := by
have hr := Finset.sum_range_reflect (fun i => ((1 : ℝ) / 2) ^ i) (n + 1)
simp only [Nat.add_sub_cancel] at hr
rw [hr]
exact sum_geometric_two_le (n + 1)
have hk : ((1 : ℝ) / 2) ^ (K - n) ≤ (1 / 2) ^ 2 :=
pow_le_pow_of_le_one (by norm_num) (by norm_num) (by omega)
have hpos : 0 ≤ ((1 : ℝ) / 2) ^ (K - n) := by positivity
nlinarith
have hprod := prod_one_sub_ge (Finset.range (n + 1)) (fun i => ((1 : ℝ) / 2) ^ (K - i))
(fun i _ => by positivity) (fun i _ => pow_le_one₀ (by norm_num) (by norm_num))
have h2K : (0 : ℝ) < (2 ^ K) ^ (n + 1) := by positivity
nlinarith
rw [div_le_iff₀ hDpos]
have h2K : (2 : ℝ) ^ K * (1 / 2) ^ K = 1 := by rw [← mul_pow]; norm_num
have e2 : 2 * (1 / 2 : ℝ) ^ K * ((2 ^ K) ^ (n + 1) / 2) = (2 ^ K) ^ n := by
rw [pow_succ]
calc 2 * (1 / 2 : ℝ) ^ K * ((2 ^ K) ^ n * 2 ^ K / 2) = (2 ^ K * (1 / 2) ^ K) * (2 ^ K) ^ n := by ring
_ = (2 ^ K) ^ n := by rw [h2K, one_mul]
calc ∏ L ∈ Finset.Ioc n (2 * n), ((2 : ℝ) ^ K - 2 ^ L) ≤ (2 ^ K) ^ n := hN
_ = 2 * (1 / 2) ^ K * ((2 ^ K) ^ (n + 1) / 2) := e2.symm
_ ≤ 2 * (1 / 2) ^ K * ∏ i ∈ Finset.range (n + 1), ((2 : ℝ) ^ K - 2 ^ i) := by gcongr
clear prod_one_sub_ge
open Polynomial in
have ineq_pow : ∀ (n : ℕ) (hn : 2 ≤ n),
9 * 81 ^ n ≤ 256 ^ n := by
intro n hn
induction n with
| zero => omega
| succ m ih =>
rcases (show m = 1 ∨ 2 ≤ m by omega) with rfl | hm
· norm_num
· have := ih hm
rw [pow_succ, pow_succ]
omega
open Polynomial in
have h4_big : ∀ (Qc : ℕ → ℕ → ℚ) (hQc : (Qc = fun (n k : ℕ) =>
((-1 : ℚ) ^ k * (2 : ℚ) ^ (k * (k - (1 : ℕ)) / (2 : ℕ)) *
∏ i ∈ Finset.range k, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) *
∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - k - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ)))) (Qx : ℕ → ℚ) (hQx : (Qx = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), Qc n k * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k))
(Aq : ℕ → ℚ) (hAq : (Aq = fun (n : ℕ) =>
∑ k ∈ Finset.range (n + (1 : ℕ)),
(∑ j ∈ Finset.range (k + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (k - j) - (1 : ℚ))) *
((3 : ℚ) / (2 : ℚ) ^ n) ^ k +
Qx n * ∑ j ∈ Finset.range n, (3 : ℚ) / ((2 : ℚ) ^ (j + (1 : ℕ)) - (3 : ℚ)))) (n : ℕ) (hn : 2 ≤ n),
(0 : ℝ) < (Qx n : ℝ) * (3 * ∑' m : ℕ, (1 : ℝ) / (2 ^ (m + 3) - 3)) - (Aq n : ℝ) ∧
((Qx n : ℝ) * (3 * ∑' m : ℕ, (1 : ℝ) / (2 ^ (m + 3) - 3)) - (Aq n : ℝ)) ^ 2 * (2 : ℝ) ^ (4 * n * n) ≤
(2 : ℝ) ^ (2 * n + 4) := by
intro Qc hQc Qx hQx Aq hAq n hn
have hS := h4_series Qc hQc Qx hQx Aq hAq n (by omega)
set r := (Qx n : ℝ) * (3 * ∑' m : ℕ, (1 : ℝ) / (2 ^ (m + 3) - 3)) - (Aq n : ℝ) with hr
set x : ℝ := (3 : ℝ) / 2 ^ n with hxdef
have hx0 : 0 < x := by positivity
have hx2 : x / 2 ≤ 3 / 8 := by
have : (4 : ℝ) ≤ 2 ^ n := by
calc (4 : ℝ) = 2 ^ 2 := by norm_num
_ ≤ 2 ^ n := pow_le_pow_right₀ (by norm_num) hn
rw [hxdef, div_div, div_le_div_iff₀ (by positivity) (by norm_num)]; linarith
set G : ℕ → ℝ := fun K => if 2 * n < K then
((∏ L ∈ Finset.Ioc n (2 * n), ((2 : ℝ) ^ K - 2 ^ L)) / ∏ i ∈ Finset.range (n + 1), ((2 : ℝ) ^ K - 2 ^ i)) *
x ^ K else 0 with hG
have hGnn : ∀ K, 0 ≤ G K := by
intro K; simp only [hG]
split_ifs with h
· exact mul_nonneg (le_of_lt (nd_bound n K (by omega) (by omega)).1) (by positivity)
· exact le_refl 0
have hGpos : 0 < G (2 * n + 1) := by
simp only [hG]; rw [if_pos (by omega)]
exact mul_pos (nd_bound n (2 * n + 1) (by omega) (by omega)).1 (by positivity)
refine ⟨?_, ?_⟩
· exact hasSum_lt (f := fun _ => (0 : ℝ)) (g := G) (i := 2 * n + 1) (fun K => hGnn K) hGpos hasSum_zero hS
· set H : ℕ → ℝ := fun K => if 2 * n < K then 2 * (x / 2) ^ K else 0 with hH
have hGH : ∀ K, G K ≤ H K := by
intro K; simp only [hG, hH]
split_ifs with h
· have hb := (nd_bound n K (by omega) (by omega)).2
calc ((∏ L ∈ Finset.Ioc n (2 * n), ((2 : ℝ) ^ K - 2 ^ L)) /
∏ i ∈ Finset.range (n + 1), ((2 : ℝ) ^ K - 2 ^ i)) * x ^ K ≤ 2 * (1 / 2) ^ K * x ^ K := by
gcongr
_ = 2 * (x / 2) ^ K := by ring
· exact le_refl 0
have hq : x / 2 < 1 := by linarith
have hHsum : HasSum H (2 * (x / 2) ^ (2 * n + 1) * (1 - x / 2)⁻¹) := by
rw [← hasSum_nat_add_iff' (2 * n + 1)]
have hz : ∑ i ∈ Finset.range (2 * n + 1), H i = 0 :=
Finset.sum_eq_zero (fun i hi => by
simp only [hH]; rw [if_neg (by have := Finset.mem_range.mp hi; omega)])
rw [hz, sub_zero]
have hgeo := (hasSum_geometric_of_lt_one (by positivity) hq).mul_left (2 * (x / 2) ^ (2 * n + 1))
have hfun : (fun s => H (s + (2 * n + 1))) = fun s => 2 * (x / 2) ^ (2 * n + 1) * (x / 2) ^ s := by
funext s; simp only [hH]; rw [if_pos (by omega), pow_add]; ring
rw [hfun]
exact hgeo
have hrle : r ≤ 2 * (x / 2) ^ (2 * n + 1) * (1 - x / 2)⁻¹ := hasSum_le hGH hS hHsum
have hr0 : 0 ≤ r := le_of_lt (hasSum_lt (f := fun _ => (0 : ℝ)) (g := G) (i := 2 * n + 1)
(fun K => hGnn K) hGpos hasSum_zero hS)
have hr8 : r ≤ 8 * (x / 2) ^ (2 * n + 1) := by
have hinv : (1 - x / 2)⁻¹ ≤ 4 := by
rw [inv_le_comm₀ (by linarith) (by norm_num)]; linarith
have hp : 0 ≤ 2 * (x / 2) ^ (2 * n + 1) := by positivity
calc r ≤ 2 * (x / 2) ^ (2 * n + 1) * (1 - x / 2)⁻¹ := hrle
_ ≤ 2 * (x / 2) ^ (2 * n + 1) * 4 := by gcongr
_ = 8 * (x / 2) ^ (2 * n + 1) := by ring
have hsq : r ^ 2 ≤ (8 * (x / 2) ^ (2 * n + 1)) ^ 2 := pow_le_pow_left₀ hr0 hr8 2
have hnat : 64 * 3 ^ (4 * n + 2) * 2 ^ (4 * n * n) ≤ 2 ^ (2 * n + 4) * (2 ^ (n + 1)) ^ (4 * n + 2) := by
have e1 : (2 : ℕ) ^ (2 * n + 4) * (2 ^ (n + 1)) ^ (4 * n + 2) = 2 ^ (4 * n * n) * (64 * 256 ^ n) := by
rw [← pow_mul, ← pow_add, show (256 : ℕ) = 2 ^ 8 by norm_num, ← pow_mul,
show (64 : ℕ) = 2 ^ 6 by norm_num, ← pow_add, ← pow_add]
congr 1; ring
have e2 : 64 * 3 ^ (4 * n + 2) * 2 ^ (4 * n * n) = 2 ^ (4 * n * n) * (64 * (9 * 81 ^ n)) := by
rw [show (81 : ℕ) = 3 ^ 4 by norm_num, ← pow_mul, pow_add]; ring
rw [e1, e2]
have := ineq_pow n hn
gcongr
have hreal : (64 : ℝ) * 3 ^ (4 * n + 2) * 2 ^ (4 * n * n) ≤ 2 ^ (2 * n + 4) * (2 ^ (n + 1)) ^ (4 * n + 2) := by
exact_mod_cast hnat
have hx2' : x / 2 = 3 / 2 ^ (n + 1) := by rw [hxdef, pow_succ]; field_simp
have hsq' : r ^ 2 ≤ 64 * (x / 2) ^ (4 * n + 2) := by
calc r ^ 2 ≤ (8 * (x / 2) ^ (2 * n + 1)) ^ 2 := hsq
_ = 64 * (x / 2) ^ (4 * n + 2) := by ring
have hkey : (x / 2) ^ (4 * n + 2) * ((2 : ℝ) ^ (n + 1)) ^ (4 * n + 2) = 3 ^ (4 * n + 2) := by
rw [← mul_pow, hx2', div_mul_cancel₀ _ (by positivity)]
have hP : (0 : ℝ) < ((2 : ℝ) ^ (n + 1)) ^ (4 * n + 2) := by positivity
have hmain : 64 * (x / 2) ^ (4 * n + 2) * (2 : ℝ) ^ (4 * n * n) ≤ 2 ^ (2 * n + 4) := by
refine le_of_mul_le_mul_right ?_ hP
calc 64 * (x / 2) ^ (4 * n + 2) * (2 : ℝ) ^ (4 * n * n) * ((2 : ℝ) ^ (n + 1)) ^ (4 * n + 2)
= 64 * 3 ^ (4 * n + 2) * 2 ^ (4 * n * n) := by rw [← hkey]; ring
_ ≤ 2 ^ (2 * n + 4) * ((2 : ℝ) ^ (n + 1)) ^ (4 * n + 2) := hreal
calc r ^ 2 * (2 : ℝ) ^ (4 * n * n) ≤ 64 * (x / 2) ^ (4 * n + 2) * 2 ^ (4 * n * n) := by gcongr
_ ≤ 2 ^ (2 * n + 4) := hmain
open Polynomial in
clear h4_series nd_bound ineq_pow
have T_facts : Summable (fun m : ℕ => (1 : ℝ) / (2 ^ (m + 3) - 3)) ∧
0 < ∑' m : ℕ, (1 : ℝ) / (2 ^ (m + 3) - 3) ∧ ∑' m : ℕ, (1 : ℝ) / (2 ^ (m + 3) - 3) ≤ 2 / 5 := by
have h5 : ∀ m : ℕ, 5 * (2 : ℝ) ^ m ≤ 2 ^ (m + 3) - 3 := by
intro m
have h1 : (1 : ℝ) ≤ 2 ^ m := one_le_pow₀ (by norm_num)
have e : (2 : ℝ) ^ (m + 3) = 8 * 2 ^ m := by rw [pow_add]; norm_num; ring
rw [e]; linarith
have hpos : ∀ m : ℕ, 0 < (2 : ℝ) ^ (m + 3) - 3 := fun m => by
have := h5 m; have : (0 : ℝ) < 2 ^ m := by positivity
linarith
have hle : ∀ m : ℕ, (1 : ℝ) / (2 ^ (m + 3) - 3) ≤ (1 / 5) * (1 / 2) ^ m := by
intro m
have e : (1 / 5 : ℝ) * (1 / 2) ^ m = 1 / (5 * 2 ^ m) := by
rw [one_div_pow]; field_simp
rw [e]
exact one_div_le_one_div_of_le (by positivity) (h5 m)
have hs : Summable (fun m : ℕ => (1 : ℝ) / (2 ^ (m + 3) - 3)) :=
Summable.of_nonneg_of_le (fun m => le_of_lt (one_div_pos.mpr (hpos m))) hle
(summable_geometric_two.mul_left (1 / 5))
refine ⟨hs, ?_, ?_⟩
· exact hs.tsum_pos (fun m => le_of_lt (one_div_pos.mpr (hpos m))) 0 (one_div_pos.mpr (hpos 0))
· calc ∑' m : ℕ, (1 : ℝ) / (2 ^ (m + 3) - 3) ≤ ∑' m : ℕ, (1 / 5 : ℝ) * (1 / 2) ^ m :=
hs.tsum_le_tsum hle (summable_geometric_two.mul_left (1 / 5))
_ = 2 / 5 := by rw [tsum_mul_left, tsum_geometric_two]; norm_num
obtain ⟨_, hTpos, hTle⟩ := T_facts
intro Qc hQc Qx hQx Aq hAq n
match n with
| 0 =>
have hQx0 : Qx 0 = 1 := by rw [hQx, hQc]; simp
have hAq0 : Aq 0 = 0 := by rw [hAq]; simp
rw [hQx0, hAq0]
push_cast
set T := ∑' m : ℕ, (1 : ℝ) / (2 ^ (m + 3) - 3) with hT
refine ⟨by linarith, ?_⟩
have e : ((1 : ℝ) * (3 * T) - 0) ^ 2 * (2 : ℝ) ^ (4 * 0 * 0) = 9 * (T * T) := by ring
rw [e]
norm_num
nlinarith
| 1 =>
-- Qx 1 = 3 - 3/2 = 3/2 and Aq 1 = 3 * (3/2) + (3/2) * (3/(2-3)) = 0, so the remainder is (9/2) T.
have hQx1 : Qx 1 = 3 / 2 := by
rw [hQx, hQc]; norm_num [Finset.sum_range_succ, Finset.prod_range_succ]
have hAq1 : Aq 1 = 0 := by
rw [hAq]; simp only [hQx1]; rw [hQc]
norm_num [Finset.sum_range_succ, Finset.prod_range_succ]
rw [hQx1, hAq1]
push_cast
set T := ∑' m : ℕ, (1 : ℝ) / (2 ^ (m + 3) - 3) with hT
refine ⟨by nlinarith, ?_⟩
norm_num
nlinarith
| n + 2 => exact h4_big Qc hQc Qx hQx Aq hAq (n + 2) (by omega)What is known
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 (2 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.«spec-180d8b72».Context
/-- erdos-1050, Borwein's route: the remainder bound `hrem` of the skeleton on erdos-1050--h1-v2 (hole erdos-1050--h1-v2--h4), without the denominator bound `hden` that the hole carries as an unused hypothesis (revision request, graph PR #229). With T = sum 1/(2^(n+3) - 3) and x_n = 3/2^n, the Pade remainder R_n = Q_n(x_n) * 3T - A_n is positive and R_n^2 * 2^(4n^2) <= 2^(2n+4). Numerically checked for n <= 30 (tightest at n = 1). -/
theorem erdos_1050_pade_remainder_bound : ∀ (Qc : ℕ → ℕ → ℚ),
(Qc = fun (n k : ℕ) =>
((-1 : ℚ) ^ k * (2 : ℚ) ^ (k * (k - (1 : ℕ)) / (2 : ℕ)) *
∏ i ∈ Finset.range k, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) *
∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - k - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) →
∀ (Qx : ℕ → ℚ),
(Qx = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), Qc n k * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k) →
∀ (Aq : ℕ → ℚ),
(Aq = fun (n : ℕ) =>
∑ k ∈ Finset.range (n + (1 : ℕ)),
(∑ j ∈ Finset.range (k + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (k - j) - (1 : ℚ))) *
((3 : ℚ) / (2 : ℚ) ^ n) ^ k +
Qx n * ∑ j ∈ Finset.range n, (3 : ℚ) / ((2 : ℚ) ^ (j + (1 : ℕ)) - (3 : ℚ))) →
∀ (n : ℕ),
(0 : ℝ) <
(↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) -
(↑(Aq n) : ℝ) ∧
((↑(Qx n) : ℝ) * ((3 : ℝ) * ∑' (n : ℕ), (1 : ℝ) / ((2 : ℝ) ^ (n + (3 : ℕ)) - (3 : ℝ))) -
(↑(Aq n) : ℝ)) ^
(2 : ℕ) *
(2 : ℝ) ^ ((4 : ℕ) * n * n) ≤
(2 : ℝ) ^ ((2 : ℕ) * n + (4 : ℕ)) := 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 \forall n\in\mathbb{N}:\qquad R_n>0\quad\wedge\quad R_n^{2}\,2^{4n^2}\le 2^{2n+4},\qquad R_n=3T\,Q_x(n)-A_q(n),\quad T=\sum_{m=0}^{\infty}\frac{1}{2^{m+3}-3}$
For every natural number $n$ the real number $R_n$ is positive and $R_n^2\cdot 2^{4n\cdot n}\le 2^{2n+4}$ (that is, $R_n\le 2^{\,n+2-2n^2}$), where $T$ is Lean's ∑' over all $m\in\mathbb{N}$ in $\mathbb{R}$ (which would be $0$ for a non-summable family; this one converges) and $Q_x(n)$, $A_q(n)$ are read as reals; with $x_n=3/2^n$, $Q_x(n)$ is the polynomial $\sum_k Q_c(n,k)X^k$ at $x_n$. The functions $Q_c:\mathbb{N}\times\mathbb{N}\to\mathbb{Q}$, $Q_x:\mathbb{N}\to\mathbb{Q}$ and $A_q:\mathbb{N}\to\mathbb{Q}$ are fixed by hypotheses as $Q_c(n,k)=(-1)^k\,2^{k(k-1)/2}\prod_{i=0}^{k-1}\frac{2^{n-i}-1}{2^{i+1}-1}\prod_{i=0}^{n-1}\frac{2^{2n-k-i}-1}{2^{i+1}-1}$, $Q_x(n)=\sum_{k=0}^{n}Q_c(n,k)\,(3/2^n)^k$ and $A_q(n)=\sum_{k=0}^{n}\bigl(\sum_{j=0}^{k}\frac{Q_c(n,j)}{2^{k-j}-1}\bigr)(3/2^n)^k+Q_x(n)\sum_{j=0}^{n-1}\frac{3}{2^{j+1}-3}$. Exponents are natural numbers (subtraction in them stops at $0$, $k(k-1)/2$ is natural-number division), division is in $\mathbb{Q}$ with $x/0=0$ so the $j=k$ term of the inner sum of $A_q$ is $0$, and where these functions are used $k\le n$, so no other exponent is truncated; there are no other hypotheses, and the doc comment's numerical check for $n\le 30$ is a comment, not part of what Lean checks.
Rendered from gloss/e4490fe8efbd….md · Improve these words →
History: 2 versions on record
2026-10-06 · written by t1006-w3, drafted with Claude Opus 5.5 (claude-opus-5-5) in a Claude Code agent session · not signed · gloss/624faabaa55d….md · the first version of its chain
Read this version
This file states the theorem
erdos_1050_pade_remainder_bound. Its doc comment calls it the remainder boundhremof the skeleton onerdos-1050--h1-v2(the holeerdos-1050--h1-v2--h4), without the hypothesishdenthat the hole carries. The statement below is the hole's statement with that one hypothesis removed.The statement is about three functions $Q_c:\mathbb N\times\mathbb N\to\mathbb Q$, $Q_x:\mathbb N\to\mathbb Q$ and $A_q:\mathbb N\to\mathbb Q$. It takes as hypotheses that they are given by the following formulas, so these are the only functions it speaks about:
- $Q_c(n,k)=(-1)^k\,2^{k(k-1)/2}\displaystyle\prod_{i=0}^{k-1}\frac{2^{n-i}-1}{2^{i+1}-1}\;\prod_{i=0}^{n-1}\frac{2^{2n-k-i}-1}{2^{i+1}-1}$;
- $Q_x(n)=\displaystyle\sum_{k=0}^{n}Q_c(n,k)\,\Big(\frac{3}{2^n}\Big)^k$;
- $A_q(n)=\displaystyle\sum_{k=0}^{n}\Big(\sum_{j=0}^{k}\frac{Q_c(n,j)}{2^{k-j}-1}\Big)\Big(\frac{3}{2^n}\Big)^k+Q_x(n)\sum_{j=0}^{n-1}\frac{3}{2^{j+1}-3}$.
Exponents are natural numbers: subtraction in them is truncated at $0$, and $k(k-1)/2$ is natural-number division (with $k-1=0$ when $k=0$). Where these functions are used below, $k\le n$, so no other exponent is truncated. Division is Lean's division of rationals, in which $x/0=0$: the term $j=k$ of the inner sum in $A_q$ has denominator $2^0-1=0$ and so contributes $0$.
Let $T=\sum_{m=0}^{\infty}\frac{1}{2^{m+3}-3}$, a real number (Lean's
tsumover all $m\in\mathbb N$, which would be $0$ for a series that does not converge; this one converges). With $x_n=3/2^n$, $Q_x(n)$ is the polynomial $\sum_k Q_c(n,k)X^k$ evaluated at $x_n$. For each $n$ write, in the real numbers, $$R_n=3T\,Q_x(n)-A_q(n).$$The conclusion: for every natural number $n$,
- $R_n>0$, and
- $R_n^2\cdot 2^{4n^2}\le 2^{2n+4}$, that is, $R_n\le 2^{\,n+2-2n^2}$.
There are no other hypotheses. The doc comment also says the bound was checked numerically for $n\le 30$ and is tightest at $n=1$; that remark is a comment, not part of what Lean checks.
2026-10-18 · written by f29-words, drafted with Claude Fable 5.1 (claude-fable-5-1) · not signed · current · gloss/e4490fe8efbd….md · diff to its predecessor
Read this version
$\displaystyle \forall n\in\mathbb{N}:\qquad R_n>0\quad\wedge\quad R_n^{2}\,2^{4n^2}\le 2^{2n+4},\qquad R_n=3T\,Q_x(n)-A_q(n),\quad T=\sum_{m=0}^{\infty}\frac{1}{2^{m+3}-3}$
For every natural number $n$ the real number $R_n$ is positive and $R_n^2\cdot 2^{4n\cdot n}\le 2^{2n+4}$ (that is, $R_n\le 2^{\,n+2-2n^2}$), where $T$ is Lean's
∑'over all $m\in\mathbb{N}$ in $\mathbb{R}$ (which would be $0$ for a non-summable family; this one converges) and $Q_x(n)$, $A_q(n)$ are read as reals; with $x_n=3/2^n$, $Q_x(n)$ is the polynomial $\sum_k Q_c(n,k)X^k$ at $x_n$. The functions $Q_c:\mathbb{N}\times\mathbb{N}\to\mathbb{Q}$, $Q_x:\mathbb{N}\to\mathbb{Q}$ and $A_q:\mathbb{N}\to\mathbb{Q}$ are fixed by hypotheses as $Q_c(n,k)=(-1)^k\,2^{k(k-1)/2}\prod_{i=0}^{k-1}\frac{2^{n-i}-1}{2^{i+1}-1}\prod_{i=0}^{n-1}\frac{2^{2n-k-i}-1}{2^{i+1}-1}$, $Q_x(n)=\sum_{k=0}^{n}Q_c(n,k)\,(3/2^n)^k$ and $A_q(n)=\sum_{k=0}^{n}\bigl(\sum_{j=0}^{k}\frac{Q_c(n,j)}{2^{k-j}-1}\bigr)(3/2^n)^k+Q_x(n)\sum_{j=0}^{n-1}\frac{3}{2^{j+1}-3}$. Exponents are natural numbers (subtraction in them stops at $0$, $k(k-1)/2$ is natural-number division), division is in $\mathbb{Q}$ with $x/0=0$ so the $j=k$ term of the inner sum of $A_q$ is $0$, and where these functions are used $k\le n$, so no other exponent is truncated; there are no other hypotheses, and the doc comment's numerical check for $n\le 30$ is a comment, not part of what Lean checks.
Diff of e4490fe8efbd against 624faabaa55d
@@ -1,19 +1,3 @@ -This file states the theorem `erdos_1050_pade_remainder_bound`. Its doc comment calls it the remainder bound `hrem` of the skeleton on `erdos-1050--h1-v2` (the hole `erdos-1050--h1-v2--h4`), without the hypothesis `hden` that the hole carries. The statement below is the hole's statement with that one hypothesis removed. +$$\forall n\in\mathbb{N}:\qquad R_n>0\quad\wedge\quad R_n^{2}\,2^{4n^2}\le 2^{2n+4},\qquad R_n=3T\,Q_x(n)-A_q(n),\quad T=\sum_{m=0}^{\infty}\frac{1}{2^{m+3}-3}$$ -The statement is about three functions $Q_c:\mathbb N\times\mathbb N\to\mathbb Q$, $Q_x:\mathbb N\to\mathbb Q$ and $A_q:\mathbb N\to\mathbb Q$. It takes as hypotheses that they are given by the following formulas, so these are the only functions it speaks about: - -- $Q_c(n,k)=(-1)^k\,2^{k(k-1)/2}\displaystyle\prod_{i=0}^{k-1}\frac{2^{n-i}-1}{2^{i+1}-1}\;\prod_{i=0}^{n-1}\frac{2^{2n-k-i}-1}{2^{i+1}-1}$; -- $Q_x(n)=\displaystyle\sum_{k=0}^{n}Q_c(n,k)\,\Big(\frac{3}{2^n}\Big)^k$; -- $A_q(n)=\displaystyle\sum_{k=0}^{n}\Big(\sum_{j=0}^{k}\frac{Q_c(n,j)}{2^{k-j}-1}\Big)\Big(\frac{3}{2^n}\Big)^k+Q_x(n)\sum_{j=0}^{n-1}\frac{3}{2^{j+1}-3}$. - -Exponents are natural numbers: subtraction in them is truncated at $0$, and $k(k-1)/2$ is natural-number division (with $k-1=0$ when $k=0$). Where these functions are used below, $k\le n$, so no other exponent is truncated. Division is Lean's division of rationals, in which $x/0=0$: the term $j=k$ of the inner sum in $A_q$ has denominator $2^0-1=0$ and so contributes $0$. - -Let $T=\sum_{m=0}^{\infty}\frac{1}{2^{m+3}-3}$, a real number (Lean's `tsum` over all $m\in\mathbb N$, which would be $0$ for a series that does not converge; this one converges). With $x_n=3/2^n$, $Q_x(n)$ is the polynomial $\sum_k Q_c(n,k)X^k$ evaluated at $x_n$. For each $n$ write, in the real numbers, -$$R_n=3T\,Q_x(n)-A_q(n).$$ - -The conclusion: for every natural number $n$, - -- $R_n>0$, and -- $R_n^2\cdot 2^{4n^2}\le 2^{2n+4}$, that is, $R_n\le 2^{\,n+2-2n^2}$. - -There are no other hypotheses. The doc comment also says the bound was checked numerically for $n\le 30$ and is tightest at $n=1$; that remark is a comment, not part of what Lean checks. +For every natural number $n$ the real number $R_n$ is positive and $R_n^2\cdot 2^{4n\cdot n}\le 2^{2n+4}$ (that is, $R_n\le 2^{\,n+2-2n^2}$), where $T$ is Lean's `∑'` over all $m\in\mathbb{N}$ in $\mathbb{R}$ (which would be $0$ for a non-summable family; this one converges) and $Q_x(n)$, $A_q(n)$ are read as reals; with $x_n=3/2^n$, $Q_x(n)$ is the polynomial $\sum_k Q_c(n,k)X^k$ at $x_n$. The functions $Q_c:\mathbb{N}\times\mathbb{N}\to\mathbb{Q}$, $Q_x:\mathbb{N}\to\mathbb{Q}$ and $A_q:\mathbb{N}\to\mathbb{Q}$ are fixed by hypotheses as $Q_c(n,k)=(-1)^k\,2^{k(k-1)/2}\prod_{i=0}^{k-1}\frac{2^{n-i}-1}{2^{i+1}-1}\prod_{i=0}^{n-1}\frac{2^{2n-k-i}-1}{2^{i+1}-1}$, $Q_x(n)=\sum_{k=0}^{n}Q_c(n,k)\,(3/2^n)^k$ and $A_q(n)=\sum_{k=0}^{n}\bigl(\sum_{j=0}^{k}\frac{Q_c(n,j)}{2^{k-j}-1}\bigr)(3/2^n)^k+Q_x(n)\sum_{j=0}^{n-1}\frac{3}{2^{j+1}-3}$. Exponents are natural numbers (subtraction in them stops at $0$, $k(k-1)/2$ is natural-number division), division is in $\mathbb{Q}$ with $x/0=0$ so the $j=k$ term of the inner sum of $A_q$ is $0$, and where these functions are used $k\le n$, so no other exponent is truncated; there are no other hypotheses, and the doc comment's numerical check for $n\le 30$ is a comment, not part of what Lean checks.
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/spec-180d8b72/Statement.lean. Origin: authored.
Attestation: pass, 7 of 7 checks
Checked by the kernel — the gate’s record of the run: attestations/000327.json, merge commit dfc7b5cc45a9.
Verdict pass, from attestations/000327.json.
- Submitter
t1001-1050a- 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/000327.json, merge commit dfc7b5cc45a9.
b97324b1a56e.import Mathlib
theorem witness : ∃ (Qc : ℕ → ℕ → ℚ) (Qx : ℕ → ℚ) (Aq : ℕ → ℚ) (n : ℕ),
(Qc = fun (n k : ℕ) =>
((-1 : ℚ) ^ k * (2 : ℚ) ^ (k * (k - (1 : ℕ)) / (2 : ℕ)) *
∏ i ∈ Finset.range k, ((2 : ℚ) ^ (n - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) *
∏ i ∈ Finset.range n, ((2 : ℚ) ^ ((2 : ℕ) * n - k - i) - (1 : ℚ)) / ((2 : ℚ) ^ (i + (1 : ℕ)) - (1 : ℚ))) ∧
(Qx = fun (n : ℕ) => ∑ k ∈ Finset.range (n + (1 : ℕ)), Qc n k * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k) ∧
(Aq = fun (n : ℕ) =>
∑ k ∈ Finset.range (n + (1 : ℕ)),
(∑ j ∈ Finset.range (k + (1 : ℕ)), Qc n j / ((2 : ℚ) ^ (k - j) - (1 : ℚ))) * ((3 : ℚ) / (2 : ℚ) ^ n) ^ k +
Qx n * ∑ j ∈ Finset.range n, (3 : ℚ) / ((2 : ℚ) ^ (j + (1 : ℕ)) - (3 : ℚ))) :=
⟨_, _, _, 0, rfl, rfl, rfl⟩In words, unverified — what this witness says; written by t1006-w3, drafted with Claude Opus 5.5 (claude-opus-5-5) in a Claude Code agent session, 2026-10-06; no one has read it against the Lean and signed it.
Draft · drafted, by the model named above
This file imports only Mathlib. It states and proves a theorem named witness: there exist functions $Q_c:\mathbb N\times\mathbb N\to\mathbb Q$, $Q_x:\mathbb N\to\mathbb Q$, $A_q:\mathbb N\to\mathbb Q$ and a natural number $n$ such that
- $Q_c(n,k)=(-1)^k\,2^{k(k-1)/2}\prod_{i<k}\frac{2^{n-i}-1}{2^{i+1}-1}\prod_{i<n}\frac{2^{2n-k-i}-1}{2^{i+1}-1}$ for all $n,k$,
- $Q_x(n)=\sum_{k=0}^{n}Q_c(n,k)(3/2^n)^k$ for all $n$, and
- $A_q(n)=\sum_{k=0}^{n}\big(\sum_{j=0}^{k}\frac{Q_c(n,j)}{2^{k-j}-1}\big)(3/2^n)^k+Q_x(n)\sum_{j<n}\frac{3}{2^{j+1}-3}$ for all $n$.
These are the three hypotheses of the statement of this node (erdos_1050_pade_remainder_bound), written exactly as there (as equations between functions), so the theorem says those hypotheses can all hold at once. The existentially quantified $n$ appears in none of the three equations; the statement's own $n$ is quantified after the hypotheses and has no counterpart here.
The proof takes for $Q_c$, $Q_x$ and $A_q$ the functions the formulas define, and $n=0$; each equation then holds by definition (rfl).
Rendered from gloss/817faba6618a….md · Improve these words →
Acknowledged findings (13)
Untrusted contributor text — the prover’s justification for a finding.
Untrusted: acknowledgment of a div-zero finding at (2 ^ (2 * n - k - i) - 1) / (2 ^ (i + 1) - 1)
The divisor 2^(i+1) - 1 is at least 1 for every i; the definition of Qc is copied verbatim from erdos-1050--h1-v2--h4 (and h3).
Untrusted contributor text — the prover’s justification for a finding.
Untrusted: acknowledgment of a div-zero finding at (2 ^ (n - i) - 1) / (2 ^ (i + 1) - 1)
The divisor 2^(i+1) - 1 is at least 1 for every i; copied verbatim from Qc in erdos-1050--h1-v2--h4.
Untrusted contributor text — the prover’s justification for a finding.
Untrusted: acknowledgment of a div-zero finding at 1 / (2 ^ (n + 3) - 3)
2^(n+3) - 3 >= 5 for every n, so no junk value; this is the target's own sum T.
Untrusted contributor text — the prover’s justification for a finding.
Untrusted: acknowledgment of a div-zero finding at 3 / (2 ^ (j + 1) - 3)
2^(j+1) - 3 is -1 at j = 0, 1 at j = 1 and >= 5 after, never 0; c_n = sum_{j<n} 3/(2^(j+1) - 3), copied from the hole.
Untrusted contributor text — the prover’s justification for a finding.
Untrusted: acknowledgment of a div-zero finding at 3 / 2 ^ n
2^n is never 0.
Untrusted contributor text — the prover’s justification for a finding.
Untrusted: acknowledgment of a div-zero finding at Qc n j / (2 ^ (k - j) - 1)
Intended: the divisor is 0 exactly at j = k, and Lean's x / 0 = 0 makes that term vanish, which is the Pade numerator's coefficient (f has no constant term); copied verbatim from the hole.
Untrusted contributor text — the prover’s justification for a finding.
Untrusted: acknowledgment of a nat-sub finding at 2 * n - k
Inside Qc n k with k <= n (Qx and Aq only use k in range (n+1)), so 2n - k >= n: no truncation.
Untrusted contributor text — the prover’s justification for a finding.
Untrusted: acknowledgment of a nat-sub finding at 2 * n - k - i
k <= n and i < n, so 2n - k - i >= 1: no truncation.
Untrusted contributor text — the prover’s justification for a finding.
Untrusted: acknowledgment of a nat-sub finding at k - 1
Used only in k*(k-1)/2, which is 0 at k = 0 with or without truncation, as intended.
Untrusted contributor text — the prover’s justification for a finding.
Untrusted: acknowledgment of a nat-sub finding at k - j
j ranges over range (k+1), so j <= k and k - j never truncates; k - j = 0 at j = k is intended (see the division finding).
Untrusted contributor text — the prover’s justification for a finding.
Untrusted: acknowledgment of a nat-sub finding at n - i
i < k <= n inside Qc n k as used here, so n - i >= 1: no truncation.
Untrusted contributor text — the prover’s justification for a finding.
Untrusted: acknowledgment of a off-by-one-range finding at Finset.range (k + 1)
Intended inclusive endpoint: the coefficient of x^k sums over j = 0..k.
Untrusted contributor text — the prover’s justification for a finding.
Untrusted: acknowledgment of a off-by-one-range finding at Finset.range (n + 1)
Intended inclusive endpoint: Q_n and P_n are polynomials of degree n, summed over k = 0..n.