File: Mathlib/NumberTheory/ModularForms/JacobiTheta/TwoVariable.lean

full_name: jacobiTheta₂_term
code: /-- Summand in the series for the Jacobi theta function. -/
def jacobiTheta₂_term (n : ℤ) (z τ : ℂ) : ℂ 
goal: ℂ

full_name: jacobiTheta₂_term_fderiv
code: /-- Summand in the series for the Fréchet derivative of the Jacobi theta function. -/
def jacobiTheta₂_term_fderiv (n : ℤ) (z τ : ℂ) : ℂ × ℂ →L[ℂ] ℂ 
goal: ℂ × ℂ →L[ℂ] ℂ

full_name: hasFDerivAt_jacobiTheta₂_term
code: lemma hasFDerivAt_jacobiTheta₂_term (n : ℤ) (z τ : ℂ) :
    HasFDerivAt (fun p : ℂ × ℂ ↦ jacobiTheta₂_term n p.1 p.2)
    (jacobiTheta₂_term_fderiv n z τ) (z, τ) 
goal: HasFDerivAt (fun p => jacobiTheta₂_term n p.1 p.2) (jacobiTheta₂_term_fderiv n z τ) (z, τ)

full_name: jacobiTheta₂'_term
code: /-- Summand in the series for the `z`-derivative of the Jacobi theta function. -/
def jacobiTheta₂'_term (n : ℤ) (z τ : ℂ) 
goal: ℂ

full_name: norm_jacobiTheta₂_term
code: lemma norm_jacobiTheta₂_term (n : ℤ) (z τ : ℂ) :
    ‖jacobiTheta₂_term n z τ‖ = rexp (-π * n ^ 2 * τ.im - 2 * π * n * z.im) 
goal: ‖jacobiTheta₂_term n z τ‖ = rexp (-π * ↑n ^ 2 * τ.im - 2 * π * ↑n * z.im)

full_name: norm_jacobiTheta₂_term_le
code: /-- A uniform upper bound for `jacobiTheta₂_term` on compact subsets. -/
lemma norm_jacobiTheta₂_term_le {S T : ℝ} (hT : 0 < T) {z τ : ℂ}
    (hz : |im z| ≤ S) (hτ : T ≤ im τ) (n : ℤ) :
    ‖jacobiTheta₂_term n z τ‖ ≤ rexp (-π * (T * n ^ 2 - 2 * S * |n|)) 
goal: ‖jacobiTheta₂_term n z τ‖ ≤ rexp (-π * (T * ↑n ^ 2 - 2 * S * ↑|n|))

full_name: norm_jacobiTheta₂'_term_le
code: /-- A uniform upper bound for `jacobiTheta₂'_term` on compact subsets. -/
lemma norm_jacobiTheta₂'_term_le {S T : ℝ} (hT : 0 < T) {z τ : ℂ}
    (hz : |im z| ≤ S) (hτ : T ≤ im τ) (n : ℤ) :
    ‖jacobiTheta₂'_term n z τ‖ ≤ 2 * π * |n| * rexp (-π * (T * n ^ 2 - 2 * S * |n|)) 
goal: ‖jacobiTheta₂'_term n z τ‖ ≤ 2 * π * ↑|n| * rexp (-π * (T * ↑n ^ 2 - 2 * S * ↑|n|))

full_name: summable_pow_mul_jacobiTheta₂_term_bound
code: /-- The uniform bound we have given is summable, and remains so after multiplying by any fixed
power of `|n|` (we shall need this for `k = 0, 1, 2`). -/
lemma summable_pow_mul_jacobiTheta₂_term_bound (S : ℝ) {T : ℝ} (hT : 0 < T) (k : ℕ) :
    Summable (fun n : ℤ ↦ (|n| ^ k : ℝ) * Real.exp (-π * (T * n ^ 2 - 2 * S * |n|))) 
goal: Summable fun n => ↑|n| ^ k * rexp (-π * (T * ↑n ^ 2 - 2 * S * ↑|n|))

full_name: summable_jacobiTheta₂_term_iff
code: /-- The series defining the theta function is summable if and only if `0 < im τ`. -/
lemma summable_jacobiTheta₂_term_iff (z τ : ℂ) : Summable (jacobiTheta₂_term · z τ) ↔ 0 < im τ 
goal: (Summable fun x => jacobiTheta₂_term x z τ) ↔ 0 < τ.im

