Current task: —

← Session 22 — ii′-1: liCoeff pairing fix + residue machinery

#1117 assistant 2026-08-22 09:23:30.855 UTC · 421→5058 tok open ⤢
thinking (11196 chars)
Clean! Now the file has everything through `iteratedDerivWithin_tsum_dpsiTermC` (the termwise iterated derivative of the series at 1/2). Remaining for piece (A): - DinfC's iterated values at 1/2 (combine the −γ − 1/s part + the series part). - Transfer to digamma (the congruence helper). - The reindexing to lagariasA. - The affine comp + the final τ_j assembly (in LiArchimedean). It's ~00:45. Let me commit this and continue with the final stretch. Let me write the remaining sections in one push — Section 9 (DinfC values + digamma transfer) and Section 10 (reindexing + the final τ_j theorem). Section 9 plan: ```lean /-! ## 9. The polygamma values of DinfC and digamma at 1/2 -/ /-- iteratedDeriv j DinfC (1/2) = (−1)^{j+1} j! Σ_{m≥0} (1/2 + ↑m)^{−(j+1)} for j ≥ 1. -/ lemma iteratedDeriv_DinfC_half (j : ℕ) (hj : 1 ≤ j) : iteratedDeriv j DinfC ((1 : ℂ) / 2) = ((-1 : ℂ)) ^ (j + 1) * (j ! : ℂ) * ∑' m : ℕ, ((1 / 2 : ℂ) + ↑m) ^ (-(j : ℤ) - 1) := by -- DinfC = (−γ − 1/s) + tsum-fn; the iterated deriv at 1/2 ... ``` The decomposition: DinfC = (fun s => −γ − 1/s) + (fun s => ∑' m, dpsiTermC s m) — as functions — then iteratedDeriv j (A + B) (1/2) = iteratedDeriv j A + iteratedDeriv j B — via iteratedDeriv_add (needs ContDiffAt of each at 1/2 — both analytic on the domain ⟹ AnalyticAt at 1/2 ⟹ ContDiffAt ✓). - A := fun s => −γ − 1/s: iteratedDeriv j A (1/2) for j ≥ 1: A = const + (−(1/s)): the const dies; −(1/s) = −(1/(s+0)): via iteratedDeriv_neg_one_div_add_const with c := 0: = −(−1)^j·j!·(1/2 + 0)^{−(j+1)} = −(−1)^j·j!·(1/2)^{−(j+1)} — and the zpow (1/2)^{−(j+1)} — hmm — I want the form (1/2 + ↑0)^{...} to merge into the m = 0 series term... Actually the final target form is the Σ_{m≥0}(1/2+↑m)^{−(j+1)} — the m = 0 term is (1/2)^{−(j+1)} ✓ — so the A-part's contribution IS the m = 0 term ✓ — and the series part gives Σ_{m≥0}(1/2 + ↑m + 1)^{−(j+1)} = Σ_{m≥0}(3/2 + ↑m)^{−(j+1)} — and the total: (1/2)^{−(j+1)} + Σ_{m≥0}(3/2+m)^{−(j+1)} = Σ_{m'≥0}(1/2+m')^{−(j+1)} via tsum_eq_zero_add (with m' = m+1: Σ_{m≥0}(1/2 + (m+1))^{−(j+1)} = Σ_{m≥0}(3/2+m)^{−(j+1)} ✓ 1/2+(m+1) = 3/2+m ✓). So the structure: iteratedDeriv j DinfC (1/2) = −(−1)^j·j!·(1/2)^{−(j+1)} + [−(−1)^j·j!·Σ_{m≥0}(1/2+↑m+1)^{−(j+1)}] = −(−1)^j·j!·[(1/2)^{−(j+1)} + Σ_{m≥0}(3/2+↑m)^{−(j+1)}] = −(−1)^j·j!·Σ_{m≥0}(1/2+↑m)^{−(j+1)} [tsum_eq_zero_add] = (−1)^{j+1}·j!·Σ_{m≥0}(1/2+↑m)^{−(j+1)} [−(−1)^j = (−1)^{j+1}: pow_succ] The factors: the series part's iteratedDerivWithin gives the tsum with the per-term factor −(−1)^k·k! — the tsum of (m ↦ −(−1)^k·k!·X_m) = −(−1)^k·k!·Σ X_m via tsum_mul_left ✓. The A-part: −γ − 1/s: iteratedDeriv j (−γ − 1/s) at 1/2 — via iteratedDeriv_add? — A = const + (−1/s) — as iteratedDeriv_add of (fun _ => −γ) and (fun s => −1/s) — the const's = 0 (j ≥ 1) ✓ and −1/s via iteratedDeriv_neg_one_div_add_const j 0 — the function fun s => −(1/(s + 0)) — vs −(1/s): show-bridge (s + 0 = s ✓ add_zero simp). Hmm — the −γ − 1/s = fun s => −γ − 1/s = (fun _ => −γ) + (fun s => −(1/s)) ✓. The ContDiffAt conditions: A's pieces: const ✓; −1/s at 1/2: analytic (1/s at 1/2 ≠ 0 ✓) ✓. B (the series): analytic at 1/2 — from DinfC_analyticOn — hmm — that's about DinfC (the whole) — I need the series-part's analyticity: from hdiff (DifferentiableOn of the tsum-fn on dpsiDomain) inside DinfC_analyticOn's proof — it's a `have` — not a standalone lemma. Make it one: `dpsiTermC_tsum_analyticOn : AnalyticOnNhd ℂ (fun s => ∑' m, dpsiTermC s m) dpsiDomain` — extract from DinfC_analyticOn's hdiff block: DifferentiableOn → analyticOnNhd ✓. Then ContDiffAt via AnalyticOnNhd's point: (AnalyticOnNhd ...).contDiffAt? — AnalyticAt.contDiffAt ✓ (used in LiResidue ✓). Then the final: DinfC's iteratedDeriv j at 1/2 — hmm — but DinfC is DEFINED as −γ − 1/s + tsum — the iteratedDeriv_add application: DinfC = A + B as functions: `show DinfC = A + B`? — DinfC s := −γ − 1/s + ∑' m, dpsiTermC s m — as a function: DinfC = fun s => (−γ − 1/s) + ∑' — and A + B with A := fun s => −γ − 1/s, B := fun s => ∑' — the function equality: funext + Pi.add_apply ✓. Then: iteratedDeriv j DinfC (1/2) = iteratedDeriv j (A + B) (1/2) [rw the function eq] = iteratedDeriv j A (1/2) + iteratedDeriv j B (1/2) [iteratedDeriv_add hcfA hcfB]. Then: - `iteratedDeriv_digamma_half (j) (hj : 1 ≤ j) : iteratedDeriv j Complex.digamma (1/2) = the same` — via digamma_eq_DinfC_on (EqOn on the domain) ⟹ eventuallyEq at 1/2 (domain ∈ 𝓝 (1/2) ✓ isOpen + mem) ⟹ iteratedDeriv_congr_of_eventuallyEq ✓. Section 10 (reindexing + assembly): - `tsum_inv_add_half : ∑' m : ℕ, ((1/2 : ℂ) + ↑m)^{−(j+1)} = 2^{j+1}·↑(lagariasA (j+1))` — hmm — wait — the zpow forms vs the 1/(·)^{j+1} forms — let me keep zpow and convert at the very end. The chain (all ℂ): Σ_{m≥0} (1/2 + ↑m)^{−(j+1)} = Σ_{m≥0} 2^{j+1}·(1 + 2↑m)^{−(j+1)} — per-term: (1/2 + ↑m) = (1 + 2↑m)/2 — raised to −(j+1): ((1+2↑m)/2)^{−(j+1)} = 2^{j+1}/(1+2↑m)^{j+1}·... = 2^{j+1}·(1+2↑m)^{−(j+1)} ✓ — per-term algebra: (1/2 + ↑m) = (1 + 2↑m)/2 — field: ((1+2↑m)/2)^{−(j+1)} = 2^{j+1}·(1+2↑m)^{−(j+1)} via div_zpow?/mul_zpow... — ((a/2))^n = a^n/2^n (div_pow for npow — but zpow!) — convert zpow → npow first: x^{−(j+1):ℤ} = 1/x^{j+1} (zpow_neg_natCast? or zpow_neg+zpow_natCast) — then the 1/(a/2)^{j+1} = 2^{j+1}/a^{j+1} — `div_pow` + field_simp-ish — per-term identity: 1/((1+2↑m)/2)^{j+1} = 2^{j+1}/(1+2↑m)^{j+1} — field_simp + ring? — division in the base — `div_pow` : (a/b)^n = a^n/b^n — so 1/((1+2↑m)/2)^{j+1} = 1/((1+2↑m)^{j+1}/2^{j+1}) = 2^{j+1}/(1+2↑m)^{j+1} — via field_simp or div_div... Let me write the per-term as: `have hper : ∀ m : ℕ, ((1/2 : ℂ) + ↑m) ^ (-(j : ℤ) - 1) = (2 : ℂ)^(j+1) * (1 + 2 * ↑m) ^ (-(j:ℤ) - 1)`? — hmm — the zpow manipulations... — this per-term algebra is fiddly. Alternative cleaner: relate to the odd sum via the m+1/2 form: (↑m + 1/2)^{−(j+1)} = 2^{j+1}·(2↑m+1)^{−(j+1)} — same issue. Let me define the per-term step concretely: (1/2 + ↑m) = (1 + 2↑m)/2: by push_cast; ring. Then zpow: X^{−(j+1)} with X = (1+2↑m)/2: = 1/X^{j+1} [zpow_neg_natCast? — hmm the exponent −(j:ℤ)−1 = −(j+1:ℤ) — push_cast ✓] — 1/((1+2↑m)/2)^{j+1} = 2^{j+1}/(1+2↑m)^{j+1} [div_pow: ((1+2↑m)/2)^{j+1} = (1+2↑m)^{j+1}/2^{j+1}; then 1/(a/b) = b/a: `one_div_div`? — 1/(a/b) = b/a ✓ `one_div_div`]. So per-term: (1/2+↑m)^{−(j+1)} = 2^{j+1}·(1+2↑m)^{−(j+1)}·... wait — 2^{j+1}/(1+2↑m)^{j+1} = 2^{j+1}·((1+2↑m)^{j+1})⁻¹ = 2^{j+1}·(1+2↑m)^{−(j+1):ℤ} [zpow back]. OK. Then Σ_m 2^{j+1}·Y_m = 2^{j+1}·Σ Y_m (tsum_mul_left ✓). Σ_{m≥0} (1+2↑m)^{−(j+1)} = Σ_{m≥0} (2↑m+1)^{−(j+1)} (1+2x = 2x+1 ✓ ring per-term) — hmm — the odd-series is over 2m+1 = 1,3,5,... — the target lagariasA(j+1) = 1 + Σ_{m : {odd ∧ ≥3}} (1/↑m)^{j+1}. Σ_{m≥0} (2↑m+1)^{−(j+1)} = (2·0+1)^{−(j+1)} + Σ_{m≥0} (2↑(m+1)+1)^{−(j+1)} [tsum_eq_zero_add] = 1 + Σ_{m≥0} (2↑m+3)^{−(j+1)} — with (2·0+1)^{−(j+1)} = 1 ✓ (1^z = 1: one_zpow/one_pow ✓). Σ_{m≥0} (2↑m+3)^{−(j+1)} = Σ_{m' : {m // Odd m ∧ 3 ≤ m}} (↑m')^{−(j+1)} — via the equiv φ : ℕ → {m // Odd m ∧ 3 ≤ m}, m ↦ 2m+3 — Equiv.tsum_eq — need the equiv: ```lean def oddGeThreeEquiv : ℕ ≃ {m : ℕ // Odd m ∧ 3 ≤ m} where toFun m := ⟨2 * m + 3, by ...⟩ invFun := fun ⟨m, hm⟩ => (m - 3) / 2 left_inv := ... right_inv := ... ``` The invFun (m−3)/2 : ℕ division — for odd m ≥ 3: m = 2k+1 with k ≥ 1: (m−3)/2 = (2k−2)/2 = k−1 ✓ Nat.div — the proofs: left_inv: (2m+3−3)/2 = 2m/2 = m ✓ (Nat.div: (2m)/2 = m — `Nat.mul_right... (2*m)/2 = m — Nat.mul_div_left? hmm — (2*m+3−3)/2 = (2*m)/2 = m — via omega? — omega handles Nat division by constants ✓). right_inv: for ⟨m, hm: Odd ∧ 3≤m⟩: 2·((m−3)/2)+3 = m — omega with the odd hypothesis? — omega knows odd? — Odd m is a Prop — omega doesn't read Odd — convert: Odd m ⟹ m = 2k+1: `Nat.odd_iff : Odd n ↔ n % 2 = 1` ✓ omega reads n % 2 = 1 ✓ so 2·((m−3)/2) + 3 = m from m % 2 = 1 ∧ 3 ≤ m by omega ✓. Then Equiv.tsum_eq (the equiv) (fun m' => (↑m')^{−(j+1)})?? — `Equiv.tsum_eq (e : α ≃ β) (f : β → M) : ∑' a, f (e a) = ∑' b, f b` ✓ (from JacobiTheta usage ✓). The summability side conditions? Equiv.tsum_eq might need Summable — the version: `Equiv.tsum_eq (e : α ≃ β) (f : β → M) : ∑' i, f (e i) = ∑' i, f i` — unconditional? For an equiv the sums agree unconditionally (junk-compatible) — hmm — actually for tsum the equiv-rewriting needs summability on ONE side — `Equiv.tsum_eq` I believe is unconditional when... — there are `Equiv.summable_iff` and `Equiv.tsum_eq` — the tsum_eq might need `Summable f` — let me handle: the subtype side's summability: Summable (fun m : {m // Odd m ∧ 3 ≤ m} => (↑m:ℂ)^{−(j+1)}) — hmm — via the real oddSlice_summable + cast: Summable (fun m : subtype => (1/(↑m:ℝ))^(j+1)) [oddSlice_summable (j+1) (by omega) ✓] then the ℂ version via... — the ℂ norm = the ℝ norm of the cast: ‖(↑m:ℂ)^{−(j+1)}‖ = |1/↑m^{j+1}|·... = 1/m^{j+1} (m ≥ 3 > 0) — so Summable via of_norm_bounded with the ℝ summable family — needs ‖(↑m:ℂ)^{−(j+1)}‖ ≤ 1/m^{j+1}·... — ‖(↑m:ℂ)^z‖ = |↑m|^z-ish ✓ norm_zpow + Complex.norm_real-ish... fine. And the ℕ-side: Summable (fun m => (2↑m+3)^{−(j+1)}) — ≤ 1/(m+1)²-ish ✓. Then: Σ_{m≥0}(2↑m+1)^{−(j+1)} = 1 + Σ_{subtype} (↑m)^{−(j+1)} — and ↑(lagariasA (j+1)) — lagariasA (j+1) = if j+1 = 1 then lagariasA1 else 1 + ∑' m : subtype, (1/(m:ℝ))^(j+1) — j+1 ≥ 2 (j ≥ 1) ⟹ j+1 ≠ 1 ✓ if_neg — so ↑(lagariasA(j+1)) = 1 + ↑(∑' subtype (1/↑m)^(j+1)) — and ↑(real-tsum) = complex-tsum via ofRealCLM.map_tsum (oddSlice_summable) + push_cast per-term: ↑((1/↑m)^(j+1)) = (1/↑m)^(j+1) = (↑m)^{−(j+1)} — the exponent forms — zpow vs npow-div — UNIFY: keep everything in the `(↑m)^{-(j+1) : ℤ}` zpow form and convert lagariasA's (1/(m:ℝ))^j form via: (1/(m:ℝ))^(j+1) = ((m:ℝ))^{−(j+1):ℤ}·... — one_div + zpow: 1/x^n = x^(−n:ℤ)·... — `zpow_neg_natCast`? hmm — there's `zpow_neg_natCast : x ^ (-(n:ℤ)) = 1 / x^n`? — direction. Let me just pick ONE form for the FINAL theorem statement: the τ-target is about iteratedDeriv j (logDeriv Gammaℝ (1+·)) 0 = (−1)^{j+1}·j!·↑(lagariasA (j+1)) — the lagariasA is ℝ — cast to ℂ — so the reindexing should produce ↑(lagariasA (j+1)) — the real lagariasA's tail is (1/(m:ℝ))^(j+1) npow-form — so convert my zpow series to the cast of that: (↑m:ℂ)^{−(j+1):ℤ} = ↑((1/(m:ℝ))^(j+1)) — per-term: LHS = 1/(↑m)^{j+1} (zpow_neg_natCast...), RHS = ↑(1/↑m^{j+1}) = 1/↑(↑m^{j+1})·... — push_cast + zpow_neg_natCast bridges ✓. OK — I keep going in circles on the zpow/pow details; the right move: settle on the npow-inverse form `1/(x)^(j+1)` EVERYWHERE for the series and reindexing (converting the iteratedDerivWithin's zpow output via zpow_neg_natCast once), because lagariasA uses npow. Let me check `zpow_neg_natCast`: probably `zpow_neg_natCast (x) (n : ℕ) : x ^ (-(n:ℤ)) = 1 / x ^ n`? hmm — or `zpow_neg_natCast : x ^ (-↑n) = (x ^ n)⁻¹`? — sign conventions. Let me just probe quickly. Actually — `zpow_neg (x) (n : ℤ) : x ^ (-n) = (x ^ n)⁻¹` ✓ exists surely, and `zpow_natCast (x) (n : ℕ) : x ^ (↑n : ℤ) = x ^ n` ✓. So x^(−(j+1:ℕ):ℤ) = (x^((j+1:ℕ):ℤ))⁻¹ [zpow_neg] = (x^(j+1))⁻¹ [zpow_natCast]. Then (X)⁻¹ = 1/X via one_div. Fine. Given the size, let me write sections 9+10 in one big append and iterate. It's very late — let me get it done.
Now the final stretch — the DinfC values at 1/2, transfer to digamma, and the reindexing. First extracting the series-part analyticity as a standalone.
tool: Read ok
input
{
  "file_path": "D:\\Python\\Quantum\\research\\lean\\NguyenRH1\\NguyenRH1\\LiDigamma.lean",
  "offset": 404,
  "limit": 18
}
result 2026-08-22 09:23:31Z → 2026-08-22 09:23:31Z
{
  "type": "text",
  "file": {
    "filePath": "D:\\Python\\Quantum\\research\\lean\\NguyenRH1\\NguyenRH1\\LiDigamma.lean",
    "content": "        (div_le_div_iff_of_pos_right (by positivity : (0 : \u211d) < ((m : \u211d) + 1) ^ 2)).mpr hs1\n\n/-- DinfC is analytic on dpsiDomain (Weierstrass convergence theorem). -/\nlemma DinfC_analyticOn : AnalyticOnNhd \u2102 DinfC dpsiDomain := by\n  have htend : TendstoLocallyUniformlyOn\n      (fun t : Finset \u2115 => fun s => \u2211 m \u2208 t, dpsiTermC s m)\n      (fun s => \u2211' m : \u2115, dpsiTermC s m) atTop dpsiDomain :=\n    TendstoUniformlyOn.tendstoLocallyUniformlyOn\n      (hasSumUniformlyOn_iff_tendstoUniformlyOn.mp dpsiTermC_hasSumUniformlyOn)\n  have hdiff : DifferentiableOn \u2102 (fun s => \u2211' m : \u2115, dpsiTermC s m) dpsiDomain := by\n    apply htend.differentiableOn _ dpsiDomain_isOpen\n    apply Filter.Eventually.of_forall\n    intro t s hs\n    rw [show (fun s => \u2211 m \u2208 t, dpsiTermC s m) = \u2211 m \u2208 t, (fun s => dpsiTermC s m) from by\n      funext s; simp [Finset.sum_apply]]\n    apply DifferentiableAt.differentiableWithinAt\n    apply DifferentiableAt.sum\n    intro m hm",
    "numLines": 18,
    "startLine": 404,
    "totalLines": 784
  }
}
raw content_json (database row)
[{"type":"thinking","thinking":"Clean! Now the file has everything through `iteratedDerivWithin_tsum_dpsiTermC` (the termwise iterated derivative of the series at 1/2). Remaining for piece (A):\n- DinfC's iterated values at 1/2 (combine the −γ − 1/s part + the series part).\n- Transfer to digamma (the congruence helper).\n- The reindexing to lagariasA.\n- The affine comp + the final τ_j assembly (in LiArchimedean).\n\nIt's ~00:45. Let me commit this and continue with the final stretch. Let me write the remaining sections in one push — Section 9 (DinfC values + digamma transfer) and Section 10 (reindexing + the final τ_j theorem).\n\nSection 9 plan:\n```lean\n/-! ## 9. The polygamma values of DinfC and digamma at 1/2 -/\n\n/-- iteratedDeriv j DinfC (1/2) = (−1)^{j+1} j! Σ_{m≥0} (1/2 + ↑m)^{−(j+1)} for j ≥ 1. -/\nlemma iteratedDeriv_DinfC_half (j : ℕ) (hj : 1 ≤ j) :\n    iteratedDeriv j DinfC ((1 : ℂ) / 2) =\n      ((-1 : ℂ)) ^ (j + 1) * (j ! : ℂ) *\n        ∑' m : ℕ, ((1 / 2 : ℂ) + ↑m) ^ (-(j : ℤ) - 1) := by\n  -- DinfC = (−γ − 1/s) + tsum-fn; the iterated deriv at 1/2\n  ...\n```\nThe decomposition: DinfC = (fun s => −γ − 1/s) + (fun s => ∑' m, dpsiTermC s m) — as functions — then iteratedDeriv j (A + B) (1/2) = iteratedDeriv j A + iteratedDeriv j B — via iteratedDeriv_add (needs ContDiffAt of each at 1/2 — both analytic on the domain ⟹ AnalyticAt at 1/2 ⟹ ContDiffAt ✓).\n- A := fun s => −γ − 1/s: iteratedDeriv j A (1/2) for j ≥ 1: A = const + (−(1/s)): the const dies; −(1/s) = −(1/(s+0)): via iteratedDeriv_neg_one_div_add_const with c := 0: = −(−1)^j·j!·(1/2 + 0)^{−(j+1)} = −(−1)^j·j!·(1/2)^{−(j+1)} — and the zpow (1/2)^{−(j+1)} — hmm — I want the form (1/2 + ↑0)^{...} to merge into the m = 0 series term... Actually the final target form is the Σ_{m≥0}(1/2+↑m)^{−(j+1)} — the m = 0 term is (1/2)^{−(j+1)} ✓ — so the A-part's contribution IS the m = 0 term ✓ — and the series part gives Σ_{m≥0}(1/2 + ↑m + 1)^{−(j+1)} = Σ_{m≥0}(3/2 + ↑m)^{−(j+1)} — and the total: (1/2)^{−(j+1)} + Σ_{m≥0}(3/2+m)^{−(j+1)} = Σ_{m'≥0}(1/2+m')^{−(j+1)} via tsum_eq_zero_add (with m' = m+1: Σ_{m≥0}(1/2 + (m+1))^{−(j+1)} = Σ_{m≥0}(3/2+m)^{−(j+1)} ✓ 1/2+(m+1) = 3/2+m ✓).\n\n  So the structure:\n  iteratedDeriv j DinfC (1/2) = −(−1)^j·j!·(1/2)^{−(j+1)} + [−(−1)^j·j!·Σ_{m≥0}(1/2+↑m+1)^{−(j+1)}]\n  = −(−1)^j·j!·[(1/2)^{−(j+1)} + Σ_{m≥0}(3/2+↑m)^{−(j+1)}]\n  = −(−1)^j·j!·Σ_{m≥0}(1/2+↑m)^{−(j+1)}   [tsum_eq_zero_add]\n  = (−1)^{j+1}·j!·Σ_{m≥0}(1/2+↑m)^{−(j+1)}   [−(−1)^j = (−1)^{j+1}: pow_succ]\n  \n  The factors: the series part's iteratedDerivWithin gives the tsum with the per-term factor −(−1)^k·k! — the tsum of (m ↦ −(−1)^k·k!·X_m) = −(−1)^k·k!·Σ X_m via tsum_mul_left ✓.\n\n  The A-part: −γ − 1/s: iteratedDeriv j (−γ − 1/s) at 1/2 — via iteratedDeriv_add? — A = const + (−1/s) — as iteratedDeriv_add of (fun _ => −γ) and (fun s => −1/s) — the const's = 0 (j ≥ 1) ✓ and −1/s via iteratedDeriv_neg_one_div_add_const j 0 — the function fun s => −(1/(s + 0)) — vs −(1/s): show-bridge (s + 0 = s ✓ add_zero simp).\n  \n  Hmm — the −γ − 1/s = fun s => −γ − 1/s = (fun _ => −γ) + (fun s => −(1/s)) ✓.\n\n  The ContDiffAt conditions: A's pieces: const ✓; −1/s at 1/2: analytic (1/s at 1/2 ≠ 0 ✓) ✓. B (the series): analytic at 1/2 — from DinfC_analyticOn — hmm — that's about DinfC (the whole) — I need the series-part's analyticity: from hdiff (DifferentiableOn of the tsum-fn on dpsiDomain) inside DinfC_analyticOn's proof — it's a `have` — not a standalone lemma. Make it one: `dpsiTermC_tsum_analyticOn : AnalyticOnNhd ℂ (fun s => ∑' m, dpsiTermC s m) dpsiDomain` — extract from DinfC_analyticOn's hdiff block: DifferentiableOn → analyticOnNhd ✓. Then ContDiffAt via AnalyticOnNhd's point: (AnalyticOnNhd ...).contDiffAt? — AnalyticAt.contDiffAt ✓ (used in LiResidue ✓).\n\n  Then the final: DinfC's iteratedDeriv j at 1/2 — hmm — but DinfC is DEFINED as −γ − 1/s + tsum — the iteratedDeriv_add application: DinfC = A + B as functions: `show DinfC = A + B`? — DinfC s := −γ − 1/s + ∑' m, dpsiTermC s m — as a function: DinfC = fun s => (−γ − 1/s) + ∑' — and A + B with A := fun s => −γ − 1/s, B := fun s => ∑' — the function equality: funext + Pi.add_apply ✓.\n\n  Then: iteratedDeriv j DinfC (1/2) = iteratedDeriv j (A + B) (1/2) [rw the function eq] = iteratedDeriv j A (1/2) + iteratedDeriv j B (1/2) [iteratedDeriv_add hcfA hcfB].\n\nThen:\n- `iteratedDeriv_digamma_half (j) (hj : 1 ≤ j) : iteratedDeriv j Complex.digamma (1/2) = the same` — via digamma_eq_DinfC_on (EqOn on the domain) ⟹ eventuallyEq at 1/2 (domain ∈ 𝓝 (1/2) ✓ isOpen + mem) ⟹ iteratedDeriv_congr_of_eventuallyEq ✓.\n\nSection 10 (reindexing + assembly):\n- `tsum_inv_add_half : ∑' m : ℕ, ((1/2 : ℂ) + ↑m)^{−(j+1)} = 2^{j+1}·↑(lagariasA (j+1))` — hmm — wait — the zpow forms vs the 1/(·)^{j+1} forms — let me keep zpow and convert at the very end. The chain (all ℂ):\n  Σ_{m≥0} (1/2 + ↑m)^{−(j+1)} = Σ_{m≥0} 2^{j+1}·(1 + 2↑m)^{−(j+1)} — per-term: (1/2 + ↑m) = (1 + 2↑m)/2 — raised to −(j+1): ((1+2↑m)/2)^{−(j+1)} = 2^{j+1}/(1+2↑m)^{j+1}·... = 2^{j+1}·(1+2↑m)^{−(j+1)} ✓ — per-term algebra: (1/2 + ↑m) = (1 + 2↑m)/2 — field: ((1+2↑m)/2)^{−(j+1)} = 2^{j+1}·(1+2↑m)^{−(j+1)} via div_zpow?/mul_zpow... — ((a/2))^n = a^n/2^n (div_pow for npow — but zpow!) — convert zpow → npow first: x^{−(j+1):ℤ} = 1/x^{j+1} (zpow_neg_natCast? or zpow_neg+zpow_natCast) — then the 1/(a/2)^{j+1} = 2^{j+1}/a^{j+1} — `div_pow` + field_simp-ish — per-term identity: 1/((1+2↑m)/2)^{j+1} = 2^{j+1}/(1+2↑m)^{j+1} — field_simp + ring? — division in the base — `div_pow` : (a/b)^n = a^n/b^n — so 1/((1+2↑m)/2)^{j+1} = 1/((1+2↑m)^{j+1}/2^{j+1}) = 2^{j+1}/(1+2↑m)^{j+1} — via field_simp or div_div... Let me write the per-term as: `have hper : ∀ m : ℕ, ((1/2 : ℂ) + ↑m) ^ (-(j : ℤ) - 1) = (2 : ℂ)^(j+1) * (1 + 2 * ↑m) ^ (-(j:ℤ) - 1)`? — hmm — the zpow manipulations... — this per-term algebra is fiddly. Alternative cleaner: relate to the odd sum via the m+1/2 form: (↑m + 1/2)^{−(j+1)} = 2^{j+1}·(2↑m+1)^{−(j+1)} — same issue.\n\n  Let me define the per-term step concretely:\n  (1/2 + ↑m) = (1 + 2↑m)/2: by push_cast; ring.\n  Then zpow: X^{−(j+1)} with X = (1+2↑m)/2: = 1/X^{j+1} [zpow_neg_natCast? — hmm the exponent −(j:ℤ)−1 = −(j+1:ℤ) — push_cast ✓] — 1/((1+2↑m)/2)^{j+1} = 2^{j+1}/(1+2↑m)^{j+1} [div_pow: ((1+2↑m)/2)^{j+1} = (1+2↑m)^{j+1}/2^{j+1}; then 1/(a/b) = b/a: `one_div_div`? — 1/(a/b) = b/a ✓ `one_div_div`]. So per-term: (1/2+↑m)^{−(j+1)} = 2^{j+1}·(1+2↑m)^{−(j+1)}·... wait — 2^{j+1}/(1+2↑m)^{j+1} = 2^{j+1}·((1+2↑m)^{j+1})⁻¹ = 2^{j+1}·(1+2↑m)^{−(j+1):ℤ} [zpow back]. OK.\n  Then Σ_m 2^{j+1}·Y_m = 2^{j+1}·Σ Y_m (tsum_mul_left ✓).\n  Σ_{m≥0} (1+2↑m)^{−(j+1)} = Σ_{m≥0} (2↑m+1)^{−(j+1)} (1+2x = 2x+1 ✓ ring per-term) — hmm — the odd-series is over 2m+1 = 1,3,5,... — the target lagariasA(j+1) = 1 + Σ_{m : {odd ∧ ≥3}} (1/↑m)^{j+1}.\n  Σ_{m≥0} (2↑m+1)^{−(j+1)} = (2·0+1)^{−(j+1)} + Σ_{m≥0} (2↑(m+1)+1)^{−(j+1)} [tsum_eq_zero_add] = 1 + Σ_{m≥0} (2↑m+3)^{−(j+1)} — with (2·0+1)^{−(j+1)} = 1 ✓ (1^z = 1: one_zpow/one_pow ✓).\n  Σ_{m≥0} (2↑m+3)^{−(j+1)} = Σ_{m' : {m // Odd m ∧ 3 ≤ m}} (↑m')^{−(j+1)} — via the equiv φ : ℕ → {m // Odd m ∧ 3 ≤ m}, m ↦ 2m+3 — Equiv.tsum_eq — need the equiv:\n  ```lean\n  def oddGeThreeEquiv : ℕ ≃ {m : ℕ // Odd m ∧ 3 ≤ m} where\n    toFun m := ⟨2 * m + 3, by ...⟩\n    invFun := fun ⟨m, hm⟩ => (m - 3) / 2\n    left_inv := ...\n    right_inv := ...\n  ```\n  The invFun (m−3)/2 : ℕ division — for odd m ≥ 3: m = 2k+1 with k ≥ 1: (m−3)/2 = (2k−2)/2 = k−1 ✓ Nat.div — the proofs: left_inv: (2m+3−3)/2 = 2m/2 = m ✓ (Nat.div: (2m)/2 = m — `Nat.mul_right... (2*m)/2 = m — Nat.mul_div_left? hmm — (2*m+3−3)/2 = (2*m)/2 = m — via omega? — omega handles Nat division by constants ✓). right_inv: for ⟨m, hm: Odd ∧ 3≤m⟩: 2·((m−3)/2)+3 = m — omega with the odd hypothesis? — omega knows odd? — Odd m is a Prop — omega doesn't read Odd — convert: Odd m ⟹ m = 2k+1: `Nat.odd_iff : Odd n ↔ n % 2 = 1` ✓ omega reads n % 2 = 1 ✓ so 2·((m−3)/2) + 3 = m from m % 2 = 1 ∧ 3 ≤ m by omega ✓.\n  Then Equiv.tsum_eq (the equiv) (fun m' => (↑m')^{−(j+1)})?? — `Equiv.tsum_eq (e : α ≃ β) (f : β → M) : ∑' a, f (e a) = ∑' b, f b` ✓ (from JacobiTheta usage ✓). The summability side conditions? Equiv.tsum_eq might need Summable — the version: `Equiv.tsum_eq (e : α ≃ β) (f : β → M) : ∑' i, f (e i) = ∑' i, f i` — unconditional? For an equiv the sums agree unconditionally (junk-compatible) — hmm — actually for tsum the equiv-rewriting needs summability on ONE side — `Equiv.tsum_eq` I believe is unconditional when... — there are `Equiv.summable_iff` and `Equiv.tsum_eq` — the tsum_eq might need `Summable f` — let me handle: the subtype side's summability: Summable (fun m : {m // Odd m ∧ 3 ≤ m} => (↑m:ℂ)^{−(j+1)}) — hmm — via the real oddSlice_summable + cast: Summable (fun m : subtype => (1/(↑m:ℝ))^(j+1)) [oddSlice_summable (j+1) (by omega) ✓] then the ℂ version via... — the ℂ norm = the ℝ norm of the cast: ‖(↑m:ℂ)^{−(j+1)}‖ = |1/↑m^{j+1}|·... = 1/m^{j+1} (m ≥ 3 > 0) — so Summable via of_norm_bounded with the ℝ summable family — needs ‖(↑m:ℂ)^{−(j+1)}‖ ≤ 1/m^{j+1}·... — ‖(↑m:ℂ)^z‖ = |↑m|^z-ish ✓ norm_zpow + Complex.norm_real-ish... fine.\n  And the ℕ-side: Summable (fun m => (2↑m+3)^{−(j+1)}) — ≤ 1/(m+1)²-ish ✓.\n  \n  Then: Σ_{m≥0}(2↑m+1)^{−(j+1)} = 1 + Σ_{subtype} (↑m)^{−(j+1)} — and ↑(lagariasA (j+1)) — lagariasA (j+1) = if j+1 = 1 then lagariasA1 else 1 + ∑' m : subtype, (1/(m:ℝ))^(j+1) — j+1 ≥ 2 (j ≥ 1) ⟹ j+1 ≠ 1 ✓ if_neg — so ↑(lagariasA(j+1)) = 1 + ↑(∑' subtype (1/↑m)^(j+1)) — and ↑(real-tsum) = complex-tsum via ofRealCLM.map_tsum (oddSlice_summable) + push_cast per-term: ↑((1/↑m)^(j+1)) = (1/↑m)^(j+1) = (↑m)^{−(j+1)} — the exponent forms — zpow vs npow-div — UNIFY: keep everything in the `(↑m)^{-(j+1) : ℤ}` zpow form and convert lagariasA's (1/(m:ℝ))^j form via: (1/(m:ℝ))^(j+1) = ((m:ℝ))^{−(j+1):ℤ}·... — one_div + zpow: 1/x^n = x^(−n:ℤ)·... — `zpow_neg_natCast`? hmm — there's `zpow_neg_natCast : x ^ (-(n:ℤ)) = 1 / x^n`? — direction. Let me just pick ONE form for the FINAL theorem statement: the τ-target is about iteratedDeriv j (logDeriv Gammaℝ (1+·)) 0 = (−1)^{j+1}·j!·↑(lagariasA (j+1)) — the lagariasA is ℝ — cast to ℂ — so the reindexing should produce ↑(lagariasA (j+1)) — the real lagariasA's tail is (1/(m:ℝ))^(j+1) npow-form — so convert my zpow series to the cast of that: (↑m:ℂ)^{−(j+1):ℤ} = ↑((1/(m:ℝ))^(j+1)) — per-term: LHS = 1/(↑m)^{j+1} (zpow_neg_natCast...), RHS = ↑(1/↑m^{j+1}) = 1/↑(↑m^{j+1})·... — push_cast + zpow_neg_natCast bridges ✓.\n\nOK — I keep going in circles on the zpow/pow details; the right move: settle on the npow-inverse form `1/(x)^(j+1)` EVERYWHERE for the series and reindexing (converting the iteratedDerivWithin's zpow output via zpow_neg_natCast once), because lagariasA uses npow.\n\nLet me check `zpow_neg_natCast`: probably `zpow_neg_natCast (x) (n : ℕ) : x ^ (-(n:ℤ)) = 1 / x ^ n`? hmm — or `zpow_neg_natCast : x ^ (-↑n) = (x ^ n)⁻¹`? — sign conventions. Let me just probe quickly. Actually — `zpow_neg (x) (n : ℤ) : x ^ (-n) = (x ^ n)⁻¹` ✓ exists surely, and `zpow_natCast (x) (n : ℕ) : x ^ (↑n : ℤ) = x ^ n` ✓. So x^(−(j+1:ℕ):ℤ) = (x^((j+1:ℕ):ℤ))⁻¹ [zpow_neg] = (x^(j+1))⁻¹ [zpow_natCast]. Then (X)⁻¹ = 1/X via one_div. Fine.\n\nGiven the size, let me write sections 9+10 in one big append and iterate. It's very late — let me get it done.","signature":""},{"type":"text","text":"Now the final stretch — the DinfC values at 1/2, transfer to digamma, and the reindexing. First extracting the series-part analyticity as a standalone."},{"type":"tool_use","id":"Read_463","name":"Read","input":{"file_path":"D:\\Python\\Quantum\\research\\lean\\NguyenRH1\\NguyenRH1\\LiDigamma.lean","offset":404,"limit":18},"extra_content":null}]