← Session 29 — ii′-5e-v: circle bound (far-tail + series bounds)
thinking (4611 chars)
shell_inhi compiles. Now shell_up. Template with d := ‖ρ‖ − R, J' := J+1, C₁ = 1.
FS := (circleZeros R).filter (fun ρ => ¬ ‖(ρ:ℂ)‖ < R + 2).
Elements: ‖ρ‖ ≥ R+2 (not < R+2) and ‖ρ‖ < 2R+1 (circleZeros membership — actually I don't even need the upper bound for hdj's lower part; for jf ≤ J+1 need u < R+1 ⟸ ‖ρ‖ < 2R+1 ⟹ u = ‖ρ‖−R < R+1 ✓ — so the FS element's circleZeros membership IS used here ✓).
- hdj: u ≥ 2 (‖ρ‖ ≥ R+2) ⟹ ⌊u⌋₊ ≥ 2 ⟹ jf ≥ 1 ✓. jf ≤ J+1: 2^{jf} ≤ ⌊u⌋₊ ≤ u < R+1 and 2^{J+1} ≥ ⌊R⌋₊+1 > R: if 2^{jf} > 2^{J+1} then 2^{jf} ≥ 2^{J+2} = 2·2^{J+1} > 2R ≥ R+1: contradiction with 2^{jf} ≤ u < R+1. Formal:
```
have hup2 : Nat.log 2 ⌊‖(ρ:ℂ)‖ - R⌋₊ ≤ J + 1 := by
have hpowle : (2 : ℝ) ^ (Nat.log 2 ⌊‖(ρ:ℂ)‖ - R⌋₊) ≤ ‖(ρ:ℂ)‖ - R := (the usual floor machine)
have hu : ‖(ρ:ℂ)‖ - R < R + 1 := by (from circleZeros mem: ‖ρ‖ < 2R+1)
have h2J1 : R < (2 : ℝ) ^ (J + 1) := by
have h1 : ⌊R⌋₊ < 2 ^ (J + 1) := Nat.lt_pow_succ_log_self (by norm_num) _ -- J = Nat.log 2 ⌊R⌋₊: Nat.lt_pow_succ_log_self : n < b^(Nat.log b n + 1)
have h2 : R < (⌊R⌋₊ : ℝ) + 1 := Nat.lt_floor_add_one _
have h3 : ((2 ^ (J + 1) : ℕ) : ℝ) = (2 : ℝ) ^ (J + 1) := by push_cast; ring
have h4 : (⌊R⌋₊ : ℝ) < (2 : ℝ) ^ (J + 1) := by rw [← h3]; exact_mod_cast h1
linarith [h2, h4]
by_contra hcon
push Not at hcon -- J + 1 < jf
have h55 : J + 2 ≤ Nat.log 2 ⌊‖(ρ:ℂ)‖ - R⌋₊ := by omega
have h66 : (2 : ℝ) ^ (J + 2) ≤ (2 : ℝ) ^ (Nat.log 2 ⌊‖(ρ:ℂ)‖ - R⌋₊) :=
pow_le_pow_right₀ (by norm_num) h55
have h77 : (2 : ℝ) ^ (J + 2) = 2 * (2 : ℝ) ^ (J + 1) := by rw [pow_succ']
linarith [hpowle, hu, h2J1, h66, h77, hR]
```
✓ (2^{J+2} = 2·2^{J+1} > 2R ≥ R+1 > u ≥ 2^{jf} ≥ 2^{J+2} — contradiction via linarith.)
- term: g ≤ m/u ≤ m/2^{jf}:
hsr : ‖ρ‖−R ≤ ‖s−ρ‖: abs_norm_sub_norm_le s ρ: |‖s‖−‖ρ‖| ≤ ‖s−ρ‖: ‖s‖−‖ρ‖ = R−‖ρ‖ < 0: |R−‖ρ‖| = ‖ρ‖−R (abs_of_neg or abs_of_nonpos... |x| = −x for x ≤ 0: abs_of_nonpos (R−‖ρ‖ ≤ 0) : |R−‖ρ‖| = −(R−‖ρ‖) = ‖ρ‖−R ✓).
h1 : R/(‖ρ‖‖s−ρ‖) ≤ R/(‖ρ‖·u) (div_le_div_of_nonneg_left, mul_le_mul_of_nonneg_left hsr).
h2 : R/(‖ρ‖·u) ≤ 1/u: R/(‖ρ‖·u) ≤ 1/u ⟺ R·u ≤ 1·(‖ρ‖·u) hmm via: R/(‖ρ‖·u) = (R/‖ρ‖)/u ≤ 1/u: R/‖ρ‖ ≤ 1 ⟺ R ≤ ‖ρ‖ ✓ (div_le_iff₀ hρpos: R ≤ 1·‖ρ‖ ✓). Then div_le_div_of_nonneg_right h2a (u ≥ 0).
h3 : 1/u ≤ 1/2^{jf}: div_le_div_of_nonneg_left (1 ≥ 0) (2^{jf} > 0) (2^{jf} ≤ u).
C₁ = 1: final form: ≤ 1·(m)/(2)^{jf} = m/2^{jf} — dyadic_family_le's hterm: g ρ ≤ C₁·m/(2)^{jf ρ} with C₁ := 1: 1·m/2^{jf}: the calc ends `_ = 1 * (zeroMult ρ : ℝ) / (2:ℝ)^(jf)` by ring ✓.
- count per j ∈ Ico 1 (J'+1) with J' := J+1: fiber: u ∈ [2^j, 2^{j+1}):
a := R+2^j−1, b := R+2^{j+1}, c := R+1.
hM1 : 1 ≤ max a c: c = R+1 ≥ 1 ✓ le_max_right.trans.
hMb : max a c ≤ b: a ≤ b ⟺ R+2^j−1 ≤ R+2^{j+1} ⟺ 2^j−1 ≤ 2^{j+1} ✓; c ≤ b ⟺ R+1 ≤ R+2^{j+1} ⟺ 1 ≤ 2^{j+1} ✓ (2^{j+1} ≥ 2).
hsub: |γ| ≥ ‖ρ‖−1 ≥ R+2^j−1 = a (u ≥ 2^j ⟹ ‖ρ‖ ≥ R+2^j) ✓; |γ| ≤ ‖ρ‖ ≤ b (u < 2^{j+1} ⟹ ‖ρ‖ < R+2^{j+1} ≤ b) ✓; c ≤ |γ|: ‖ρ‖−1 ≥ R+1 ⟺ u ≥ 2 ✓.
brick: b−a+2 = 2^j+3 ✓; max|a||b| = b (a ≥ 0: a = R+2^j−1 ≥ R ≥ 1 > 0: |a| = a; |b| = b; a ≤ b ⟹ max = b): log(3b+5) ≤ 2L: b = R+2^{j+1} ≤ 5R: 2^{j+1} ≤ 4R: 2^j ≤ 2^{J+1} ≤ 2R: 2^{J+1} ≤ 2R ⟸ 2^J ≤ R ✓ (j ≤ J+1 ⟹ 2^j ≤ 2^{J+1} = 2·2^J ≤ 2R): so 2^{j+1} = 2·2^j ≤ 4R ✓. b ≤ 5R ⟹ 3b+5 ≤ 15R+5 ≤ 16R (5 ≤ R) ⟹ log ≤ log(16R) = log16 + L: log 16 = log(2^4) = 4·log2 ≤ 4 (log_two_le_one): ≤ 4+L ≤ L+L = 2L ⟺ 4 ≤ L (L ≥ 9) ✓ linarith.
Hmm — log 16 = log(2^4): rw [show (16:ℝ) = 2^4 by norm_num, Real.log_pow]; push_cast: = 4·log 2. ✓
And 3b+5 ≤ 16R needs b ≤ 5R: b = R+2^{j+1}, 2^{j+1} ≤ 4R ✓.
cnt j := 3*A0count*((2:ℝ)^j+3)*(2*Real.log R) (same as inhi).
- hper: (1/2^j)·3A₀(2^j+3)·2L = 6A₀L(1+3/2^j) ≤ 6A₀L·(5/2) = 15A₀L.
algebra: (1/2^j)·(3A₀(2^j+3)·2L) = 6A₀L·(2^j+3)/2^j = 6A₀L(1+3/2^j) ✓ field_simp; ring.
- Σ over Ico 1 (J'+1) = Ico 1 (J+2): card = J+1: ≤ (J+1)·15A₀L: (J:ℝ)+1 ≤ 2L+1 ≤ 3L (1 ≤ L... L ≥ 9 ✓): ≤ 3L·15A₀L = 45A₀L².
final: (J+1:ℝ)·(15A₀L) ≤ 45A₀L²: (J+1) ≤ 3L: from hJle: J ≤ 2L ⟹ J+1 ≤ 2L+1 ≤ 3L ⟺ 1 ≤ L ✓ linarith.
(3L)·(15A₀L) = 45A₀L² by ring.
For the dyadic_family_le application with J' := J+1: the Ico is Finset.Ico 1 (J'+1) = Ico 1 (J+2) — I must pass J+1 as the J argument: `dyadic_family_le FS d (J+1) ...` — then hdj's second component: jf ≤ J+1 ✓ (proved above). And the card: Nat.card_Ico 1 (J+1+1) = J+1: Nat.add_sub_cancel ✓.
hdj's form: 1 ≤ Nat.log 2 ⌊d ρ⌋₊ ∧ Nat.log 2 ⌊d ρ⌋₊ ≤ J+1 ✓.
Also the count's by_cases hj : j ∈ Finset.Ico 1 (J+1+1): for the brick case: 2^{j+1} ≤ 4R needs j ≤ J+1 ✓ from mem_Ico. And empty case via hdj.
For hper's sum: Ico 1 (J+2): card J+1.
Let me write shell_up now.
shell_inhi compiles. Now shell_up (d := ‖ρ‖−R, J′ := J+1, C₁ = 1).
tool: Edit
input
{
"replace_all": false,
"file_path": "D:\\Python\\Quantum\\research\\lean\\NguyenRH1\\NguyenRH1\\LiCircleBound.lean",
"old_string": "end NguyenRH1\n\nend",
"new_string": "/-- **The upper shell** (R+2 \u2264 \u2016\u03c1\u2016, within the finite part): \u2264\n45\u00b7A\u2080\u00b7(log R)\u00b2. Dyadic in u := \u2016\u03c1\u2016\u2212R \u2208 [2, R+1); the dyadic class can\nreach J+1 (\u230au\u230b\u208a can be \u230aR\u230b\u208a+1), so the shell count is J+1 \u2264 3\u00b7log R. -/\nlemma shell_up {s : \u2102} {R : \u211d} (hs : \u2016s\u2016 = R) (hsz : \u00ac IsNontrivialZero s)\n (hR : (16002 : \u211d) \u2264 R) :\n \u2211 \u03c1 \u2208 (circleZeros R).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n \u00ac \u2016(\u03c1 : \u2102)\u2016 < R + 2), \u2016seriesTerm s \u03c1\u2016\n \u2264 45 * A0count * (Real.log R) ^ 2 := by\n classical\n have hRpos : (0 : \u211d) < R := by linarith [hR]\n have hlogR : (9 : \u211d) \u2264 Real.log R := nine_le_log_of_16002_le hR\n have hlogRnn : (0 : \u211d) \u2264 Real.log R := by linarith [hlogR]\n set J := Nat.log 2 \u230aR\u230b\u208a with hJ\n have hJle : (J : \u211d) \u2264 2 * Real.log R := Nat.log_floor_two_le hR\n have h2JR : (2 : \u211d) ^ J \u2264 R := two_pow_log_floor_le hR\n set FS := (circleZeros R).filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n \u00ac \u2016(\u03c1 : \u2102)\u2016 < R + 2) with hFS\n have hdj : \u2200 \u03c1 \u2208 FS,\n 1 \u2264 Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a \u2227 Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a \u2264 J + 1 := by\n intro \u03c1 h\u03c1\n rw [hFS, Finset.mem_filter] at h\u03c1\n obtain \u27e8h\u03c1circ, h\u03c1R2\u27e9 := h\u03c1\n have h\u03c1R2' : (R + 2 : \u211d) \u2264 \u2016(\u03c1 : \u2102)\u2016 := le_of_not_gt h\u03c1R2\n have hu2 : (2 : \u211d) \u2264 \u2016(\u03c1 : \u2102)\u2016 - R := by linarith [h\u03c1R2']\n have h\u03c1up : \u2016(\u03c1 : \u2102)\u2016 < 2 * R + 1 := by\n rw [mem_circleZeros] at h\u03c1circ\n exact h\u03c1circ\n have hfl2 : (2 : \u2115) \u2264 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a := by\n rw [Nat.le_floor_iff (by linarith [hu2] : (0 : \u211d) \u2264 \u2016(\u03c1 : \u2102)\u2016 - R)]\n exact_mod_cast hu2\n have h1 : (1 : \u2115) \u2264 Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a := by\n have h2 := Nat.log_mono_right (b := 2) hfl2\n have h3 : Nat.log 2 2 = 1 := by decide\n rw [h3] at h2\n exact h2\n have h2 : Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a \u2264 J + 1 := by\n have hpowle : (2 : \u211d) ^ (Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a) \u2264 \u2016(\u03c1 : \u2102)\u2016 - R := by\n have hfl : \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a \u2260 0 := by\n rw [Ne, Nat.floor_eq_zero]\n push Not\n linarith [hu2]\n have h1 := Nat.pow_log_le_self 2 hfl\n have h2 : ((2 ^ Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a : \u2115) : \u211d) \u2264 (\u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a : \u211d) := by\n exact_mod_cast h1\n have h3 : ((2 ^ Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a : \u2115) : \u211d)\n = (2 : \u211d) ^ (Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a) := by\n push_cast\n ring\n rw [h3] at h2\n have h4 : (\u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a : \u211d) \u2264 \u2016(\u03c1 : \u2102)\u2016 - R :=\n Nat.floor_le (by linarith [hu2])\n linarith [h2, h4]\n have h2J1 : R < (2 : \u211d) ^ (J + 1) := by\n have h1 : \u230aR\u230b\u208a < 2 ^ (J + 1) := Nat.lt_pow_succ_log_self (by norm_num) _\n have h2 : R < (\u230aR\u230b\u208a : \u211d) + 1 := Nat.lt_floor_add_one _\n have h3 : ((2 ^ (J + 1) : \u2115) : \u211d) = (2 : \u211d) ^ (J + 1) := by push_cast; ring\n have h4 : (\u230aR\u230b\u208a : \u211d) < (2 : \u211d) ^ (J + 1) := by rw [\u2190 h3]; exact_mod_cast h1\n linarith [h2, h4]\n by_contra hcon\n push Not at hcon\n have h55 : J + 2 \u2264 Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a := by omega\n have h66 : (2 : \u211d) ^ (J + 2) \u2264 (2 : \u211d) ^ (Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a) :=\n pow_le_pow_right\u2080 (by norm_num) h55\n have h77 : (2 : \u211d) ^ (J + 2) = 2 * (2 : \u211d) ^ (J + 1) := by rw [pow_succ']\n linarith [hpowle, h\u03c1up, h2J1, h66, h77, hR]\n exact \u27e8h1, h2\u27e9\n have hterm : \u2200 \u03c1 \u2208 FS, \u2016seriesTerm s \u03c1\u2016\n \u2264 1 * (zeroMult (\u03c1 : \u2102) : \u211d) / (2 : \u211d) ^ (Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a) := by\n intro \u03c1 h\u03c1\n rw [hFS, Finset.mem_filter] at h\u03c1\n obtain \u27e8h\u03c1circ, h\u03c1R2\u27e9 := h\u03c1\n have h\u03c1R2' : (R + 2 : \u211d) \u2264 \u2016(\u03c1 : \u2102)\u2016 := le_of_not_gt h\u03c1R2\n have hu2 : (2 : \u211d) \u2264 \u2016(\u03c1 : \u2102)\u2016 - R := by linarith [h\u03c1R2']\n have hpowle : (2 : \u211d) ^ (Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a) \u2264 \u2016(\u03c1 : \u2102)\u2016 - R := by\n have hfl : \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a \u2260 0 := by\n rw [Ne, Nat.floor_eq_zero]\n push Not\n linarith [hu2]\n have h1 := Nat.pow_log_le_self 2 hfl\n have h2 : ((2 ^ Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a : \u2115) : \u211d) \u2264 (\u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a : \u211d) := by\n exact_mod_cast h1\n have h3 : ((2 ^ Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a : \u2115) : \u211d)\n = (2 : \u211d) ^ (Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a) := by\n push_cast\n ring\n rw [h3] at h2\n have h4 : (\u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a : \u211d) \u2264 \u2016(\u03c1 : \u2102)\u2016 - R :=\n Nat.floor_le (by linarith [hu2])\n linarith [h2, h4]\n have hsr : \u2016(\u03c1 : \u2102)\u2016 - R \u2264 \u2016s - (\u03c1 : \u2102)\u2016 := by\n have h := abs_norm_sub_norm_le s (\u03c1 : \u2102)\n rw [hs, abs_of_nonpos (by linarith [h\u03c1R2', hR] : R - \u2016(\u03c1 : \u2102)\u2016 \u2264 0)] at h\n have h1 : -(R - \u2016(\u03c1 : \u2102)\u2016) = \u2016(\u03c1 : \u2102)\u2016 - R := by ring\n rw [h1] at h\n exact h\n have h\u03c1pos : (0 : \u211d) < \u2016(\u03c1 : \u2102)\u2016 := by linarith [h\u03c1R2', hR]\n have hsrpos : (0 : \u211d) < \u2016s - (\u03c1 : \u2102)\u2016 := by linarith [hsr, hu2]\n have hid := seriesTerm_norm_eq_div hs hsz \u03c1\n rw [hid]\n have hm : (0 : \u211d) \u2264 (zeroMult (\u03c1 : \u2102) : \u211d) := Nat.cast_nonneg _\n have h1 : R / (\u2016(\u03c1 : \u2102)\u2016 * \u2016s - (\u03c1 : \u2102)\u2016)\n \u2264 R / (\u2016(\u03c1 : \u2102)\u2016 * (\u2016(\u03c1 : \u2102)\u2016 - R)) := by\n apply div_le_div_of_nonneg_left hRpos.le (mul_pos h\u03c1pos (by linarith [hu2]))\n exact mul_le_mul_of_nonneg_left hsr h\u03c1pos.le\n have h2a : R / \u2016(\u03c1 : \u2102)\u2016 \u2264 1 := by\n rw [div_le_iff\u2080 h\u03c1pos]\n linarith [h\u03c1R2', hR]\n have h2 : R / (\u2016(\u03c1 : \u2102)\u2016 * (\u2016(\u03c1 : \u2102)\u2016 - R)) \u2264 1 / (\u2016(\u03c1 : \u2102)\u2016 - R) := by\n rw [show R / (\u2016(\u03c1 : \u2102)\u2016 * (\u2016(\u03c1 : \u2102)\u2016 - R))\n = (R / \u2016(\u03c1 : \u2102)\u2016) / (\u2016(\u03c1 : \u2102)\u2016 - R) from by rw [div_div]]\n exact div_le_div_of_nonneg_right h2a (by linarith [hu2] : (0 : \u211d) \u2264 \u2016(\u03c1 : \u2102)\u2016 - R)\n have h3 : (1 : \u211d) / (\u2016(\u03c1 : \u2102)\u2016 - R) \u2264 1 / (2 : \u211d) ^ (Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a) := by\n apply div_le_div_of_nonneg_left (by norm_num : (0 : \u211d) \u2264 1) (by positivity)\n exact hpowle\n calc (zeroMult (\u03c1 : \u2102) : \u211d) * (R / (\u2016(\u03c1 : \u2102)\u2016 * \u2016s - (\u03c1 : \u2102)\u2016))\n \u2264 (zeroMult (\u03c1 : \u2102) : \u211d) * (R / (\u2016(\u03c1 : \u2102)\u2016 * (\u2016(\u03c1 : \u2102)\u2016 - R))) :=\n mul_le_mul_of_nonneg_left h1 hm\n _ \u2264 (zeroMult (\u03c1 : \u2102) : \u211d) * (1 / (\u2016(\u03c1 : \u2102)\u2016 - R)) :=\n mul_le_mul_of_nonneg_left h2 hm\n _ \u2264 (zeroMult (\u03c1 : \u2102) : \u211d) * (1 / (2 : \u211d) ^ (Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a)) :=\n mul_le_mul_of_nonneg_left h3 hm\n _ = 1 * (zeroMult (\u03c1 : \u2102) : \u211d) / (2 : \u211d) ^ (Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a) := by ring\n have hcount : \u2200 j : \u2115,\n \u2211 \u03c1 \u2208 FS.filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a = j), (zeroMult (\u03c1 : \u2102) : \u211d)\n \u2264 3 * A0count * ((2 : \u211d) ^ j + 3) * (2 * Real.log R) := by\n intro j\n have hRHSnn : (0 : \u211d) \u2264 3 * A0count * ((2 : \u211d) ^ j + 3) * (2 * Real.log R) :=\n mul_nonneg (mul_nonneg (mul_nonneg (by norm_num : (0 : \u211d) \u2264 3) A0count_pos.le)\n (by positivity)) (mul_nonneg (by norm_num : (0 : \u211d) \u2264 2) hlogRnn)\n by_cases hj : j \u2208 Finset.Ico 1 (J + 1 + 1)\n \u00b7 rw [Finset.mem_Ico] at hj\n have hM1 : (1 : \u211d) \u2264 max (R + (2 : \u211d) ^ j - 1) (R + 1) := by\n have h1 : (1 : \u211d) \u2264 R + 1 := by linarith [hR]\n exact le_trans h1 (le_max_right _ _)\n have hMb : max (R + (2 : \u211d) ^ j - 1) (R + 1) \u2264 R + (2 : \u211d) ^ (j + 1) := by\n apply max_le_iff.mpr\n constructor\n \u00b7 have h1 : (2 : \u211d) ^ (j + 1) = 2 * (2 : \u211d) ^ j := by rw [pow_succ']\n have h2 : (0 : \u211d) < (2 : \u211d) ^ j := by positivity\n linarith [h1, h2]\n \u00b7 have h1 : (2 : \u211d) ^ (j + 1) = 2 * (2 : \u211d) ^ j := by rw [pow_succ']\n have h2 : (0 : \u211d) < (2 : \u211d) ^ j := by positivity\n linarith [h1, h2]\n have hsub : \u2200 \u03c1 \u2208 FS.filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a = j),\n R + (2 : \u211d) ^ j - 1 \u2264 |(\u03c1 : \u2102).im| \u2227 |(\u03c1 : \u2102).im| \u2264 R + (2 : \u211d) ^ (j + 1) \u2227\n R + 1 \u2264 |(\u03c1 : \u2102).im| := by\n intro \u03c1 h\u03c1\n rw [Finset.mem_filter] at h\u03c1\n obtain \u27e8h\u03c1F, h\u03c1j\u27e9 := h\u03c1\n rw [hFS, Finset.mem_filter] at h\u03c1F\n obtain \u27e8h\u03c1circ, h\u03c1R2\u27e9 := h\u03c1F\n have h\u03c1R2' : (R + 2 : \u211d) \u2264 \u2016(\u03c1 : \u2102)\u2016 := le_of_not_gt h\u03c1R2\n have hu2 : (2 : \u211d) \u2264 \u2016(\u03c1 : \u2102)\u2016 - R := by linarith [h\u03c1R2']\n have hpowle : (2 : \u211d) ^ j \u2264 \u2016(\u03c1 : \u2102)\u2016 - R := by\n have hfl : \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a \u2260 0 := by\n rw [Ne, Nat.floor_eq_zero]\n push Not\n linarith [hu2]\n have h1 := Nat.pow_log_le_self 2 hfl\n rw [h\u03c1j] at h1\n have h2 : ((2 ^ j : \u2115) : \u211d) \u2264 (\u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a : \u211d) := by exact_mod_cast h1\n have h3 : ((2 ^ j : \u2115) : \u211d) = (2 : \u211d) ^ j := by push_cast; ring\n rw [h3] at h2\n have h4 : (\u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a : \u211d) \u2264 \u2016(\u03c1 : \u2102)\u2016 - R :=\n Nat.floor_le (by linarith [hu2])\n linarith [h2, h4]\n have hpowup : \u2016(\u03c1 : \u2102)\u2016 - R < (2 : \u211d) ^ (j + 1) := by\n have h1 : \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a < 2 ^ (Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a + 1) :=\n Nat.lt_pow_succ_log_self (by norm_num) _\n rw [h\u03c1j] at h1\n have h2 : \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a + 1 \u2264 2 ^ (j + 1) := h1\n have h3 : \u2016(\u03c1 : \u2102)\u2016 - R < (\u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a : \u211d) + 1 := Nat.lt_floor_add_one _\n have h4 : ((\u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a + 1 : \u2115) : \u211d) \u2264 ((2 ^ (j + 1) : \u2115) : \u211d) := by\n exact_mod_cast h2\n have h5 : ((2 ^ (j + 1) : \u2115) : \u211d) = (2 : \u211d) ^ (j + 1) := by push_cast; ring\n rw [h5] at h4\n push_cast at h4\n linarith [h3, h4]\n have him1 := abs_im_ge_norm_sub_one \u03c1\n have him2 : |(\u03c1 : \u2102).im| \u2264 \u2016(\u03c1 : \u2102)\u2016 := abs_im_le_norm _\n exact \u27e8by linarith [him1, hpowle], by linarith [him2, hpowup],\n by linarith [him1, h\u03c1R2', hR]\u27e9\n have hbrick := sum_zeroMult_le_of_im_band\n (FS.filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a = j)) hM1 hMb hsub\n have hab : R + (2 : \u211d) ^ (j + 1) - (R + (2 : \u211d) ^ j - 1) + 2 = (2 : \u211d) ^ j + 3 := by\n have h1 : (2 : \u211d) ^ (j + 1) = 2 * (2 : \u211d) ^ j := by rw [pow_succ']\n linarith [h1]\n rw [hab] at hbrick\n -- the log bound: max|a||b| = b \u2264 5R \u27f9 log(3b+5) \u2264 log(16R) \u2264 2L\n have h2j4R : (2 : \u211d) ^ (j + 1) \u2264 4 * R := by\n have h1 : (2 : \u211d) ^ (j + 1) = 2 * (2 : \u211d) ^ j := by rw [pow_succ']\n have h2 : (2 : \u211d) ^ j \u2264 (2 : \u211d) ^ (J + 1) :=\n pow_le_pow_right\u2080 (by norm_num) (by omega : j \u2264 J + 1)\n have h3 : (2 : \u211d) ^ (J + 1) = 2 * (2 : \u211d) ^ J := by rw [pow_succ']\n nlinarith [h1, h2, h3, h2JR, hR]\n have hb5 : R + (2 : \u211d) ^ (j + 1) \u2264 5 * R := by linarith [h2j4R, hR]\n have hmaxb : max |R + (2 : \u211d) ^ j - 1| |R + (2 : \u211d) ^ (j + 1)| = R + (2 : \u211d) ^ (j + 1) := by\n have h1 : |R + (2 : \u211d) ^ (j + 1)| = R + (2 : \u211d) ^ (j + 1) :=\n abs_of_nonneg (by positivity)\n have h2 : |R + (2 : \u211d) ^ j - 1| = R + (2 : \u211d) ^ j - 1 := by\n apply abs_of_nonneg\n have h3 : (1 : \u211d) \u2264 (2 : \u211d) ^ j := by exact_mod_cast Nat.one_le_two_pow\n linarith [h3, hR]\n rw [h1, h2]\n have h3 : (2 : \u211d) ^ (j + 1) = 2 * (2 : \u211d) ^ j := by rw [pow_succ']\n have h4 : (0 : \u211d) < (2 : \u211d) ^ j := by positivity\n exact max_eq_right (by linarith [h3, h4, hR])\n have hlogle : Real.log (3 * max |R + (2 : \u211d) ^ j - 1| |R + (2 : \u211d) ^ (j + 1)| + 5)\n \u2264 2 * Real.log R := by\n rw [hmaxb]\n have h1 : Real.log (3 * (R + (2 : \u211d) ^ (j + 1)) + 5) \u2264 Real.log (16 * R) := by\n apply Real.log_le_log (by positivity)\n linarith [hb5, hR]\n have h2 : Real.log (16 * R) = Real.log 16 + Real.log R :=\n Real.log_mul (by norm_num : (16 : \u211d) \u2260 0) (by linarith [hR] : R \u2260 0)\n have h3 : Real.log 16 = 4 * Real.log 2 := by\n rw [show (16 : \u211d) = 2 ^ 4 by norm_num, Real.log_pow]\n push_cast\n ring\n have h4 := log_two_le_one\n linarith [h1, h2, h3, h4, hlogR]\n exact hbrick.trans (mul_le_mul_of_nonneg_left hlogle\n (mul_nonneg (mul_nonneg (by norm_num : (0 : \u211d) \u2264 3) A0count_pos.le)\n (by positivity)))\n \u00b7 have hempty : FS.filter (fun \u03c1 : {\u03c1 : \u2102 // IsNontrivialZero \u03c1} =>\n Nat.log 2 \u230a\u2016(\u03c1 : \u2102)\u2016 - R\u230b\u208a = j) = \u2205 := by\n apply Finset.eq_empty_iff_forall_notMem.mpr\n intro \u03c1 h\u03c1\n rw [Finset.mem_filter] at h\u03c1\n obtain \u27e8h\u03c1F, h\u03c1j\u27e9 := h\u03c1\n have hdj\u03c1 := hdj \u03c1 h\u03c1F\n rw [h\u03c1j] at hdj\u03c1\n rw [Finset.mem_Ico] at hj\n omega\n rw [hempty, Finset.sum_empty]\n exact hRHSnn\n -- the closed-form per-shell bound\n have hper : \u2200 j \u2208 Finset.Ico 1 (J + 1 + 1),\n (1 / (2 : \u211d) ^ j) * (3 * A0count * ((2 : \u211d) ^ j + 3) * (2 * Real.log R))\n \u2264 15 * A0count * Real.log R := by\n intro j hj\n rw [Finset.mem_Ico] at hj\n have h2j0 : (0 : \u211d) < (2 : \u211d) ^ j := by positivity\n have hj2 : (2 : \u211d) \u2264 (2 : \u211d) ^ j := by\n have h1 : (2 : \u211d) ^ 1 \u2264 (2 : \u211d) ^ j :=\n pow_le_pow_right\u2080 (by norm_num) (by omega : 1 \u2264 j)\n linarith [h1]\n have hA0 := A0count_pos.le\n have h1 : (1 / (2 : \u211d) ^ j) * (3 * A0count * ((2 : \u211d) ^ j + 3) * (2 * Real.log R))\n = 6 * A0count * Real.log R * (1 + 3 / (2 : \u211d) ^ j) := by\n field_simp\n ring\n rw [h1]\n have h2 : 3 / (2 : \u211d) ^ j \u2264 3 / 2 := by\n apply div_le_div_of_nonneg_left (by norm_num : (0 : \u211d) \u2264 3) (by norm_num) hj2\n have h3 : (0 : \u211d) \u2264 1 + 3 / (2 : \u211d) ^ j := by\n have h4 : (0 : \u211d) \u2264 3 / (2 : \u211d) ^ j := div_nonneg (by norm_num) h2j0.le\n linarith [h4]\n have h4 : (1 : \u211d) + 3 / (2 : \u211d) ^ j \u2264 5 / 2 := by linarith [h2]\n have h5 : (6 : \u211d) * A0count * Real.log R * (1 + 3 / (2 : \u211d) ^ j)\n \u2264 (6 * A0count * Real.log R) * (5 / 2) :=\n mul_le_mul_of_nonneg_left h4\n (mul_nonneg (mul_nonneg (by norm_num : (0 : \u211d) \u2264 6) hA0) hlogRnn)\n have h6 : (6 : \u211d) * A0count * Real.log R * (5 / 2) = 15 * A0count * Real.log R := by\n ring\n rw [h6] at h5\n exact h5\n -- assembly via dyadic_family_le (J' := J+1)\n have hmain := dyadic_family_le FS (fun \u03c1 => \u2016(\u03c1 : \u2102)\u2016 - R) (J + 1)\n (fun \u03c1 => \u2016seriesTerm s \u03c1\u2016) 1\n (fun j => 3 * A0count * ((2 : \u211d) ^ j + 3) * (2 * Real.log R))\n (by norm_num) hdj hterm hcount\n calc \u2211 \u03c1 \u2208 FS, \u2016seriesTerm s \u03c1\u2016\n \u2264 \u2211 j \u2208 Finset.Ico 1 (J + 1 + 1), (1 / (2 : \u211d) ^ j) *\n (3 * A0count * ((2 : \u211d) ^ j + 3) * (2 * Real.log R)) := hmain\n _ \u2264 \u2211 j \u2208 Finset.Ico 1 (J + 1 + 1), 15 * A0count * Real.log R := Finset.sum_le_sum hper\n _ = ((J + 1 : \u2115) : \u211d) * (15 * A0count * Real.log R) := by\n rw [Finset.sum_const, Nat.card_Ico, Nat.add_sub_cancel, nsmul_eq_mul]\n _ \u2264 45 * A0count * (Real.log R) ^ 2 := by\n have hA0 := A0count_pos.le\n have hJ1 : ((J + 1 : \u2115) : \u211d) \u2264 3 * Real.log R := by\n have h1 : ((J + 1 : \u2115) : \u211d) = (J : \u211d) + 1 := by push_cast; ring\n linarith [hJle, hlogR]\n have h1 : ((J + 1 : \u2115) : \u211d) * (15 * A0count * Real.log R)\n \u2264 (3 * Real.log R) * (15 * A0count * Real.log R) :=\n mul_le_mul_of_nonneg_right hJ1\n (mul_nonneg (mul_nonneg (by norm_num : (0 : \u211d) \u2264 15) hA0) hlogRnn)\n have h2 : (3 * Real.log R) * (15 * A0count * Real.log R)\n = 45 * A0count * (Real.log R) ^ 2 := by ring\n rw [h2] at h1\n exact h1\n\nend NguyenRH1\n\nend"
}
raw content_json (database row)
[{"type":"thinking","thinking":"shell_inhi compiles. Now shell_up. Template with d := ‖ρ‖ − R, J' := J+1, C₁ = 1.\n\nFS := (circleZeros R).filter (fun ρ => ¬ ‖(ρ:ℂ)‖ < R + 2).\n\nElements: ‖ρ‖ ≥ R+2 (not < R+2) and ‖ρ‖ < 2R+1 (circleZeros membership — actually I don't even need the upper bound for hdj's lower part; for jf ≤ J+1 need u < R+1 ⟸ ‖ρ‖ < 2R+1 ⟹ u = ‖ρ‖−R < R+1 ✓ — so the FS element's circleZeros membership IS used here ✓).\n\n- hdj: u ≥ 2 (‖ρ‖ ≥ R+2) ⟹ ⌊u⌋₊ ≥ 2 ⟹ jf ≥ 1 ✓. jf ≤ J+1: 2^{jf} ≤ ⌊u⌋₊ ≤ u < R+1 and 2^{J+1} ≥ ⌊R⌋₊+1 > R: if 2^{jf} > 2^{J+1} then 2^{jf} ≥ 2^{J+2} = 2·2^{J+1} > 2R ≥ R+1: contradiction with 2^{jf} ≤ u < R+1. Formal:\n```\nhave hup2 : Nat.log 2 ⌊‖(ρ:ℂ)‖ - R⌋₊ ≤ J + 1 := by\n have hpowle : (2 : ℝ) ^ (Nat.log 2 ⌊‖(ρ:ℂ)‖ - R⌋₊) ≤ ‖(ρ:ℂ)‖ - R := (the usual floor machine)\n have hu : ‖(ρ:ℂ)‖ - R < R + 1 := by (from circleZeros mem: ‖ρ‖ < 2R+1)\n have h2J1 : R < (2 : ℝ) ^ (J + 1) := by\n have h1 : ⌊R⌋₊ < 2 ^ (J + 1) := Nat.lt_pow_succ_log_self (by norm_num) _ -- J = Nat.log 2 ⌊R⌋₊: Nat.lt_pow_succ_log_self : n < b^(Nat.log b n + 1)\n have h2 : R < (⌊R⌋₊ : ℝ) + 1 := Nat.lt_floor_add_one _\n have h3 : ((2 ^ (J + 1) : ℕ) : ℝ) = (2 : ℝ) ^ (J + 1) := by push_cast; ring\n have h4 : (⌊R⌋₊ : ℝ) < (2 : ℝ) ^ (J + 1) := by rw [← h3]; exact_mod_cast h1\n linarith [h2, h4]\n by_contra hcon\n push Not at hcon -- J + 1 < jf\n have h55 : J + 2 ≤ Nat.log 2 ⌊‖(ρ:ℂ)‖ - R⌋₊ := by omega\n have h66 : (2 : ℝ) ^ (J + 2) ≤ (2 : ℝ) ^ (Nat.log 2 ⌊‖(ρ:ℂ)‖ - R⌋₊) :=\n pow_le_pow_right₀ (by norm_num) h55\n have h77 : (2 : ℝ) ^ (J + 2) = 2 * (2 : ℝ) ^ (J + 1) := by rw [pow_succ']\n linarith [hpowle, hu, h2J1, h66, h77, hR]\n```\n✓ (2^{J+2} = 2·2^{J+1} > 2R ≥ R+1 > u ≥ 2^{jf} ≥ 2^{J+2} — contradiction via linarith.)\n\n- term: g ≤ m/u ≤ m/2^{jf}: \n hsr : ‖ρ‖−R ≤ ‖s−ρ‖: abs_norm_sub_norm_le s ρ: |‖s‖−‖ρ‖| ≤ ‖s−ρ‖: ‖s‖−‖ρ‖ = R−‖ρ‖ < 0: |R−‖ρ‖| = ‖ρ‖−R (abs_of_neg or abs_of_nonpos... |x| = −x for x ≤ 0: abs_of_nonpos (R−‖ρ‖ ≤ 0) : |R−‖ρ‖| = −(R−‖ρ‖) = ‖ρ‖−R ✓).\n h1 : R/(‖ρ‖‖s−ρ‖) ≤ R/(‖ρ‖·u) (div_le_div_of_nonneg_left, mul_le_mul_of_nonneg_left hsr).\n h2 : R/(‖ρ‖·u) ≤ 1/u: R/(‖ρ‖·u) ≤ 1/u ⟺ R·u ≤ 1·(‖ρ‖·u) hmm via: R/(‖ρ‖·u) = (R/‖ρ‖)/u ≤ 1/u: R/‖ρ‖ ≤ 1 ⟺ R ≤ ‖ρ‖ ✓ (div_le_iff₀ hρpos: R ≤ 1·‖ρ‖ ✓). Then div_le_div_of_nonneg_right h2a (u ≥ 0).\n h3 : 1/u ≤ 1/2^{jf}: div_le_div_of_nonneg_left (1 ≥ 0) (2^{jf} > 0) (2^{jf} ≤ u).\n C₁ = 1: final form: ≤ 1·(m)/(2)^{jf} = m/2^{jf} — dyadic_family_le's hterm: g ρ ≤ C₁·m/(2)^{jf ρ} with C₁ := 1: 1·m/2^{jf}: the calc ends `_ = 1 * (zeroMult ρ : ℝ) / (2:ℝ)^(jf)` by ring ✓.\n\n- count per j ∈ Ico 1 (J'+1) with J' := J+1: fiber: u ∈ [2^j, 2^{j+1}):\n a := R+2^j−1, b := R+2^{j+1}, c := R+1.\n hM1 : 1 ≤ max a c: c = R+1 ≥ 1 ✓ le_max_right.trans.\n hMb : max a c ≤ b: a ≤ b ⟺ R+2^j−1 ≤ R+2^{j+1} ⟺ 2^j−1 ≤ 2^{j+1} ✓; c ≤ b ⟺ R+1 ≤ R+2^{j+1} ⟺ 1 ≤ 2^{j+1} ✓ (2^{j+1} ≥ 2).\n hsub: |γ| ≥ ‖ρ‖−1 ≥ R+2^j−1 = a (u ≥ 2^j ⟹ ‖ρ‖ ≥ R+2^j) ✓; |γ| ≤ ‖ρ‖ ≤ b (u < 2^{j+1} ⟹ ‖ρ‖ < R+2^{j+1} ≤ b) ✓; c ≤ |γ|: ‖ρ‖−1 ≥ R+1 ⟺ u ≥ 2 ✓.\n brick: b−a+2 = 2^j+3 ✓; max|a||b| = b (a ≥ 0: a = R+2^j−1 ≥ R ≥ 1 > 0: |a| = a; |b| = b; a ≤ b ⟹ max = b): log(3b+5) ≤ 2L: b = R+2^{j+1} ≤ 5R: 2^{j+1} ≤ 4R: 2^j ≤ 2^{J+1} ≤ 2R: 2^{J+1} ≤ 2R ⟸ 2^J ≤ R ✓ (j ≤ J+1 ⟹ 2^j ≤ 2^{J+1} = 2·2^J ≤ 2R): so 2^{j+1} = 2·2^j ≤ 4R ✓. b ≤ 5R ⟹ 3b+5 ≤ 15R+5 ≤ 16R (5 ≤ R) ⟹ log ≤ log(16R) = log16 + L: log 16 = log(2^4) = 4·log2 ≤ 4 (log_two_le_one): ≤ 4+L ≤ L+L = 2L ⟺ 4 ≤ L (L ≥ 9) ✓ linarith.\n Hmm — log 16 = log(2^4): rw [show (16:ℝ) = 2^4 by norm_num, Real.log_pow]; push_cast: = 4·log 2. ✓\n And 3b+5 ≤ 16R needs b ≤ 5R: b = R+2^{j+1}, 2^{j+1} ≤ 4R ✓.\n cnt j := 3*A0count*((2:ℝ)^j+3)*(2*Real.log R) (same as inhi).\n- hper: (1/2^j)·3A₀(2^j+3)·2L = 6A₀L(1+3/2^j) ≤ 6A₀L·(5/2) = 15A₀L.\n algebra: (1/2^j)·(3A₀(2^j+3)·2L) = 6A₀L·(2^j+3)/2^j = 6A₀L(1+3/2^j) ✓ field_simp; ring.\n- Σ over Ico 1 (J'+1) = Ico 1 (J+2): card = J+1: ≤ (J+1)·15A₀L: (J:ℝ)+1 ≤ 2L+1 ≤ 3L (1 ≤ L... L ≥ 9 ✓): ≤ 3L·15A₀L = 45A₀L².\n final: (J+1:ℝ)·(15A₀L) ≤ 45A₀L²: (J+1) ≤ 3L: from hJle: J ≤ 2L ⟹ J+1 ≤ 2L+1 ≤ 3L ⟺ 1 ≤ L ✓ linarith.\n (3L)·(15A₀L) = 45A₀L² by ring.\n\nFor the dyadic_family_le application with J' := J+1: the Ico is Finset.Ico 1 (J'+1) = Ico 1 (J+2) — I must pass J+1 as the J argument: `dyadic_family_le FS d (J+1) ...` — then hdj's second component: jf ≤ J+1 ✓ (proved above). And the card: Nat.card_Ico 1 (J+1+1) = J+1: Nat.add_sub_cancel ✓.\n\nhdj's form: 1 ≤ Nat.log 2 ⌊d ρ⌋₊ ∧ Nat.log 2 ⌊d ρ⌋₊ ≤ J+1 ✓.\n\nAlso the count's by_cases hj : j ∈ Finset.Ico 1 (J+1+1): for the brick case: 2^{j+1} ≤ 4R needs j ≤ J+1 ✓ from mem_Ico. And empty case via hdj.\n\nFor hper's sum: Ico 1 (J+2): card J+1.\n\nLet me write shell_up now.","signature":""},{"type":"text","text":"shell_inhi compiles. Now shell_up (d := ‖ρ‖−R, J′ := J+1, C₁ = 1)."},{"type":"tool_use","id":"Edit_99","name":"Edit","input":{"replace_all":false,"file_path":"D:\\Python\\Quantum\\research\\lean\\NguyenRH1\\NguyenRH1\\LiCircleBound.lean","old_string":"end NguyenRH1\n\nend","new_string":"/-- **The upper shell** (R+2 ≤ ‖ρ‖, within the finite part): ≤\n45·A₀·(log R)². Dyadic in u := ‖ρ‖−R ∈ [2, R+1); the dyadic class can\nreach J+1 (⌊u⌋₊ can be ⌊R⌋₊+1), so the shell count is J+1 ≤ 3·log R. -/\nlemma shell_up {s : ℂ} {R : ℝ} (hs : ‖s‖ = R) (hsz : ¬ IsNontrivialZero s)\n (hR : (16002 : ℝ) ≤ R) :\n ∑ ρ ∈ (circleZeros R).filter (fun ρ : {ρ : ℂ // IsNontrivialZero ρ} =>\n ¬ ‖(ρ : ℂ)‖ < R + 2), ‖seriesTerm s ρ‖\n ≤ 45 * A0count * (Real.log R) ^ 2 := by\n classical\n have hRpos : (0 : ℝ) < R := by linarith [hR]\n have hlogR : (9 : ℝ) ≤ Real.log R := nine_le_log_of_16002_le hR\n have hlogRnn : (0 : ℝ) ≤ Real.log R := by linarith [hlogR]\n set J := Nat.log 2 ⌊R⌋₊ with hJ\n have hJle : (J : ℝ) ≤ 2 * Real.log R := Nat.log_floor_two_le hR\n have h2JR : (2 : ℝ) ^ J ≤ R := two_pow_log_floor_le hR\n set FS := (circleZeros R).filter (fun ρ : {ρ : ℂ // IsNontrivialZero ρ} =>\n ¬ ‖(ρ : ℂ)‖ < R + 2) with hFS\n have hdj : ∀ ρ ∈ FS,\n 1 ≤ Nat.log 2 ⌊‖(ρ : ℂ)‖ - R⌋₊ ∧ Nat.log 2 ⌊‖(ρ : ℂ)‖ - R⌋₊ ≤ J + 1 := by\n intro ρ hρ\n rw [hFS, Finset.mem_filter] at hρ\n obtain ⟨hρcirc, hρR2⟩ := hρ\n have hρR2' : (R + 2 : ℝ) ≤ ‖(ρ : ℂ)‖ := le_of_not_gt hρR2\n have hu2 : (2 : ℝ) ≤ ‖(ρ : ℂ)‖ - R := by linarith [hρR2']\n have hρup : ‖(ρ : ℂ)‖ < 2 * R + 1 := by\n rw [mem_circleZeros] at hρcirc\n exact hρcirc\n have hfl2 : (2 : ℕ) ≤ ⌊‖(ρ : ℂ)‖ - R⌋₊ := by\n rw [Nat.le_floor_iff (by linarith [hu2] : (0 : ℝ) ≤ ‖(ρ : ℂ)‖ - R)]\n exact_mod_cast hu2\n have h1 : (1 : ℕ) ≤ Nat.log 2 ⌊‖(ρ : ℂ)‖ - R⌋₊ := by\n have h2 := Nat.log_mono_right (b := 2) hfl2\n have h3 : Nat.log 2 2 = 1 := by decide\n rw [h3] at h2\n exact h2\n have h2 : Nat.log 2 ⌊‖(ρ : ℂ)‖ - R⌋₊ ≤ J + 1 := by\n have hpowle : (2 : ℝ) ^ (Nat.log 2 ⌊‖(ρ : ℂ)‖ - R⌋₊) ≤ ‖(ρ : ℂ)‖ - R := by\n have hfl : ⌊‖(ρ : ℂ)‖ - R⌋₊ ≠ 0 := by\n rw [Ne, Nat.floor_eq_zero]\n push Not\n linarith [hu2]\n have h1 := Nat.pow_log_le_self 2 hfl\n have h2 : ((2 ^ Nat.log 2 ⌊‖(ρ : ℂ)‖ - R⌋₊ : ℕ) : ℝ) ≤ (⌊‖(ρ : ℂ)‖ - R⌋₊ : ℝ) := by\n exact_mod_cast h1\n have h3 : ((2 ^ Nat.log 2 ⌊‖(ρ : ℂ)‖ - R⌋₊ : ℕ) : ℝ)\n = (2 : ℝ) ^ (Nat.log 2 ⌊‖(ρ : ℂ)‖ - R⌋₊) := by\n push_cast\n ring\n rw [h3] at h2\n have h4 : (⌊‖(ρ : ℂ)‖ - R⌋₊ : ℝ) ≤ ‖(ρ : ℂ)‖ - R :=\n Nat.floor_le (by linarith [hu2])\n linarith [h2, h4]\n have h2J1 : R < (2 : ℝ) ^ (J + 1) := by\n have h1 : ⌊R⌋₊ < 2 ^ (J + 1) := Nat.lt_pow_succ_log_self (by norm_num) _\n have h2 : R < (⌊R⌋₊ : ℝ) + 1 := Nat.lt_floor_add_one _\n have h3 : ((2 ^ (J + 1) : ℕ) : ℝ) = (2 : ℝ) ^ (J + 1) := by push_cast; ring\n have h4 : (⌊R⌋₊ : ℝ) < (2 : ℝ) ^ (J + 1) := by rw [← h3]; exact_mod_cast h1\n linarith [h2, h4]\n by_contra hcon\n push Not at hcon\n have h55 : J + 2 ≤ Nat.log 2 ⌊‖(ρ : ℂ)‖ - R⌋₊ := by omega\n have h66 : (2 : ℝ) ^ (J + 2) ≤ (2 : ℝ) ^ (Nat.log 2 ⌊‖(ρ : ℂ)‖ - R⌋₊) :=\n pow_le_pow_right₀ (by norm_num) h55\n have h77 : (2 : ℝ) ^ (J + 2) = 2 * (2 : ℝ) ^ (J + 1) := by rw [pow_succ']\n linarith [hpowle, hρup, h2J1, h66, h77, hR]\n exact ⟨h1, h2⟩\n have hterm : ∀ ρ ∈ FS, ‖seriesTerm s ρ‖\n ≤ 1 * (zeroMult (ρ : ℂ) : ℝ) / (2 : ℝ) ^ (Nat.log 2 ⌊‖(ρ : ℂ)‖ - R⌋₊) := by\n intro ρ hρ\n rw [hFS, Finset.mem_filter] at hρ\n obtain ⟨hρcirc, hρR2⟩ := hρ\n have hρR2' : (R + 2 : ℝ) ≤ ‖(ρ : ℂ)‖ := le_of_not_gt hρR2\n have hu2 : (2 : ℝ) ≤ ‖(ρ : ℂ)‖ - R := by linarith [hρR2']\n have hpowle : (2 : ℝ) ^ (Nat.log 2 ⌊‖(ρ : ℂ)‖ - R⌋₊) ≤ ‖(ρ : ℂ)‖ - R := by\n have hfl : ⌊‖(ρ : ℂ)‖ - R⌋₊ ≠ 0 := by\n rw [Ne, Nat.floor_eq_zero]\n push Not\n linarith [hu2]\n have h1 := Nat.pow_log_le_self 2 hfl\n have h2 : ((2 ^ Nat.log 2 ⌊‖(ρ : ℂ)‖ - R⌋₊ : ℕ) : ℝ) ≤ (⌊‖(ρ : ℂ)‖ - R⌋₊ : ℝ) := by\n exact_mod_cast h1\n have h3 : ((2 ^ Nat.log 2 ⌊‖(ρ : ℂ)‖ - R⌋₊ : ℕ) : ℝ)\n = (2 : ℝ) ^ (Nat.log 2 ⌊‖(ρ : ℂ)‖ - R⌋₊) := by\n push_cast\n ring\n rw [h3] at h2\n have h4 : (⌊‖(ρ : ℂ)‖ - R⌋₊ : ℝ) ≤ ‖(ρ : ℂ)‖ - R :=\n Nat.floor_le (by linarith [hu2])\n linarith [h2, h4]\n have hsr : ‖(ρ : ℂ)‖ - R ≤ ‖s - (ρ : ℂ)‖ := by\n have h := abs_norm_sub_norm_le s (ρ : ℂ)\n rw [hs, abs_of_nonpos (by linarith [hρR2', hR] : R - ‖(ρ : ℂ)‖ ≤ 0)] at h\n have h1 : -(R - ‖(ρ : ℂ)‖) = ‖(ρ : ℂ)‖ - R := by ring\n rw [h1] at h\n exact h\n have hρpos : (0 : ℝ) < ‖(ρ : ℂ)‖ := by linarith [hρR2', hR]\n have hsrpos : (0 : ℝ) < ‖s - (ρ : ℂ)‖ := by linarith [hsr, hu2]\n have hid := seriesTerm_norm_eq_div hs hsz ρ\n rw [hid]\n have hm : (0 : ℝ) ≤ (zeroMult (ρ : ℂ) : ℝ) := Nat.cast_nonneg _\n have h1 : R / (‖(ρ : ℂ)‖ * ‖s - (ρ : ℂ)‖)\n ≤ R / (‖(ρ : ℂ)‖ * (‖(ρ : ℂ)‖ - R)) := by\n apply div_le_div_of_nonneg_left hRpos.le (mul_pos hρpos (by linarith [hu2]))\n exact mul_le_mul_of_nonneg_left hsr hρpos.le\n have h2a : R / ‖(ρ : ℂ)‖ ≤ 1 := by\n rw [div_le_iff₀ hρpos]\n linarith [hρR2', hR]\n have h2 : R / (‖(ρ : ℂ)‖ * (‖(ρ : ℂ)‖ - R)) ≤ 1 / (‖(ρ : ℂ)‖ - R) := by\n rw [show R / (‖(ρ : ℂ)‖ * (‖(ρ : ℂ)‖ - R))\n = (R / ‖(ρ : ℂ)‖) / (‖(ρ : ℂ)‖ - R) from by rw [div_div]]\n exact div_le_div_of_nonneg_right h2a (by linarith [hu2] : (0 : ℝ) ≤ ‖(ρ : ℂ)‖ - R)\n have h3 : (1 : ℝ) / (‖(ρ : ℂ)‖ - R) ≤ 1 / (2 : ℝ) ^ (Nat.log 2 ⌊‖(ρ : ℂ)‖ - R⌋₊) := by\n apply div_le_div_of_nonneg_left (by norm_num : (0 : ℝ) ≤ 1) (by positivity)\n exact hpowle\n calc (zeroMult (ρ : ℂ) : ℝ) * (R / (‖(ρ : ℂ)‖ * ‖s - (ρ : ℂ)‖))\n ≤ (zeroMult (ρ : ℂ) : ℝ) * (R / (‖(ρ : ℂ)‖ * (‖(ρ : ℂ)‖ - R))) :=\n mul_le_mul_of_nonneg_left h1 hm\n _ ≤ (zeroMult (ρ : ℂ) : ℝ) * (1 / (‖(ρ : ℂ)‖ - R)) :=\n mul_le_mul_of_nonneg_left h2 hm\n _ ≤ (zeroMult (ρ : ℂ) : ℝ) * (1 / (2 : ℝ) ^ (Nat.log 2 ⌊‖(ρ : ℂ)‖ - R⌋₊)) :=\n mul_le_mul_of_nonneg_left h3 hm\n _ = 1 * (zeroMult (ρ : ℂ) : ℝ) / (2 : ℝ) ^ (Nat.log 2 ⌊‖(ρ : ℂ)‖ - R⌋₊) := by ring\n have hcount : ∀ j : ℕ,\n ∑ ρ ∈ FS.filter (fun ρ : {ρ : ℂ // IsNontrivialZero ρ} =>\n Nat.log 2 ⌊‖(ρ : ℂ)‖ - R⌋₊ = j), (zeroMult (ρ : ℂ) : ℝ)\n ≤ 3 * A0count * ((2 : ℝ) ^ j + 3) * (2 * Real.log R) := by\n intro j\n have hRHSnn : (0 : ℝ) ≤ 3 * A0count * ((2 : ℝ) ^ j + 3) * (2 * Real.log R) :=\n mul_nonneg (mul_nonneg (mul_nonneg (by norm_num : (0 : ℝ) ≤ 3) A0count_pos.le)\n (by positivity)) (mul_nonneg (by norm_num : (0 : ℝ) ≤ 2) hlogRnn)\n by_cases hj : j ∈ Finset.Ico 1 (J + 1 + 1)\n · rw [Finset.mem_Ico] at hj\n have hM1 : (1 : ℝ) ≤ max (R + (2 : ℝ) ^ j - 1) (R + 1) := by\n have h1 : (1 : ℝ) ≤ R + 1 := by linarith [hR]\n exact le_trans h1 (le_max_right _ _)\n have hMb : max (R + (2 : ℝ) ^ j - 1) (R + 1) ≤ R + (2 : ℝ) ^ (j + 1) := by\n apply max_le_iff.mpr\n constructor\n · have h1 : (2 : ℝ) ^ (j + 1) = 2 * (2 : ℝ) ^ j := by rw [pow_succ']\n have h2 : (0 : ℝ) < (2 : ℝ) ^ j := by positivity\n linarith [h1, h2]\n · have h1 : (2 : ℝ) ^ (j + 1) = 2 * (2 : ℝ) ^ j := by rw [pow_succ']\n have h2 : (0 : ℝ) < (2 : ℝ) ^ j := by positivity\n linarith [h1, h2]\n have hsub : ∀ ρ ∈ FS.filter (fun ρ : {ρ : ℂ // IsNontrivialZero ρ} =>\n Nat.log 2 ⌊‖(ρ : ℂ)‖ - R⌋₊ = j),\n R + (2 : ℝ) ^ j - 1 ≤ |(ρ : ℂ).im| ∧ |(ρ : ℂ).im| ≤ R + (2 : ℝ) ^ (j + 1) ∧\n R + 1 ≤ |(ρ : ℂ).im| := by\n intro ρ hρ\n rw [Finset.mem_filter] at hρ\n obtain ⟨hρF, hρj⟩ := hρ\n rw [hFS, Finset.mem_filter] at hρF\n obtain ⟨hρcirc, hρR2⟩ := hρF\n have hρR2' : (R + 2 : ℝ) ≤ ‖(ρ : ℂ)‖ := le_of_not_gt hρR2\n have hu2 : (2 : ℝ) ≤ ‖(ρ : ℂ)‖ - R := by linarith [hρR2']\n have hpowle : (2 : ℝ) ^ j ≤ ‖(ρ : ℂ)‖ - R := by\n have hfl : ⌊‖(ρ : ℂ)‖ - R⌋₊ ≠ 0 := by\n rw [Ne, Nat.floor_eq_zero]\n push Not\n linarith [hu2]\n have h1 := Nat.pow_log_le_self 2 hfl\n rw [hρj] at h1\n have h2 : ((2 ^ j : ℕ) : ℝ) ≤ (⌊‖(ρ : ℂ)‖ - R⌋₊ : ℝ) := by exact_mod_cast h1\n have h3 : ((2 ^ j : ℕ) : ℝ) = (2 : ℝ) ^ j := by push_cast; ring\n rw [h3] at h2\n have h4 : (⌊‖(ρ : ℂ)‖ - R⌋₊ : ℝ) ≤ ‖(ρ : ℂ)‖ - R :=\n Nat.floor_le (by linarith [hu2])\n linarith [h2, h4]\n have hpowup : ‖(ρ : ℂ)‖ - R < (2 : ℝ) ^ (j + 1) := by\n have h1 : ⌊‖(ρ : ℂ)‖ - R⌋₊ < 2 ^ (Nat.log 2 ⌊‖(ρ : ℂ)‖ - R⌋₊ + 1) :=\n Nat.lt_pow_succ_log_self (by norm_num) _\n rw [hρj] at h1\n have h2 : ⌊‖(ρ : ℂ)‖ - R⌋₊ + 1 ≤ 2 ^ (j + 1) := h1\n have h3 : ‖(ρ : ℂ)‖ - R < (⌊‖(ρ : ℂ)‖ - R⌋₊ : ℝ) + 1 := Nat.lt_floor_add_one _\n have h4 : ((⌊‖(ρ : ℂ)‖ - R⌋₊ + 1 : ℕ) : ℝ) ≤ ((2 ^ (j + 1) : ℕ) : ℝ) := by\n exact_mod_cast h2\n have h5 : ((2 ^ (j + 1) : ℕ) : ℝ) = (2 : ℝ) ^ (j + 1) := by push_cast; ring\n rw [h5] at h4\n push_cast at h4\n linarith [h3, h4]\n have him1 := abs_im_ge_norm_sub_one ρ\n have him2 : |(ρ : ℂ).im| ≤ ‖(ρ : ℂ)‖ := abs_im_le_norm _\n exact ⟨by linarith [him1, hpowle], by linarith [him2, hpowup],\n by linarith [him1, hρR2', hR]⟩\n have hbrick := sum_zeroMult_le_of_im_band\n (FS.filter (fun ρ : {ρ : ℂ // IsNontrivialZero ρ} =>\n Nat.log 2 ⌊‖(ρ : ℂ)‖ - R⌋₊ = j)) hM1 hMb hsub\n have hab : R + (2 : ℝ) ^ (j + 1) - (R + (2 : ℝ) ^ j - 1) + 2 = (2 : ℝ) ^ j + 3 := by\n have h1 : (2 : ℝ) ^ (j + 1) = 2 * (2 : ℝ) ^ j := by rw [pow_succ']\n linarith [h1]\n rw [hab] at hbrick\n -- the log bound: max|a||b| = b ≤ 5R ⟹ log(3b+5) ≤ log(16R) ≤ 2L\n have h2j4R : (2 : ℝ) ^ (j + 1) ≤ 4 * R := by\n have h1 : (2 : ℝ) ^ (j + 1) = 2 * (2 : ℝ) ^ j := by rw [pow_succ']\n have h2 : (2 : ℝ) ^ j ≤ (2 : ℝ) ^ (J + 1) :=\n pow_le_pow_right₀ (by norm_num) (by omega : j ≤ J + 1)\n have h3 : (2 : ℝ) ^ (J + 1) = 2 * (2 : ℝ) ^ J := by rw [pow_succ']\n nlinarith [h1, h2, h3, h2JR, hR]\n have hb5 : R + (2 : ℝ) ^ (j + 1) ≤ 5 * R := by linarith [h2j4R, hR]\n have hmaxb : max |R + (2 : ℝ) ^ j - 1| |R + (2 : ℝ) ^ (j + 1)| = R + (2 : ℝ) ^ (j + 1) := by\n have h1 : |R + (2 : ℝ) ^ (j + 1)| = R + (2 : ℝ) ^ (j + 1) :=\n abs_of_nonneg (by positivity)\n have h2 : |R + (2 : ℝ) ^ j - 1| = R + (2 : ℝ) ^ j - 1 := by\n apply abs_of_nonneg\n have h3 : (1 : ℝ) ≤ (2 : ℝ) ^ j := by exact_mod_cast Nat.one_le_two_pow\n linarith [h3, hR]\n rw [h1, h2]\n have h3 : (2 : ℝ) ^ (j + 1) = 2 * (2 : ℝ) ^ j := by rw [pow_succ']\n have h4 : (0 : ℝ) < (2 : ℝ) ^ j := by positivity\n exact max_eq_right (by linarith [h3, h4, hR])\n have hlogle : Real.log (3 * max |R + (2 : ℝ) ^ j - 1| |R + (2 : ℝ) ^ (j + 1)| + 5)\n ≤ 2 * Real.log R := by\n rw [hmaxb]\n have h1 : Real.log (3 * (R + (2 : ℝ) ^ (j + 1)) + 5) ≤ Real.log (16 * R) := by\n apply Real.log_le_log (by positivity)\n linarith [hb5, hR]\n have h2 : Real.log (16 * R) = Real.log 16 + Real.log R :=\n Real.log_mul (by norm_num : (16 : ℝ) ≠ 0) (by linarith [hR] : R ≠ 0)\n have h3 : Real.log 16 = 4 * Real.log 2 := by\n rw [show (16 : ℝ) = 2 ^ 4 by norm_num, Real.log_pow]\n push_cast\n ring\n have h4 := log_two_le_one\n linarith [h1, h2, h3, h4, hlogR]\n exact hbrick.trans (mul_le_mul_of_nonneg_left hlogle\n (mul_nonneg (mul_nonneg (by norm_num : (0 : ℝ) ≤ 3) A0count_pos.le)\n (by positivity)))\n · have hempty : FS.filter (fun ρ : {ρ : ℂ // IsNontrivialZero ρ} =>\n Nat.log 2 ⌊‖(ρ : ℂ)‖ - R⌋₊ = j) = ∅ := by\n apply Finset.eq_empty_iff_forall_notMem.mpr\n intro ρ hρ\n rw [Finset.mem_filter] at hρ\n obtain ⟨hρF, hρj⟩ := hρ\n have hdjρ := hdj ρ hρF\n rw [hρj] at hdjρ\n rw [Finset.mem_Ico] at hj\n omega\n rw [hempty, Finset.sum_empty]\n exact hRHSnn\n -- the closed-form per-shell bound\n have hper : ∀ j ∈ Finset.Ico 1 (J + 1 + 1),\n (1 / (2 : ℝ) ^ j) * (3 * A0count * ((2 : ℝ) ^ j + 3) * (2 * Real.log R))\n ≤ 15 * A0count * Real.log R := by\n intro j hj\n rw [Finset.mem_Ico] at hj\n have h2j0 : (0 : ℝ) < (2 : ℝ) ^ j := by positivity\n have hj2 : (2 : ℝ) ≤ (2 : ℝ) ^ j := by\n have h1 : (2 : ℝ) ^ 1 ≤ (2 : ℝ) ^ j :=\n pow_le_pow_right₀ (by norm_num) (by omega : 1 ≤ j)\n linarith [h1]\n have hA0 := A0count_pos.le\n have h1 : (1 / (2 : ℝ) ^ j) * (3 * A0count * ((2 : ℝ) ^ j + 3) * (2 * Real.log R))\n = 6 * A0count * Real.log R * (1 + 3 / (2 : ℝ) ^ j) := by\n field_simp\n ring\n rw [h1]\n have h2 : 3 / (2 : ℝ) ^ j ≤ 3 / 2 := by\n apply div_le_div_of_nonneg_left (by norm_num : (0 : ℝ) ≤ 3) (by norm_num) hj2\n have h3 : (0 : ℝ) ≤ 1 + 3 / (2 : ℝ) ^ j := by\n have h4 : (0 : ℝ) ≤ 3 / (2 : ℝ) ^ j := div_nonneg (by norm_num) h2j0.le\n linarith [h4]\n have h4 : (1 : ℝ) + 3 / (2 : ℝ) ^ j ≤ 5 / 2 := by linarith [h2]\n have h5 : (6 : ℝ) * A0count * Real.log R * (1 + 3 / (2 : ℝ) ^ j)\n ≤ (6 * A0count * Real.log R) * (5 / 2) :=\n mul_le_mul_of_nonneg_left h4\n (mul_nonneg (mul_nonneg (by norm_num : (0 : ℝ) ≤ 6) hA0) hlogRnn)\n have h6 : (6 : ℝ) * A0count * Real.log R * (5 / 2) = 15 * A0count * Real.log R := by\n ring\n rw [h6] at h5\n exact h5\n -- assembly via dyadic_family_le (J' := J+1)\n have hmain := dyadic_family_le FS (fun ρ => ‖(ρ : ℂ)‖ - R) (J + 1)\n (fun ρ => ‖seriesTerm s ρ‖) 1\n (fun j => 3 * A0count * ((2 : ℝ) ^ j + 3) * (2 * Real.log R))\n (by norm_num) hdj hterm hcount\n calc ∑ ρ ∈ FS, ‖seriesTerm s ρ‖\n ≤ ∑ j ∈ Finset.Ico 1 (J + 1 + 1), (1 / (2 : ℝ) ^ j) *\n (3 * A0count * ((2 : ℝ) ^ j + 3) * (2 * Real.log R)) := hmain\n _ ≤ ∑ j ∈ Finset.Ico 1 (J + 1 + 1), 15 * A0count * Real.log R := Finset.sum_le_sum hper\n _ = ((J + 1 : ℕ) : ℝ) * (15 * A0count * Real.log R) := by\n rw [Finset.sum_const, Nat.card_Ico, Nat.add_sub_cancel, nsmul_eq_mul]\n _ ≤ 45 * A0count * (Real.log R) ^ 2 := by\n have hA0 := A0count_pos.le\n have hJ1 : ((J + 1 : ℕ) : ℝ) ≤ 3 * Real.log R := by\n have h1 : ((J + 1 : ℕ) : ℝ) = (J : ℝ) + 1 := by push_cast; ring\n linarith [hJle, hlogR]\n have h1 : ((J + 1 : ℕ) : ℝ) * (15 * A0count * Real.log R)\n ≤ (3 * Real.log R) * (15 * A0count * Real.log R) :=\n mul_le_mul_of_nonneg_right hJ1\n (mul_nonneg (mul_nonneg (by norm_num : (0 : ℝ) ≤ 15) hA0) hlogRnn)\n have h2 : (3 * Real.log R) * (15 * A0count * Real.log R)\n = 45 * A0count * (Real.log R) ^ 2 := by ring\n rw [h2] at h1\n exact h1\n\nend NguyenRH1\n\nend"},"extra_content":null}]