full_name: norm_jacobiTheta₂_term_fderiv_le
code: lemma norm_jacobiTheta₂_term_fderiv_le (n : ℤ) (z τ : ℂ) :
    ‖jacobiTheta₂_term_fderiv n z τ‖ ≤ 3 * π * |n| ^ 2 * ‖jacobiTheta₂_term n z τ‖ 
goal: ‖jacobiTheta₂_term_fderiv n z τ‖ ≤ 3 * π * ↑|n| ^ 2 * ‖jacobiTheta₂_term n z τ‖

full_name: norm_jacobiTheta₂_term_fderiv_ge
code: lemma norm_jacobiTheta₂_term_fderiv_ge (n : ℤ) (z τ : ℂ) :
    π * |n| ^ 2 * ‖jacobiTheta₂_term n z τ‖ ≤ ‖jacobiTheta₂_term_fderiv n z τ‖ 
goal: π * ↑|n| ^ 2 * ‖jacobiTheta₂_term n z τ‖ ≤ ‖jacobiTheta₂_term_fderiv n z τ‖

full_name: summable_jacobiTheta₂_term_fderiv_iff
code: lemma summable_jacobiTheta₂_term_fderiv_iff (z τ : ℂ) :
    Summable (jacobiTheta₂_term_fderiv · z τ) ↔ 0 < im τ 
goal: (Summable fun x => jacobiTheta₂_term_fderiv x z τ) ↔ 0 < τ.im

