← Session 31 — ii′-5f: tight R-bound 10.5/48 (piece 3 + pinch)
thinking (21709 chars)
`Complex.continuous_conj : Continuous (conj : ℂ → ℂ)` ✓. And (starRingEnd ℂ) x = conj x — `starRingEnd_apply` simp lemma. To avoid mixing, I'll state everything with (starRingEnd ℂ) and bridge to conj via starRingEnd_apply, or just use `(starRingEnd ℂ)` and its continuity: (starRingEnd ℂ) as a function ℂ → ℂ equals conj (they're definitionally equal? starRingEnd ℂ = { conj } as a RingEquiv — applying it: (starRingEnd ℂ) x = conj x by rfl? Probably `starRingEnd_apply : (starRingEnd R) x = conj x` simp lemma ✓). For continuity: `starRingEnd_continuous`?? not found — use: `show Continuous ((starRingEnd ℂ) : ℂ → ℂ)` — it's defeq to conj? The ZetaReflect usage: `(Complex.continuous_conj).tendsto (conj w)` and starRingEnd elsewhere — there might be coercion friction. Simplest: convert with `starRingEnd_apply` rewrites and use Complex.continuous_conj:
```
have hconjcont : Continuous ((starRingEnd ℂ) : ℂ → ℂ) := by
simp only [starRingEnd_apply]
exact Complex.continuous_conj
```
Hmm — (starRingEnd ℂ) as a function: `⇑(starRingEnd ℂ)` — simp only [starRingEnd_apply] should turn the goal Continuous ⇑(starRingEnd ℂ) into Continuous conj... Actually `starRingEnd_apply : (starRingEnd R) x = conj x` — for the function-level: funext or `show Continuous (conj : ℂ → ℂ)` then exact. Let me use:
```
have hconjcont : Continuous ((starRingEnd ℂ) : ℂ → ℂ) :=
Complex.continuous_conj
```
— is ⇑(starRingEnd ℂ) DEFEQ to conj? The starRingEnd is a structure with toFun = conj — the coercion ⇑(starRingEnd ℂ) should be defeq to conj ✓ try it.
Now write §13 (C0hat bridges) and §14 (conj machinery). Let me draft the C0hat bridges concretely.
For C0hat_two_mul_add_one_le (k ≥ 11):
```
lemma C0hat_two_mul_add_one_le {k : ℕ} (hk : 11 ≤ k) :
C0hat (2 * (k : ℝ) + 1)
≤ 0.433 * (Real.log k + 0.833) + 0.886 * (Real.log (Real.log k) + 0.3475) + 2.9 := by
have hkR : (11 : ℝ) ≤ (k : ℝ) := by exact_mod_cast hk
have hk0 : (0 : ℝ) < (k : ℝ) := by linarith
have hlogk : (2.3978 : ℝ) ≤ Real.log k := by
have h2a := log_eleven_ge
have h2b : Real.log 11 ≤ Real.log k := Real.log_le_log (by norm_num : (0:ℝ) < 11) hkR
linarith [h2a, h2b]
have hlogpos : (0 : ℝ) < Real.log k := by linarith [hlogk]
-- the log increment
have hinc1 : Real.log (2 * (k : ℝ) + 3) ≤ Real.log k + 0.833 := by
have h2 : (2 : ℝ) * (k : ℝ) + 3 ≤ 2.3 * (k : ℝ) := by linarith [hkR]
have h3 : Real.log (2 * (k : ℝ) + 3) ≤ Real.log (2.3 * (k : ℝ)) :=
Real.log_le_log (by positivity : (0:ℝ) < 2 * (k:ℝ) + 3) h2
have h4 : Real.log (2.3 * (k : ℝ)) = Real.log 2.3 + Real.log k :=
Real.log_mul (by norm_num : (2.3 : ℝ) ≠ 0) hk0.ne'
have h5 := log_two_point_three_le
linarith [h3, h4 ▸ h3, h5] -- careful: h4 ▸ h3 rewrites; simpler: rw [h4] at h3; linarith
-- the loglog increment
have hinc2 : Real.log (Real.log (2 * (k : ℝ) + 3))
≤ Real.log (Real.log k) + 0.3475 := by
have h6 : Real.log (Real.log (2 * (k : ℝ) + 3)) ≤ Real.log (Real.log k + 0.833) := by
apply Real.log_le_log (by positivity : (0:ℝ) < Real.log (2*(k:ℝ)+3)) hinc1
have h7 : Real.log (Real.log k + 0.833)
≤ Real.log (Real.log k) + 0.833 / Real.log k := by
have h8 : Real.log k + 0.833 = Real.log k * (1 + 0.833 / Real.log k) := by
field_simp [hlogpos.ne']
ring
rw [h8, Real.log_mul hlogpos.ne' (by positivity : (1:ℝ) + 0.833/Real.log k ≠ 0)]
have h9 : Real.log (1 + 0.833 / Real.log k) ≤ 0.833 / Real.log k :=
Real.log_le_sub_one_of_pos (by positivity : (0:ℝ) < 1 + 0.833/Real.log k)
linarith [h9]
have h10 : (0.833 : ℝ) / Real.log k ≤ 0.3475 := by
rw [div_le_iff₀ hlogpos]
have h11 : (0.3475 : ℝ) * 2.3978 ≤ 0.3475 * Real.log k :=
mul_le_mul_of_nonneg_left hlogk (by norm_num)
have h12 : (0.833 : ℝ) ≤ 0.3475 * 2.3978 := by norm_num
exact h12.trans h11
linarith [h6, h7, h10]
-- assemble
rw [C0hat]
have harg : (2 : ℝ) * (k : ℝ) + 1 + 2 = 2 * (k : ℝ) + 3 := by ring
rw [harg]
linarith [hinc1, hinc2]
```
Check the final: C0hat(2k+1) = 0.433·log(2k+1+2) + 0.886·loglog(2k+1+2) + 2.9 = 0.433·log(2k+3)+0.886·loglog(2k+3)+2.9 ≤ 0.433·(log k+0.833)+0.886·(loglog k+0.3475)+2.9 ⟸ 0.433·hinc1 + 0.886·hinc2 (coeffs nonneg) — linarith with the coefficient nonnegativity: linarith can't multiply hinc1 by 0.433 (nonlinear: 0.433·(log k + 0.833) — the term log k·0.433 is nonlinear in the atom view? linarith treats 0.433·log(2k+3) ≤ 0.433·(log k+0.833) as linear in the atoms log(2k+3), log k, 0.833-constants ✓ linarith CAN multiply hypotheses by positive rational constants internally (it's linear arithmetic) ✓.
For C0hat_add_one_le_of_fourteen_le (j ≥ 14): same skeleton with 0.1942/0.0736 and log_17_14_le/log_fourteen_ge:
```
lemma C0hat_add_one_le_of_fourteen_le {j : ℕ} (hj : 14 ≤ j) :
C0hat ((j : ℝ) + 1)
≤ 0.433 * (Real.log j + 0.1942) + 0.886 * (Real.log (Real.log j) + 0.0736) + 2.9
```
- hinc1: log(j+3) ≤ log j + 0.1942: j+3 ≤ (17/14)j ⟺ 3 ≤ (3/14)j ⟺ j ≥ 14 ✓: log(j+3) ≤ log((17/14)j) = log(17/14)+log j ≤ 0.1942+log j ✓.
((j:ℝ)+1)+2 = (j:ℝ)+3 ✓ harg.
- hinc2: loglog(j+3) ≤ loglog j + 0.1942/log j ≤ loglog j + 0.0736: log j ≥ log 14 ≥ 2.6388: 0.1942/2.6388 = 0.073594 ≤ 0.0736: via div_le_iff₀: 0.1942 ≤ 0.0736·log j: 0.0736·2.6388 = 0.19422 ≥ 0.1942 ✓ norm_num: 0.0736·2.6388 = 0.19421568 ≥ 0.1942 ✓.
For C0hat_two_t_add_one_le (t ≥ 10):
```
lemma C0hat_two_t_add_one_le {t : ℝ} (ht : 10 ≤ t) :
C0hat (2 * t + 1) ≤ C0hat (t + 1) + 0.55 := by
have ht3 : (0 : ℝ) < t + 3 := by linarith
have hlog13 : (2.5 : ℝ) ≤ Real.log (t + 3) := by
have h1 : Real.log 13 ≤ Real.log (t + 3) :=
Real.log_le_log (by norm_num : (0:ℝ) < 13) (by linarith : (13:ℝ) ≤ t + 3)
have h2 := log_thirteen_ge_five -- the new lemma log 13 ≥ 2.5
linarith [h1, h2]
-- log increment: log(2t+3) ≤ log 2 + log(t+3)
have hinc1 : Real.log (2 * t + 3) ≤ Real.log 2 + Real.log (t + 3) := by
have h1 : (2 : ℝ) * t + 3 ≤ 2 * (t + 3) := by linarith
have h2 : Real.log (2 * t + 3) ≤ Real.log (2 * (t + 3)) :=
Real.log_le_log (by positivity) h1
have h3 : Real.log (2 * (t + 3)) = Real.log 2 + Real.log (t + 3) :=
Real.log_mul (by norm_num : (2:ℝ) ≠ 0) ht3.ne'
linarith [h2, h3 ▸ h2] -- rw [h3] at h2 instead
-- loglog increment: loglog(2t+3) ≤ loglog(t+3) + 0.6932/2.5
...
```
log_thirteen_ge_five : (2.5 : ℝ) ≤ Real.log 13: via 13 ≥ e^2.5:
```
lemma exp_two_point_five_le_thirteen : Real.exp 2.5 ≤ 13 := by
have h1 : Real.exp 2.5 = Real.exp 1 * Real.exp 1 * Real.exp 0.5 := by
rw [← Real.exp_add, ← Real.exp_add]
congr 1
norm_num
have he1 : (2.7182818 : ℝ) ≤ Real.exp 1 := ...
have he2 : Real.exp 1 ≤ (2.7182819 : ℝ) := ...
have he5 : Real.exp 0.5 ≤ (1.6488 : ℝ) := by
have h2 : Real.exp 0.5 * Real.exp 0.5 = Real.exp 1 := by
rw [← Real.exp_add]
congr 1
norm_num
have h3 : Real.exp 0.5 * Real.exp 0.5 ≤ 1.6488 * 1.6488 := by
rw [h2]
calc Real.exp 1 ≤ 2.7182819 := he2
_ ≤ 1.6488 * 1.6488 := by norm_num
have h4 : (0 : ℝ) ≤ Real.exp 0.5 := (Real.exp_pos 0.5).le
nlinarith [h3, h4, Real.exp_pos 0.5]
rw [h1]
have h5 : Real.exp 1 * Real.exp 1 * Real.exp 0.5 ≤ 2.7182819 * 2.7182819 * 1.6488 := by
apply mul_le_mul
· exact mul_le_mul he2 he2 (Real.exp_pos 1).le (by norm_num)
· exact he5
· exact (Real.exp_pos 0.5).le
· positivity
have h6 : (2.7182819 : ℝ) * 2.7182819 * 1.6488 ≤ 13 := by norm_num
exact h5.trans h6
lemma log_thirteen_ge_five : (2.5 : ℝ) ≤ Real.log 13 := by
rw [Real.le_log_iff_exp_le (by norm_num : (0:ℝ) < 13)]
exact exp_two_point_five_le_thirteen
```
nlinarith for he5: (exp 0.5)² ≤ 1.6488² with exp 0.5 ≥ 0, 1.6488 ≥ 0 ⟹ exp 0.5 ≤ 1.6488 — nlinarith [h3, h4]: from (e05)² ≤ (1.6488)² and e05 ≥ 0 ⟹ e05 ≤ 1.6488: nlinarith needs: (1.6488−e05)(1.6488+e05) ≥ 0 ⟹ ... give nlinarith the product hint: nlinarith [h3, h4, mul_nonneg (by linarith : (0:ℝ) ≤ 1.6488 - Real.exp 0.5 + 2*Real.exp 0.5)...] — simpler: use sq_le_sq: |e05| ≤ |1.6488| ⟸ e05² ≤ 1.6488²: `abs_le_abs_of_nonneg`?? there's `sq_le_sq'`? or `pow_le_pow_left₀`-inverse: `le_of_pow_le_pow_left₀ (n ≠ 0) (hb : 0 ≤ b) (h : a^n ≤ b^n) : a ≤ b` — `le_of_pow_le_pow_left₀ (by norm_num : (2:ℕ) ≠ 0) (by norm_num : (0:ℝ) ≤ 1.6488) h3'` — where h3' : (Real.exp 0.5)^2 ≤ (1.6488)^2. Let me use that:
```
have h3' : Real.exp 0.5 ^ 2 ≤ (1.6488 : ℝ) ^ 2 := by
have h2 : Real.exp 0.5 ^ 2 = Real.exp 1 := by
rw [sq, ← Real.exp_add]
congr 1
norm_num
rw [h2]
calc Real.exp 1 ≤ 2.7182819 := he2
_ ≤ (1.6488 : ℝ) ^ 2 := by norm_num
exact le_of_pow_le_pow_left₀ (by norm_num : (2:ℕ) ≠ 0) (by norm_num : (0:ℝ) ≤ 1.6488) h3'
```
`le_of_pow_le_pow_left₀ : n ≠ 0 → 0 ≤ b → a ^ n ≤ b ^ n → a ≤ b` ✓ exists (root-namespace or _root_).
The hloglog increment for C0hat_two_t_add_one_le: loglog(2t+3) ≤ loglog(t+3) + 0.6932/2.5:
```
have hinc2 : Real.log (Real.log (2 * t + 3))
≤ Real.log (Real.log (t + 3)) + 0.6932 / 2.5 := by
have h6 : Real.log (Real.log (2 * t + 3)) ≤ Real.log (Real.log (t + 3) + Real.log 2) := by
apply Real.log_le_log (by positivity : (0:ℝ) < Real.log (2*t+3))
linarith [hinc1] -- log(2t+3) ≤ log(t+3) + log 2 ✓
have h7 : Real.log (Real.log (t + 3) + Real.log 2)
≤ Real.log (Real.log (t + 3)) + Real.log 2 / Real.log (t + 3) := by
<same log(a+c) machine with a = log(t+3) ≥ 2.5, c = log 2 ≤ 0.6932>
have h10 : Real.log 2 / Real.log (t + 3) ≤ 0.6932 / 2.5 := by
<log 2 ≤ 0.6932 (log_two_lt_d9) and log(t+3) ≥ 2.5: div_le_div: 0.6932/2.5 form>
linarith [h6, h7, h10]
```
The div: log 2/log(t+3) ≤ 0.6932/2.5 ⟺ via div_le_div (log 2 ≤ 0.6932) (2.5 ≤ log(t+3)) (pos) (pos): `div_le_div h2a h2b (by positivity) (by positivity)`? div_le_div (hab : a ≤ b) (hbc : c ≤ d)?? — the four-arg: div_le_div (h₁ : a ≤ b) (h₂ : c ≤ d) (hc : 0 ≤ c) (hd : 0 < d)?? hmm — `div_le_div (hab : a ≤ b) (hcd : c ≤ d) (hc : 0 ≤ c) (hb : 0 < b) : a / d ≤ b / c`?? Signature guess: div_le_div (h₁ : a ≤ b) (h₂ : c ≤ d) (hc : 0 ≤ c) (hd : 0 < d) : a / d ≤ b / c. For log 2/log(t+3) ≤ 0.6932/2.5: a = log 2, b = 0.6932, c = 2.5, d = log(t+3): a/d ≤ b/c ⟺ log 2/log(t+3) ≤ 0.6932/2.5 ✓ with h₁ : log 2 ≤ 0.6932 (log_two_lt_d9.le.trans norm_num), h₂ : 2.5 ≤ log(t+3) (hlog13), hc : 0 ≤ 2.5 (norm_num), hd : 0 < log(t+3) (linarith). If the signature differs, adjust at compile.
Final assembly C0hat_two_t_add_one_le:
```
rw [C0hat, C0hat]
have harg1 : (2 : ℝ) * t + 1 + 2 = 2 * t + 3 := by ring
have harg2 : (t : ℝ) + 1 + 2 = t + 3 := by ring
rw [harg1, harg2]
-- 0.433·log(2t+3) + 0.886·loglog(2t+3) + 2.9 ≤ 0.433·log(t+3)+0.886·loglog(t+3)+2.9+0.55
have hlog2le := Real.log_two_lt_d9.le.trans (by norm_num : (0.6931471809:ℝ) ≤ 0.6932)
linarith [hinc1, hinc2, hlog2le]
```
Check the arithmetic: LHS ≤ 0.433·(log 2 + log(t+3)) + 0.886·(loglog(t+3)+0.6932/2.5) + 2.9 = 0.433·log(t+3)+0.886·loglog(t+3)+2.9 + [0.433·log 2 + 0.886·0.27728] = RHS + [0.433·0.69315+0.24567] = RHS + 0.54583 ≤ RHS + 0.55 ✓ (linarith with log 2 ≤ 0.6932: 0.433·0.6932+0.886·(0.6932/2.5) = 0.30015+0.24583·... compute: 0.886·0.6932/2.5 = 0.245666; 0.433·0.6932 = 0.300156; sum = 0.545822 ≤ 0.55 ✓ linarith verifies via the atoms).
Also needed: `log_le_log_add` machine used twice — factor it as a lemma:
```
lemma log_add_le (a c : ℝ) (ha : 0 < a) (hc : 0 ≤ c) :
Real.log (a + c) ≤ Real.log a + c / a := by
have h1 : a + c = a * (1 + c / a) := by field_simp [ha.ne']; ring
rw [h1, Real.log_mul ha.ne' (by positivity : (1 : ℝ) + c / a ≠ 0)]
have h2 : Real.log (1 + c / a) ≤ c / a :=
Real.log_le_sub_one_of_pos (by positivity : (0 : ℝ) < 1 + c / a)
linarith [h2]
```
✓ nice and reusable.
Now — before writing, also double-check `Real.log_two_lt_d9` (used in dirichletC2_le_one as `Real.log_two_lt_d9.le.trans (by norm_num)` : log 2 ≤ 0.6932 ✓).
Let me now write §13 (C0hat bridges) + §14 (conj machinery) as one edit. §14's hasDerivAt_conj_of_conj_eq is the delicate one — let me write it very carefully:
```
/-- The conjugate-derivative lemma: if f commutes with conjugation near
conj z and is differentiable at z, then f has derivative conj(deriv f z)
at conj z. -/
lemma hasDerivAt_conj_of_conj_eq {f : ℂ → ℂ} {z : ℂ}
(hconj : ∀ᶠ s in 𝓝 ((starRingEnd ℂ) z),
f ((starRingEnd ℂ) s) = (starRingEnd ℂ) (f s))
(hdiff : DifferentiableAt ℂ f z) :
HasDerivAt f ((starRingEnd ℂ) (deriv f z)) ((starRingEnd ℂ) z) := by
have h1 : Filter.Tendsto (fun x : ℂ => (f x - f z) / (x - z)) (𝓝[≠] z)
(𝓝 (deriv f z)) :=
hasDerivAt_iff_tendsto.mp hdiff.hasDerivAt
have hmap : Filter.Tendsto (starRingEnd ℂ) (𝓝[≠] ((starRingEnd ℂ) z)) (𝓝[≠] z) := by
have hcont : Continuous ((starRingEnd ℂ) : ℂ → ℂ) := Complex.continuous_conj
have hT := hcont.tendsto ((starRingEnd ℂ) z)
rw [Filter.tendsto_nhdsWithin_iff]
refine ⟨hT.mono_left Filter.nhdsWithin_le_nhds, ?_⟩
rw [Filter.eventually_nhdsWithin_iff]
exact Filter.Eventually.of_forall (fun x hx => by
show (starRingEnd ℂ) x ∈ {z}ᶜ
rw [Set.mem_compl_singleton_iff]
intro hbad
apply hx
have h3 := congrArg (starRingEnd ℂ) hbad
rwa [starRingEnd_self_apply, map_one?] at h3)
...
```
Hmm wait — hx : x ∈ {conj z}ᶜ i.e. x ≠ conj z; want conj x ≠ z: conj x = z ⟹ conj(conj x) = conj z ⟹ x = conj z ✓ contradiction. The congrArg route: hbad : (starRingEnd ℂ) x = z — apply conj: (starRingEnd ℂ)((starRingEnd ℂ) x) = (starRingEnd ℂ) z — LHS = x (starRingEnd_self_apply) — so x = (starRingEnd ℂ) z ✓ contradicts hx. The `map_one?` is wrong — I need: from hbad, congrArg (starRingEnd ℂ) hbad : conj(conj x) = conj z, then starRingEnd_self_apply at LHS: x = conj z ✓: rwa [starRingEnd_self_apply] at h3 — then h3 : x = (starRingEnd ℂ) z, and hx : x ≠ (starRingEnd ℂ) z — exact hx h3 ✓. But careful: nhdsWithin's eventual: x ∈ {conj z}ᶜ — the mem form: eventually x in 𝓝[≠] (conj z): x ≠ conj z ✓ hx : x ∈ {(starRingEnd ℂ) z}ᶜ or x ≠ ... Let me write:
```
exact Filter.Eventually.of_forall (fun x (hx : x ≠ (starRingEnd ℂ) z) => by
show (starRingEnd ℂ) x ≠ z
intro hbad
apply hx
have h3 := congrArg (starRingEnd ℂ) hbad
rwa [starRingEnd_self_apply] at h3)
```
— the eventually_nhdsWithin_iff's second component: ∀ᶠ x in 𝓝 (conj z), x ∈ s → x ∈ conj ⁻¹' s — with s = {conj z}ᶜ: x ≠ conj z → conj x ≠ z ✓ the form `x ∈ {z}ᶜ` — mem_compl_singleton_iff: x ∈ {z}ᶜ ↔ x ≠ z ✓. Let me write it with the set-membership forms and let simp bridge.
Then the composition:
```
have h2 : Filter.Tendsto (fun x : ℂ =>
(starRingEnd ℂ) ((f ((starRingEnd ℂ) x) - f z) / (((starRingEnd ℂ) x) - z)))
(𝓝[≠] ((starRingEnd ℂ) z)) (𝓝 ((starRingEnd ℂ) (deriv f z))) := by
have hcont : Continuous ((starRingEnd ℂ) : ℂ → ℂ) := Complex.continuous_conj
exact (hcont.tendsto _).comp (h1.comp hmap)
```
Then the EventuallyEq of h2's function and the standard slope:
```
have h3 : (fun x : ℂ => (f x - f ((starRingEnd ℂ) z)) / (x - (starRingEnd ℂ) z))
=ᶠ[𝓝[≠] ((starRingEnd ℂ) z)] fun x : ℂ =>
(starRingEnd ℂ) ((f ((starRingEnd ℂ) x) - f z) / (((starRingEnd ℂ) x) - z)) := by
have hcz : ((starRingEnd ℂ) z) ≠ z → True := fun _ => trivial -- unused
apply Filter.EventuallyEq.filter_mono ?_ Filter.nhdsWithin_le_nhds
-- work in 𝓝 (conj z): eventually hconj
exact hconj.mono (fun s hs => by
rw [hs]
simp only [map_sub, map_div₀, starRingEnd_self_apply])
exact hasDerivAt_iff_tendsto.mpr (Filter.Tendsto.congr' h3 h2)
```
Check the pointwise step: at s with hconj : f (conj s) = conj (f s): goal: (f s − f(conj z))/(s − conj z) = conj((f(conj s) − f z)/((conj s) − z)): rw [hs]: RHS = conj((conj(f s) − f z)/((conj s) − z)): simp [map_sub, map_div₀, starRingEnd_self_apply]: conj(a−b) = conj a − conj b ✓; conj(a/b) = conj a/conj b ✓; conj(conj u) = u ✓; also need conj(f z) = f(conj z) — NOT from simp! The hconj hypothesis at s gives f(conj s) = conj(f s) — I need the identity at z too: f(conj z) = conj(f z). But hconj is only eventually near conj z — does it include z?? hconj : ∀ᶠ s in 𝓝 (conj z) — the point z is NOT necessarily near conj z!! (z vs conj z could be far apart — e.g. z = 1+i.) Hmm — wait: hconj is around conj z; I need the identity at points s near conj z (for the slope evaluation) AND at z (for the f z term). At z: z is the CENTER of... no — hconj is centered at conj z, so it covers s near conj z, not z. The identity at z (f(conj z) = conj(f z)) is NOT covered unless z is near conj z. PROBLEM!
Hmm — wait, actually: in the EventuallyEq, the term f z appears — I need conj(f z) = f(conj z), which is hconj AT THE POINT z. In the inductive application, the identity itD n ζ (conj s) = conj(itD n ζ s) holds for ALL s ≠ 1 — including s = z (z ≠ 1 ✓). So hconj eventually + the z-point separately. Simplest: strengthen the hypothesis to: hconj holds at z AND eventually near conj z. Or make hconj : ∀ s, ... in a SET containing z ∪ nhd(conj z). Cleanest: two hypotheses (hzc : f (conj z) = conj (f z)) (hconj : ∀ᶠ s in 𝓝 (conj z), ...). For the ζ-induction: hzc from ih z hz ✓; hconj eventually ✓.
Hmm — actually simpler: note that the slope function at x needs f(conj x) = conj(f x) (hconj at x near conj z ✓) and the IDENTITY at z only enters via conj(f z) = f(conj z) — since this is a FIXED value (not varying with x), I can rewrite it as a standalone hypothesis. Let me restructure with both. Actually — cleanest: make hconj : ∀ s ∈ (nhd of conj z ∪ {z})... overkill. Two hypotheses:
(hzid : f ((starRingEnd ℂ) z) = (starRingEnd ℂ) (f z))
(hconj : ∀ᶠ s in 𝓝 ((starRingEnd ℂ) z), f ((starRingEnd ℂ) s) = (starRingEnd ℂ) (f s))
Then the pointwise step: rw [hs] (hconj at s) and rw [hzid]?? — hzid : f(conj z) = conj(f z): the goal has f(conj z) on the LHS and conj(f z) inside the RHS-conj: rw [hzid] rewrites f(conj z) → conj(f z) — then LHS = (f s − conj(f z))/(s − conj z); RHS = conj((conj(f s) − f z)/(conj s − z)) → simp [map_sub, map_div₀, starRingEnd_self_apply] → (f s − conj(f z))/(s − conj z) ✓ equal ✓.
OK — and in the induction: hzid := ih hz (the identity at z ✓); hconj := eventually near conj z: conj z ≠ 1 ⟹ eventually s ≠ 1 ⟹ ih s hs ✓.
The eventually-ne: `eventually_ne_nhds (h : conj z ≠ 1) : ∀ᶠ s in 𝓝 (conj z), s ≠ 1` — name check: `eventually_ne_nhds : x ≠ a → ∀ᶠ y in 𝓝 x, y ≠ a`? — I believe `eventually_ne_nhds (h : x ≠ a) : ∀ᶠ (y) in 𝓝 x, y ≠ a` exists. If not: `isOpen_compl_singleton.eventually_nhds`? There's `IsOpen.eventually_nhds`: isOpen_compl_singleton : IsOpen {a}ᶜ: (isOpen_compl_singleton.eventually_nhds ?). Let me use: `(isOpen_compl_singleton.eventually_nhds h)`?? hmm — `IsOpen.eventually_nhds : IsOpen s → x ∈ s → ∀ᶠ y in 𝓝 y, y ∈ s`: (isOpen_compl_singleton (𝕜 := ℂ)).eventually_nhds (show conj z ∈ {1}ᶜ from ...) — then ∀ᶠ s, s ∈ {1}ᶜ = s ≠ 1 ✓. I'll write it and adjust.
Also hdiff.hasDerivAt: DifferentiableAt.hasDerivAt ✓.
Now the iteratedDeriv_riemannZeta_conj:
```
lemma iteratedDeriv_riemannZeta_conj (n : ℕ) {z : ℂ} (hz : z ≠ 1) :
iteratedDeriv n riemannZeta ((starRingEnd ℂ) z)
= (starRingEnd ℂ) (iteratedDeriv n riemannZeta z) := by
induction n generalizing z with
| zero =>
rw [iteratedDeriv_zero, iteratedDeriv_zero]
exact riemannZeta_conj z
| succ n ih =>
rw [iteratedDeriv_succ, iteratedDeriv_succ]
have hzid : iteratedDeriv n riemannZeta ((starRingEnd ℂ) z)
= (starRingEnd ℂ) (iteratedDeriv n riemannZeta z) := ih hz
have hconj : ∀ᶠ s in 𝓝 ((starRingEnd ℂ) z),
iteratedDeriv n riemannZeta ((starRingEnd ℂ) s)
= (starRingEnd ℂ) (iteratedDeriv n riemannZeta s) := by
have hne : ∀ᶠ s in 𝓝 ((starRingEnd ℂ) z), s ≠ 1 := by
apply (isOpen_compl_singleton.eventually_nhds ?_)
...
exact hne.mono (fun s hs => ih hs)
have hd : DifferentiableAt ℂ (iteratedDeriv n riemannZeta) z := by
have han : AnalyticAt ℂ (iteratedDeriv n riemannZeta) z := by
induction n with
| zero => exact analyticAt_riemannZeta hz
| succ m ihm =>
rw [iteratedDeriv_succ]
exact ihm.deriv
exact han.differentiableAt
exact (hasDerivAt_conj_of_conj_eq hzid hconj hd).deriv
```
Wait — the inner induction for han shadows n — the `induction n with` inside a proof about fixed n: better as a separate have-proved-by-induction claim:
```
lemma analyticAt_iteratedDeriv_riemannZeta (n : ℕ) {z : ℂ} (hz : z ≠ 1) :
AnalyticAt ℂ (iteratedDeriv n riemannZeta) z := by
induction n with
| zero => exact analyticAt_riemannZeta hz
| succ m ihm =>
rw [iteratedDeriv_succ]
exact ihm.deriv
```
Hmm — in the succ case, ihm : AnalyticAt (iteratedDeriv m riemannZeta) z, and goal after rw [iteratedDeriv_succ]: AnalyticAt (deriv (iteratedDeriv m riemannZeta)) z = ihm.deriv ✓.
The `riemannZeta_conj` form: from isNontrivialZero_conj: `rw [_root_.riemannZeta_conj, hρ.1, map_zero]` — so riemannZeta_conj (s) : riemannZeta ((starRingEnd ℂ) s) = (starRingEnd ℂ) (riemannZeta s) — _root_ namespace. In my namespace use `_root_.riemannZeta_conj`.
Also `analyticAt_riemannZeta` — root? In one_le_zeroMult: `analyticAt_riemannZeta hρ1` plain ✓ (Mathlib's).
OK — and the analyticOrderAt lemma + zeroMult_conj as sketched. Let me now also double check `map_div₀` exists for starRingEnd: map_div (starRingEnd ℂ) : f (a/b) = f a/f b — for field ring homs: `map_div₀`? or `map_div`? For DivisionRing homs: `map_div₀ (f : α →+* β) (a b) : f (a / b) = f a / f b` — or `map_div`. starRingEnd is ≃+* (stronger) — map_div₀ should apply via the →+* coercion... the simp set [map_sub, map_div₀, starRingEnd_self_apply] — if map_div₀ doesn't fire, try map_div. I'll include both.
Let me write §13+§14 now.
All API confirmed. Writing §13 (C0hat bridges) + §14 (conj machinery).
tool: Edit
input
{
"replace_all": false,
"file_path": "D:\\Python\\Quantum\\research\\lean\\NguyenRH1\\NguyenRH1\\LiTightR.lean",
"old_string": " linarith [hle, h4, h3]\n\nend NguyenRH1\n\nend",
"new_string": " linarith [hle, h4, h3]\n\n/-! ## 13. Piece 3e: the C0hat interval-count bridges -/\n\n/-- log(a + c) \u2264 log a + c/a (the log-increment machine). -/\nlemma log_add_le (a c : \u211d) (ha : 0 < a) (hc : 0 \u2264 c) :\n Real.log (a + c) \u2264 Real.log a + c / a := by\n have h1 : a + c = a * (1 + c / a) := by field_simp [ha.ne']; ring\n rw [h1, Real.log_mul ha.ne' (by positivity : (1 : \u211d) + c / a \u2260 0)]\n have h2 : Real.log (1 + c / a) \u2264 c / a :=\n Real.log_le_sub_one_of_pos (by positivity : (0 : \u211d) < 1 + c / a)\n linarith [h2]\n\n/-- e^2.5 \u2264 13 (via e\u00b2 \u2264 7.3890566 and e^0.5 \u2264 1.6488). -/\nlemma exp_two_point_five_le_thirteen : Real.exp 2.5 \u2264 13 := by\n have he2 : Real.exp 1 \u2264 (2.7182819 : \u211d) := Real.exp_one_lt_d9.le.trans (by norm_num)\n have he5 : Real.exp 0.5 \u2264 (1.6488 : \u211d) := by\n have h3' : Real.exp 0.5 ^ 2 \u2264 (1.6488 : \u211d) ^ 2 := by\n have h2 : Real.exp 0.5 ^ 2 = Real.exp 1 := by\n rw [sq, \u2190 Real.exp_add]\n congr 1\n norm_num\n rw [h2]\n calc Real.exp 1 \u2264 2.7182819 := he2\n _ \u2264 (1.6488 : \u211d) ^ 2 := by norm_num\n exact le_of_pow_le_pow_left\u2080 (by norm_num : (2 : \u2115) \u2260 0)\n (by norm_num : (0 : \u211d) \u2264 1.6488) h3'\n have h1 : Real.exp 2.5 = Real.exp 1 * Real.exp 1 * Real.exp 0.5 := by\n rw [\u2190 Real.exp_add, \u2190 Real.exp_add]\n congr 1\n norm_num\n rw [h1]\n have h5 : Real.exp 1 * Real.exp 1 * Real.exp 0.5 \u2264 2.7182819 * 2.7182819 * 1.6488 := by\n apply mul_le_mul\n \u00b7 exact mul_le_mul he2 he2 (Real.exp_pos 1).le (by norm_num)\n \u00b7 exact he5\n \u00b7 exact (Real.exp_pos 0.5).le\n \u00b7 positivity\n have h6 : (2.7182819 : \u211d) * 2.7182819 * 1.6488 \u2264 13 := by norm_num\n exact h5.trans h6\n\n/-- log 13 \u2265 2.5. -/\nlemma log_thirteen_ge_five : (2.5 : \u211d) \u2264 Real.log 13 := by\n rw [Real.le_log_iff_exp_le (by norm_num : (0 : \u211d) < 13)]\n exact exp_two_point_five_le_thirteen\n\n/-- **The 2k+1 bridge** (k \u2265 11): C0hat(2k+1) \u2264\n0.433\u00b7(log k + 0.833) + 0.886\u00b7(log log k + 0.3475) + 2.9. -/\nlemma C0hat_two_mul_add_one_le {k : \u2115} (hk : 11 \u2264 k) :\n C0hat (2 * (k : \u211d) + 1)\n \u2264 0.433 * (Real.log k + 0.833) + 0.886 * (Real.log (Real.log k) + 0.3475) + 2.9 := by\n have hkR : (11 : \u211d) \u2264 (k : \u211d) := by exact_mod_cast hk\n have hk0 : (0 : \u211d) < (k : \u211d) := by linarith\n have hlogk : (2.3978 : \u211d) \u2264 Real.log k := by\n have h2a := log_eleven_ge\n have h2b : Real.log 11 \u2264 Real.log k := Real.log_le_log (by norm_num : (0 : \u211d) < 11) hkR\n linarith [h2a, h2b]\n have hlogpos : (0 : \u211d) < Real.log k := by linarith [hlogk]\n have hinc1 : Real.log (2 * (k : \u211d) + 3) \u2264 Real.log k + 0.833 := by\n have h2 : (2 : \u211d) * (k : \u211d) + 3 \u2264 2.3 * (k : \u211d) := by linarith [hkR]\n have h3 : Real.log (2 * (k : \u211d) + 3) \u2264 Real.log (2.3 * (k : \u211d)) :=\n Real.log_le_log (by positivity : (0 : \u211d) < 2 * (k : \u211d) + 3) h2\n have h4 : Real.log (2.3 * (k : \u211d)) = Real.log 2.3 + Real.log k :=\n Real.log_mul (by norm_num : (2.3 : \u211d) \u2260 0) hk0.ne'\n rw [h4] at h3\n have h5 := log_two_point_three_le\n linarith [h3, h5]\n have hinc2 : Real.log (Real.log (2 * (k : \u211d) + 3))\n \u2264 Real.log (Real.log k) + 0.3475 := by\n have h6 : Real.log (Real.log (2 * (k : \u211d) + 3)) \u2264 Real.log (Real.log k + 0.833) :=\n Real.log_le_log (by positivity : (0 : \u211d) < Real.log (2 * (k : \u211d) + 3)) hinc1\n have h7 : Real.log (Real.log k + 0.833)\n \u2264 Real.log (Real.log k) + 0.833 / Real.log k :=\n log_add_le (Real.log k) 0.833 hlogpos (by norm_num)\n have h10 : (0.833 : \u211d) / Real.log k \u2264 0.3475 := by\n rw [div_le_iff\u2080 hlogpos]\n have h11 : (0.3475 : \u211d) * 2.3978 \u2264 0.3475 * Real.log k :=\n mul_le_mul_of_nonneg_left hlogk (by norm_num)\n have h12 : (0.833 : \u211d) \u2264 0.3475 * 2.3978 := by norm_num\n exact h12.trans h11\n linarith [h6, h7, h10]\n rw [C0hat]\n have harg : (2 : \u211d) * (k : \u211d) + 1 + 2 = 2 * (k : \u211d) + 3 := by ring\n rw [harg]\n linarith [hinc1, hinc2]\n\n/-- **The j+1 bridge** (j \u2265 14): C0hat(j+1) \u2264\n0.433\u00b7(log j + 0.1942) + 0.886\u00b7(log log j + 0.0736) + 2.9. -/\nlemma C0hat_add_one_le_of_fourteen_le {j : \u2115} (hj : 14 \u2264 j) :\n C0hat ((j : \u211d) + 1)\n \u2264 0.433 * (Real.log j + 0.1942) + 0.886 * (Real.log (Real.log j) + 0.0736) + 2.9 := by\n have hjR : (14 : \u211d) \u2264 (j : \u211d) := by exact_mod_cast hj\n have hj0 : (0 : \u211d) < (j : \u211d) := by linarith\n have hlogj : (2.6388 : \u211d) \u2264 Real.log j := by\n have h2a := log_fourteen_ge\n have h2b : Real.log 14 \u2264 Real.log j := Real.log_le_log (by norm_num : (0 : \u211d) < 14) hjR\n linarith [h2a, h2b]\n have hlogpos : (0 : \u211d) < Real.log j := by linarith [hlogj]\n have hinc1 : Real.log ((j : \u211d) + 3) \u2264 Real.log j + 0.1942 := by\n have h2 : (j : \u211d) + 3 \u2264 (17 / 14 : \u211d) * (j : \u211d) := by linarith [hjR]\n have h3 : Real.log ((j : \u211d) + 3) \u2264 Real.log ((17 / 14 : \u211d) * (j : \u211d)) :=\n Real.log_le_log (by positivity : (0 : \u211d) < (j : \u211d) + 3) h2\n have h4 : Real.log ((17 / 14 : \u211d) * (j : \u211d))\n = Real.log (17 / 14) + Real.log j :=\n Real.log_mul (by norm_num : (17 / 14 : \u211d) \u2260 0) hj0.ne'\n rw [h4] at h3\n have h5 := log_17_14_le\n linarith [h3, h5]\n have hinc2 : Real.log (Real.log ((j : \u211d) + 3))\n \u2264 Real.log (Real.log j) + 0.0736 := by\n have h6 : Real.log (Real.log ((j : \u211d) + 3)) \u2264 Real.log (Real.log j + 0.1942) :=\n Real.log_le_log (by positivity : (0 : \u211d) < Real.log ((j : \u211d) + 3)) hinc1\n have h7 : Real.log (Real.log j + 0.1942)\n \u2264 Real.log (Real.log j) + 0.1942 / Real.log j :=\n log_add_le (Real.log j) 0.1942 hlogpos (by norm_num)\n have h10 : (0.1942 : \u211d) / Real.log j \u2264 0.0736 := by\n rw [div_le_iff\u2080 hlogpos]\n have h11 : (0.0736 : \u211d) * 2.6388 \u2264 0.0736 * Real.log j :=\n mul_le_mul_of_nonneg_left hlogj (by norm_num)\n have h12 : (0.1942 : \u211d) \u2264 0.0736 * 2.6388 := by norm_num\n exact h12.trans h11\n linarith [h6, h7, h10]\n rw [C0hat]\n have harg : (j : \u211d) + 1 + 2 = (j : \u211d) + 3 := by ring\n rw [harg]\n linarith [hinc1, hinc2]\n\n/-- **The 2t+1 increment** (t \u2265 10): C0hat(2t+1) \u2264 C0hat(t+1) + 0.55. -/\nlemma C0hat_two_t_add_one_le {t : \u211d} (ht : 10 \u2264 t) :\n C0hat (2 * t + 1) \u2264 C0hat (t + 1) + 0.55 := by\n have ht3 : (0 : \u211d) < t + 3 := by linarith\n have hlog13 : (2.5 : \u211d) \u2264 Real.log (t + 3) := by\n have h1 : Real.log 13 \u2264 Real.log (t + 3) :=\n Real.log_le_log (by norm_num : (0 : \u211d) < 13) (by linarith : (13 : \u211d) \u2264 t + 3)\n have h2 := log_thirteen_ge_five\n linarith [h1, h2]\n have hlogpos : (0 : \u211d) < Real.log (t + 3) := by linarith [hlog13]\n have hinc1 : Real.log (2 * t + 3) \u2264 Real.log 2 + Real.log (t + 3) := by\n have h1 : (2 : \u211d) * t + 3 \u2264 2 * (t + 3) := by linarith\n have h2 : Real.log (2 * t + 3) \u2264 Real.log (2 * (t + 3)) :=\n Real.log_le_log (by positivity : (0 : \u211d) < 2 * t + 3) h1\n have h3 : Real.log (2 * (t + 3)) = Real.log 2 + Real.log (t + 3) :=\n Real.log_mul (by norm_num : (2 : \u211d) \u2260 0) ht3.ne'\n rw [h3] at h2\n exact h2\n have hinc2 : Real.log (Real.log (2 * t + 3))\n \u2264 Real.log (Real.log (t + 3)) + 0.6932 / 2.5 := by\n have h6 : Real.log (Real.log (2 * t + 3))\n \u2264 Real.log (Real.log (t + 3) + Real.log 2) := by\n apply Real.log_le_log (by positivity : (0 : \u211d) < Real.log (2 * t + 3))\n linarith [hinc1]\n have h7 : Real.log (Real.log (t + 3) + Real.log 2)\n \u2264 Real.log (Real.log (t + 3)) + Real.log 2 / Real.log (t + 3) :=\n log_add_le (Real.log (t + 3)) (Real.log 2) hlogpos (Real.log_nonneg (by norm_num))\n have hlog2le : Real.log 2 \u2264 0.6932 := Real.log_two_lt_d9.le.trans (by norm_num)\n have h10 : Real.log 2 / Real.log (t + 3) \u2264 0.6932 / 2.5 := by\n apply div_le_div hlog2le hlog13 (by norm_num : (0 : \u211d) \u2264 2.5) hlogpos\n linarith [h6, h7, h10]\n have hlog2le : Real.log 2 \u2264 0.6932 := Real.log_two_lt_d9.le.trans (by norm_num)\n rw [C0hat, C0hat]\n have harg1 : (2 : \u211d) * t + 1 + 2 = 2 * t + 3 := by ring\n have harg2 : (t : \u211d) + 1 + 2 = t + 3 := by ring\n rw [harg1, harg2]\n linarith [hinc1, hinc2, hlog2le]\n\n/-! ## 14. Piece 3f: the conjugation machinery (zeroMult_conj) -/\n\n/-- \u03b6 is analytic at iterated-derivatives level (off the pole). -/\nlemma analyticAt_iteratedDeriv_riemannZeta (n : \u2115) {z : \u2102} (hz : z \u2260 1) :\n AnalyticAt \u2102 (iteratedDeriv n riemannZeta) z := by\n induction n with\n | zero => exact analyticAt_riemannZeta hz\n | succ m ihm =>\n rw [iteratedDeriv_succ]\n exact ihm.deriv\n\n/-- **The conjugate-derivative lemma**: if f commutes with conjugation at\nz and near conj z, and is differentiable at z, then f has derivative\nconj(deriv f z) at conj z. -/\nlemma hasDerivAt_conj_of_conj_eq {f : \u2102 \u2192 \u2102} {z : \u2102}\n (hzid : f ((starRingEnd \u2102) z) = (starRingEnd \u2102) (f z))\n (hconj : \u2200\u1da0 s in \ud835\udcdd ((starRingEnd \u2102) z),\n f ((starRingEnd \u2102) s) = (starRingEnd \u2102) (f s))\n (hdiff : DifferentiableAt \u2102 f z) :\n HasDerivAt f ((starRingEnd \u2102) (deriv f z)) ((starRingEnd \u2102) z) := by\n have h1 : Filter.Tendsto (fun x : \u2102 => (f x - f z) / (x - z)) (\ud835\udcdd[\u2260] z)\n (\ud835\udcdd (deriv f z)) :=\n hasDerivAt_iff_tendsto.mp hdiff.hasDerivAt\n have hmap : Filter.Tendsto (starRingEnd \u2102) (\ud835\udcdd[\u2260] ((starRingEnd \u2102) z)) (\ud835\udcdd[\u2260] z) := by\n have hcont : Continuous ((starRingEnd \u2102) : \u2102 \u2192 \u2102) := Complex.continuous_conj\n have hT := hcont.tendsto ((starRingEnd \u2102) z)\n rw [Filter.tendsto_nhdsWithin_iff]\n refine \u27e8hT.mono_left Filter.nhdsWithin_le_nhds, ?_\u27e9\n rw [Filter.eventually_nhdsWithin_iff]\n exact Filter.Eventually.of_forall (fun x (hx : x \u2260 (starRingEnd \u2102) z) => by\n show (starRingEnd \u2102) x \u2260 z\n intro hbad\n apply hx\n have h3 := congrArg (starRingEnd \u2102) hbad\n rwa [starRingEnd_self_apply] at h3)\n have h2 : Filter.Tendsto (fun x : \u2102 =>\n (starRingEnd \u2102) ((f ((starRingEnd \u2102) x) - f z) / (((starRingEnd \u2102) x) - z)))\n (\ud835\udcdd[\u2260] ((starRingEnd \u2102) z)) (\ud835\udcdd ((starRingEnd \u2102) (deriv f z))) := by\n have hcont : Continuous ((starRingEnd \u2102) : \u2102 \u2192 \u2102) := Complex.continuous_conj\n exact (hcont.tendsto _).comp (h1.comp hmap)\n have h3 : (fun x : \u2102 => (f x - f ((starRingEnd \u2102) z)) / (x - (starRingEnd \u2102) z))\n =\u1da0[\ud835\udcdd[\u2260] ((starRingEnd \u2102) z)] fun x : \u2102 =>\n (starRingEnd \u2102) ((f ((starRingEnd \u2102) x) - f z) / (((starRingEnd \u2102) x) - z)) := by\n apply Filter.EventuallyEq.filter_mono ?_ Filter.nhdsWithin_le_nhds\n exact hconj.mono (fun s hs => by\n rw [hs, hzid]\n simp only [map_sub, map_div\u2080, starRingEnd_self_apply])\n exact hasDerivAt_iff_tendsto.mpr (Filter.Tendsto.congr' h3 h2)\n\n/-- The iterated derivatives of \u03b6 commute with conjugation (off the pole). -/\nlemma iteratedDeriv_riemannZeta_conj (n : \u2115) {z : \u2102} (hz : z \u2260 1) :\n iteratedDeriv n riemannZeta ((starRingEnd \u2102) z)\n = (starRingEnd \u2102) (iteratedDeriv n riemannZeta z) := by\n induction n generalizing z with\n | zero =>\n rw [iteratedDeriv_zero, iteratedDeriv_zero]\n exact _root_.riemannZeta_conj z\n | succ m ihm =>\n rw [iteratedDeriv_succ, iteratedDeriv_succ]\n have hzid := ihm hz\n have hconj : \u2200\u1da0 s in \ud835\udcdd ((starRingEnd \u2102) z),\n iteratedDeriv m riemannZeta ((starRingEnd \u2102) s)\n = (starRingEnd \u2102) (iteratedDeriv m riemannZeta s) := by\n have hne : \u2200\u1da0 s in \ud835\udcdd ((starRingEnd \u2102) z), s \u2260 1 := by\n have h1 : ((starRingEnd \u2102) z) \u2260 1 := by\n intro h\n apply hz\n have h2 := congrArg (starRingEnd \u2102) h\n rwa [starRingEnd_self_apply, map_one] at h2\n exact isOpen_compl_singleton.eventually_nhds h1\n exact hne.mono (fun s hs => ihm hs)\n have hd : DifferentiableAt \u2102 (iteratedDeriv m riemannZeta) z :=\n (analyticAt_iteratedDeriv_riemannZeta m hz).differentiableAt\n exact (hasDerivAt_conj_of_conj_eq hzid hconj hd).deriv\n\n/-- The analytic order of \u03b6 is conjugation-invariant (off the pole). -/\nlemma analyticOrderAt_riemannZeta_conj {z : \u2102} (hz : z \u2260 1) :\n analyticOrderAt riemannZeta ((starRingEnd \u2102) z) = analyticOrderAt riemannZeta z := by\n have hzconj : ((starRingEnd \u2102) z) \u2260 1 := by\n intro h\n apply hz\n have h2 := congrArg (starRingEnd \u2102) h\n rwa [starRingEnd_self_apply, map_one] at h2\n have htop : analyticOrderAt riemannZeta z \u2260 \u22a4 := zeta_order_ne_top_of_ne hz\n set n := analyticOrderNatAt riemannZeta z with hn\n have hzn : analyticOrderAt riemannZeta z = (n : \u2115\u221e) :=\n (Nat.cast_analyticOrderNatAt htop).symm\n obtain \u27e8hz1, hz2\u27e9 :=\n (analyticAt_riemannZeta hz).analyticOrderAt_eq_nat_iff_iteratedDeriv_eq_zero.mp hzn\n have hkey : analyticOrderAt riemannZeta ((starRingEnd \u2102) z) = (n : \u2115\u221e) :=\n (analyticAt_riemannZeta hzconj).analyticOrderAt_eq_nat_iff_iteratedDeriv_eq_zero.mpr\n \u27e8fun k hk => by\n rw [iteratedDeriv_riemannZeta_conj k hz, hz1 k hk, map_zero],\n by\n rw [iteratedDeriv_riemannZeta_conj n hz]\n intro hbad\n apply hz2\n have h3 := congrArg (starRingEnd \u2102) hbad\n rwa [starRingEnd_self_apply, map_zero] at h3\u27e9\n rw [hzn, hkey]\n\n/-- **zeroMult is conjugation-invariant** (the left-tail count bridge). -/\nlemma zeroMult_conj {\u03c1 : \u2102} (h\u03c1 : IsNontrivialZero \u03c1) :\n zeroMult ((starRingEnd \u2102) \u03c1) = zeroMult \u03c1 := by\n have h\u03c11 : \u03c1 \u2260 1 := by\n rintro rfl\n have h := h\u03c1.2.2\n rw [Complex.one_re] at h\n exact (lt_irrefl (1 : \u211d)) h\n show (analyticOrderAt riemannZeta ((starRingEnd \u2102) \u03c1)).toNat\n = (analyticOrderAt riemannZeta \u03c1).toNat\n rw [analyticOrderAt_riemannZeta_conj h\u03c11]\n\nend NguyenRH1\n\nend"
}
raw content_json (database row)
[{"type":"thinking","thinking":"`Complex.continuous_conj : Continuous (conj : ℂ → ℂ)` ✓. And (starRingEnd ℂ) x = conj x — `starRingEnd_apply` simp lemma. To avoid mixing, I'll state everything with (starRingEnd ℂ) and bridge to conj via starRingEnd_apply, or just use `(starRingEnd ℂ)` and its continuity: (starRingEnd ℂ) as a function ℂ → ℂ equals conj (they're definitionally equal? starRingEnd ℂ = { conj } as a RingEquiv — applying it: (starRingEnd ℂ) x = conj x by rfl? Probably `starRingEnd_apply : (starRingEnd R) x = conj x` simp lemma ✓). For continuity: `starRingEnd_continuous`?? not found — use: `show Continuous ((starRingEnd ℂ) : ℂ → ℂ)` — it's defeq to conj? The ZetaReflect usage: `(Complex.continuous_conj).tendsto (conj w)` and starRingEnd elsewhere — there might be coercion friction. Simplest: convert with `starRingEnd_apply` rewrites and use Complex.continuous_conj:\n```\nhave hconjcont : Continuous ((starRingEnd ℂ) : ℂ → ℂ) := by\n simp only [starRingEnd_apply]\n exact Complex.continuous_conj\n```\nHmm — (starRingEnd ℂ) as a function: `⇑(starRingEnd ℂ)` — simp only [starRingEnd_apply] should turn the goal Continuous ⇑(starRingEnd ℂ) into Continuous conj... Actually `starRingEnd_apply : (starRingEnd R) x = conj x` — for the function-level: funext or `show Continuous (conj : ℂ → ℂ)` then exact. Let me use: \n```\nhave hconjcont : Continuous ((starRingEnd ℂ) : ℂ → ℂ) :=\n Complex.continuous_conj\n```\n— is ⇑(starRingEnd ℂ) DEFEQ to conj? The starRingEnd is a structure with toFun = conj — the coercion ⇑(starRingEnd ℂ) should be defeq to conj ✓ try it.\n\nNow write §13 (C0hat bridges) and §14 (conj machinery). Let me draft the C0hat bridges concretely.\n\nFor C0hat_two_mul_add_one_le (k ≥ 11):\n```\nlemma C0hat_two_mul_add_one_le {k : ℕ} (hk : 11 ≤ k) :\n C0hat (2 * (k : ℝ) + 1)\n ≤ 0.433 * (Real.log k + 0.833) + 0.886 * (Real.log (Real.log k) + 0.3475) + 2.9 := by\n have hkR : (11 : ℝ) ≤ (k : ℝ) := by exact_mod_cast hk\n have hk0 : (0 : ℝ) < (k : ℝ) := by linarith\n have hlogk : (2.3978 : ℝ) ≤ Real.log k := by\n have h2a := log_eleven_ge\n have h2b : Real.log 11 ≤ Real.log k := Real.log_le_log (by norm_num : (0:ℝ) < 11) hkR\n linarith [h2a, h2b]\n have hlogpos : (0 : ℝ) < Real.log k := by linarith [hlogk]\n -- the log increment\n have hinc1 : Real.log (2 * (k : ℝ) + 3) ≤ Real.log k + 0.833 := by\n have h2 : (2 : ℝ) * (k : ℝ) + 3 ≤ 2.3 * (k : ℝ) := by linarith [hkR]\n have h3 : Real.log (2 * (k : ℝ) + 3) ≤ Real.log (2.3 * (k : ℝ)) :=\n Real.log_le_log (by positivity : (0:ℝ) < 2 * (k:ℝ) + 3) h2\n have h4 : Real.log (2.3 * (k : ℝ)) = Real.log 2.3 + Real.log k :=\n Real.log_mul (by norm_num : (2.3 : ℝ) ≠ 0) hk0.ne'\n have h5 := log_two_point_three_le\n linarith [h3, h4 ▸ h3, h5] -- careful: h4 ▸ h3 rewrites; simpler: rw [h4] at h3; linarith\n -- the loglog increment\n have hinc2 : Real.log (Real.log (2 * (k : ℝ) + 3))\n ≤ Real.log (Real.log k) + 0.3475 := by\n have h6 : Real.log (Real.log (2 * (k : ℝ) + 3)) ≤ Real.log (Real.log k + 0.833) := by\n apply Real.log_le_log (by positivity : (0:ℝ) < Real.log (2*(k:ℝ)+3)) hinc1\n have h7 : Real.log (Real.log k + 0.833)\n ≤ Real.log (Real.log k) + 0.833 / Real.log k := by\n have h8 : Real.log k + 0.833 = Real.log k * (1 + 0.833 / Real.log k) := by\n field_simp [hlogpos.ne']\n ring\n rw [h8, Real.log_mul hlogpos.ne' (by positivity : (1:ℝ) + 0.833/Real.log k ≠ 0)]\n have h9 : Real.log (1 + 0.833 / Real.log k) ≤ 0.833 / Real.log k :=\n Real.log_le_sub_one_of_pos (by positivity : (0:ℝ) < 1 + 0.833/Real.log k)\n linarith [h9]\n have h10 : (0.833 : ℝ) / Real.log k ≤ 0.3475 := by\n rw [div_le_iff₀ hlogpos]\n have h11 : (0.3475 : ℝ) * 2.3978 ≤ 0.3475 * Real.log k :=\n mul_le_mul_of_nonneg_left hlogk (by norm_num)\n have h12 : (0.833 : ℝ) ≤ 0.3475 * 2.3978 := by norm_num\n exact h12.trans h11\n linarith [h6, h7, h10]\n -- assemble\n rw [C0hat]\n have harg : (2 : ℝ) * (k : ℝ) + 1 + 2 = 2 * (k : ℝ) + 3 := by ring\n rw [harg]\n linarith [hinc1, hinc2]\n```\nCheck the final: C0hat(2k+1) = 0.433·log(2k+1+2) + 0.886·loglog(2k+1+2) + 2.9 = 0.433·log(2k+3)+0.886·loglog(2k+3)+2.9 ≤ 0.433·(log k+0.833)+0.886·(loglog k+0.3475)+2.9 ⟸ 0.433·hinc1 + 0.886·hinc2 (coeffs nonneg) — linarith with the coefficient nonnegativity: linarith can't multiply hinc1 by 0.433 (nonlinear: 0.433·(log k + 0.833) — the term log k·0.433 is nonlinear in the atom view? linarith treats 0.433·log(2k+3) ≤ 0.433·(log k+0.833) as linear in the atoms log(2k+3), log k, 0.833-constants ✓ linarith CAN multiply hypotheses by positive rational constants internally (it's linear arithmetic) ✓.\n\nFor C0hat_add_one_le_of_fourteen_le (j ≥ 14): same skeleton with 0.1942/0.0736 and log_17_14_le/log_fourteen_ge:\n```\nlemma C0hat_add_one_le_of_fourteen_le {j : ℕ} (hj : 14 ≤ j) :\n C0hat ((j : ℝ) + 1)\n ≤ 0.433 * (Real.log j + 0.1942) + 0.886 * (Real.log (Real.log j) + 0.0736) + 2.9\n```\n- hinc1: log(j+3) ≤ log j + 0.1942: j+3 ≤ (17/14)j ⟺ 3 ≤ (3/14)j ⟺ j ≥ 14 ✓: log(j+3) ≤ log((17/14)j) = log(17/14)+log j ≤ 0.1942+log j ✓.\n ((j:ℝ)+1)+2 = (j:ℝ)+3 ✓ harg.\n- hinc2: loglog(j+3) ≤ loglog j + 0.1942/log j ≤ loglog j + 0.0736: log j ≥ log 14 ≥ 2.6388: 0.1942/2.6388 = 0.073594 ≤ 0.0736: via div_le_iff₀: 0.1942 ≤ 0.0736·log j: 0.0736·2.6388 = 0.19422 ≥ 0.1942 ✓ norm_num: 0.0736·2.6388 = 0.19421568 ≥ 0.1942 ✓.\n\nFor C0hat_two_t_add_one_le (t ≥ 10):\n```\nlemma C0hat_two_t_add_one_le {t : ℝ} (ht : 10 ≤ t) :\n C0hat (2 * t + 1) ≤ C0hat (t + 1) + 0.55 := by\n have ht3 : (0 : ℝ) < t + 3 := by linarith\n have hlog13 : (2.5 : ℝ) ≤ Real.log (t + 3) := by\n have h1 : Real.log 13 ≤ Real.log (t + 3) :=\n Real.log_le_log (by norm_num : (0:ℝ) < 13) (by linarith : (13:ℝ) ≤ t + 3)\n have h2 := log_thirteen_ge_five -- the new lemma log 13 ≥ 2.5\n linarith [h1, h2]\n -- log increment: log(2t+3) ≤ log 2 + log(t+3)\n have hinc1 : Real.log (2 * t + 3) ≤ Real.log 2 + Real.log (t + 3) := by\n have h1 : (2 : ℝ) * t + 3 ≤ 2 * (t + 3) := by linarith\n have h2 : Real.log (2 * t + 3) ≤ Real.log (2 * (t + 3)) :=\n Real.log_le_log (by positivity) h1\n have h3 : Real.log (2 * (t + 3)) = Real.log 2 + Real.log (t + 3) :=\n Real.log_mul (by norm_num : (2:ℝ) ≠ 0) ht3.ne'\n linarith [h2, h3 ▸ h2] -- rw [h3] at h2 instead\n -- loglog increment: loglog(2t+3) ≤ loglog(t+3) + 0.6932/2.5\n ...\n```\nlog_thirteen_ge_five : (2.5 : ℝ) ≤ Real.log 13: via 13 ≥ e^2.5:\n```\nlemma exp_two_point_five_le_thirteen : Real.exp 2.5 ≤ 13 := by\n have h1 : Real.exp 2.5 = Real.exp 1 * Real.exp 1 * Real.exp 0.5 := by\n rw [← Real.exp_add, ← Real.exp_add]\n congr 1\n norm_num\n have he1 : (2.7182818 : ℝ) ≤ Real.exp 1 := ...\n have he2 : Real.exp 1 ≤ (2.7182819 : ℝ) := ...\n have he5 : Real.exp 0.5 ≤ (1.6488 : ℝ) := by\n have h2 : Real.exp 0.5 * Real.exp 0.5 = Real.exp 1 := by\n rw [← Real.exp_add]\n congr 1\n norm_num\n have h3 : Real.exp 0.5 * Real.exp 0.5 ≤ 1.6488 * 1.6488 := by\n rw [h2]\n calc Real.exp 1 ≤ 2.7182819 := he2\n _ ≤ 1.6488 * 1.6488 := by norm_num\n have h4 : (0 : ℝ) ≤ Real.exp 0.5 := (Real.exp_pos 0.5).le\n nlinarith [h3, h4, Real.exp_pos 0.5]\n rw [h1]\n have h5 : Real.exp 1 * Real.exp 1 * Real.exp 0.5 ≤ 2.7182819 * 2.7182819 * 1.6488 := by\n apply mul_le_mul\n · exact mul_le_mul he2 he2 (Real.exp_pos 1).le (by norm_num)\n · exact he5\n · exact (Real.exp_pos 0.5).le\n · positivity\n have h6 : (2.7182819 : ℝ) * 2.7182819 * 1.6488 ≤ 13 := by norm_num\n exact h5.trans h6\nlemma log_thirteen_ge_five : (2.5 : ℝ) ≤ Real.log 13 := by\n rw [Real.le_log_iff_exp_le (by norm_num : (0:ℝ) < 13)]\n exact exp_two_point_five_le_thirteen\n```\nnlinarith for he5: (exp 0.5)² ≤ 1.6488² with exp 0.5 ≥ 0, 1.6488 ≥ 0 ⟹ exp 0.5 ≤ 1.6488 — nlinarith [h3, h4]: from (e05)² ≤ (1.6488)² and e05 ≥ 0 ⟹ e05 ≤ 1.6488: nlinarith needs: (1.6488−e05)(1.6488+e05) ≥ 0 ⟹ ... give nlinarith the product hint: nlinarith [h3, h4, mul_nonneg (by linarith : (0:ℝ) ≤ 1.6488 - Real.exp 0.5 + 2*Real.exp 0.5)...] — simpler: use sq_le_sq: |e05| ≤ |1.6488| ⟸ e05² ≤ 1.6488²: `abs_le_abs_of_nonneg`?? there's `sq_le_sq'`? or `pow_le_pow_left₀`-inverse: `le_of_pow_le_pow_left₀ (n ≠ 0) (hb : 0 ≤ b) (h : a^n ≤ b^n) : a ≤ b` — `le_of_pow_le_pow_left₀ (by norm_num : (2:ℕ) ≠ 0) (by norm_num : (0:ℝ) ≤ 1.6488) h3'` — where h3' : (Real.exp 0.5)^2 ≤ (1.6488)^2. Let me use that: \n```\n have h3' : Real.exp 0.5 ^ 2 ≤ (1.6488 : ℝ) ^ 2 := by\n have h2 : Real.exp 0.5 ^ 2 = Real.exp 1 := by\n rw [sq, ← Real.exp_add]\n congr 1\n norm_num\n rw [h2]\n calc Real.exp 1 ≤ 2.7182819 := he2\n _ ≤ (1.6488 : ℝ) ^ 2 := by norm_num\n exact le_of_pow_le_pow_left₀ (by norm_num : (2:ℕ) ≠ 0) (by norm_num : (0:ℝ) ≤ 1.6488) h3'\n```\n`le_of_pow_le_pow_left₀ : n ≠ 0 → 0 ≤ b → a ^ n ≤ b ^ n → a ≤ b` ✓ exists (root-namespace or _root_). \n\nThe hloglog increment for C0hat_two_t_add_one_le: loglog(2t+3) ≤ loglog(t+3) + 0.6932/2.5:\n```\n have hinc2 : Real.log (Real.log (2 * t + 3))\n ≤ Real.log (Real.log (t + 3)) + 0.6932 / 2.5 := by\n have h6 : Real.log (Real.log (2 * t + 3)) ≤ Real.log (Real.log (t + 3) + Real.log 2) := by\n apply Real.log_le_log (by positivity : (0:ℝ) < Real.log (2*t+3)) \n linarith [hinc1] -- log(2t+3) ≤ log(t+3) + log 2 ✓\n have h7 : Real.log (Real.log (t + 3) + Real.log 2)\n ≤ Real.log (Real.log (t + 3)) + Real.log 2 / Real.log (t + 3) := by\n <same log(a+c) machine with a = log(t+3) ≥ 2.5, c = log 2 ≤ 0.6932>\n have h10 : Real.log 2 / Real.log (t + 3) ≤ 0.6932 / 2.5 := by\n <log 2 ≤ 0.6932 (log_two_lt_d9) and log(t+3) ≥ 2.5: div_le_div: 0.6932/2.5 form>\n linarith [h6, h7, h10]\n```\nThe div: log 2/log(t+3) ≤ 0.6932/2.5 ⟺ via div_le_div (log 2 ≤ 0.6932) (2.5 ≤ log(t+3)) (pos) (pos): `div_le_div h2a h2b (by positivity) (by positivity)`? div_le_div (hab : a ≤ b) (hbc : c ≤ d)?? — the four-arg: div_le_div (h₁ : a ≤ b) (h₂ : c ≤ d) (hc : 0 ≤ c) (hd : 0 < d)?? hmm — `div_le_div (hab : a ≤ b) (hcd : c ≤ d) (hc : 0 ≤ c) (hb : 0 < b) : a / d ≤ b / c`?? Signature guess: div_le_div (h₁ : a ≤ b) (h₂ : c ≤ d) (hc : 0 ≤ c) (hd : 0 < d) : a / d ≤ b / c. For log 2/log(t+3) ≤ 0.6932/2.5: a = log 2, b = 0.6932, c = 2.5, d = log(t+3): a/d ≤ b/c ⟺ log 2/log(t+3) ≤ 0.6932/2.5 ✓ with h₁ : log 2 ≤ 0.6932 (log_two_lt_d9.le.trans norm_num), h₂ : 2.5 ≤ log(t+3) (hlog13), hc : 0 ≤ 2.5 (norm_num), hd : 0 < log(t+3) (linarith). If the signature differs, adjust at compile.\n\nFinal assembly C0hat_two_t_add_one_le:\n```\n rw [C0hat, C0hat]\n have harg1 : (2 : ℝ) * t + 1 + 2 = 2 * t + 3 := by ring\n have harg2 : (t : ℝ) + 1 + 2 = t + 3 := by ring\n rw [harg1, harg2]\n -- 0.433·log(2t+3) + 0.886·loglog(2t+3) + 2.9 ≤ 0.433·log(t+3)+0.886·loglog(t+3)+2.9+0.55\n have hlog2le := Real.log_two_lt_d9.le.trans (by norm_num : (0.6931471809:ℝ) ≤ 0.6932)\n linarith [hinc1, hinc2, hlog2le]\n```\nCheck the arithmetic: LHS ≤ 0.433·(log 2 + log(t+3)) + 0.886·(loglog(t+3)+0.6932/2.5) + 2.9 = 0.433·log(t+3)+0.886·loglog(t+3)+2.9 + [0.433·log 2 + 0.886·0.27728] = RHS + [0.433·0.69315+0.24567] = RHS + 0.54583 ≤ RHS + 0.55 ✓ (linarith with log 2 ≤ 0.6932: 0.433·0.6932+0.886·(0.6932/2.5) = 0.30015+0.24583·... compute: 0.886·0.6932/2.5 = 0.245666; 0.433·0.6932 = 0.300156; sum = 0.545822 ≤ 0.55 ✓ linarith verifies via the atoms).\n\nAlso needed: `log_le_log_add` machine used twice — factor it as a lemma:\n```\nlemma log_add_le (a c : ℝ) (ha : 0 < a) (hc : 0 ≤ c) :\n Real.log (a + c) ≤ Real.log a + c / a := by\n have h1 : a + c = a * (1 + c / a) := by field_simp [ha.ne']; ring\n rw [h1, Real.log_mul ha.ne' (by positivity : (1 : ℝ) + c / a ≠ 0)]\n have h2 : Real.log (1 + c / a) ≤ c / a :=\n Real.log_le_sub_one_of_pos (by positivity : (0 : ℝ) < 1 + c / a)\n linarith [h2]\n```\n✓ nice and reusable.\n\nNow — before writing, also double-check `Real.log_two_lt_d9` (used in dirichletC2_le_one as `Real.log_two_lt_d9.le.trans (by norm_num)` : log 2 ≤ 0.6932 ✓).\n\nLet me now write §13 (C0hat bridges) + §14 (conj machinery) as one edit. §14's hasDerivAt_conj_of_conj_eq is the delicate one — let me write it very carefully:\n\n```\n/-- The conjugate-derivative lemma: if f commutes with conjugation near\nconj z and is differentiable at z, then f has derivative conj(deriv f z)\nat conj z. -/\nlemma hasDerivAt_conj_of_conj_eq {f : ℂ → ℂ} {z : ℂ}\n (hconj : ∀ᶠ s in 𝓝 ((starRingEnd ℂ) z),\n f ((starRingEnd ℂ) s) = (starRingEnd ℂ) (f s))\n (hdiff : DifferentiableAt ℂ f z) :\n HasDerivAt f ((starRingEnd ℂ) (deriv f z)) ((starRingEnd ℂ) z) := by\n have h1 : Filter.Tendsto (fun x : ℂ => (f x - f z) / (x - z)) (𝓝[≠] z)\n (𝓝 (deriv f z)) :=\n hasDerivAt_iff_tendsto.mp hdiff.hasDerivAt\n have hmap : Filter.Tendsto (starRingEnd ℂ) (𝓝[≠] ((starRingEnd ℂ) z)) (𝓝[≠] z) := by\n have hcont : Continuous ((starRingEnd ℂ) : ℂ → ℂ) := Complex.continuous_conj\n have hT := hcont.tendsto ((starRingEnd ℂ) z)\n rw [Filter.tendsto_nhdsWithin_iff]\n refine ⟨hT.mono_left Filter.nhdsWithin_le_nhds, ?_⟩\n rw [Filter.eventually_nhdsWithin_iff]\n exact Filter.Eventually.of_forall (fun x hx => by\n show (starRingEnd ℂ) x ∈ {z}ᶜ\n rw [Set.mem_compl_singleton_iff]\n intro hbad\n apply hx\n have h3 := congrArg (starRingEnd ℂ) hbad\n rwa [starRingEnd_self_apply, map_one?] at h3)\n ...\n```\nHmm wait — hx : x ∈ {conj z}ᶜ i.e. x ≠ conj z; want conj x ≠ z: conj x = z ⟹ conj(conj x) = conj z ⟹ x = conj z ✓ contradiction. The congrArg route: hbad : (starRingEnd ℂ) x = z — apply conj: (starRingEnd ℂ)((starRingEnd ℂ) x) = (starRingEnd ℂ) z — LHS = x (starRingEnd_self_apply) — so x = (starRingEnd ℂ) z ✓ contradicts hx. The `map_one?` is wrong — I need: from hbad, congrArg (starRingEnd ℂ) hbad : conj(conj x) = conj z, then starRingEnd_self_apply at LHS: x = conj z ✓: rwa [starRingEnd_self_apply] at h3 — then h3 : x = (starRingEnd ℂ) z, and hx : x ≠ (starRingEnd ℂ) z — exact hx h3 ✓. But careful: nhdsWithin's eventual: x ∈ {conj z}ᶜ — the mem form: eventually x in 𝓝[≠] (conj z): x ≠ conj z ✓ hx : x ∈ {(starRingEnd ℂ) z}ᶜ or x ≠ ... Let me write:\n```\n exact Filter.Eventually.of_forall (fun x (hx : x ≠ (starRingEnd ℂ) z) => by\n show (starRingEnd ℂ) x ≠ z\n intro hbad\n apply hx\n have h3 := congrArg (starRingEnd ℂ) hbad\n rwa [starRingEnd_self_apply] at h3)\n```\n— the eventually_nhdsWithin_iff's second component: ∀ᶠ x in 𝓝 (conj z), x ∈ s → x ∈ conj ⁻¹' s — with s = {conj z}ᶜ: x ≠ conj z → conj x ≠ z ✓ the form `x ∈ {z}ᶜ` — mem_compl_singleton_iff: x ∈ {z}ᶜ ↔ x ≠ z ✓. Let me write it with the set-membership forms and let simp bridge.\n\nThen the composition:\n```\n have h2 : Filter.Tendsto (fun x : ℂ =>\n (starRingEnd ℂ) ((f ((starRingEnd ℂ) x) - f z) / (((starRingEnd ℂ) x) - z)))\n (𝓝[≠] ((starRingEnd ℂ) z)) (𝓝 ((starRingEnd ℂ) (deriv f z))) := by\n have hcont : Continuous ((starRingEnd ℂ) : ℂ → ℂ) := Complex.continuous_conj\n exact (hcont.tendsto _).comp (h1.comp hmap)\n```\nThen the EventuallyEq of h2's function and the standard slope:\n```\n have h3 : (fun x : ℂ => (f x - f ((starRingEnd ℂ) z)) / (x - (starRingEnd ℂ) z))\n =ᶠ[𝓝[≠] ((starRingEnd ℂ) z)] fun x : ℂ =>\n (starRingEnd ℂ) ((f ((starRingEnd ℂ) x) - f z) / (((starRingEnd ℂ) x) - z)) := by\n have hcz : ((starRingEnd ℂ) z) ≠ z → True := fun _ => trivial -- unused\n apply Filter.EventuallyEq.filter_mono ?_ Filter.nhdsWithin_le_nhds\n -- work in 𝓝 (conj z): eventually hconj\n exact hconj.mono (fun s hs => by\n rw [hs]\n simp only [map_sub, map_div₀, starRingEnd_self_apply])\n exact hasDerivAt_iff_tendsto.mpr (Filter.Tendsto.congr' h3 h2)\n```\nCheck the pointwise step: at s with hconj : f (conj s) = conj (f s): goal: (f s − f(conj z))/(s − conj z) = conj((f(conj s) − f z)/((conj s) − z)): rw [hs]: RHS = conj((conj(f s) − f z)/((conj s) − z)): simp [map_sub, map_div₀, starRingEnd_self_apply]: conj(a−b) = conj a − conj b ✓; conj(a/b) = conj a/conj b ✓; conj(conj u) = u ✓; also need conj(f z) = f(conj z) — NOT from simp! The hconj hypothesis at s gives f(conj s) = conj(f s) — I need the identity at z too: f(conj z) = conj(f z). But hconj is only eventually near conj z — does it include z?? hconj : ∀ᶠ s in 𝓝 (conj z) — the point z is NOT necessarily near conj z!! (z vs conj z could be far apart — e.g. z = 1+i.) Hmm — wait: hconj is around conj z; I need the identity at points s near conj z (for the slope evaluation) AND at z (for the f z term). At z: z is the CENTER of... no — hconj is centered at conj z, so it covers s near conj z, not z. The identity at z (f(conj z) = conj(f z)) is NOT covered unless z is near conj z. PROBLEM!\n\nHmm — wait, actually: in the EventuallyEq, the term f z appears — I need conj(f z) = f(conj z), which is hconj AT THE POINT z. In the inductive application, the identity itD n ζ (conj s) = conj(itD n ζ s) holds for ALL s ≠ 1 — including s = z (z ≠ 1 ✓). So hconj eventually + the z-point separately. Simplest: strengthen the hypothesis to: hconj holds at z AND eventually near conj z. Or make hconj : ∀ s, ... in a SET containing z ∪ nhd(conj z). Cleanest: two hypotheses (hzc : f (conj z) = conj (f z)) (hconj : ∀ᶠ s in 𝓝 (conj z), ...). For the ζ-induction: hzc from ih z hz ✓; hconj eventually ✓.\n\nHmm — actually simpler: note that the slope function at x needs f(conj x) = conj(f x) (hconj at x near conj z ✓) and the IDENTITY at z only enters via conj(f z) = f(conj z) — since this is a FIXED value (not varying with x), I can rewrite it as a standalone hypothesis. Let me restructure with both. Actually — cleanest: make hconj : ∀ s ∈ (nhd of conj z ∪ {z})... overkill. Two hypotheses:\n\n(hzid : f ((starRingEnd ℂ) z) = (starRingEnd ℂ) (f z))\n(hconj : ∀ᶠ s in 𝓝 ((starRingEnd ℂ) z), f ((starRingEnd ℂ) s) = (starRingEnd ℂ) (f s))\n\nThen the pointwise step: rw [hs] (hconj at s) and rw [hzid]?? — hzid : f(conj z) = conj(f z): the goal has f(conj z) on the LHS and conj(f z) inside the RHS-conj: rw [hzid] rewrites f(conj z) → conj(f z) — then LHS = (f s − conj(f z))/(s − conj z); RHS = conj((conj(f s) − f z)/(conj s − z)) → simp [map_sub, map_div₀, starRingEnd_self_apply] → (f s − conj(f z))/(s − conj z) ✓ equal ✓.\n\nOK — and in the induction: hzid := ih hz (the identity at z ✓); hconj := eventually near conj z: conj z ≠ 1 ⟹ eventually s ≠ 1 ⟹ ih s hs ✓.\n\nThe eventually-ne: `eventually_ne_nhds (h : conj z ≠ 1) : ∀ᶠ s in 𝓝 (conj z), s ≠ 1` — name check: `eventually_ne_nhds : x ≠ a → ∀ᶠ y in 𝓝 x, y ≠ a`? — I believe `eventually_ne_nhds (h : x ≠ a) : ∀ᶠ (y) in 𝓝 x, y ≠ a` exists. If not: `isOpen_compl_singleton.eventually_nhds`? There's `IsOpen.eventually_nhds`: isOpen_compl_singleton : IsOpen {a}ᶜ: (isOpen_compl_singleton.eventually_nhds ?). Let me use: `(isOpen_compl_singleton.eventually_nhds h)`?? hmm — `IsOpen.eventually_nhds : IsOpen s → x ∈ s → ∀ᶠ y in 𝓝 y, y ∈ s`: (isOpen_compl_singleton (𝕜 := ℂ)).eventually_nhds (show conj z ∈ {1}ᶜ from ...) — then ∀ᶠ s, s ∈ {1}ᶜ = s ≠ 1 ✓. I'll write it and adjust.\n\nAlso hdiff.hasDerivAt: DifferentiableAt.hasDerivAt ✓.\n\nNow the iteratedDeriv_riemannZeta_conj:\n```\nlemma iteratedDeriv_riemannZeta_conj (n : ℕ) {z : ℂ} (hz : z ≠ 1) :\n iteratedDeriv n riemannZeta ((starRingEnd ℂ) z)\n = (starRingEnd ℂ) (iteratedDeriv n riemannZeta z) := by\n induction n generalizing z with\n | zero =>\n rw [iteratedDeriv_zero, iteratedDeriv_zero]\n exact riemannZeta_conj z\n | succ n ih =>\n rw [iteratedDeriv_succ, iteratedDeriv_succ]\n have hzid : iteratedDeriv n riemannZeta ((starRingEnd ℂ) z)\n = (starRingEnd ℂ) (iteratedDeriv n riemannZeta z) := ih hz\n have hconj : ∀ᶠ s in 𝓝 ((starRingEnd ℂ) z),\n iteratedDeriv n riemannZeta ((starRingEnd ℂ) s)\n = (starRingEnd ℂ) (iteratedDeriv n riemannZeta s) := by\n have hne : ∀ᶠ s in 𝓝 ((starRingEnd ℂ) z), s ≠ 1 := by\n apply (isOpen_compl_singleton.eventually_nhds ?_) \n ...\n exact hne.mono (fun s hs => ih hs)\n have hd : DifferentiableAt ℂ (iteratedDeriv n riemannZeta) z := by\n have han : AnalyticAt ℂ (iteratedDeriv n riemannZeta) z := by\n induction n with\n | zero => exact analyticAt_riemannZeta hz\n | succ m ihm =>\n rw [iteratedDeriv_succ]\n exact ihm.deriv\n exact han.differentiableAt\n exact (hasDerivAt_conj_of_conj_eq hzid hconj hd).deriv\n```\nWait — the inner induction for han shadows n — the `induction n with` inside a proof about fixed n: better as a separate have-proved-by-induction claim: \n```\nlemma analyticAt_iteratedDeriv_riemannZeta (n : ℕ) {z : ℂ} (hz : z ≠ 1) :\n AnalyticAt ℂ (iteratedDeriv n riemannZeta) z := by\n induction n with\n | zero => exact analyticAt_riemannZeta hz\n | succ m ihm =>\n rw [iteratedDeriv_succ]\n exact ihm.deriv\n```\nHmm — in the succ case, ihm : AnalyticAt (iteratedDeriv m riemannZeta) z, and goal after rw [iteratedDeriv_succ]: AnalyticAt (deriv (iteratedDeriv m riemannZeta)) z = ihm.deriv ✓.\n\nThe `riemannZeta_conj` form: from isNontrivialZero_conj: `rw [_root_.riemannZeta_conj, hρ.1, map_zero]` — so riemannZeta_conj (s) : riemannZeta ((starRingEnd ℂ) s) = (starRingEnd ℂ) (riemannZeta s) — _root_ namespace. In my namespace use `_root_.riemannZeta_conj`.\n\nAlso `analyticAt_riemannZeta` — root? In one_le_zeroMult: `analyticAt_riemannZeta hρ1` plain ✓ (Mathlib's).\n\nOK — and the analyticOrderAt lemma + zeroMult_conj as sketched. Let me now also double check `map_div₀` exists for starRingEnd: map_div (starRingEnd ℂ) : f (a/b) = f a/f b — for field ring homs: `map_div₀`? or `map_div`? For DivisionRing homs: `map_div₀ (f : α →+* β) (a b) : f (a / b) = f a / f b` — or `map_div`. starRingEnd is ≃+* (stronger) — map_div₀ should apply via the →+* coercion... the simp set [map_sub, map_div₀, starRingEnd_self_apply] — if map_div₀ doesn't fire, try map_div. I'll include both.\n\nLet me write §13+§14 now.","signature":""},{"type":"text","text":"All API confirmed. Writing §13 (C0hat bridges) + §14 (conj machinery)."},{"type":"tool_use","id":"Edit_133","name":"Edit","input":{"replace_all":false,"file_path":"D:\\Python\\Quantum\\research\\lean\\NguyenRH1\\NguyenRH1\\LiTightR.lean","old_string":" linarith [hle, h4, h3]\n\nend NguyenRH1\n\nend","new_string":" linarith [hle, h4, h3]\n\n/-! ## 13. Piece 3e: the C0hat interval-count bridges -/\n\n/-- log(a + c) ≤ log a + c/a (the log-increment machine). -/\nlemma log_add_le (a c : ℝ) (ha : 0 < a) (hc : 0 ≤ c) :\n Real.log (a + c) ≤ Real.log a + c / a := by\n have h1 : a + c = a * (1 + c / a) := by field_simp [ha.ne']; ring\n rw [h1, Real.log_mul ha.ne' (by positivity : (1 : ℝ) + c / a ≠ 0)]\n have h2 : Real.log (1 + c / a) ≤ c / a :=\n Real.log_le_sub_one_of_pos (by positivity : (0 : ℝ) < 1 + c / a)\n linarith [h2]\n\n/-- e^2.5 ≤ 13 (via e² ≤ 7.3890566 and e^0.5 ≤ 1.6488). -/\nlemma exp_two_point_five_le_thirteen : Real.exp 2.5 ≤ 13 := by\n have he2 : Real.exp 1 ≤ (2.7182819 : ℝ) := Real.exp_one_lt_d9.le.trans (by norm_num)\n have he5 : Real.exp 0.5 ≤ (1.6488 : ℝ) := by\n have h3' : Real.exp 0.5 ^ 2 ≤ (1.6488 : ℝ) ^ 2 := by\n have h2 : Real.exp 0.5 ^ 2 = Real.exp 1 := by\n rw [sq, ← Real.exp_add]\n congr 1\n norm_num\n rw [h2]\n calc Real.exp 1 ≤ 2.7182819 := he2\n _ ≤ (1.6488 : ℝ) ^ 2 := by norm_num\n exact le_of_pow_le_pow_left₀ (by norm_num : (2 : ℕ) ≠ 0)\n (by norm_num : (0 : ℝ) ≤ 1.6488) h3'\n have h1 : Real.exp 2.5 = Real.exp 1 * Real.exp 1 * Real.exp 0.5 := by\n rw [← Real.exp_add, ← Real.exp_add]\n congr 1\n norm_num\n rw [h1]\n have h5 : Real.exp 1 * Real.exp 1 * Real.exp 0.5 ≤ 2.7182819 * 2.7182819 * 1.6488 := by\n apply mul_le_mul\n · exact mul_le_mul he2 he2 (Real.exp_pos 1).le (by norm_num)\n · exact he5\n · exact (Real.exp_pos 0.5).le\n · positivity\n have h6 : (2.7182819 : ℝ) * 2.7182819 * 1.6488 ≤ 13 := by norm_num\n exact h5.trans h6\n\n/-- log 13 ≥ 2.5. -/\nlemma log_thirteen_ge_five : (2.5 : ℝ) ≤ Real.log 13 := by\n rw [Real.le_log_iff_exp_le (by norm_num : (0 : ℝ) < 13)]\n exact exp_two_point_five_le_thirteen\n\n/-- **The 2k+1 bridge** (k ≥ 11): C0hat(2k+1) ≤\n0.433·(log k + 0.833) + 0.886·(log log k + 0.3475) + 2.9. -/\nlemma C0hat_two_mul_add_one_le {k : ℕ} (hk : 11 ≤ k) :\n C0hat (2 * (k : ℝ) + 1)\n ≤ 0.433 * (Real.log k + 0.833) + 0.886 * (Real.log (Real.log k) + 0.3475) + 2.9 := by\n have hkR : (11 : ℝ) ≤ (k : ℝ) := by exact_mod_cast hk\n have hk0 : (0 : ℝ) < (k : ℝ) := by linarith\n have hlogk : (2.3978 : ℝ) ≤ Real.log k := by\n have h2a := log_eleven_ge\n have h2b : Real.log 11 ≤ Real.log k := Real.log_le_log (by norm_num : (0 : ℝ) < 11) hkR\n linarith [h2a, h2b]\n have hlogpos : (0 : ℝ) < Real.log k := by linarith [hlogk]\n have hinc1 : Real.log (2 * (k : ℝ) + 3) ≤ Real.log k + 0.833 := by\n have h2 : (2 : ℝ) * (k : ℝ) + 3 ≤ 2.3 * (k : ℝ) := by linarith [hkR]\n have h3 : Real.log (2 * (k : ℝ) + 3) ≤ Real.log (2.3 * (k : ℝ)) :=\n Real.log_le_log (by positivity : (0 : ℝ) < 2 * (k : ℝ) + 3) h2\n have h4 : Real.log (2.3 * (k : ℝ)) = Real.log 2.3 + Real.log k :=\n Real.log_mul (by norm_num : (2.3 : ℝ) ≠ 0) hk0.ne'\n rw [h4] at h3\n have h5 := log_two_point_three_le\n linarith [h3, h5]\n have hinc2 : Real.log (Real.log (2 * (k : ℝ) + 3))\n ≤ Real.log (Real.log k) + 0.3475 := by\n have h6 : Real.log (Real.log (2 * (k : ℝ) + 3)) ≤ Real.log (Real.log k + 0.833) :=\n Real.log_le_log (by positivity : (0 : ℝ) < Real.log (2 * (k : ℝ) + 3)) hinc1\n have h7 : Real.log (Real.log k + 0.833)\n ≤ Real.log (Real.log k) + 0.833 / Real.log k :=\n log_add_le (Real.log k) 0.833 hlogpos (by norm_num)\n have h10 : (0.833 : ℝ) / Real.log k ≤ 0.3475 := by\n rw [div_le_iff₀ hlogpos]\n have h11 : (0.3475 : ℝ) * 2.3978 ≤ 0.3475 * Real.log k :=\n mul_le_mul_of_nonneg_left hlogk (by norm_num)\n have h12 : (0.833 : ℝ) ≤ 0.3475 * 2.3978 := by norm_num\n exact h12.trans h11\n linarith [h6, h7, h10]\n rw [C0hat]\n have harg : (2 : ℝ) * (k : ℝ) + 1 + 2 = 2 * (k : ℝ) + 3 := by ring\n rw [harg]\n linarith [hinc1, hinc2]\n\n/-- **The j+1 bridge** (j ≥ 14): C0hat(j+1) ≤\n0.433·(log j + 0.1942) + 0.886·(log log j + 0.0736) + 2.9. -/\nlemma C0hat_add_one_le_of_fourteen_le {j : ℕ} (hj : 14 ≤ j) :\n C0hat ((j : ℝ) + 1)\n ≤ 0.433 * (Real.log j + 0.1942) + 0.886 * (Real.log (Real.log j) + 0.0736) + 2.9 := by\n have hjR : (14 : ℝ) ≤ (j : ℝ) := by exact_mod_cast hj\n have hj0 : (0 : ℝ) < (j : ℝ) := by linarith\n have hlogj : (2.6388 : ℝ) ≤ Real.log j := by\n have h2a := log_fourteen_ge\n have h2b : Real.log 14 ≤ Real.log j := Real.log_le_log (by norm_num : (0 : ℝ) < 14) hjR\n linarith [h2a, h2b]\n have hlogpos : (0 : ℝ) < Real.log j := by linarith [hlogj]\n have hinc1 : Real.log ((j : ℝ) + 3) ≤ Real.log j + 0.1942 := by\n have h2 : (j : ℝ) + 3 ≤ (17 / 14 : ℝ) * (j : ℝ) := by linarith [hjR]\n have h3 : Real.log ((j : ℝ) + 3) ≤ Real.log ((17 / 14 : ℝ) * (j : ℝ)) :=\n Real.log_le_log (by positivity : (0 : ℝ) < (j : ℝ) + 3) h2\n have h4 : Real.log ((17 / 14 : ℝ) * (j : ℝ))\n = Real.log (17 / 14) + Real.log j :=\n Real.log_mul (by norm_num : (17 / 14 : ℝ) ≠ 0) hj0.ne'\n rw [h4] at h3\n have h5 := log_17_14_le\n linarith [h3, h5]\n have hinc2 : Real.log (Real.log ((j : ℝ) + 3))\n ≤ Real.log (Real.log j) + 0.0736 := by\n have h6 : Real.log (Real.log ((j : ℝ) + 3)) ≤ Real.log (Real.log j + 0.1942) :=\n Real.log_le_log (by positivity : (0 : ℝ) < Real.log ((j : ℝ) + 3)) hinc1\n have h7 : Real.log (Real.log j + 0.1942)\n ≤ Real.log (Real.log j) + 0.1942 / Real.log j :=\n log_add_le (Real.log j) 0.1942 hlogpos (by norm_num)\n have h10 : (0.1942 : ℝ) / Real.log j ≤ 0.0736 := by\n rw [div_le_iff₀ hlogpos]\n have h11 : (0.0736 : ℝ) * 2.6388 ≤ 0.0736 * Real.log j :=\n mul_le_mul_of_nonneg_left hlogj (by norm_num)\n have h12 : (0.1942 : ℝ) ≤ 0.0736 * 2.6388 := by norm_num\n exact h12.trans h11\n linarith [h6, h7, h10]\n rw [C0hat]\n have harg : (j : ℝ) + 1 + 2 = (j : ℝ) + 3 := by ring\n rw [harg]\n linarith [hinc1, hinc2]\n\n/-- **The 2t+1 increment** (t ≥ 10): C0hat(2t+1) ≤ C0hat(t+1) + 0.55. -/\nlemma C0hat_two_t_add_one_le {t : ℝ} (ht : 10 ≤ t) :\n C0hat (2 * t + 1) ≤ C0hat (t + 1) + 0.55 := by\n have ht3 : (0 : ℝ) < t + 3 := by linarith\n have hlog13 : (2.5 : ℝ) ≤ Real.log (t + 3) := by\n have h1 : Real.log 13 ≤ Real.log (t + 3) :=\n Real.log_le_log (by norm_num : (0 : ℝ) < 13) (by linarith : (13 : ℝ) ≤ t + 3)\n have h2 := log_thirteen_ge_five\n linarith [h1, h2]\n have hlogpos : (0 : ℝ) < Real.log (t + 3) := by linarith [hlog13]\n have hinc1 : Real.log (2 * t + 3) ≤ Real.log 2 + Real.log (t + 3) := by\n have h1 : (2 : ℝ) * t + 3 ≤ 2 * (t + 3) := by linarith\n have h2 : Real.log (2 * t + 3) ≤ Real.log (2 * (t + 3)) :=\n Real.log_le_log (by positivity : (0 : ℝ) < 2 * t + 3) h1\n have h3 : Real.log (2 * (t + 3)) = Real.log 2 + Real.log (t + 3) :=\n Real.log_mul (by norm_num : (2 : ℝ) ≠ 0) ht3.ne'\n rw [h3] at h2\n exact h2\n have hinc2 : Real.log (Real.log (2 * t + 3))\n ≤ Real.log (Real.log (t + 3)) + 0.6932 / 2.5 := by\n have h6 : Real.log (Real.log (2 * t + 3))\n ≤ Real.log (Real.log (t + 3) + Real.log 2) := by\n apply Real.log_le_log (by positivity : (0 : ℝ) < Real.log (2 * t + 3))\n linarith [hinc1]\n have h7 : Real.log (Real.log (t + 3) + Real.log 2)\n ≤ Real.log (Real.log (t + 3)) + Real.log 2 / Real.log (t + 3) :=\n log_add_le (Real.log (t + 3)) (Real.log 2) hlogpos (Real.log_nonneg (by norm_num))\n have hlog2le : Real.log 2 ≤ 0.6932 := Real.log_two_lt_d9.le.trans (by norm_num)\n have h10 : Real.log 2 / Real.log (t + 3) ≤ 0.6932 / 2.5 := by\n apply div_le_div hlog2le hlog13 (by norm_num : (0 : ℝ) ≤ 2.5) hlogpos\n linarith [h6, h7, h10]\n have hlog2le : Real.log 2 ≤ 0.6932 := Real.log_two_lt_d9.le.trans (by norm_num)\n rw [C0hat, C0hat]\n have harg1 : (2 : ℝ) * t + 1 + 2 = 2 * t + 3 := by ring\n have harg2 : (t : ℝ) + 1 + 2 = t + 3 := by ring\n rw [harg1, harg2]\n linarith [hinc1, hinc2, hlog2le]\n\n/-! ## 14. Piece 3f: the conjugation machinery (zeroMult_conj) -/\n\n/-- ζ is analytic at iterated-derivatives level (off the pole). -/\nlemma analyticAt_iteratedDeriv_riemannZeta (n : ℕ) {z : ℂ} (hz : z ≠ 1) :\n AnalyticAt ℂ (iteratedDeriv n riemannZeta) z := by\n induction n with\n | zero => exact analyticAt_riemannZeta hz\n | succ m ihm =>\n rw [iteratedDeriv_succ]\n exact ihm.deriv\n\n/-- **The conjugate-derivative lemma**: if f commutes with conjugation at\nz and near conj z, and is differentiable at z, then f has derivative\nconj(deriv f z) at conj z. -/\nlemma hasDerivAt_conj_of_conj_eq {f : ℂ → ℂ} {z : ℂ}\n (hzid : f ((starRingEnd ℂ) z) = (starRingEnd ℂ) (f z))\n (hconj : ∀ᶠ s in 𝓝 ((starRingEnd ℂ) z),\n f ((starRingEnd ℂ) s) = (starRingEnd ℂ) (f s))\n (hdiff : DifferentiableAt ℂ f z) :\n HasDerivAt f ((starRingEnd ℂ) (deriv f z)) ((starRingEnd ℂ) z) := by\n have h1 : Filter.Tendsto (fun x : ℂ => (f x - f z) / (x - z)) (𝓝[≠] z)\n (𝓝 (deriv f z)) :=\n hasDerivAt_iff_tendsto.mp hdiff.hasDerivAt\n have hmap : Filter.Tendsto (starRingEnd ℂ) (𝓝[≠] ((starRingEnd ℂ) z)) (𝓝[≠] z) := by\n have hcont : Continuous ((starRingEnd ℂ) : ℂ → ℂ) := Complex.continuous_conj\n have hT := hcont.tendsto ((starRingEnd ℂ) z)\n rw [Filter.tendsto_nhdsWithin_iff]\n refine ⟨hT.mono_left Filter.nhdsWithin_le_nhds, ?_⟩\n rw [Filter.eventually_nhdsWithin_iff]\n exact Filter.Eventually.of_forall (fun x (hx : x ≠ (starRingEnd ℂ) z) => by\n show (starRingEnd ℂ) x ≠ z\n intro hbad\n apply hx\n have h3 := congrArg (starRingEnd ℂ) hbad\n rwa [starRingEnd_self_apply] at h3)\n have h2 : Filter.Tendsto (fun x : ℂ =>\n (starRingEnd ℂ) ((f ((starRingEnd ℂ) x) - f z) / (((starRingEnd ℂ) x) - z)))\n (𝓝[≠] ((starRingEnd ℂ) z)) (𝓝 ((starRingEnd ℂ) (deriv f z))) := by\n have hcont : Continuous ((starRingEnd ℂ) : ℂ → ℂ) := Complex.continuous_conj\n exact (hcont.tendsto _).comp (h1.comp hmap)\n have h3 : (fun x : ℂ => (f x - f ((starRingEnd ℂ) z)) / (x - (starRingEnd ℂ) z))\n =ᶠ[𝓝[≠] ((starRingEnd ℂ) z)] fun x : ℂ =>\n (starRingEnd ℂ) ((f ((starRingEnd ℂ) x) - f z) / (((starRingEnd ℂ) x) - z)) := by\n apply Filter.EventuallyEq.filter_mono ?_ Filter.nhdsWithin_le_nhds\n exact hconj.mono (fun s hs => by\n rw [hs, hzid]\n simp only [map_sub, map_div₀, starRingEnd_self_apply])\n exact hasDerivAt_iff_tendsto.mpr (Filter.Tendsto.congr' h3 h2)\n\n/-- The iterated derivatives of ζ commute with conjugation (off the pole). -/\nlemma iteratedDeriv_riemannZeta_conj (n : ℕ) {z : ℂ} (hz : z ≠ 1) :\n iteratedDeriv n riemannZeta ((starRingEnd ℂ) z)\n = (starRingEnd ℂ) (iteratedDeriv n riemannZeta z) := by\n induction n generalizing z with\n | zero =>\n rw [iteratedDeriv_zero, iteratedDeriv_zero]\n exact _root_.riemannZeta_conj z\n | succ m ihm =>\n rw [iteratedDeriv_succ, iteratedDeriv_succ]\n have hzid := ihm hz\n have hconj : ∀ᶠ s in 𝓝 ((starRingEnd ℂ) z),\n iteratedDeriv m riemannZeta ((starRingEnd ℂ) s)\n = (starRingEnd ℂ) (iteratedDeriv m riemannZeta s) := by\n have hne : ∀ᶠ s in 𝓝 ((starRingEnd ℂ) z), s ≠ 1 := by\n have h1 : ((starRingEnd ℂ) z) ≠ 1 := by\n intro h\n apply hz\n have h2 := congrArg (starRingEnd ℂ) h\n rwa [starRingEnd_self_apply, map_one] at h2\n exact isOpen_compl_singleton.eventually_nhds h1\n exact hne.mono (fun s hs => ihm hs)\n have hd : DifferentiableAt ℂ (iteratedDeriv m riemannZeta) z :=\n (analyticAt_iteratedDeriv_riemannZeta m hz).differentiableAt\n exact (hasDerivAt_conj_of_conj_eq hzid hconj hd).deriv\n\n/-- The analytic order of ζ is conjugation-invariant (off the pole). -/\nlemma analyticOrderAt_riemannZeta_conj {z : ℂ} (hz : z ≠ 1) :\n analyticOrderAt riemannZeta ((starRingEnd ℂ) z) = analyticOrderAt riemannZeta z := by\n have hzconj : ((starRingEnd ℂ) z) ≠ 1 := by\n intro h\n apply hz\n have h2 := congrArg (starRingEnd ℂ) h\n rwa [starRingEnd_self_apply, map_one] at h2\n have htop : analyticOrderAt riemannZeta z ≠ ⊤ := zeta_order_ne_top_of_ne hz\n set n := analyticOrderNatAt riemannZeta z with hn\n have hzn : analyticOrderAt riemannZeta z = (n : ℕ∞) :=\n (Nat.cast_analyticOrderNatAt htop).symm\n obtain ⟨hz1, hz2⟩ :=\n (analyticAt_riemannZeta hz).analyticOrderAt_eq_nat_iff_iteratedDeriv_eq_zero.mp hzn\n have hkey : analyticOrderAt riemannZeta ((starRingEnd ℂ) z) = (n : ℕ∞) :=\n (analyticAt_riemannZeta hzconj).analyticOrderAt_eq_nat_iff_iteratedDeriv_eq_zero.mpr\n ⟨fun k hk => by\n rw [iteratedDeriv_riemannZeta_conj k hz, hz1 k hk, map_zero],\n by\n rw [iteratedDeriv_riemannZeta_conj n hz]\n intro hbad\n apply hz2\n have h3 := congrArg (starRingEnd ℂ) hbad\n rwa [starRingEnd_self_apply, map_zero] at h3⟩\n rw [hzn, hkey]\n\n/-- **zeroMult is conjugation-invariant** (the left-tail count bridge). -/\nlemma zeroMult_conj {ρ : ℂ} (hρ : IsNontrivialZero ρ) :\n zeroMult ((starRingEnd ℂ) ρ) = zeroMult ρ := by\n have hρ1 : ρ ≠ 1 := by\n rintro rfl\n have h := hρ.2.2\n rw [Complex.one_re] at h\n exact (lt_irrefl (1 : ℝ)) h\n show (analyticOrderAt riemannZeta ((starRingEnd ℂ) ρ)).toNat\n = (analyticOrderAt riemannZeta ρ).toNat\n rw [analyticOrderAt_riemannZeta_conj hρ1]\n\nend NguyenRH1\n\nend"},"extra_content":null}]