full_name: summable_jacobiTheta₂'_term_iff
code: lemma summable_jacobiTheta₂'_term_iff (z τ : ℂ) :
    Summable (jacobiTheta₂'_term · z τ) ↔ 0 < im τ 
goal: (Summable fun x => jacobiTheta₂'_term x z τ) ↔ 0 < τ.im

full_name: jacobiTheta₂
code: /-- The two-variable Jacobi theta function,
`θ z τ = ∑' (n : ℤ), cexp (2 * π * I * n * z + π * I * n ^ 2 * τ)`.
-/
def jacobiTheta₂ (z τ : ℂ) : ℂ 
goal: ℂ

full_name: jacobiTheta₂_fderiv
code: /-- Fréchet derivative of the two-variable Jacobi theta function. -/
def jacobiTheta₂_fderiv (z τ : ℂ) : ℂ × ℂ →L[ℂ] ℂ 
goal: ℂ × ℂ →L[ℂ] ℂ

full_name: jacobiTheta₂'
code: /-- The `z`-derivative of the Jacobi theta function,
`θ' z τ = ∑' (n : ℤ), 2 * π * I * n * cexp (2 * π * I * n * z + π * I * n ^ 2 * τ)`.
 -/
def jacobiTheta₂' (z τ : ℂ) 
goal: ℂ

full_name: hasSum_jacobiTheta₂_term
code: lemma hasSum_jacobiTheta₂_term (z : ℂ) {τ : ℂ} (hτ : 0 < im τ) :
    HasSum (fun n ↦ jacobiTheta₂_term n z τ) (jacobiTheta₂ z τ) 
goal: HasSum (fun n => jacobiTheta₂_term n z τ) (jacobiTheta₂ z τ)

full_name: hasSum_jacobiTheta₂_term_fderiv
code: lemma hasSum_jacobiTheta₂_term_fderiv (z : ℂ) {τ : ℂ} (hτ : 0 < im τ) :
    HasSum (fun n ↦ jacobiTheta₂_term_fderiv n z τ) (jacobiTheta₂_fderiv z τ) 
goal: HasSum (fun n => jacobiTheta₂_term_fderiv n z τ) (jacobiTheta₂_fderiv z τ)

full_name: hasSum_jacobiTheta₂'_term
code: lemma hasSum_jacobiTheta₂'_term (z : ℂ) {τ : ℂ} (hτ : 0 < im τ) :
    HasSum (fun n ↦ jacobiTheta₂'_term n z τ) (jacobiTheta₂' z τ) 
goal: HasSum (fun n => jacobiTheta₂'_term n z τ) (jacobiTheta₂' z τ)

full_name: jacobiTheta₂_undef
code: lemma jacobiTheta₂_undef (z : ℂ) {τ : ℂ} (hτ : im τ ≤ 0) : jacobiTheta₂ z τ = 0 
goal: jacobiTheta₂ z τ = 0

full_name: jacobiTheta₂_fderiv_undef
code: lemma jacobiTheta₂_fderiv_undef (z : ℂ) {τ : ℂ} (hτ : im τ ≤ 0) : jacobiTheta₂_fderiv z τ = 0 
goal: jacobiTheta₂_fderiv z τ = 0

full_name: jacobiTheta₂'_undef
code: lemma jacobiTheta₂'_undef (z : ℂ) {τ : ℂ} (hτ : im τ ≤ 0) : jacobiTheta₂' z τ = 0 
goal: jacobiTheta₂' z τ = 0

full_name: hasFDerivAt_jacobiTheta₂
code: lemma hasFDerivAt_jacobiTheta₂ (z : ℂ) {τ : ℂ} (hτ : 0 < im τ) :
    HasFDerivAt (fun p : ℂ × ℂ ↦ jacobiTheta₂ p.1 p.2) (jacobiTheta₂_fderiv z τ) (z, τ) 
goal: HasFDerivAt (fun p => jacobiTheta₂ p.1 p.2) (jacobiTheta₂_fderiv z τ) (z, τ)

full_name: continuousAt_jacobiTheta₂
code: lemma continuousAt_jacobiTheta₂ (z : ℂ) {τ : ℂ} (hτ : 0 < im τ) :
    ContinuousAt (fun p : ℂ × ℂ ↦ jacobiTheta₂ p.1 p.2) (z, τ) 
goal: ContinuousAt (fun p => jacobiTheta₂ p.1 p.2) (z, τ)

full_name: differentiableAt_jacobiTheta₂_fst
code: /-- Differentiability of `Θ z τ` in `z`, for fixed `τ`. -/
lemma differentiableAt_jacobiTheta₂_fst (z : ℂ) {τ : ℂ} (hτ : 0 < im τ) :
    DifferentiableAt ℂ (jacobiTheta₂ · τ) z 
goal: DifferentiableAt ℂ (fun x => jacobiTheta₂ x τ) z

full_name: differentiableAt_jacobiTheta₂_snd
code: /-- Differentiability of `Θ z τ` in `τ`, for fixed `z`. -/
lemma differentiableAt_jacobiTheta₂_snd (z : ℂ) {τ : ℂ} (hτ : 0 < im τ) :
    DifferentiableAt ℂ (jacobiTheta₂ z) τ 
goal: DifferentiableAt ℂ (jacobiTheta₂ z) τ

full_name: hasDerivAt_jacobiTheta₂_fst
code: lemma hasDerivAt_jacobiTheta₂_fst (z : ℂ) {τ : ℂ} (hτ : 0 < im τ) :
    HasDerivAt (jacobiTheta₂ · τ) (jacobiTheta₂' z τ) z 
goal: HasDerivAt (fun x => jacobiTheta₂ x τ) (jacobiTheta₂' z τ) z

full_name: continuousAt_jacobiTheta₂'
code: lemma continuousAt_jacobiTheta₂' (z : ℂ) {τ : ℂ} (hτ : 0 < im τ) :
    ContinuousAt (fun p : ℂ × ℂ ↦ jacobiTheta₂' p.1 p.2) (z, τ) 
goal: ContinuousAt (fun p => jacobiTheta₂' p.1 p.2) (z, τ)

full_name: jacobiTheta₂_add_right
code: /-- The two-variable Jacobi theta function is periodic in `τ` with period 2. -/
lemma jacobiTheta₂_add_right (z τ : ℂ) : jacobiTheta₂ z (τ + 2) = jacobiTheta₂ z τ 
goal: jacobiTheta₂ z (τ + 2) = jacobiTheta₂ z τ

full_name: jacobiTheta₂_add_left
code: /-- The two-variable Jacobi theta function is periodic in `z` with period 1. -/
lemma jacobiTheta₂_add_left (z τ : ℂ) : jacobiTheta₂ (z + 1) τ = jacobiTheta₂ z τ 
goal: jacobiTheta₂ (z + 1) τ = jacobiTheta₂ z τ

full_name: jacobiTheta₂_add_left'
code: /-- The two-variable Jacobi theta function is quasi-periodic in `z` with period `τ`. -/
lemma jacobiTheta₂_add_left' (z τ : ℂ) :
    jacobiTheta₂ (z + τ) τ = cexp (-π * I * (τ + 2 * z)) * jacobiTheta₂ z τ 
goal: jacobiTheta₂ (z + τ) τ = cexp (-↑π * Complex.I * (τ + 2 * z)) * jacobiTheta₂ z τ

full_name: jacobiTheta₂_neg_left
code: /-- The two-variable Jacobi theta function is even in `z`. -/
lemma jacobiTheta₂_neg_left (z τ : ℂ) : jacobiTheta₂ (-z) τ = jacobiTheta₂ z τ 
goal: jacobiTheta₂ (-z) τ = jacobiTheta₂ z τ

full_name: jacobiTheta₂_conj
code: lemma jacobiTheta₂_conj (z τ : ℂ) :
    conj (jacobiTheta₂ z τ) = jacobiTheta₂ (conj z) (-conj τ) 
goal: (starRingEnd ℂ) (jacobiTheta₂ z τ) = jacobiTheta₂ ((starRingEnd ℂ) z) (-(starRingEnd ℂ) τ)

full_name: jacobiTheta₂'_add_right
code: lemma jacobiTheta₂'_add_right (z τ : ℂ) : jacobiTheta₂' z (τ + 2) = jacobiTheta₂' z τ 
goal: jacobiTheta₂' z (τ + 2) = jacobiTheta₂' z τ

full_name: jacobiTheta₂'_add_left
code: lemma jacobiTheta₂'_add_left (z τ : ℂ) : jacobiTheta₂' (z + 1) τ = jacobiTheta₂' z τ 
goal: jacobiTheta₂' (z + 1) τ = jacobiTheta₂' z τ

full_name: jacobiTheta₂'_add_left'
code: lemma jacobiTheta₂'_add_left' (z τ : ℂ) :
    jacobiTheta₂' (z + τ) τ =
      cexp (-π * I * (τ + 2 * z)) * (jacobiTheta₂' z τ - 2 * π * I * jacobiTheta₂ z τ) 
goal: jacobiTheta₂' (z + τ) τ =
  cexp (-↑π * Complex.I * (τ + 2 * z)) * (jacobiTheta₂' z τ - 2 * ↑π * Complex.I * jacobiTheta₂ z τ)

full_name: jacobiTheta₂'_neg_left
code: lemma jacobiTheta₂'_neg_left (z τ : ℂ) : jacobiTheta₂' (-z) τ = -jacobiTheta₂' z τ 
goal: jacobiTheta₂' (-z) τ = -jacobiTheta₂' z τ

full_name: jacobiTheta₂'_conj
code: lemma jacobiTheta₂'_conj (z τ : ℂ) :
    conj (jacobiTheta₂' z τ) = jacobiTheta₂' (conj z) (-conj τ) 
goal: (starRingEnd ℂ) (jacobiTheta₂' z τ) = jacobiTheta₂' ((starRingEnd ℂ) z) (-(starRingEnd ℂ) τ)

full_name: jacobiTheta₂_functional_equation
code: /-- The functional equation for the Jacobi theta function: `jacobiTheta₂ z τ` is an explict factor
times `jacobiTheta₂ (z / τ) (-1 / τ)`. This is the key lemma behind the proof of the functional
equation for L-series of even Dirichlet characters. -/
theorem jacobiTheta₂_functional_equation (z τ : ℂ) : jacobiTheta₂ z τ =
    1 / (-I * τ) ^ (1 / 2 : ℂ) * cexp (-π * I * z ^ 2 / τ) * jacobiTheta₂ (z / τ) (-1 / τ) 
goal: jacobiTheta₂ z τ = 1 / (-Complex.I * τ) ^ (1 / 2) * cexp (-↑π * Complex.I * z ^ 2 / τ) * jacobiTheta₂ (z / τ) (-1 / τ)

full_name: jacobiTheta₂'_functional_equation
code: /-- The functional equation for the derivative of the Jacobi theta function, relating
`jacobiTheta₂' z τ` to `jacobiTheta₂' (z / τ) (-1 / τ)`. This is the key lemma behind the proof of
the functional equation for L-series of odd Dirichlet characters. -/
theorem jacobiTheta₂'_functional_equation (z τ : ℂ) :
    jacobiTheta₂' z τ = 1 / (-I * τ) ^ (1 / 2 : ℂ) * cexp (-π * I * z ^ 2 / τ) / τ *
      (jacobiTheta₂' (z / τ) (-1 / τ) - 2 * π * I * z * jacobiTheta₂ (z / τ) (-1 / τ)) 
goal: jacobiTheta₂' z τ =
  1 / (-Complex.I * τ) ^ (1 / 2) * cexp (-↑π * Complex.I * z ^ 2 / τ) / τ *
    (jacobiTheta₂' (z / τ) (-1 / τ) - 2 * ↑π * Complex.I * z * jacobiTheta₂ (z / τ) (-1 / τ))